14
14
#include "netlink_helpers.h"
15
15
#include "tc_helpers.h"
16
16
17
+ #define NETKIT_HEADROOM 32
18
+ #define NETKIT_TAILROOM 8
19
+
17
20
#define MARK 42
18
21
#define PRIO 0xeb9f
19
22
#define ICMP_ECHO 8
20
23
24
+ #define FLAG_ADJUST_ROOM (1 << 0)
25
+ #define FLAG_SAME_NETNS (1 << 1)
26
+
21
27
struct icmphdr {
22
28
__u8 type ;
23
29
__u8 code ;
@@ -35,7 +41,7 @@ struct iplink_req {
35
41
};
36
42
37
43
static int create_netkit (int mode , int policy , int peer_policy , int * ifindex ,
38
- bool same_netns , int scrub , int peer_scrub )
44
+ int scrub , int peer_scrub , __u32 flags )
39
45
{
40
46
struct rtnl_handle rth = { .fd = -1 };
41
47
struct iplink_req req = {};
@@ -63,6 +69,10 @@ static int create_netkit(int mode, int policy, int peer_policy, int *ifindex,
63
69
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_SCRUB , scrub );
64
70
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_PEER_SCRUB , peer_scrub );
65
71
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_MODE , mode );
72
+ if (flags & FLAG_ADJUST_ROOM ) {
73
+ addattr16 (& req .n , sizeof (req ), IFLA_NETKIT_HEADROOM , NETKIT_HEADROOM );
74
+ addattr16 (& req .n , sizeof (req ), IFLA_NETKIT_TAILROOM , NETKIT_TAILROOM );
75
+ }
66
76
addattr_nest_end (& req .n , data );
67
77
addattr_nest_end (& req .n , linkinfo );
68
78
@@ -87,7 +97,7 @@ static int create_netkit(int mode, int policy, int peer_policy, int *ifindex,
87
97
" addr ee:ff:bb:cc:aa:dd" ),
88
98
"set hwaddress" );
89
99
}
90
- if (same_netns ) {
100
+ if (flags & FLAG_SAME_NETNS ) {
91
101
ASSERT_OK (system ("ip link set dev " netkit_peer " up" ),
92
102
"up peer" );
93
103
ASSERT_OK (system ("ip addr add dev " netkit_peer " 10.0.0.2/24" ),
@@ -184,8 +194,8 @@ void serial_test_tc_netkit_basic(void)
184
194
int err , ifindex ;
185
195
186
196
err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
187
- & ifindex , false, NETKIT_SCRUB_DEFAULT ,
188
- NETKIT_SCRUB_DEFAULT );
197
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
198
+ NETKIT_SCRUB_DEFAULT , 0 );
189
199
if (err )
190
200
return ;
191
201
@@ -299,8 +309,8 @@ static void serial_test_tc_netkit_multi_links_target(int mode, int target)
299
309
int err , ifindex ;
300
310
301
311
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
302
- & ifindex , false, NETKIT_SCRUB_DEFAULT ,
303
- NETKIT_SCRUB_DEFAULT );
312
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
313
+ NETKIT_SCRUB_DEFAULT , 0 );
304
314
if (err )
305
315
return ;
306
316
@@ -428,8 +438,8 @@ static void serial_test_tc_netkit_multi_opts_target(int mode, int target)
428
438
int err , ifindex ;
429
439
430
440
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
431
- & ifindex , false, NETKIT_SCRUB_DEFAULT ,
432
- NETKIT_SCRUB_DEFAULT );
441
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
442
+ NETKIT_SCRUB_DEFAULT , 0 );
433
443
if (err )
434
444
return ;
435
445
@@ -543,8 +553,8 @@ void serial_test_tc_netkit_device(void)
543
553
int err , ifindex , ifindex2 ;
544
554
545
555
err = create_netkit (NETKIT_L3 , NETKIT_PASS , NETKIT_PASS ,
546
- & ifindex , true, NETKIT_SCRUB_DEFAULT ,
547
- NETKIT_SCRUB_DEFAULT );
556
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
557
+ NETKIT_SCRUB_DEFAULT , FLAG_SAME_NETNS );
548
558
if (err )
549
559
return ;
550
560
@@ -655,8 +665,8 @@ static void serial_test_tc_netkit_neigh_links_target(int mode, int target)
655
665
int err , ifindex ;
656
666
657
667
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
658
- & ifindex , false, NETKIT_SCRUB_DEFAULT ,
659
- NETKIT_SCRUB_DEFAULT );
668
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
669
+ NETKIT_SCRUB_DEFAULT , 0 );
660
670
if (err )
661
671
return ;
662
672
@@ -733,8 +743,8 @@ static void serial_test_tc_netkit_pkt_type_mode(int mode)
733
743
struct bpf_link * link ;
734
744
735
745
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
736
- & ifindex , true, NETKIT_SCRUB_DEFAULT ,
737
- NETKIT_SCRUB_DEFAULT );
746
+ & ifindex , NETKIT_SCRUB_DEFAULT ,
747
+ NETKIT_SCRUB_DEFAULT , FLAG_SAME_NETNS );
738
748
if (err )
739
749
return ;
740
750
@@ -799,15 +809,16 @@ void serial_test_tc_netkit_pkt_type(void)
799
809
serial_test_tc_netkit_pkt_type_mode (NETKIT_L3 );
800
810
}
801
811
802
- static void serial_test_tc_netkit_scrub_type (int scrub )
812
+ static void serial_test_tc_netkit_scrub_type (int scrub , bool room )
803
813
{
804
814
LIBBPF_OPTS (bpf_netkit_opts , optl );
805
815
struct test_tc_link * skel ;
806
816
struct bpf_link * link ;
807
817
int err , ifindex ;
808
818
809
819
err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
810
- & ifindex , false, scrub , scrub );
820
+ & ifindex , scrub , scrub ,
821
+ room ? FLAG_ADJUST_ROOM : 0 );
811
822
if (err )
812
823
return ;
813
824
@@ -842,6 +853,8 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
842
853
ASSERT_EQ (skel -> bss -> seen_tc8 , true, "seen_tc8" );
843
854
ASSERT_EQ (skel -> bss -> mark , scrub == NETKIT_SCRUB_NONE ? MARK : 0 , "mark" );
844
855
ASSERT_EQ (skel -> bss -> prio , scrub == NETKIT_SCRUB_NONE ? PRIO : 0 , "prio" );
856
+ ASSERT_EQ (skel -> bss -> headroom , room ? NETKIT_HEADROOM : 0 , "headroom" );
857
+ ASSERT_EQ (skel -> bss -> tailroom , room ? NETKIT_TAILROOM : 0 , "tailroom" );
845
858
cleanup :
846
859
test_tc_link__destroy (skel );
847
860
@@ -852,6 +865,6 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
852
865
853
866
void serial_test_tc_netkit_scrub (void )
854
867
{
855
- serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_DEFAULT );
856
- serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_NONE );
868
+ serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_DEFAULT , false );
869
+ serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_NONE , true );
857
870
}
0 commit comments