func()

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
}