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
@@ -35,7 +38,7 @@ struct iplink_req {
35
38
};
36
39
37
40
static int create_netkit (int mode , int policy , int peer_policy , int * ifindex ,
38
- bool same_netns , int scrub , int peer_scrub )
41
+ bool same_netns , int scrub , int peer_scrub , bool room )
39
42
{
40
43
struct rtnl_handle rth = { .fd = -1 };
41
44
struct iplink_req req = {};
@@ -63,6 +66,10 @@ static int create_netkit(int mode, int policy, int peer_policy, int *ifindex,
63
66
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_SCRUB , scrub );
64
67
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_PEER_SCRUB , peer_scrub );
65
68
addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_MODE , mode );
69
+ if (room ) {
70
+ addattr16 (& req .n , sizeof (req ), IFLA_NETKIT_HEADROOM , NETKIT_HEADROOM );
71
+ addattr16 (& req .n , sizeof (req ), IFLA_NETKIT_TAILROOM , NETKIT_TAILROOM );
72
+ }
66
73
addattr_nest_end (& req .n , data );
67
74
addattr_nest_end (& req .n , linkinfo );
68
75
@@ -185,7 +192,7 @@ void serial_test_tc_netkit_basic(void)
185
192
186
193
err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
187
194
& ifindex , false, NETKIT_SCRUB_DEFAULT ,
188
- NETKIT_SCRUB_DEFAULT );
195
+ NETKIT_SCRUB_DEFAULT , false );
189
196
if (err )
190
197
return ;
191
198
@@ -300,7 +307,7 @@ static void serial_test_tc_netkit_multi_links_target(int mode, int target)
300
307
301
308
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
302
309
& ifindex , false, NETKIT_SCRUB_DEFAULT ,
303
- NETKIT_SCRUB_DEFAULT );
310
+ NETKIT_SCRUB_DEFAULT , false );
304
311
if (err )
305
312
return ;
306
313
@@ -429,7 +436,7 @@ static void serial_test_tc_netkit_multi_opts_target(int mode, int target)
429
436
430
437
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
431
438
& ifindex , false, NETKIT_SCRUB_DEFAULT ,
432
- NETKIT_SCRUB_DEFAULT );
439
+ NETKIT_SCRUB_DEFAULT , false );
433
440
if (err )
434
441
return ;
435
442
@@ -544,7 +551,7 @@ void serial_test_tc_netkit_device(void)
544
551
545
552
err = create_netkit (NETKIT_L3 , NETKIT_PASS , NETKIT_PASS ,
546
553
& ifindex , true, NETKIT_SCRUB_DEFAULT ,
547
- NETKIT_SCRUB_DEFAULT );
554
+ NETKIT_SCRUB_DEFAULT , false );
548
555
if (err )
549
556
return ;
550
557
@@ -656,7 +663,7 @@ static void serial_test_tc_netkit_neigh_links_target(int mode, int target)
656
663
657
664
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
658
665
& ifindex , false, NETKIT_SCRUB_DEFAULT ,
659
- NETKIT_SCRUB_DEFAULT );
666
+ NETKIT_SCRUB_DEFAULT , false );
660
667
if (err )
661
668
return ;
662
669
@@ -734,7 +741,7 @@ static void serial_test_tc_netkit_pkt_type_mode(int mode)
734
741
735
742
err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
736
743
& ifindex , true, NETKIT_SCRUB_DEFAULT ,
737
- NETKIT_SCRUB_DEFAULT );
744
+ NETKIT_SCRUB_DEFAULT , false );
738
745
if (err )
739
746
return ;
740
747
@@ -799,15 +806,15 @@ void serial_test_tc_netkit_pkt_type(void)
799
806
serial_test_tc_netkit_pkt_type_mode (NETKIT_L3 );
800
807
}
801
808
802
- static void serial_test_tc_netkit_scrub_type (int scrub )
809
+ static void serial_test_tc_netkit_scrub_type (int scrub , bool room )
803
810
{
804
811
LIBBPF_OPTS (bpf_netkit_opts , optl );
805
812
struct test_tc_link * skel ;
806
813
struct bpf_link * link ;
807
814
int err , ifindex ;
808
815
809
816
err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
810
- & ifindex , false, scrub , scrub );
817
+ & ifindex , false, scrub , scrub , room );
811
818
if (err )
812
819
return ;
813
820
@@ -842,6 +849,8 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
842
849
ASSERT_EQ (skel -> bss -> seen_tc8 , true, "seen_tc8" );
843
850
ASSERT_EQ (skel -> bss -> mark , scrub == NETKIT_SCRUB_NONE ? MARK : 0 , "mark" );
844
851
ASSERT_EQ (skel -> bss -> prio , scrub == NETKIT_SCRUB_NONE ? PRIO : 0 , "prio" );
852
+ ASSERT_EQ (skel -> bss -> headroom , room ? NETKIT_HEADROOM : 0 , "headroom" );
853
+ ASSERT_EQ (skel -> bss -> tailroom , room ? NETKIT_TAILROOM : 0 , "tailroom" );
845
854
cleanup :
846
855
test_tc_link__destroy (skel );
847
856
@@ -852,6 +861,6 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
852
861
853
862
void serial_test_tc_netkit_scrub (void )
854
863
{
855
- serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_DEFAULT );
856
- serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_NONE );
864
+ serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_DEFAULT , false );
865
+ serial_test_tc_netkit_scrub_type (NETKIT_SCRUB_NONE , true );
857
866
}
0 commit comments