pkg/ip: use iface name in SetHWAddrByIP
authorStefan Junker <mail@stefanjunker.de>
Wed, 29 Jun 2016 19:13:05 +0000 (12:13 -0700)
committerStefan Junker <mail@stefanjunker.de>
Fri, 22 Jul 2016 22:34:53 +0000 (15:34 -0700)
pkg/ip/link.go
plugins/main/bridge/bridge.go
plugins/main/macvlan/macvlan.go
plugins/main/ptp/ptp.go

index 6d9d1cc..c9662d9 100644 (file)
@@ -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
 }
index 34f6c0a..5f9659d 100644 (file)
@@ -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
                }
 
index d1a4070..63c9f7f 100644 (file)
@@ -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
                }
 
index e6c085e..cdb3536 100644 (file)
@@ -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