xref: /aosp_15_r20/external/linux-kselftest/android/patches/0005-psock_tpacket-version-check.patch (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard WorkerFrom fbf1bad8fe8fc8a779668287abfe48af20359350 Mon Sep 17 00:00:00 2001
2*053f45beSAndroid Build Coastguard WorkerFrom: Edward Liaw <[email protected]>
3*053f45beSAndroid Build Coastguard WorkerDate: Tue, 19 Apr 2022 22:54:43 +0000
4*053f45beSAndroid Build Coastguard WorkerSubject: [PATCH 05/20] psock_tpacket: version check
5*053f45beSAndroid Build Coastguard Worker
6*053f45beSAndroid Build Coastguard WorkerTX_RING support for TPACKET_V3 was added in this commit:
7*053f45beSAndroid Build Coastguard Worker
8*053f45beSAndroid Build Coastguard Workercommit 7f953ab2ba46e8649537942c0a64668ca2ce5cc5
9*053f45beSAndroid Build Coastguard WorkerAuthor: Sowmini Varadhan <[email protected]>
10*053f45beSAndroid Build Coastguard WorkerDate:   Tue Jan 3 06:31:47 2017 -0800
11*053f45beSAndroid Build Coastguard Worker
12*053f45beSAndroid Build Coastguard Worker    af_packet: TX_RING support for TPACKET_V3
13*053f45beSAndroid Build Coastguard Worker
14*053f45beSAndroid Build Coastguard Workerwhich first appeared in 4.11. Do not attempt to test TX_RING
15*053f45beSAndroid Build Coastguard Workersupport for TPACKET_V3 on kernels earlier than this.
16*053f45beSAndroid Build Coastguard Worker
17*053f45beSAndroid Build Coastguard Worker(cherry picked from commit 1584e465aa445831fc93bcd64d560ab5b89cb55d)
18*053f45beSAndroid Build Coastguard Worker---
19*053f45beSAndroid Build Coastguard Worker tools/testing/selftests/net/psock_tpacket.c | 29 ++++++++++++++++++++-
20*053f45beSAndroid Build Coastguard Worker 1 file changed, 28 insertions(+), 1 deletion(-)
21*053f45beSAndroid Build Coastguard Worker
22*053f45beSAndroid Build Coastguard Workerdiff --git a/tools/testing/selftests/net/psock_tpacket.c b/tools/testing/selftests/net/psock_tpacket.c
23*053f45beSAndroid Build Coastguard Workerindex 4d5f317ab42c..9696c9e484d5 100644
24*053f45beSAndroid Build Coastguard Worker--- a/tools/testing/selftests/net/psock_tpacket.c
25*053f45beSAndroid Build Coastguard Worker+++ b/tools/testing/selftests/net/psock_tpacket.c
26*053f45beSAndroid Build Coastguard Worker@@ -28,6 +28,7 @@
27*053f45beSAndroid Build Coastguard Worker #include <sys/stat.h>
28*053f45beSAndroid Build Coastguard Worker #include <sys/socket.h>
29*053f45beSAndroid Build Coastguard Worker #include <sys/mman.h>
30*053f45beSAndroid Build Coastguard Worker+#include <sys/utsname.h>
31*053f45beSAndroid Build Coastguard Worker #include <linux/if_packet.h>
32*053f45beSAndroid Build Coastguard Worker #include <linux/filter.h>
33*053f45beSAndroid Build Coastguard Worker #include <ctype.h>
34*053f45beSAndroid Build Coastguard Worker@@ -832,9 +833,34 @@ static int test_tpacket(int version, int type)
35*053f45beSAndroid Build Coastguard Worker 	return 0;
36*053f45beSAndroid Build Coastguard Worker }
37*053f45beSAndroid Build Coastguard Worker
38*053f45beSAndroid Build Coastguard Worker+void get_kernel_version(int *version, int *patchlevel)
39*053f45beSAndroid Build Coastguard Worker+{
40*053f45beSAndroid Build Coastguard Worker+	int ret, sublevel;
41*053f45beSAndroid Build Coastguard Worker+	struct utsname utsname;
42*053f45beSAndroid Build Coastguard Worker+
43*053f45beSAndroid Build Coastguard Worker+	ret = uname(&utsname);
44*053f45beSAndroid Build Coastguard Worker+	if (ret) {
45*053f45beSAndroid Build Coastguard Worker+		perror("uname");
46*053f45beSAndroid Build Coastguard Worker+		exit(1);
47*053f45beSAndroid Build Coastguard Worker+	}
48*053f45beSAndroid Build Coastguard Worker+
49*053f45beSAndroid Build Coastguard Worker+	ret = sscanf(utsname.release, "%d.%d.%d", version, patchlevel,
50*053f45beSAndroid Build Coastguard Worker+		     &sublevel);
51*053f45beSAndroid Build Coastguard Worker+	if (ret < 0) {
52*053f45beSAndroid Build Coastguard Worker+		perror("sscanf");
53*053f45beSAndroid Build Coastguard Worker+		exit(1);
54*053f45beSAndroid Build Coastguard Worker+	} else if (ret != 3) {
55*053f45beSAndroid Build Coastguard Worker+		printf("Malformed kernel version %s\n", &utsname.release);
56*053f45beSAndroid Build Coastguard Worker+		exit(1);
57*053f45beSAndroid Build Coastguard Worker+	}
58*053f45beSAndroid Build Coastguard Worker+}
59*053f45beSAndroid Build Coastguard Worker+
60*053f45beSAndroid Build Coastguard Worker int main(void)
61*053f45beSAndroid Build Coastguard Worker {
62*053f45beSAndroid Build Coastguard Worker 	int ret = 0;
63*053f45beSAndroid Build Coastguard Worker+	int version, patchlevel;
64*053f45beSAndroid Build Coastguard Worker+
65*053f45beSAndroid Build Coastguard Worker+	get_kernel_version(&version, &patchlevel);
66*053f45beSAndroid Build Coastguard Worker
67*053f45beSAndroid Build Coastguard Worker 	ret |= test_tpacket(TPACKET_V1, PACKET_RX_RING);
68*053f45beSAndroid Build Coastguard Worker 	ret |= test_tpacket(TPACKET_V1, PACKET_TX_RING);
69*053f45beSAndroid Build Coastguard Worker@@ -843,7 +869,8 @@ int main(void)
70*053f45beSAndroid Build Coastguard Worker 	ret |= test_tpacket(TPACKET_V2, PACKET_TX_RING);
71*053f45beSAndroid Build Coastguard Worker
72*053f45beSAndroid Build Coastguard Worker 	ret |= test_tpacket(TPACKET_V3, PACKET_RX_RING);
73*053f45beSAndroid Build Coastguard Worker-	ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING);
74*053f45beSAndroid Build Coastguard Worker+	if (version > 4 || (version == 4 && patchlevel >= 11))
75*053f45beSAndroid Build Coastguard Worker+		ret |= test_tpacket(TPACKET_V3, PACKET_TX_RING);
76*053f45beSAndroid Build Coastguard Worker
77*053f45beSAndroid Build Coastguard Worker 	if (ret)
78*053f45beSAndroid Build Coastguard Worker 		return 1;
79*053f45beSAndroid Build Coastguard Worker--
80*053f45beSAndroid Build Coastguard Worker2.42.0.609.gbb76f46606-goog
81*053f45beSAndroid Build Coastguard Worker
82