From 7d19c0181812f208b88e232180c217df242f31d9 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Wed, 29 Jun 2016 12:13:05 -0700 Subject: [PATCH] pkg/ip: use iface name in SetHWAddrByIP --- pkg/ip/link.go | 31 +++++++++++++++++++++---------- plugins/main/bridge/bridge.go | 8 ++------ plugins/main/macvlan/macvlan.go | 6 +----- plugins/main/ptp/ptp.go | 8 ++++---- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/pkg/ip/link.go b/pkg/ip/link.go index 6d9d1cc2..c9662d98 100644 --- a/pkg/ip/link.go +++ b/pkg/ip/link.go @@ -153,18 +153,29 @@ func DelLinkByNameAddr(ifName string, family int) (*net.IPNet, error) { return addrs[0].IPNet, nil } -func SetHWAddrByIP(link netlink.Link, ip4 net.IP, ip6 net.IP) error { - if ip4 != nil { - hwAddr, err := hwaddr.GenerateHardwareAddr4(ip4, hwaddr.PrivateMACPrefix) - if err != nil { - return fmt.Errorf("failed to generate hardware addr: %v", err) - } - if err = netlink.LinkSetHardwareAddr(link, hwAddr); err != nil { - return fmt.Errorf("failed to add hardware addr to %q: %v", link.Attrs().Name, err) - } +func SetHWAddrByIP(ifName string, ip4 net.IP, ip6 net.IP) error { + iface, err := netlink.LinkByName(ifName) + if err != nil { + return fmt.Errorf("failed to lookup %q: %v", ifName, err) } - // TODO: IPv6 + switch { + case ip4 == nil && ip6 == nil: + return fmt.Errorf("neither ip4 or ip6 specified") + + case ip4 != nil: + { + hwAddr, err := hwaddr.GenerateHardwareAddr4(ip4, hwaddr.PrivateMACPrefix) + if err != nil { + return fmt.Errorf("failed to generate hardware addr: %v", err) + } + if err = netlink.LinkSetHardwareAddr(iface, hwAddr); err != nil { + return fmt.Errorf("failed to add hardware addr to %q: %v", ifName, err) + } + } + case ip6 != nil: + // TODO: IPv6 + } return nil } diff --git a/plugins/main/bridge/bridge.go b/plugins/main/bridge/bridge.go index 34f6c0a9..5f9659d7 100644 --- a/plugins/main/bridge/bridge.go +++ b/plugins/main/bridge/bridge.go @@ -251,11 +251,7 @@ func cmdAdd(args *skel.CmdArgs) error { return err } - contVethLink, err := netlink.LinkByName(args.IfName) - if err != nil { - return fmt.Errorf("failed to lookup %q: %v", args.IfName, err) - } - if err := ip.SetHWAddrByIP(contVethLink, result.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { + if err := ip.SetHWAddrByIP(args.IfName, result.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { return err } @@ -274,7 +270,7 @@ func cmdAdd(args *skel.CmdArgs) error { return err } - if err := ip.SetHWAddrByIP(br, gwn.IP, nil /* TODO IPv6 */); err != nil { + if err := ip.SetHWAddrByIP(n.BrName, gwn.IP, nil /* TODO IPv6 */); err != nil { return err } diff --git a/plugins/main/macvlan/macvlan.go b/plugins/main/macvlan/macvlan.go index d1a40703..63c9f7f0 100644 --- a/plugins/main/macvlan/macvlan.go +++ b/plugins/main/macvlan/macvlan.go @@ -149,11 +149,7 @@ func cmdAdd(args *skel.CmdArgs) error { } err = netns.Do(func(_ ns.NetNS) error { - contVethLink, err := netlink.LinkByName(args.IfName) - if err != nil { - return fmt.Errorf("failed to lookup %q: %v", args.IfName, err) - } - if err := ip.SetHWAddrByIP(contVethLink, result.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { + if err := ip.SetHWAddrByIP(args.IfName, result.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { return err } diff --git a/plugins/main/ptp/ptp.go b/plugins/main/ptp/ptp.go index e6c085e4..cdb35366 100644 --- a/plugins/main/ptp/ptp.go +++ b/plugins/main/ptp/ptp.go @@ -64,7 +64,9 @@ func setupContainerVeth(netns, ifName string, mtu int, pr *types.Result) (string return err } - if err := ip.SetHWAddrByIP(hostVeth, pr.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { + hostVethName = hostVeth.Attrs().Name + + if err := ip.SetHWAddrByIP(hostVethName, pr.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { return fmt.Errorf("failed to set hardware addr by IP: %v", err) } @@ -77,7 +79,7 @@ func setupContainerVeth(netns, ifName string, mtu int, pr *types.Result) (string return fmt.Errorf("failed to look up %q: %v", ifName, err) } - if err := ip.SetHWAddrByIP(contVeth, pr.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { + if err := ip.SetHWAddrByIP(contVeth.Attrs().Name, pr.IP4.IP.IP, nil /* TODO IPv6 */); err != nil { return fmt.Errorf("failed to set hardware addr by IP: %v", err) } @@ -121,8 +123,6 @@ func setupContainerVeth(netns, ifName string, mtu int, pr *types.Result) (string } } - hostVethName = hostVeth.Attrs().Name - return nil }) return hostVethName, err