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