in pkg/provider/ip/eni/eni.go [70:117]
func (e *eniManager) InitResources(ec2APIHelper api.EC2APIHelper) (*IPv4Resource, error) {
e.lock.Lock()
defer e.lock.Unlock()
nwInterfaces, err := ec2APIHelper.GetInstanceNetworkInterface(aws.String(e.instance.InstanceID()))
if err != nil {
return nil, err
}
limits, found := vpc.Limits[e.instance.Type()]
if !found {
return nil, fmt.Errorf("unsupported instance type, error: %w", utils.ErrNotFound)
}
ipLimit := limits.IPv4PerInterface
var availIPs []string
var availPrefixes []string
for _, nwInterface := range nwInterfaces {
if nwInterface.PrivateIpAddresses != nil {
eni := &eni{
remainingCapacity: ipLimit,
eniID: *nwInterface.NetworkInterfaceId,
}
// loop through assigned IPv4 addresses and store into map
for _, ip := range nwInterface.PrivateIpAddresses {
if *ip.Primary != true {
availIPs = append(availIPs, *ip.PrivateIpAddress)
e.resourceToENIMap[*ip.PrivateIpAddress] = eni
}
eni.remainingCapacity--
}
// loop through assigned IPv4 prefixes and store into map
if nwInterface.Ipv4Prefixes != nil {
for _, prefix := range nwInterface.Ipv4Prefixes {
availPrefixes = append(availPrefixes, *prefix.Ipv4Prefix)
e.resourceToENIMap[*prefix.Ipv4Prefix] = eni
eni.remainingCapacity--
}
}
e.attachedENIs = append(e.attachedENIs, eni)
}
}
ipV4Resource := IPv4Resource{
PrivateIPv4Addresses: e.addSubnetMaskToIPSlice(availIPs),
IPv4Prefixes: availPrefixes,
}
return &ipV4Resource, nil
}