From 085dc47dcc1f6ee8dc441b96d2eab9a376d36c6e Mon Sep 17 00:00:00 2001 From: Dave Tucker Date: Sat, 31 Jan 2015 19:55:10 +0000 Subject: [PATCH] Add LinkSetName Signed-off-by: Dave Tucker --- link_linux.go | 21 +++++++++++++++++++++ link_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/link_linux.go b/link_linux.go index bac8349..98a6515 100644 --- a/link_linux.go +++ b/link_linux.go @@ -80,6 +80,27 @@ func LinkSetMTU(link Link, mtu int) error { return err } +// LinkSetName sets the name of the link device. +// Equivalent to: `ip link set $link name $name` +func LinkSetName(link Link, name string) error { + base := link.Attrs() + ensureIndex(base) + req := nl.NewNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK) + + msg := nl.NewIfInfomsg(syscall.AF_UNSPEC) + msg.Type = syscall.RTM_SETLINK + msg.Flags = syscall.NLM_F_REQUEST + msg.Index = int32(base.Index) + msg.Change = nl.DEFAULT_CHANGE + req.AddData(msg) + + data := nl.NewRtAttr(syscall.IFLA_IFNAME, []byte(name)) + req.AddData(data) + + _, err := req.Execute(syscall.NETLINK_ROUTE, 0) + return err +} + // LinkSetMaster sets the master of the link device. // Equivalent to: `ip link set $link master $master` func LinkSetMaster(link Link, master *Bridge) error { diff --git a/link_test.go b/link_test.go index 232ad03..8e58804 100644 --- a/link_test.go +++ b/link_test.go @@ -399,3 +399,42 @@ func TestLinkByIndex(t *testing.T) { t.Fatalf("LinkByIndex(%v) found deleted link", err) } } + +func TestLinkSet(t *testing.T) { + tearDown := setUpNetlinkTest(t) + defer tearDown() + + iface := &Dummy{LinkAttrs{Name: "foo"}} + if err := LinkAdd(iface); err != nil { + t.Fatal(err) + } + + link, err := LinkByName("foo") + if err != nil { + t.Fatal(err) + } + + err = LinkSetName(link, "bar") + if err != nil { + t.Fatalf("Could not change interface name: %v", err) + } + + link, err = LinkByName("bar") + if err != nil { + t.Fatalf("Interface name not changed: %v", err) + } + + err = LinkSetMTU(link, 1400) + if err != nil { + t.Fatalf("Could not set MTU: %v", err) + } + + link, err = LinkByName("bar") + if err != nil { + t.Fatal(err) + } + + if link.Attrs().MTU != 1400 { + t.Fatal("MTU not changed!") + } +}