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)
ip/link.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
 }