From 71d96ea91c803363586ae79cdac87eadd277521e Mon Sep 17 00:00:00 2001 From: Gabe Rosenhouse Date: Fri, 10 Mar 2017 09:49:46 -0800 Subject: [PATCH] pkg/ip: SetupVeth returns net.Interface --- ip/link.go | 38 +++++++++++++------------------------- ip/link_test.go | 14 +++++++------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/ip/link.go b/ip/link.go index 8900f653..52f6aae2 100644 --- a/ip/link.go +++ b/ip/link.go @@ -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. diff --git a/ip/link_test.go b/ip/link_test.go index 2c9ae400..85d8b944 100644 --- a/ip/link_test.go +++ b/ip/link_test.go @@ -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 })