1414#include "netlink_helpers.h"
1515#include "tc_helpers.h"
1616
17+ #define NETKIT_HEADROOM 32
18+ #define NETKIT_TAILROOM 8
19+
1720#define MARK 42
1821#define PRIO 0xeb9f
1922#define ICMP_ECHO 8
@@ -35,7 +38,7 @@ struct iplink_req {
3538};
3639
3740static 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 )
3942{
4043 struct rtnl_handle rth = { .fd = -1 };
4144 struct iplink_req req = {};
@@ -63,6 +66,10 @@ static int create_netkit(int mode, int policy, int peer_policy, int *ifindex,
6366 addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_SCRUB , scrub );
6467 addattr32 (& req .n , sizeof (req ), IFLA_NETKIT_PEER_SCRUB , peer_scrub );
6568 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+ }
6673 addattr_nest_end (& req .n , data );
6774 addattr_nest_end (& req .n , linkinfo );
6875
@@ -185,7 +192,7 @@ void serial_test_tc_netkit_basic(void)
185192
186193 err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
187194 & ifindex , false, NETKIT_SCRUB_DEFAULT ,
188- NETKIT_SCRUB_DEFAULT );
195+ NETKIT_SCRUB_DEFAULT , false );
189196 if (err )
190197 return ;
191198
@@ -300,7 +307,7 @@ static void serial_test_tc_netkit_multi_links_target(int mode, int target)
300307
301308 err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
302309 & ifindex , false, NETKIT_SCRUB_DEFAULT ,
303- NETKIT_SCRUB_DEFAULT );
310+ NETKIT_SCRUB_DEFAULT , false );
304311 if (err )
305312 return ;
306313
@@ -429,7 +436,7 @@ static void serial_test_tc_netkit_multi_opts_target(int mode, int target)
429436
430437 err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
431438 & ifindex , false, NETKIT_SCRUB_DEFAULT ,
432- NETKIT_SCRUB_DEFAULT );
439+ NETKIT_SCRUB_DEFAULT , false );
433440 if (err )
434441 return ;
435442
@@ -544,7 +551,7 @@ void serial_test_tc_netkit_device(void)
544551
545552 err = create_netkit (NETKIT_L3 , NETKIT_PASS , NETKIT_PASS ,
546553 & ifindex , true, NETKIT_SCRUB_DEFAULT ,
547- NETKIT_SCRUB_DEFAULT );
554+ NETKIT_SCRUB_DEFAULT , false );
548555 if (err )
549556 return ;
550557
@@ -656,7 +663,7 @@ static void serial_test_tc_netkit_neigh_links_target(int mode, int target)
656663
657664 err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
658665 & ifindex , false, NETKIT_SCRUB_DEFAULT ,
659- NETKIT_SCRUB_DEFAULT );
666+ NETKIT_SCRUB_DEFAULT , false );
660667 if (err )
661668 return ;
662669
@@ -734,7 +741,7 @@ static void serial_test_tc_netkit_pkt_type_mode(int mode)
734741
735742 err = create_netkit (mode , NETKIT_PASS , NETKIT_PASS ,
736743 & ifindex , true, NETKIT_SCRUB_DEFAULT ,
737- NETKIT_SCRUB_DEFAULT );
744+ NETKIT_SCRUB_DEFAULT , false );
738745 if (err )
739746 return ;
740747
@@ -799,15 +806,15 @@ void serial_test_tc_netkit_pkt_type(void)
799806 serial_test_tc_netkit_pkt_type_mode (NETKIT_L3 );
800807}
801808
802- static void serial_test_tc_netkit_scrub_type (int scrub )
809+ static void serial_test_tc_netkit_scrub_type (int scrub , bool room )
803810{
804811 LIBBPF_OPTS (bpf_netkit_opts , optl );
805812 struct test_tc_link * skel ;
806813 struct bpf_link * link ;
807814 int err , ifindex ;
808815
809816 err = create_netkit (NETKIT_L2 , NETKIT_PASS , NETKIT_PASS ,
810- & ifindex , false, scrub , scrub );
817+ & ifindex , false, scrub , scrub , room );
811818 if (err )
812819 return ;
813820
@@ -842,6 +849,8 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
842849 ASSERT_EQ (skel -> bss -> seen_tc8 , true, "seen_tc8" );
843850 ASSERT_EQ (skel -> bss -> mark , scrub == NETKIT_SCRUB_NONE ? MARK : 0 , "mark" );
844851 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" );
845854cleanup :
846855 test_tc_link__destroy (skel );
847856
@@ -852,6 +861,6 @@ static void serial_test_tc_netkit_scrub_type(int scrub)
852861
853862void serial_test_tc_netkit_scrub (void )
854863{
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 );
857866}
0 commit comments