in plugins/ecs-bridge/engine/configureveth.go [56:111]
func (configContext *configureVethContext) run(hostNS ns.NetNS) error {
// Add route for arp query request from host
// same as: ip route add 169.254.172.1 via 169.254.172.1 dev ecs-eth0
route := &types.Route{
Dst: net.IPNet{
IP: configContext.result.IPs[0].Gateway,
Mask: net.CIDRMask(32, 32),
},
}
configContext.result.Routes = append(configContext.result.Routes, route)
// Configure routes in the container
err := configContext.ipam.ConfigureIface(
configContext.interfaceName, configContext.result)
if err != nil {
return errors.Wrapf(err,
"bridge configure veth: unable to configure interface: %s",
configContext.interfaceName)
}
// Generate and set the hardware address for the interface, given
// its IP
err = configContext.ip.SetHWAddrByIP(
configContext.interfaceName, configContext.result.IPs[0].Address.IP, nil)
if err != nil {
return errors.Wrapf(err,
"bridge configure veth: unable to set hardware address for interface: %s",
configContext.interfaceName)
}
link, err := configContext.netLink.LinkByName(configContext.interfaceName)
if err != nil {
return errors.Wrapf(err,
"bridge configure veth: unable to get link for interface: %s",
configContext.interfaceName)
}
routes, err := configContext.netLink.RouteList(link, netlink.FAMILY_ALL)
if err != nil {
return errors.Wrapf(err,
"bridge configure veth: unable to fetch routes for interface: %s",
configContext.interfaceName)
}
// Delete all default routes within the container
for _, route := range routes {
if route.Gw == nil {
err = configContext.netLink.RouteDel(&route)
if err != nil {
return errors.Wrapf(err,
"bridge configure veth: unable to delete route: %v", route)
}
}
}
return nil
}