All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Magnus Karlsson <magnus.karlsson@gmail.com>
Cc: <magnus.karlsson@intel.com>, <bjorn@kernel.org>, <ast@kernel.org>,
	<daniel@iogearbox.net>, <netdev@vger.kernel.org>,
	<bpf@vger.kernel.org>, <yhs@fb.com>, <andrii@kernel.org>,
	<martin.lau@linux.dev>, <song@kernel.org>,
	<john.fastabend@gmail.com>, <kpsingh@kernel.org>,
	<sdf@google.com>, <haoluo@google.com>, <jolsa@kernel.org>
Subject: Re: [PATCH bpf-next 05/10] selftests/xsk: declare test names in struct
Date: Tue, 22 Aug 2023 14:28:34 +0200	[thread overview]
Message-ID: <ZOSp8sbkrN5TOLN2@boxer> (raw)
In-Reply-To: <20230809124343.12957-6-magnus.karlsson@gmail.com>

On Wed, Aug 09, 2023 at 02:43:38PM +0200, Magnus Karlsson wrote:
> From: Magnus Karlsson <magnus.karlsson@intel.com>
> 
> Declare the test names statically in a struct so that we can refer to
> them when adding the support to execute a single test in the next
> commit. Before this pathc, the names of them was not declared in a

s/was/were

pathc was caught by Przemek

> single place which made it not possible to refer to them.
> 
> Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
> ---
>  tools/testing/selftests/bpf/xskxceiver.c | 191 +++++++----------------
>  tools/testing/selftests/bpf/xskxceiver.h |  37 +----
>  2 files changed, 57 insertions(+), 171 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c
> index ee72bb0a8978..b1d0c69f21b8 100644
> --- a/tools/testing/selftests/bpf/xskxceiver.c
> +++ b/tools/testing/selftests/bpf/xskxceiver.c
> @@ -447,7 +447,8 @@ static void __test_spec_init(struct test_spec *test, struct ifobject *ifobj_tx,
>  }
>  
>  static void test_spec_init(struct test_spec *test, struct ifobject *ifobj_tx,
> -			   struct ifobject *ifobj_rx, enum test_mode mode)
> +			   struct ifobject *ifobj_rx, enum test_mode mode,
> +			   const struct test_spec *test_to_run)
>  {
>  	struct pkt_stream *tx_pkt_stream;
>  	struct pkt_stream *rx_pkt_stream;
> @@ -469,6 +470,8 @@ static void test_spec_init(struct test_spec *test, struct ifobject *ifobj_tx,
>  			ifobj->bind_flags |= XDP_COPY;
>  	}
>  
> +	strncpy(test->name, test_to_run->name, MAX_TEST_NAME_SIZE);
> +	test->test_func = test_to_run->test_func;
>  	test->mode = mode;
>  	__test_spec_init(test, ifobj_tx, ifobj_rx);
>  }
> @@ -478,11 +481,6 @@ static void test_spec_reset(struct test_spec *test)
>  	__test_spec_init(test, test->ifobj_tx, test->ifobj_rx);
>  }
>  
> -static void test_spec_set_name(struct test_spec *test, const char *name)
> -{
> -	strncpy(test->name, name, MAX_TEST_NAME_SIZE);
> -}
> -
>  static void test_spec_set_xdp_prog(struct test_spec *test, struct bpf_program *xdp_prog_rx,
>  				   struct bpf_program *xdp_prog_tx, struct bpf_map *xskmap_rx,
>  				   struct bpf_map *xskmap_tx)
> @@ -1727,7 +1725,6 @@ static int testapp_teardown(struct test_spec *test)
>  {
>  	int i;
>  
> -	test_spec_set_name(test, "TEARDOWN");
>  	for (i = 0; i < MAX_TEARDOWN_ITER; i++) {
>  		if (testapp_validate_traffic(test))
>  			return TEST_FAILURE;
> @@ -1749,11 +1746,10 @@ static void swap_directions(struct ifobject **ifobj1, struct ifobject **ifobj2)
>  	*ifobj2 = tmp_ifobj;
>  }
>  
> -static int testapp_bidi(struct test_spec *test)
> +static int testapp_bidirectional(struct test_spec *test)
>  {
>  	int res;
>  
> -	test_spec_set_name(test, "BIDIRECTIONAL");
>  	test->ifobj_tx->rx_on = true;
>  	test->ifobj_rx->tx_on = true;
>  	test->total_steps = 2;
> @@ -1782,9 +1778,8 @@ static void swap_xsk_resources(struct ifobject *ifobj_tx, struct ifobject *ifobj
>  		exit_with_error(errno);
>  }
>  
> -static int testapp_bpf_res(struct test_spec *test)
> +static int testapp_xdp_prog_cleanup(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "BPF_RES");
>  	test->total_steps = 2;
>  	test->nb_sockets = 2;
>  	if (testapp_validate_traffic(test))
> @@ -1796,14 +1791,12 @@ static int testapp_bpf_res(struct test_spec *test)
>  
>  static int testapp_headroom(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "UMEM_HEADROOM");
>  	test->ifobj_rx->umem->frame_headroom = UMEM_HEADROOM_TEST_SIZE;
>  	return testapp_validate_traffic(test);
>  }
>  
>  static int testapp_stats_rx_dropped(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "STAT_RX_DROPPED");
>  	if (test->mode == TEST_MODE_ZC) {
>  		ksft_test_result_skip("Can not run RX_DROPPED test for ZC mode\n");
>  		return TEST_SKIP;
> @@ -1819,7 +1812,6 @@ static int testapp_stats_rx_dropped(struct test_spec *test)
>  
>  static int testapp_stats_tx_invalid_descs(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "STAT_TX_INVALID");
>  	pkt_stream_replace_half(test, XSK_UMEM__INVALID_FRAME_SIZE, 0);
>  	test->ifobj_tx->validation_func = validate_tx_invalid_descs;
>  	return testapp_validate_traffic(test);
> @@ -1827,7 +1819,6 @@ static int testapp_stats_tx_invalid_descs(struct test_spec *test)
>  
>  static int testapp_stats_rx_full(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "STAT_RX_FULL");
>  	pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2, MIN_PKT_SIZE);
>  	test->ifobj_rx->pkt_stream = pkt_stream_generate(test->ifobj_rx->umem,
>  							 DEFAULT_UMEM_BUFFERS, MIN_PKT_SIZE);
> @@ -1840,7 +1831,6 @@ static int testapp_stats_rx_full(struct test_spec *test)
>  
>  static int testapp_stats_fill_empty(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "STAT_RX_FILL_EMPTY");
>  	pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2, MIN_PKT_SIZE);
>  	test->ifobj_rx->pkt_stream = pkt_stream_generate(test->ifobj_rx->umem,
>  							 DEFAULT_UMEM_BUFFERS, MIN_PKT_SIZE);
> @@ -1850,9 +1840,8 @@ static int testapp_stats_fill_empty(struct test_spec *test)
>  	return testapp_validate_traffic(test);
>  }
>  
> -static int testapp_unaligned(struct test_spec *test)
> +static int testapp_send_receive_unaligned(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "UNALIGNED_MODE");
>  	test->ifobj_tx->umem->unaligned_mode = true;
>  	test->ifobj_rx->umem->unaligned_mode = true;
>  	/* Let half of the packets straddle a 4K buffer boundary */
> @@ -1861,9 +1850,8 @@ static int testapp_unaligned(struct test_spec *test)
>  	return testapp_validate_traffic(test);
>  }
>  
> -static int testapp_unaligned_mb(struct test_spec *test)
> +static int testapp_send_receive_unaligned_mb(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "UNALIGNED_MODE_9K");
>  	test->mtu = MAX_ETH_JUMBO_SIZE;
>  	test->ifobj_tx->umem->unaligned_mode = true;
>  	test->ifobj_rx->umem->unaligned_mode = true;
> @@ -1875,14 +1863,12 @@ static int testapp_single_pkt(struct test_spec *test)
>  {
>  	struct pkt pkts[] = {{0, MIN_PKT_SIZE, 0, true}};
>  
> -	test_spec_set_name(test, "SEND_RECEIVE_SINGLE_PKT");
>  	pkt_stream_generate_custom(test, pkts, ARRAY_SIZE(pkts));
>  	return testapp_validate_traffic(test);
>  }
>  
> -static int testapp_multi_buffer(struct test_spec *test)
> +static int testapp_send_receive_mb(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "SEND_RECEIVE_9K_PACKETS");
>  	test->mtu = MAX_ETH_JUMBO_SIZE;
>  	pkt_stream_replace(test, DEFAULT_PKT_CNT, MAX_ETH_JUMBO_SIZE);
>  
> @@ -1979,7 +1965,6 @@ static int testapp_xdp_drop(struct test_spec *test)
>  	struct xsk_xdp_progs *skel_rx = test->ifobj_rx->xdp_progs;
>  	struct xsk_xdp_progs *skel_tx = test->ifobj_tx->xdp_progs;
>  
> -	test_spec_set_name(test, "XDP_DROP_HALF");
>  	test_spec_set_xdp_prog(test, skel_rx->progs.xsk_xdp_drop, skel_tx->progs.xsk_xdp_drop,
>  			       skel_rx->maps.xsk, skel_tx->maps.xsk);
>  
> @@ -2012,8 +1997,6 @@ static int testapp_xdp_metadata_copy(struct test_spec *test)
>  
>  static int testapp_poll_txq_tmout(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "POLL_TXQ_FULL");
> -
>  	test->ifobj_tx->use_poll = true;
>  	/* create invalid frame by set umem frame_size and pkt length equal to 2048 */
>  	test->ifobj_tx->umem->frame_size = 2048;
> @@ -2023,7 +2006,6 @@ static int testapp_poll_txq_tmout(struct test_spec *test)
>  
>  static int testapp_poll_rxq_tmout(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "POLL_RXQ_EMPTY");
>  	test->ifobj_rx->use_poll = true;
>  	return testapp_validate_traffic_single_thread(test, test->ifobj_rx);
>  }
> @@ -2033,7 +2015,6 @@ static int testapp_too_many_frags(struct test_spec *test)
>  	struct pkt pkts[2 * XSK_DESC__MAX_SKB_FRAGS + 2] = {};
>  	u32 max_frags, i;
>  
> -	test_spec_set_name(test, "TOO_MANY_FRAGS");
>  	if (test->mode == TEST_MODE_ZC)
>  		max_frags = test->ifobj_tx->xdp_zc_max_segs;
>  	else
> @@ -2139,13 +2120,11 @@ static void init_iface(struct ifobject *ifobj, const char *dst_mac, const char *
>  
>  static int testapp_send_receive(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "SEND_RECEIVE");
>  	return testapp_validate_traffic(test);
>  }
>  
>  static int testapp_send_receive_2k_frame(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "SEND_RECEIVE_2K_FRAME_SIZE");
>  	test->ifobj_tx->umem->frame_size = 2048;
>  	test->ifobj_rx->umem->frame_size = 2048;
>  	pkt_stream_replace(test, DEFAULT_PKT_CNT, MIN_PKT_SIZE);
> @@ -2155,26 +2134,22 @@ static int testapp_send_receive_2k_frame(struct test_spec *test)
>  static int testapp_poll_rx(struct test_spec *test)
>  {
>  	test->ifobj_rx->use_poll = true;
> -	test_spec_set_name(test, "POLL_RX");
>  	return testapp_validate_traffic(test);
>  }
>  
>  static int testapp_poll_tx(struct test_spec *test)
>  {
>  	test->ifobj_tx->use_poll = true;
> -	test_spec_set_name(test, "POLL_TX");
>  	return testapp_validate_traffic(test);
>  }
>  
>  static int testapp_aligned_inv_desc(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "ALIGNED_INV_DESC");
>  	return testapp_invalid_desc(test);
>  }
>  
>  static int testapp_aligned_inv_desc_2k_frame(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "ALIGNED_INV_DESC_2K_FRAME_SIZE");
>  	test->ifobj_tx->umem->frame_size = 2048;
>  	test->ifobj_rx->umem->frame_size = 2048;
>  	return testapp_invalid_desc(test);
> @@ -2182,7 +2157,6 @@ static int testapp_aligned_inv_desc_2k_frame(struct test_spec *test)
>  
>  static int testapp_unaligned_inv_desc(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "UNALIGNED_INV_DESC");
>  	test->ifobj_tx->umem->unaligned_mode = true;
>  	test->ifobj_rx->umem->unaligned_mode = true;
>  	return testapp_invalid_desc(test);
> @@ -2192,7 +2166,6 @@ static int testapp_unaligned_inv_desc_4001_frame(struct test_spec *test)
>  {
>  	u64 page_size, umem_size;
>  
> -	test_spec_set_name(test, "UNALIGNED_INV_DESC_4K1_FRAME_SIZE");
>  	/* Odd frame size so the UMEM doesn't end near a page boundary. */
>  	test->ifobj_tx->umem->frame_size = 4001;
>  	test->ifobj_rx->umem->frame_size = 4001;
> @@ -2211,13 +2184,11 @@ static int testapp_unaligned_inv_desc_4001_frame(struct test_spec *test)
>  
>  static int testapp_aligned_inv_desc_mb(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "ALIGNED_INV_DESC_MULTI_BUFF");
>  	return testapp_invalid_desc_mb(test);
>  }
>  
>  static int testapp_unaligned_inv_desc_mb(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "UNALIGNED_INV_DESC_MULTI_BUFF");
>  	test->ifobj_tx->umem->unaligned_mode = true;
>  	test->ifobj_rx->umem->unaligned_mode = true;
>  	return testapp_invalid_desc_mb(test);
> @@ -2225,109 +2196,20 @@ static int testapp_unaligned_inv_desc_mb(struct test_spec *test)
>  
>  static int testapp_xdp_metadata(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "XDP_METADATA_COPY");
>  	return testapp_xdp_metadata_copy(test);
>  }
>  
>  static int testapp_xdp_metadata_mb(struct test_spec *test)
>  {
> -	test_spec_set_name(test, "XDP_METADATA_COPY_MULTI_BUFF");
>  	test->mtu = MAX_ETH_JUMBO_SIZE;
>  	return testapp_xdp_metadata_copy(test);
>  }
>  
> -static void run_pkt_test(struct test_spec *test, enum test_mode mode, enum test_type type)
> -{
> -	int ret = TEST_SKIP;
> -
> -	switch (type) {
> -	case TEST_TYPE_STATS_RX_DROPPED:
> -		ret = testapp_stats_rx_dropped(test);
> -		break;
> -	case TEST_TYPE_STATS_TX_INVALID_DESCS:
> -		ret = testapp_stats_tx_invalid_descs(test);
> -		break;
> -	case TEST_TYPE_STATS_RX_FULL:
> -		ret = testapp_stats_rx_full(test);
> -		break;
> -	case TEST_TYPE_STATS_FILL_EMPTY:
> -		ret = testapp_stats_fill_empty(test);
> -		break;
> -	case TEST_TYPE_TEARDOWN:
> -		ret = testapp_teardown(test);
> -		break;
> -	case TEST_TYPE_BIDI:
> -		ret = testapp_bidi(test);
> -		break;
> -	case TEST_TYPE_BPF_RES:
> -		ret = testapp_bpf_res(test);
> -		break;
> -	case TEST_TYPE_RUN_TO_COMPLETION:
> -		ret = testapp_send_receive(test);
> -		break;
> -	case TEST_TYPE_RUN_TO_COMPLETION_MB:
> -		ret = testapp_multi_buffer(test);
> -		break;
> -	case TEST_TYPE_RUN_TO_COMPLETION_SINGLE_PKT:
> -		ret = testapp_single_pkt(test);
> -		break;
> -	case TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME:
> -		ret = testapp_send_receive_2k_frame(test);
> -		break;
> -	case TEST_TYPE_RX_POLL:
> -		ret = testapp_poll_rx(test);
> -		break;
> -	case TEST_TYPE_TX_POLL:
> -		ret = testapp_poll_tx(test);
> -		break;
> -	case TEST_TYPE_POLL_TXQ_TMOUT:
> -		ret = testapp_poll_txq_tmout(test);
> -		break;
> -	case TEST_TYPE_POLL_RXQ_TMOUT:
> -		ret = testapp_poll_rxq_tmout(test);
> -		break;
> -	case TEST_TYPE_ALIGNED_INV_DESC:
> -		ret = testapp_aligned_inv_desc(test);
> -		break;
> -	case TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME:
> -		ret = testapp_aligned_inv_desc_2k_frame(test);
> -		break;
> -	case TEST_TYPE_UNALIGNED_INV_DESC:
> -		ret = testapp_unaligned_inv_desc(test);
> -		break;
> -	case TEST_TYPE_UNALIGNED_INV_DESC_4K1_FRAME:
> -		ret = testapp_unaligned_inv_desc_4001_frame(test);
> -		break;
> -	case TEST_TYPE_ALIGNED_INV_DESC_MB:
> -		ret = testapp_aligned_inv_desc_mb(test);
> -		break;
> -	case TEST_TYPE_UNALIGNED_INV_DESC_MB:
> -		ret = testapp_unaligned_inv_desc_mb(test);
> -		break;
> -	case TEST_TYPE_UNALIGNED:
> -		ret = testapp_unaligned(test);
> -		break;
> -	case TEST_TYPE_UNALIGNED_MB:
> -		ret = testapp_unaligned_mb(test);
> -		break;
> -	case TEST_TYPE_HEADROOM:
> -		ret = testapp_headroom(test);
> -		break;
> -	case TEST_TYPE_XDP_DROP_HALF:
> -		ret = testapp_xdp_drop(test);
> -		break;
> -	case TEST_TYPE_XDP_METADATA_COUNT:
> -		ret = testapp_xdp_metadata(test);
> -		break;
> -	case TEST_TYPE_XDP_METADATA_COUNT_MB:
> -		ret = testapp_xdp_metadata_mb(test);
> -		break;
> -	case TEST_TYPE_TOO_MANY_FRAGS:
> -		ret = testapp_too_many_frags(test);
> -		break;
> -	default:
> -		break;
> -	}
> +static void run_pkt_test(struct test_spec *test)
> +{
> +	int ret;
> +
> +	ret = test->test_func(test);
>  
>  	if (ret == TEST_PASS)
>  		ksft_test_result_pass("PASS: %s %s%s\n", mode_string(test), busy_poll_string(test),
> @@ -2395,6 +2277,39 @@ static bool is_xdp_supported(int ifindex)
>  	return true;
>  }
>  
> +static const struct test_spec tests[] = {
> +	{.name = "SEND_RECEIVE", .test_func = testapp_send_receive},
> +	{.name = "SEND_RECEIVE_2K_FRAME", .test_func = testapp_send_receive_2k_frame},
> +	{.name = "SEND_RECEIVE_SINGLE_PKT", .test_func = testapp_single_pkt},
> +	{.name = "POLL_RX", .test_func = testapp_poll_rx},
> +	{.name = "POLL_TX", .test_func = testapp_poll_tx},
> +	{.name = "POLL_RXQ_FULL", .test_func = testapp_poll_rxq_tmout},
> +	{.name = "POLL_TXQ_FULL", .test_func = testapp_poll_txq_tmout},
> +	{.name = "SEND_RECEIVE_UNALIGNED", .test_func = testapp_send_receive_unaligned},
> +	{.name = "ALIGNED_INV_DESC", .test_func = testapp_aligned_inv_desc},
> +	{.name = "ALIGNED_INV_DESC_2K_FRAME_SIZE", .test_func = testapp_aligned_inv_desc_2k_frame},
> +	{.name = "UNALIGNED_INV_DESC", .test_func = testapp_unaligned_inv_desc},
> +	{.name = "UNALIGNED_INV_DESC_4001_FRAME_SIZE",
> +	 .test_func = testapp_unaligned_inv_desc_4001_frame},
> +	{.name = "UMEM_HEADROOM", .test_func = testapp_headroom},
> +	{.name = "TEARDOWN", .test_func = testapp_teardown},
> +	{.name = "BIDIRECTIONAL", .test_func = testapp_bidirectional},
> +	{.name = "STAT_RX_DROPPED", .test_func = testapp_stats_rx_dropped},
> +	{.name = "STAT_TX_INVALID", .test_func = testapp_stats_tx_invalid_descs},
> +	{.name = "STAT_RX_FULL", .test_func = testapp_stats_rx_full},
> +	{.name = "STAT_FILL_EMPTY", .test_func = testapp_stats_fill_empty},
> +	{.name = "XDP_PROG_CLEANUP", .test_func = testapp_xdp_prog_cleanup},
> +	{.name = "XDP_DROP_HALF", .test_func = testapp_xdp_drop},
> +	{.name = "XDP_METADATA_COPY", .test_func = testapp_xdp_metadata},
> +	{.name = "XDP_METADATA_COPY_MULTI_BUFF", .test_func = testapp_xdp_metadata_mb},
> +	{.name = "SEND_RECEIVE_9K_PACKETS", .test_func = testapp_send_receive_mb},
> +	{.name = "SEND_RECEIVE_UNALIGNED_9K_PACKETS",
> +	 .test_func = testapp_send_receive_unaligned_mb},
> +	{.name = "ALIGNED_INV_DESC_MULTI_BUFF", .test_func = testapp_aligned_inv_desc_mb},
> +	{.name = "UNALIGNED_INV_DESC_MULTI_BUFF", .test_func = testapp_unaligned_inv_desc_mb},
> +	{.name = "TOO_MANY_FRAGS", .test_func = testapp_too_many_frags},
> +};

can you move this to a header file? looks weird to have these declarations
in the middle of the file.

> +
>  int main(int argc, char **argv)
>  {
>  	struct pkt_stream *rx_pkt_stream_default;
> @@ -2437,7 +2352,7 @@ int main(int argc, char **argv)
>  	init_iface(ifobj_rx, MAC1, MAC2, worker_testapp_validate_rx);
>  	init_iface(ifobj_tx, MAC2, MAC1, worker_testapp_validate_tx);
>  
> -	test_spec_init(&test, ifobj_tx, ifobj_rx, 0);
> +	test_spec_init(&test, ifobj_tx, ifobj_rx, 0, &tests[0]);
>  	tx_pkt_stream_default = pkt_stream_generate(ifobj_tx->umem, DEFAULT_PKT_CNT, MIN_PKT_SIZE);
>  	rx_pkt_stream_default = pkt_stream_generate(ifobj_rx->umem, DEFAULT_PKT_CNT, MIN_PKT_SIZE);
>  	if (!tx_pkt_stream_default || !rx_pkt_stream_default)
> @@ -2446,17 +2361,17 @@ int main(int argc, char **argv)
>  	test.rx_pkt_stream_default = rx_pkt_stream_default;
>  
>  	if (opt_mode == TEST_MODE_ALL)
> -		ksft_set_plan(modes * TEST_TYPE_MAX);
> +		ksft_set_plan(modes * ARRAY_SIZE(tests));
>  	else
> -		ksft_set_plan(TEST_TYPE_MAX);
> +		ksft_set_plan(ARRAY_SIZE(tests));
>  
>  	for (i = 0; i < modes; i++) {
>  		if (opt_mode != TEST_MODE_ALL && i != opt_mode)
>  			continue;
>  
> -		for (j = 0; j < TEST_TYPE_MAX; j++) {
> -			test_spec_init(&test, ifobj_tx, ifobj_rx, i);
> -			run_pkt_test(&test, i, j);
> +		for (j = 0; j < ARRAY_SIZE(tests); j++) {
> +			test_spec_init(&test, ifobj_tx, ifobj_rx, i, &tests[j]);
> +			run_pkt_test(&test);
>  			usleep(USLEEP_MAX);
>  
>  			if (test.fail)
> diff --git a/tools/testing/selftests/bpf/xskxceiver.h b/tools/testing/selftests/bpf/xskxceiver.h
> index 1412492e9618..3a71d490db3e 100644
> --- a/tools/testing/selftests/bpf/xskxceiver.h
> +++ b/tools/testing/selftests/bpf/xskxceiver.h
> @@ -34,7 +34,7 @@
>  #define MAX_INTERFACES 2
>  #define MAX_INTERFACE_NAME_CHARS 16
>  #define MAX_SOCKETS 2
> -#define MAX_TEST_NAME_SIZE 32
> +#define MAX_TEST_NAME_SIZE 48
>  #define MAX_TEARDOWN_ITER 10
>  #define PKT_HDR_SIZE (sizeof(struct ethhdr) + 2) /* Just to align the data in the packet */
>  #define MIN_PKT_SIZE 64
> @@ -66,38 +66,6 @@ enum test_mode {
>  	TEST_MODE_ALL
>  };
>  
> -enum test_type {
> -	TEST_TYPE_RUN_TO_COMPLETION,
> -	TEST_TYPE_RUN_TO_COMPLETION_2K_FRAME,
> -	TEST_TYPE_RUN_TO_COMPLETION_SINGLE_PKT,
> -	TEST_TYPE_RX_POLL,
> -	TEST_TYPE_TX_POLL,
> -	TEST_TYPE_POLL_RXQ_TMOUT,
> -	TEST_TYPE_POLL_TXQ_TMOUT,
> -	TEST_TYPE_UNALIGNED,
> -	TEST_TYPE_ALIGNED_INV_DESC,
> -	TEST_TYPE_ALIGNED_INV_DESC_2K_FRAME,
> -	TEST_TYPE_UNALIGNED_INV_DESC,
> -	TEST_TYPE_UNALIGNED_INV_DESC_4K1_FRAME,
> -	TEST_TYPE_HEADROOM,
> -	TEST_TYPE_TEARDOWN,
> -	TEST_TYPE_BIDI,
> -	TEST_TYPE_STATS_RX_DROPPED,
> -	TEST_TYPE_STATS_TX_INVALID_DESCS,
> -	TEST_TYPE_STATS_RX_FULL,
> -	TEST_TYPE_STATS_FILL_EMPTY,
> -	TEST_TYPE_BPF_RES,
> -	TEST_TYPE_XDP_DROP_HALF,
> -	TEST_TYPE_XDP_METADATA_COUNT,
> -	TEST_TYPE_XDP_METADATA_COUNT_MB,
> -	TEST_TYPE_RUN_TO_COMPLETION_MB,
> -	TEST_TYPE_UNALIGNED_MB,
> -	TEST_TYPE_ALIGNED_INV_DESC_MB,
> -	TEST_TYPE_UNALIGNED_INV_DESC_MB,
> -	TEST_TYPE_TOO_MANY_FRAGS,
> -	TEST_TYPE_MAX
> -};
> -
>  struct xsk_umem_info {
>  	struct xsk_ring_prod fq;
>  	struct xsk_ring_cons cq;
> @@ -137,8 +105,10 @@ struct pkt_stream {
>  };
>  
>  struct ifobject;
> +struct test_spec;
>  typedef int (*validation_func_t)(struct ifobject *ifobj);
>  typedef void *(*thread_func_t)(void *arg);
> +typedef int (*test_func_t)(struct test_spec *test);
>  
>  struct ifobject {
>  	char ifname[MAX_INTERFACE_NAME_CHARS];
> @@ -180,6 +150,7 @@ struct test_spec {
>  	struct bpf_program *xdp_prog_tx;
>  	struct bpf_map *xskmap_rx;
>  	struct bpf_map *xskmap_tx;
> +	test_func_t test_func;
>  	int mtu;
>  	u16 total_steps;
>  	u16 current_step;
> -- 
> 2.34.1
> 

  parent reply	other threads:[~2023-08-22 12:28 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-09 12:43 [PATCH bpf-next 00/10] seltests/xsk: various improvements to xskxceiver Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 01/10] selftests/xsk: print per packet info in verbose mode Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 02/10] selftests/xsk: add timeout for Tx thread Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 03/10] selftests/xsk: add option to only run tests in a single mode Magnus Karlsson
2023-08-10 12:14   ` Przemek Kitszel
2023-08-10 12:36     ` Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 04/10] selftests/xsk: move all tests to separate functions Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 05/10] selftests/xsk: declare test names in struct Magnus Karlsson
2023-08-10 12:15   ` Przemek Kitszel
2023-08-10 12:36     ` Magnus Karlsson
2023-08-22 12:28   ` Maciej Fijalkowski [this message]
2023-08-09 12:43 ` [PATCH bpf-next 06/10] selftests/xsk: add option that lists all tests Magnus Karlsson
2023-08-22 12:37   ` Maciej Fijalkowski
2023-08-22 13:52     ` Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 07/10] selftests/xsk: add option to run single test Magnus Karlsson
2023-08-22 12:50   ` Maciej Fijalkowski
2023-08-09 12:43 ` [PATCH bpf-next 08/10] selftests/xsk: use ksft_print_msg uniformly Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 09/10] selftests/xsk: fail single test instead of all tests Magnus Karlsson
2023-08-09 12:43 ` [PATCH bpf-next 10/10] selftests/xsk: display command line options with -h Magnus Karlsson
2023-08-10 12:19   ` Przemek Kitszel
2023-08-10 12:41     ` Magnus Karlsson
2023-08-22 13:02   ` Maciej Fijalkowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZOSp8sbkrN5TOLN2@boxer \
    --to=maciej.fijalkowski@intel.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=magnus.karlsson@gmail.com \
    --cc=magnus.karlsson@intel.com \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=sdf@google.com \
    --cc=song@kernel.org \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.