selftests: xsk: Implement bpf_link test
Introduce a test that is supposed to verify the persistence of BPF resources based on underlying bpf_link usage. Test will: 1) create and bind two sockets on queue ids 0 and 1 2) run a traffic on queue ids 0 3) remove xsk sockets from queue 0 on both veth interfaces 4) run a traffic on queues ids 1 Running traffic successfully on qids 1 means that BPF resources were not removed on step 3). In order to make it work, change the command that creates veth pair to have the 4 queue pairs by default. Introduce the arrays of xsks and umems to ifobject struct but keep a pointers to single entities, so rest of the logic around Rx/Tx can be kept as-is. For umem handling, double the size of mmapped space and split that between the two sockets. Rename also bidi_pass to a variable 'second_step' of a boolean type as it's now used also for the test that is introduced here and it doesn't have anything in common with bi-directional testing. Drop opt_queue command line argument as it wasn't working before anyway. Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20210329224316.17793-15-maciej.fijalkowski@intel.com
This commit is contained in:
committed by
Alexei Starovoitov
parent
34829eec3b
commit
27e1ca2525
@@ -23,6 +23,7 @@
|
||||
#define MAX_SOCKS 1
|
||||
#define MAX_TEARDOWN_ITER 10
|
||||
#define MAX_BIDI_ITER 2
|
||||
#define MAX_BPF_ITER 2
|
||||
#define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \
|
||||
sizeof(struct udphdr))
|
||||
#define MIN_PKT_SIZE 64
|
||||
@@ -63,6 +64,7 @@ enum TEST_TYPES {
|
||||
TEST_TYPE_TEARDOWN,
|
||||
TEST_TYPE_BIDI,
|
||||
TEST_TYPE_STATS,
|
||||
TEST_TYPE_BPF_RES,
|
||||
TEST_TYPE_MAX
|
||||
};
|
||||
|
||||
@@ -77,10 +79,9 @@ enum STAT_TEST_TYPES {
|
||||
static int configured_mode = TEST_MODE_UNCONFIGURED;
|
||||
static u8 debug_pkt_dump;
|
||||
static u32 num_frames;
|
||||
static u8 bidi_pass;
|
||||
static bool second_step;
|
||||
static int test_type;
|
||||
|
||||
static int opt_queue;
|
||||
static int opt_pkt_count;
|
||||
static u8 opt_verbose;
|
||||
|
||||
@@ -128,6 +129,8 @@ struct ifobject {
|
||||
char ifname[MAX_INTERFACE_NAME_CHARS];
|
||||
char nsname[MAX_INTERFACES_NAMESPACE_CHARS];
|
||||
struct xsk_socket_info *xsk;
|
||||
struct xsk_socket_info **xsk_arr;
|
||||
struct xsk_umem_info **umem_arr;
|
||||
struct xsk_umem_info *umem;
|
||||
void *(*func_ptr)(void *arg);
|
||||
struct flow_vector fv;
|
||||
|
||||
Reference in New Issue
Block a user