TX_RING support for TPACKET_V3 was added in this commit: commit 7f953ab2ba46e8649537942c0a64668ca2ce5cc5 Author: Sowmini Varadhan Date: Tue Jan 3 06:31:47 2017 -0800 af_packet: TX_RING support for TPACKET_V3 which first appeared in 4.11. Do not attempt to test TX_RING support for TPACKET_V3 on kernels earlier than this. diff --git a/tools/testing/selftests/net/psock_tpacket.c b/tools/testing/selftests/net/psock_tpacket.c index e795a41c4771..c50375f51b2e 100644 --- a/tools/testing/selftests/net/psock_tpacket.c +++ b/tools/testing/selftests/net/psock_tpacket.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -844,9 +845,34 @@ static int test_tpacket(int version, int type) return 0; } +void get_kernel_version(int *version, int *patchlevel) +{ + int ret, sublevel; + struct utsname utsname; + + ret = uname(&utsname); + if (ret) { + perror("uname"); + exit(1); + } + + ret = sscanf(utsname.release, "%d.%d.%d", version, patchlevel, + &sublevel); + if (ret < 0) { + perror("sscanf"); + exit(1); + } else if (ret != 3) { + printf("Malformed kernel version %s\n", &utsname.release); + exit(1); + } +} + int main(void) { int ret = 0; + int version, patchlevel; + + get_kernel_version(&version, &patchlevel); ret |= test_tpacket(TPACKET_V1, PACKET_RX_RING); ret |= test_tpacket(TPACKET_V1, PACKET_TX_RING); @@ -855,7 +881,8 @@ int main(void) ret |= test_tpacket(TPACKET_V2, PACKET_TX_RING); ret |= test_tpacket(TPACKET_V3, PACKET_RX_RING); - ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING); + if (version > 4 || (version == 4 && patchlevel >= 11)) + ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING); if (ret) return 1;