Commit 27e1ca25 authored by Maciej Fijalkowski's avatar Maciej Fijalkowski Committed by Alexei Starovoitov

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: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210329224316.17793-15-maciej.fijalkowski@intel.com
parent 34829eec
...@@ -107,7 +107,7 @@ setup_vethPairs() { ...@@ -107,7 +107,7 @@ setup_vethPairs() {
echo "setting up ${VETH0}: namespace: ${NS0}" echo "setting up ${VETH0}: namespace: ${NS0}"
fi fi
ip netns add ${NS1} ip netns add ${NS1}
ip link add ${VETH0} type veth peer name ${VETH1} ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4
if [ -f /proc/net/if_inet6 ]; then if [ -f /proc/net/if_inet6 ]; then
echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6 echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
fi fi
...@@ -118,6 +118,7 @@ setup_vethPairs() { ...@@ -118,6 +118,7 @@ setup_vethPairs() {
ip netns exec ${NS1} ip link set ${VETH1} mtu ${MTU} ip netns exec ${NS1} ip link set ${VETH1} mtu ${MTU}
ip link set ${VETH0} mtu ${MTU} ip link set ${VETH0} mtu ${MTU}
ip netns exec ${NS1} ip link set ${VETH1} up ip netns exec ${NS1} ip link set ${VETH1} up
ip netns exec ${NS1} ip link set dev lo up
ip link set ${VETH0} up ip link set ${VETH0} up
} }
......
This diff is collapsed.
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#define MAX_SOCKS 1 #define MAX_SOCKS 1
#define MAX_TEARDOWN_ITER 10 #define MAX_TEARDOWN_ITER 10
#define MAX_BIDI_ITER 2 #define MAX_BIDI_ITER 2
#define MAX_BPF_ITER 2
#define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \ #define PKT_HDR_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \
sizeof(struct udphdr)) sizeof(struct udphdr))
#define MIN_PKT_SIZE 64 #define MIN_PKT_SIZE 64
...@@ -63,6 +64,7 @@ enum TEST_TYPES { ...@@ -63,6 +64,7 @@ enum TEST_TYPES {
TEST_TYPE_TEARDOWN, TEST_TYPE_TEARDOWN,
TEST_TYPE_BIDI, TEST_TYPE_BIDI,
TEST_TYPE_STATS, TEST_TYPE_STATS,
TEST_TYPE_BPF_RES,
TEST_TYPE_MAX TEST_TYPE_MAX
}; };
...@@ -77,10 +79,9 @@ enum STAT_TEST_TYPES { ...@@ -77,10 +79,9 @@ enum STAT_TEST_TYPES {
static int configured_mode = TEST_MODE_UNCONFIGURED; static int configured_mode = TEST_MODE_UNCONFIGURED;
static u8 debug_pkt_dump; static u8 debug_pkt_dump;
static u32 num_frames; static u32 num_frames;
static u8 bidi_pass; static bool second_step;
static int test_type; static int test_type;
static int opt_queue;
static int opt_pkt_count; static int opt_pkt_count;
static u8 opt_verbose; static u8 opt_verbose;
...@@ -128,6 +129,8 @@ struct ifobject { ...@@ -128,6 +129,8 @@ struct ifobject {
char ifname[MAX_INTERFACE_NAME_CHARS]; char ifname[MAX_INTERFACE_NAME_CHARS];
char nsname[MAX_INTERFACES_NAMESPACE_CHARS]; char nsname[MAX_INTERFACES_NAMESPACE_CHARS];
struct xsk_socket_info *xsk; struct xsk_socket_info *xsk;
struct xsk_socket_info **xsk_arr;
struct xsk_umem_info **umem_arr;
struct xsk_umem_info *umem; struct xsk_umem_info *umem;
void *(*func_ptr)(void *arg); void *(*func_ptr)(void *arg);
struct flow_vector fv; struct flow_vector fv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment