From f367f115a327ca07a294022bc296b4a2fd4e8f8c Mon Sep 17 00:00:00 2001
From: Lorenz Brun <lorenz@monogon.tech>
Date: Thu, 6 Apr 2023 23:06:03 +0200
Subject: [PATCH] Use RTM_SETLINK where appropriate

---
 link_linux.go | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/link_linux.go b/link_linux.go
index cc80fb6..db89880 100644
--- a/link_linux.go
+++ b/link_linux.go
@@ -332,7 +332,7 @@ func BridgeSetMcastSnoop(link Link, on bool) error {
 func (h *Handle) BridgeSetMcastSnoop(link Link, on bool) error {
 	bridge := link.(*Bridge)
 	bridge.MulticastSnooping = &on
-	return h.linkModify(bridge, unix.NLM_F_ACK)
+	return h.linkModify(bridge, unix.RTM_SETLINK, unix.NLM_F_ACK)
 }
 
 func BridgeSetVlanFiltering(link Link, on bool) error {
@@ -342,7 +342,7 @@ func BridgeSetVlanFiltering(link Link, on bool) error {
 func (h *Handle) BridgeSetVlanFiltering(link Link, on bool) error {
 	bridge := link.(*Bridge)
 	bridge.VlanFiltering = &on
-	return h.linkModify(bridge, unix.NLM_F_ACK)
+	return h.linkModify(bridge, unix.RTM_SETLINK, unix.NLM_F_ACK)
 }
 
 func SetPromiscOn(link Link) error {
@@ -1197,7 +1197,7 @@ func LinkAdd(link Link) error {
 // are taken from the parameters in the link object.
 // Equivalent to: `ip link add $link`
 func (h *Handle) LinkAdd(link Link) error {
-	return h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
+	return h.linkModify(link, unix.RTM_NEWLINK, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
 }
 
 func LinkModify(link Link) error {
@@ -1205,10 +1205,10 @@ func LinkModify(link Link) error {
 }
 
 func (h *Handle) LinkModify(link Link) error {
-	return h.linkModify(link, unix.NLM_F_REQUEST|unix.NLM_F_ACK)
+	return h.linkModify(link, unix.RTM_SETLINK, unix.NLM_F_REQUEST|unix.NLM_F_ACK)
 }
 
-func (h *Handle) linkModify(link Link, flags int) error {
+func (h *Handle) linkModify(link Link, proto, flags int) error {
 	// TODO: support extra data for macvlan
 	base := link.Attrs()
 
@@ -1373,7 +1373,7 @@ func (h *Handle) linkModify(link Link, flags int) error {
 		return nil
 	}
 
-	req := h.newNetlinkRequest(unix.RTM_NEWLINK, flags)
+	req := h.newNetlinkRequest(proto, flags)
 
 	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
 	// TODO: make it shorter
-- 
2.39.2

