pkg/ip: SetupVeth returns net.Interface
authorGabe Rosenhouse <grosenhouse@pivotal.io>
Fri, 10 Mar 2017 17:49:46 +0000 (09:49 -0800)
committerGabe Rosenhouse <grosenhouse@pivotal.io>
Fri, 10 Mar 2017 17:49:46 +0000 (09:49 -0800)
pkg/ip/link.go
pkg/ip/link_test.go
plugins/main/bridge/bridge.go
plugins/main/ptp/ptp.go

index 8900f65..52f6aae 100644 (file)
@@ -98,49 +98,37 @@ func RenameLink(curName, newName string) error {
        return err
 }
 
-type LinkAttrs struct {
-       Name         string
-       HardwareAddr net.HardwareAddr
-       Index        int
-}
-
-type link struct {
-       netlink.Link
-}
-
-func (l *link) Attrs() LinkAttrs {
-       a := l.Link.Attrs()
-       return LinkAttrs{
+func ifaceFromNetlinkLink(l netlink.Link) net.Interface {
+       a := l.Attrs()
+       return net.Interface{
+               Index:        a.Index,
+               MTU:          a.MTU,
                Name:         a.Name,
                HardwareAddr: a.HardwareAddr,
-               Index:        a.Index,
+               Flags:        a.Flags,
        }
 }
 
-type Link interface {
-       Attrs() LinkAttrs
-}
-
 // SetupVeth sets up a virtual ethernet link.
 // Should be in container netns, and will switch back to hostNS to set the host
 // veth end up.
-func SetupVeth(contVethName string, mtu int, hostNS ns.NetNS) (Link, Link, error) {
+func SetupVeth(contVethName string, mtu int, hostNS ns.NetNS) (net.Interface, net.Interface, error) {
        hostVethName, contVeth, err := makeVeth(contVethName, mtu)
        if err != nil {
-               return nil, nil, err
+               return net.Interface{}, net.Interface{}, err
        }
 
        if err = netlink.LinkSetUp(contVeth); err != nil {
-               return nil, nil, fmt.Errorf("failed to set %q up: %v", contVethName, err)
+               return net.Interface{}, net.Interface{}, fmt.Errorf("failed to set %q up: %v", contVethName, err)
        }
 
        hostVeth, err := netlink.LinkByName(hostVethName)
        if err != nil {
-               return nil, nil, fmt.Errorf("failed to lookup %q: %v", hostVethName, err)
+               return net.Interface{}, net.Interface{}, fmt.Errorf("failed to lookup %q: %v", hostVethName, err)
        }
 
        if err = netlink.LinkSetNsFd(hostVeth, int(hostNS.Fd())); err != nil {
-               return nil, nil, fmt.Errorf("failed to move veth to host netns: %v", err)
+               return net.Interface{}, net.Interface{}, fmt.Errorf("failed to move veth to host netns: %v", err)
        }
 
        err = hostNS.Do(func(_ ns.NetNS) error {
@@ -155,9 +143,9 @@ func SetupVeth(contVethName string, mtu int, hostNS ns.NetNS) (Link, Link, error
                return nil
        })
        if err != nil {
-               return nil, nil, err
+               return net.Interface{}, net.Interface{}, err
        }
-       return &link{hostVeth}, &link{contVeth}, nil
+       return ifaceFromNetlinkLink(hostVeth), ifaceFromNetlinkLink(contVeth), nil
 }
 
 // DelLinkByName removes an interface link.
index 2c9ae40..85d8b94 100644 (file)
@@ -46,8 +46,8 @@ var _ = Describe("Link", func() {
                hostNetNS         ns.NetNS
                containerNetNS    ns.NetNS
                ifaceCounter      int = 0
-               hostVeth          ip.Link
-               containerVeth     ip.Link
+               hostVeth          net.Interface
+               containerVeth     net.Interface
                hostVethName      string
                containerVethName string
 
@@ -78,8 +78,8 @@ var _ = Describe("Link", func() {
                        }
                        Expect(err).NotTo(HaveOccurred())
 
-                       hostVethName = hostVeth.Attrs().Name
-                       containerVethName = containerVeth.Attrs().Name
+                       hostVethName = hostVeth.Name
+                       containerVethName = containerVeth.Name
 
                        return nil
                })
@@ -98,7 +98,7 @@ var _ = Describe("Link", func() {
 
                        containerVethFromName, err := netlink.LinkByName(containerVethName)
                        Expect(err).NotTo(HaveOccurred())
-                       Expect(containerVethFromName.Attrs().Index).To(Equal(containerVeth.Attrs().Index))
+                       Expect(containerVethFromName.Attrs().Index).To(Equal(containerVeth.Index))
 
                        return nil
                })
@@ -108,7 +108,7 @@ var _ = Describe("Link", func() {
 
                        hostVethFromName, err := netlink.LinkByName(hostVethName)
                        Expect(err).NotTo(HaveOccurred())
-                       Expect(hostVethFromName.Attrs().Index).To(Equal(hostVeth.Attrs().Index))
+                       Expect(hostVethFromName.Attrs().Index).To(Equal(hostVeth.Index))
 
                        return nil
                })
@@ -156,7 +156,7 @@ var _ = Describe("Link", func() {
 
                                hostVeth, _, err := ip.SetupVeth(containerVethName, mtu, hostNetNS)
                                Expect(err).NotTo(HaveOccurred())
-                               hostVethName = hostVeth.Attrs().Name
+                               hostVethName = hostVeth.Name
                                return nil
                        })
 
index ac95979..8233491 100644 (file)
@@ -168,10 +168,10 @@ func setupVeth(netns ns.NetNS, br *netlink.Bridge, ifName string, mtu int, hairp
                if err != nil {
                        return err
                }
-               contIface.Name = containerVeth.Attrs().Name
-               contIface.Mac = containerVeth.Attrs().HardwareAddr.String()
+               contIface.Name = containerVeth.Name
+               contIface.Mac = containerVeth.HardwareAddr.String()
                contIface.Sandbox = netns.Path()
-               hostIface.Name = hostVeth.Attrs().Name
+               hostIface.Name = hostVeth.Name
                return nil
        })
        if err != nil {
index 3e88515..0010915 100644 (file)
@@ -67,10 +67,10 @@ func setupContainerVeth(netns ns.NetNS, ifName string, mtu int, pr *current.Resu
                if err != nil {
                        return err
                }
-               hostInterface.Name = hostVeth.Attrs().Name
-               hostInterface.Mac = hostVeth.Attrs().HardwareAddr.String()
-               containerInterface.Name = contVeth0.Attrs().Name
-               containerInterface.Mac = contVeth0.Attrs().HardwareAddr.String()
+               hostInterface.Name = hostVeth.Name
+               hostInterface.Mac = hostVeth.HardwareAddr.String()
+               containerInterface.Name = contVeth0.Name
+               containerInterface.Mac = contVeth0.HardwareAddr.String()
                containerInterface.Sandbox = netns.Path()
 
                var firstV4Addr net.IP
@@ -87,7 +87,7 @@ func setupContainerVeth(netns ns.NetNS, ifName string, mtu int, pr *current.Resu
 
                if firstV4Addr != nil {
                        err = hostNS.Do(func(_ ns.NetNS) error {
-                               hostVethName := hostVeth.Attrs().Name
+                               hostVethName := hostVeth.Name
                                if err := ip.SetHWAddrByIP(hostVethName, firstV4Addr, nil /* TODO IPv6 */); err != nil {
                                        return fmt.Errorf("failed to set hardware addr by IP: %v", err)
                                }
@@ -103,7 +103,7 @@ func setupContainerVeth(netns ns.NetNS, ifName string, mtu int, pr *current.Resu
                        return err
                }
 
-               if err := ip.SetHWAddrByIP(contVeth0.Attrs().Name, firstV4Addr, nil /* TODO IPv6 */); err != nil {
+               if err := ip.SetHWAddrByIP(contVeth0.Name, firstV4Addr, nil /* TODO IPv6 */); err != nil {
                        return fmt.Errorf("failed to set hardware addr by IP: %v", err)
                }