selftests/xsk: Read current MAX_SKB_FRAGS from sysctl knob
Currently, xskxceiver assumes that MAX_SKB_FRAGS value is always 17 which is not true - since the introduction of BIG TCP this can now take any value between 17 to 45 via CONFIG_MAX_SKB_FRAGS. Adjust the TOO_MANY_FRAGS test case to read the currently configured MAX_SKB_FRAGS value by reading it from /proc/sys/net/core/max_skb_frags. If running system does not provide that sysctl file then let us try running the test with a default value. Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Magnus Karlsson <magnus.karlsson@intel.com> Link: https://lore.kernel.org/bpf/20240910124129.289874-1-maciej.fijalkowski@intel.com
This commit is contained in:
parent
6b083650a3
commit
d41905b3bb
@ -324,6 +324,25 @@ out:
|
|||||||
return zc_avail;
|
return zc_avail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MAX_SKB_FRAGS_PATH "/proc/sys/net/core/max_skb_frags"
|
||||||
|
static unsigned int get_max_skb_frags(void)
|
||||||
|
{
|
||||||
|
unsigned int max_skb_frags = 0;
|
||||||
|
FILE *file;
|
||||||
|
|
||||||
|
file = fopen(MAX_SKB_FRAGS_PATH, "r");
|
||||||
|
if (!file) {
|
||||||
|
ksft_print_msg("Error opening %s\n", MAX_SKB_FRAGS_PATH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fscanf(file, "%u", &max_skb_frags) != 1)
|
||||||
|
ksft_print_msg("Error reading %s\n", MAX_SKB_FRAGS_PATH);
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
return max_skb_frags;
|
||||||
|
}
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"interface", required_argument, 0, 'i'},
|
{"interface", required_argument, 0, 'i'},
|
||||||
{"busy-poll", no_argument, 0, 'b'},
|
{"busy-poll", no_argument, 0, 'b'},
|
||||||
@ -2244,13 +2263,24 @@ static int testapp_poll_rxq_tmout(struct test_spec *test)
|
|||||||
|
|
||||||
static int testapp_too_many_frags(struct test_spec *test)
|
static int testapp_too_many_frags(struct test_spec *test)
|
||||||
{
|
{
|
||||||
struct pkt pkts[2 * XSK_DESC__MAX_SKB_FRAGS + 2] = {};
|
struct pkt *pkts;
|
||||||
u32 max_frags, i;
|
u32 max_frags, i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (test->mode == TEST_MODE_ZC)
|
if (test->mode == TEST_MODE_ZC) {
|
||||||
max_frags = test->ifobj_tx->xdp_zc_max_segs;
|
max_frags = test->ifobj_tx->xdp_zc_max_segs;
|
||||||
else
|
} else {
|
||||||
max_frags = XSK_DESC__MAX_SKB_FRAGS;
|
max_frags = get_max_skb_frags();
|
||||||
|
if (!max_frags) {
|
||||||
|
ksft_print_msg("Couldn't retrieve MAX_SKB_FRAGS from system, using default (17) value\n");
|
||||||
|
max_frags = 17;
|
||||||
|
}
|
||||||
|
max_frags += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pkts = calloc(2 * max_frags + 2, sizeof(struct pkt));
|
||||||
|
if (!pkts)
|
||||||
|
return TEST_FAILURE;
|
||||||
|
|
||||||
test->mtu = MAX_ETH_JUMBO_SIZE;
|
test->mtu = MAX_ETH_JUMBO_SIZE;
|
||||||
|
|
||||||
@ -2280,7 +2310,10 @@ static int testapp_too_many_frags(struct test_spec *test)
|
|||||||
pkts[2 * max_frags + 1].valid = true;
|
pkts[2 * max_frags + 1].valid = true;
|
||||||
|
|
||||||
pkt_stream_generate_custom(test, pkts, 2 * max_frags + 2);
|
pkt_stream_generate_custom(test, pkts, 2 * max_frags + 2);
|
||||||
return testapp_validate_traffic(test);
|
ret = testapp_validate_traffic(test);
|
||||||
|
|
||||||
|
free(pkts);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xsk_load_xdp_programs(struct ifobject *ifobj)
|
static int xsk_load_xdp_programs(struct ifobject *ifobj)
|
||||||
|
@ -55,7 +55,6 @@
|
|||||||
#define XSK_UMEM__LARGE_FRAME_SIZE (3 * 1024)
|
#define XSK_UMEM__LARGE_FRAME_SIZE (3 * 1024)
|
||||||
#define XSK_UMEM__MAX_FRAME_SIZE (4 * 1024)
|
#define XSK_UMEM__MAX_FRAME_SIZE (4 * 1024)
|
||||||
#define XSK_DESC__INVALID_OPTION (0xffff)
|
#define XSK_DESC__INVALID_OPTION (0xffff)
|
||||||
#define XSK_DESC__MAX_SKB_FRAGS 18
|
|
||||||
#define HUGEPAGE_SIZE (2 * 1024 * 1024)
|
#define HUGEPAGE_SIZE (2 * 1024 * 1024)
|
||||||
#define PKT_DUMP_NB_TO_PRINT 16
|
#define PKT_DUMP_NB_TO_PRINT 16
|
||||||
#define RUN_ALL_TESTS UINT_MAX
|
#define RUN_ALL_TESTS UINT_MAX
|
||||||
|
Loading…
Reference in New Issue
Block a user