in plugins/eni/engine/nsclosure.go [110:177]
func (closureContext *setupNamespaceClosureContext) run(_ ns.NetNS) error {
// Get the link for the ENI device
eniLink, err := closureContext.netLink.LinkByName(closureContext.deviceName)
if err != nil {
return errors.Wrapf(err,
"setupNamespaceClosure engine: unable to get link for device '%s'",
closureContext.deviceName)
}
err = closureContext.netLink.LinkSetName(eniLink, closureContext.ifName)
if err != nil {
return errors.Wrap(err, "setupNamespaceClosure engine: unable to change interface name")
}
// Add IP addresses to the link
for _, addr := range closureContext.ipAddrs {
err = closureContext.netLink.AddrAdd(eniLink, addr)
if err != nil {
return errors.Wrap(err,
"setupNamespaceClosure engine: unable to add ip address to the interface")
}
}
// Bring it up
err = closureContext.netLink.LinkSetUp(eniLink)
if err != nil {
return errors.Wrap(err,
"setupNamespaceClosure engine: unable to bring up the device")
}
// Change the MTU if it is customized
if closureContext.mtu != 0 {
err = closureContext.netLink.LinkSetMTU(eniLink, closureContext.mtu)
if err != nil {
return errors.Wrap(err, "setupNamespaceClosure engine: unable to set mtu of interface")
}
}
// Add a blackhole route for IMDS endpoint if required
if closureContext.blockIMDS {
_, imdsNetwork, err := net.ParseCIDR(instanceMetadataEndpoint)
if err != nil {
// This should never happen because we always expect
// 169.254.169.254/32 to be parsed without any errors
return errors.Wrapf(err, "setupNamespaceClosure engine: unable to parse instance metadata endpoint")
}
if err = closureContext.netLink.RouteAdd(&netlink.Route{
Dst: imdsNetwork,
Type: syscall.RTN_BLACKHOLE,
}); err != nil {
return errors.Wrapf(err, "setupNamespaceClosure engine: unable to add route to block instance metadata")
}
}
// Setup IP routes for the gateways
for _, gwAddr := range closureContext.gatewayAddrs {
err = closureContext.netLink.RouteAdd(&netlink.Route{
LinkIndex: eniLink.Attrs().Index,
Gw: gwAddr,
})
if err != nil && !isRouteExistsError(err) {
return errors.Wrap(err,
"setupNamespaceClosure engine: unable to add the route for the gateway")
}
}
return nil
}