diff --git a/link_linux.go b/link_linux.go index 688e147..e8a3b14 100644 --- a/link_linux.go +++ b/link_linux.go @@ -1058,6 +1058,10 @@ func (h *Handle) LinkAdd(link Link) error { return h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK) } +func (h *Handle) LinkModify(link Link) error { + return h.linkModify(link, unix.NLM_F_REQUEST|unix.NLM_F_ACK) +} + func (h *Handle) linkModify(link Link, flags int) error { // TODO: support extra data for macvlan base := link.Attrs() @@ -1203,6 +1207,11 @@ func (h *Handle) linkModify(link Link, flags int) error { nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(base.Name)) req.AddData(nameData) + if base.Alias != "" { + alias := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(base.Alias)) + req.AddData(alias) + } + if base.MTU > 0 { mtu := nl.NewRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU))) req.AddData(mtu) diff --git a/link_test.go b/link_test.go index 7206c8a..c1b699e 100644 --- a/link_test.go +++ b/link_test.go @@ -523,6 +523,37 @@ func TestLinkAddDelDummyWithGroup(t *testing.T) { testLinkAddDel(t, &Dummy{LinkAttrs{Name: "foo", Group: 42}}) } +func TestLinkModify(t *testing.T) { + tearDown := setUpNetlinkTest(t) + defer tearDown() + + linkName := "foo" + originalMTU := 1500 + updatedMTU := 1442 + + link := &Dummy{LinkAttrs{Name: linkName, MTU: originalMTU}} + base := link.Attrs() + + if err := LinkAdd(link); err != nil { + t.Fatal(err) + } + + link.MTU = updatedMTU + if err := pkgHandle.LinkModify(link); err != nil { + t.Fatal(err) + } + + result, err := LinkByName(linkName) + if err != nil { + t.Fatal(err) + } + + rBase := result.Attrs() + if rBase.MTU != updatedMTU { + t.Fatalf("MTU is %d, should be %d", rBase.MTU, base.MTU) + } +} + func TestLinkAddDelIfb(t *testing.T) { tearDown := setUpNetlinkTest(t) defer tearDown()