Skip to content

Commit 976bd8d

Browse files
jrifeaboch
authored andcommitted
Add support for IFLA_NETKIT_SCRUB and IFLA_NETKIT_PEER_SCRUB
Link: https://lore.kernel.org/bpf/[email protected]/T/#u
1 parent 084abd9 commit 976bd8d

File tree

4 files changed

+51
-10
lines changed

4 files changed

+51
-10
lines changed

link.go

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,13 @@ const (
377377
NETKIT_POLICY_BLACKHOLE NetkitPolicy = 2
378378
)
379379

380+
type NetkitScrub int
381+
382+
const (
383+
NETKIT_SCRUB_NONE NetkitScrub = 0
384+
NETKIT_SCRUB_DEFAULT NetkitScrub = 1
385+
)
386+
380387
func (n *Netkit) IsPrimary() bool {
381388
return n.isPrimary
382389
}
@@ -391,6 +398,9 @@ type Netkit struct {
391398
Mode NetkitMode
392399
Policy NetkitPolicy
393400
PeerPolicy NetkitPolicy
401+
Scrub NetkitScrub
402+
PeerScrub NetkitScrub
403+
supportsScrub bool
394404
isPrimary bool
395405
peerLinkAttrs LinkAttrs
396406
}
@@ -403,6 +413,10 @@ func (n *Netkit) Type() string {
403413
return "netkit"
404414
}
405415

416+
func (n *Netkit) SupportsScrub() bool {
417+
return n.supportsScrub
418+
}
419+
406420
// Veth devices must specify PeerName on create
407421
type Veth struct {
408422
LinkAttrs
@@ -761,19 +775,19 @@ const (
761775
)
762776

763777
var bondXmitHashPolicyToString = map[BondXmitHashPolicy]string{
764-
BOND_XMIT_HASH_POLICY_LAYER2: "layer2",
765-
BOND_XMIT_HASH_POLICY_LAYER3_4: "layer3+4",
766-
BOND_XMIT_HASH_POLICY_LAYER2_3: "layer2+3",
767-
BOND_XMIT_HASH_POLICY_ENCAP2_3: "encap2+3",
768-
BOND_XMIT_HASH_POLICY_ENCAP3_4: "encap3+4",
778+
BOND_XMIT_HASH_POLICY_LAYER2: "layer2",
779+
BOND_XMIT_HASH_POLICY_LAYER3_4: "layer3+4",
780+
BOND_XMIT_HASH_POLICY_LAYER2_3: "layer2+3",
781+
BOND_XMIT_HASH_POLICY_ENCAP2_3: "encap2+3",
782+
BOND_XMIT_HASH_POLICY_ENCAP3_4: "encap3+4",
769783
BOND_XMIT_HASH_POLICY_VLAN_SRCMAC: "vlan+srcmac",
770784
}
771785
var StringToBondXmitHashPolicyMap = map[string]BondXmitHashPolicy{
772-
"layer2": BOND_XMIT_HASH_POLICY_LAYER2,
773-
"layer3+4": BOND_XMIT_HASH_POLICY_LAYER3_4,
774-
"layer2+3": BOND_XMIT_HASH_POLICY_LAYER2_3,
775-
"encap2+3": BOND_XMIT_HASH_POLICY_ENCAP2_3,
776-
"encap3+4": BOND_XMIT_HASH_POLICY_ENCAP3_4,
786+
"layer2": BOND_XMIT_HASH_POLICY_LAYER2,
787+
"layer3+4": BOND_XMIT_HASH_POLICY_LAYER3_4,
788+
"layer2+3": BOND_XMIT_HASH_POLICY_LAYER2_3,
789+
"encap2+3": BOND_XMIT_HASH_POLICY_ENCAP2_3,
790+
"encap3+4": BOND_XMIT_HASH_POLICY_ENCAP3_4,
777791
"vlan+srcmac": BOND_XMIT_HASH_POLICY_VLAN_SRCMAC,
778792
}
779793

link_linux.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2676,6 +2676,8 @@ func addNetkitAttrs(nk *Netkit, linkInfo *nl.RtAttr, flag int) error {
26762676
data.AddRtAttr(nl.IFLA_NETKIT_MODE, nl.Uint32Attr(uint32(nk.Mode)))
26772677
data.AddRtAttr(nl.IFLA_NETKIT_POLICY, nl.Uint32Attr(uint32(nk.Policy)))
26782678
data.AddRtAttr(nl.IFLA_NETKIT_PEER_POLICY, nl.Uint32Attr(uint32(nk.PeerPolicy)))
2679+
data.AddRtAttr(nl.IFLA_NETKIT_SCRUB, nl.Uint32Attr(uint32(nk.Scrub)))
2680+
data.AddRtAttr(nl.IFLA_NETKIT_PEER_SCRUB, nl.Uint32Attr(uint32(nk.PeerScrub)))
26792681

26802682
if (flag & unix.NLM_F_EXCL) == 0 {
26812683
// Modifying peer link attributes will not take effect
@@ -2736,6 +2738,12 @@ func parseNetkitData(link Link, data []syscall.NetlinkRouteAttr) {
27362738
netkit.Policy = NetkitPolicy(native.Uint32(datum.Value[0:4]))
27372739
case nl.IFLA_NETKIT_PEER_POLICY:
27382740
netkit.PeerPolicy = NetkitPolicy(native.Uint32(datum.Value[0:4]))
2741+
case nl.IFLA_NETKIT_SCRUB:
2742+
netkit.supportsScrub = true
2743+
netkit.Scrub = NetkitScrub(native.Uint32(datum.Value[0:4]))
2744+
case nl.IFLA_NETKIT_PEER_SCRUB:
2745+
netkit.supportsScrub = true
2746+
netkit.PeerScrub = NetkitScrub(native.Uint32(datum.Value[0:4]))
27392747
}
27402748
}
27412749
}

link_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ func testLinkAddDel(t *testing.T, link Link) {
8080
if resultPrimary.Mode != inputPrimary.Mode {
8181
t.Fatalf("Mode is %d, should be %d", int(resultPrimary.Mode), int(inputPrimary.Mode))
8282
}
83+
if resultPrimary.SupportsScrub() && resultPrimary.Scrub != inputPrimary.Scrub {
84+
t.Fatalf("Scrub is %d, should be %d", int(resultPrimary.Scrub), int(inputPrimary.Scrub))
85+
}
86+
if resultPrimary.SupportsScrub() && resultPrimary.PeerScrub != inputPrimary.PeerScrub {
87+
t.Fatalf("Peer Scrub is %d, should be %d", int(resultPrimary.PeerScrub), int(inputPrimary.PeerScrub))
88+
}
8389

8490
if inputPrimary.peerLinkAttrs.Name != "" {
8591
var resultPeer *Netkit
@@ -102,6 +108,15 @@ func testLinkAddDel(t *testing.T, link Link) {
102108
if resultPrimary.IsPrimary() == resultPeer.IsPrimary() {
103109
t.Fatalf("Both primary and peer device has the same value in IsPrimary() %t", resultPrimary.IsPrimary())
104110
}
111+
if resultPrimary.SupportsScrub() != resultPeer.SupportsScrub() {
112+
t.Fatalf("Peer SupportsScrub() should return %v", resultPrimary.SupportsScrub())
113+
}
114+
if resultPrimary.PeerScrub != resultPeer.Scrub {
115+
t.Fatalf("Scrub from peer is %d, should be %d", int(resultPeer.Scrub), int(resultPrimary.PeerScrub))
116+
}
117+
if resultPrimary.Scrub != resultPeer.PeerScrub {
118+
t.Fatalf("PeerScrub from peer is %d, should be %d", int(resultPeer.PeerScrub), int(resultPrimary.Scrub))
119+
}
105120
}
106121
}
107122

@@ -1051,6 +1066,8 @@ func TestLinkAddDelNetkit(t *testing.T) {
10511066
Mode: NETKIT_MODE_L2,
10521067
Policy: NETKIT_POLICY_FORWARD,
10531068
PeerPolicy: NETKIT_POLICY_BLACKHOLE,
1069+
Scrub: NETKIT_SCRUB_DEFAULT,
1070+
PeerScrub: NETKIT_SCRUB_NONE,
10541071
}
10551072
peerAttr := &LinkAttrs{
10561073
Name: "bar",

nl/link_linux.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ const (
3838
IFLA_NETKIT_POLICY
3939
IFLA_NETKIT_PEER_POLICY
4040
IFLA_NETKIT_MODE
41+
IFLA_NETKIT_SCRUB
42+
IFLA_NETKIT_PEER_SCRUB
4143
IFLA_NETKIT_MAX = IFLA_NETKIT_MODE
4244
)
4345

0 commit comments

Comments
 (0)