mirror of
https://github.com/vishvananda/netlink
synced 2025-04-01 00:06:33 +00:00
netkit: Allow setting MAC address in L2 mode
Signed-off-by: Jordan Rife <jrife@google.com>
This commit is contained in:
parent
0af32151e7
commit
0e7078ed04
@ -2671,8 +2671,8 @@ func (h *Handle) LinkSetGroup(link Link, group int) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addNetkitAttrs(nk *Netkit, linkInfo *nl.RtAttr, flag int) error {
|
func addNetkitAttrs(nk *Netkit, linkInfo *nl.RtAttr, flag int) error {
|
||||||
if nk.peerLinkAttrs.HardwareAddr != nil || nk.HardwareAddr != nil {
|
if nk.Mode != NETKIT_MODE_L2 && (nk.LinkAttrs.HardwareAddr != nil || nk.peerLinkAttrs.HardwareAddr != nil) {
|
||||||
return fmt.Errorf("netkit doesn't support setting Ethernet")
|
return fmt.Errorf("netkit only allows setting Ethernet in L2 mode")
|
||||||
}
|
}
|
||||||
|
|
||||||
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||||
@ -2724,6 +2724,9 @@ func addNetkitAttrs(nk *Netkit, linkInfo *nl.RtAttr, flag int) error {
|
|||||||
peer.AddRtAttr(unix.IFLA_NET_NS_FD, nl.Uint32Attr(uint32(ns)))
|
peer.AddRtAttr(unix.IFLA_NET_NS_FD, nl.Uint32Attr(uint32(ns)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if nk.peerLinkAttrs.HardwareAddr != nil {
|
||||||
|
peer.AddRtAttr(unix.IFLA_ADDRESS, []byte(nk.peerLinkAttrs.HardwareAddr))
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
link_test.go
12
link_test.go
@ -86,6 +86,11 @@ func testLinkAddDel(t *testing.T, link Link) {
|
|||||||
if resultPrimary.SupportsScrub() && resultPrimary.PeerScrub != inputPrimary.PeerScrub {
|
if resultPrimary.SupportsScrub() && resultPrimary.PeerScrub != inputPrimary.PeerScrub {
|
||||||
t.Fatalf("Peer Scrub is %d, should be %d", int(resultPrimary.PeerScrub), int(inputPrimary.PeerScrub))
|
t.Fatalf("Peer Scrub is %d, should be %d", int(resultPrimary.PeerScrub), int(inputPrimary.PeerScrub))
|
||||||
}
|
}
|
||||||
|
if inputPrimary.Mode == NETKIT_MODE_L2 && inputPrimary.HardwareAddr != nil {
|
||||||
|
if inputPrimary.HardwareAddr.String() != resultPrimary.HardwareAddr.String() {
|
||||||
|
t.Fatalf("Hardware address is %s, should be %s", resultPrimary.HardwareAddr.String(), inputPrimary.HardwareAddr.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if inputPrimary.peerLinkAttrs.Name != "" {
|
if inputPrimary.peerLinkAttrs.Name != "" {
|
||||||
var resultPeer *Netkit
|
var resultPeer *Netkit
|
||||||
@ -117,6 +122,11 @@ func testLinkAddDel(t *testing.T, link Link) {
|
|||||||
if resultPrimary.Scrub != resultPeer.PeerScrub {
|
if resultPrimary.Scrub != resultPeer.PeerScrub {
|
||||||
t.Fatalf("PeerScrub from peer is %d, should be %d", int(resultPeer.PeerScrub), int(resultPrimary.Scrub))
|
t.Fatalf("PeerScrub from peer is %d, should be %d", int(resultPeer.PeerScrub), int(resultPrimary.Scrub))
|
||||||
}
|
}
|
||||||
|
if inputPrimary.Mode == NETKIT_MODE_L2 && inputPrimary.peerLinkAttrs.HardwareAddr != nil {
|
||||||
|
if inputPrimary.peerLinkAttrs.HardwareAddr.String() != resultPeer.HardwareAddr.String() {
|
||||||
|
t.Fatalf("Peer hardware address is %s, should be %s", resultPeer.HardwareAddr.String(), inputPrimary.peerLinkAttrs.HardwareAddr.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1062,6 +1072,7 @@ func TestLinkAddDelNetkit(t *testing.T) {
|
|||||||
netkit := &Netkit{
|
netkit := &Netkit{
|
||||||
LinkAttrs: LinkAttrs{
|
LinkAttrs: LinkAttrs{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
|
HardwareAddr: net.HardwareAddr{0x00, 0x11, 0x22, 0x33, 0x44, 0x55},
|
||||||
},
|
},
|
||||||
Mode: NETKIT_MODE_L2,
|
Mode: NETKIT_MODE_L2,
|
||||||
Policy: NETKIT_POLICY_FORWARD,
|
Policy: NETKIT_POLICY_FORWARD,
|
||||||
@ -1071,6 +1082,7 @@ func TestLinkAddDelNetkit(t *testing.T) {
|
|||||||
}
|
}
|
||||||
peerAttr := &LinkAttrs{
|
peerAttr := &LinkAttrs{
|
||||||
Name: "bar",
|
Name: "bar",
|
||||||
|
HardwareAddr: net.HardwareAddr{0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB},
|
||||||
}
|
}
|
||||||
netkit.SetPeerAttrs(peerAttr)
|
netkit.SetPeerAttrs(peerAttr)
|
||||||
testLinkAddDel(t, netkit)
|
testLinkAddDel(t, netkit)
|
||||||
|
Loading…
Reference in New Issue
Block a user