• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1TX_RING support for TPACKET_V3 was added in this commit:
2
3commit 7f953ab2ba46e8649537942c0a64668ca2ce5cc5
4Author: Sowmini Varadhan <sowmini.varadhan@oracle.com>
5Date:   Tue Jan 3 06:31:47 2017 -0800
6
7    af_packet: TX_RING support for TPACKET_V3
8
9which first appeared in 4.11. Do not attempt to test TX_RING
10support for TPACKET_V3 on kernels earlier than this.
11
12diff --git a/tools/testing/selftests/net/psock_tpacket.c b/tools/testing/selftests/net/psock_tpacket.c
13index e795a41c4771..c50375f51b2e 100644
14--- a/tools/testing/selftests/net/psock_tpacket.c
15+++ b/tools/testing/selftests/net/psock_tpacket.c
16@@ -42,6 +42,7 @@
17 #include <sys/stat.h>
18 #include <sys/socket.h>
19 #include <sys/mman.h>
20+#include <sys/utsname.h>
21 #include <linux/if_packet.h>
22 #include <linux/filter.h>
23 #include <ctype.h>
24@@ -844,9 +845,34 @@ static int test_tpacket(int version, int type)
25 	return 0;
26 }
27
28+void get_kernel_version(int *version, int *patchlevel)
29+{
30+	int ret, sublevel;
31+	struct utsname utsname;
32+
33+	ret = uname(&utsname);
34+	if (ret) {
35+		perror("uname");
36+		exit(1);
37+	}
38+
39+	ret = sscanf(utsname.release, "%d.%d.%d", version, patchlevel,
40+		     &sublevel);
41+	if (ret < 0) {
42+		perror("sscanf");
43+		exit(1);
44+	} else if (ret != 3) {
45+		printf("Malformed kernel version %s\n", &utsname.release);
46+		exit(1);
47+	}
48+}
49+
50 int main(void)
51 {
52 	int ret = 0;
53+	int version, patchlevel;
54+
55+	get_kernel_version(&version, &patchlevel);
56
57 	ret |= test_tpacket(TPACKET_V1, PACKET_RX_RING);
58 	ret |= test_tpacket(TPACKET_V1, PACKET_TX_RING);
59@@ -855,7 +881,8 @@ int main(void)
60 	ret |= test_tpacket(TPACKET_V2, PACKET_TX_RING);
61
62 	ret |= test_tpacket(TPACKET_V3, PACKET_RX_RING);
63-	ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING);
64+	if (version > 4 || (version == 4 && patchlevel >= 11))
65+		ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING);
66
67 	if (ret)
68 		return 1;
69