~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/bpf/test_xsk.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/testing/selftests/bpf/test_xsk.sh (Architecture i386) and /tools/testing/selftests/bpf/test_xsk.sh (Architecture ppc)


  1 #!/bin/bash                                         1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0                  2 # SPDX-License-Identifier: GPL-2.0
  3 # Copyright(c) 2020 Intel Corporation, Weqaar <      3 # Copyright(c) 2020 Intel Corporation, Weqaar Janjua <weqaar.a.janjua@intel.com>
  4                                                     4 
  5 # AF_XDP selftests based on veth                    5 # AF_XDP selftests based on veth
  6 #                                                   6 #
  7 # End-to-end AF_XDP over Veth test                  7 # End-to-end AF_XDP over Veth test
  8 #                                                   8 #
  9 # Topology:                                         9 # Topology:
 10 # ---------                                        10 # ---------
 11 #                 -----------                      11 #                 -----------
 12 #               _ | Process | _                    12 #               _ | Process | _
 13 #              /  -----------  \                   13 #              /  -----------  \
 14 #             /        |        \                  14 #             /        |        \
 15 #            /         |         \                 15 #            /         |         \
 16 #      -----------     |     -----------           16 #      -----------     |     -----------
 17 #      | Thread1 |     |     | Thread2 |           17 #      | Thread1 |     |     | Thread2 |
 18 #      -----------     |     -----------           18 #      -----------     |     -----------
 19 #           |          |          |                19 #           |          |          |
 20 #      -----------     |     -----------           20 #      -----------     |     -----------
 21 #      |  xskX   |     |     |  xskY   |           21 #      |  xskX   |     |     |  xskY   |
 22 #      -----------     |     -----------           22 #      -----------     |     -----------
 23 #           |          |          |                23 #           |          |          |
 24 #      -----------     |     ----------            24 #      -----------     |     ----------
 25 #      |  vethX  | --------- |  vethY |            25 #      |  vethX  | --------- |  vethY |
 26 #      -----------   peer    ----------            26 #      -----------   peer    ----------
 27 #                                                  27 #
 28 # AF_XDP is an address family optimized for hi     28 # AF_XDP is an address family optimized for high performance packet processing,
 29 # it is XDP’s user-space interface.              29 # it is XDP’s user-space interface.
 30 #                                                  30 #
 31 # An AF_XDP socket is linked to a single UMEM      31 # An AF_XDP socket is linked to a single UMEM which is a region of virtual
 32 # contiguous memory, divided into equal-sized      32 # contiguous memory, divided into equal-sized frames.
 33 #                                                  33 #
 34 # Refer to AF_XDP Kernel Documentation for det     34 # Refer to AF_XDP Kernel Documentation for detailed information:
 35 # https://www.kernel.org/doc/html/latest/netwo     35 # https://www.kernel.org/doc/html/latest/networking/af_xdp.html
 36 #                                                  36 #
 37 # Prerequisites setup by script:                   37 # Prerequisites setup by script:
 38 #                                                  38 #
 39 #   Set up veth interfaces as per the topology     39 #   Set up veth interfaces as per the topology shown ^^:
 40 #   * setup two veth interfaces                    40 #   * setup two veth interfaces
 41 #   ** veth<xxxx>                                  41 #   ** veth<xxxx>
 42 #   ** veth<yyyy>                                  42 #   ** veth<yyyy>
 43 #   *** xxxx and yyyy are randomly generated 4     43 #   *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid
 44 #       conflict with any existing interface       44 #       conflict with any existing interface
 45 #   * tests the veth and xsk layers of the top     45 #   * tests the veth and xsk layers of the topology
 46 #                                                  46 #
 47 # See the source xskxceiver.c for information      47 # See the source xskxceiver.c for information on each test
 48 #                                                  48 #
 49 # Kernel configuration:                            49 # Kernel configuration:
 50 # ---------------------                            50 # ---------------------
 51 # See "config" file for recommended kernel con     51 # See "config" file for recommended kernel config options.
 52 #                                                  52 #
 53 # Turn on XDP sockets and veth support when co     53 # Turn on XDP sockets and veth support when compiling i.e.
 54 #       Networking support -->                     54 #       Networking support -->
 55 #               Networking options -->             55 #               Networking options -->
 56 #                       [ * ] XDP sockets          56 #                       [ * ] XDP sockets
 57 #                                                  57 #
 58 # Executing Tests:                                 58 # Executing Tests:
 59 # ----------------                                 59 # ----------------
 60 # Must run with CAP_NET_ADMIN capability.          60 # Must run with CAP_NET_ADMIN capability.
 61 #                                                  61 #
 62 # Run:                                             62 # Run:
 63 #   sudo ./test_xsk.sh                             63 #   sudo ./test_xsk.sh
 64 #                                                  64 #
 65 # If running from kselftests:                      65 # If running from kselftests:
 66 #   sudo make run_tests                            66 #   sudo make run_tests
 67 #                                                  67 #
 68 # Run with verbose output:                         68 # Run with verbose output:
 69 #   sudo ./test_xsk.sh -v                          69 #   sudo ./test_xsk.sh -v
 70 #                                                  70 #
 71 # Set up veth interfaces and leave them up so      71 # Set up veth interfaces and leave them up so xskxceiver can be launched in a debugger:
 72 #   sudo ./test_xsk.sh -d                          72 #   sudo ./test_xsk.sh -d
 73 #                                                  73 #
 74 # Run test suite for physical device in loopba     74 # Run test suite for physical device in loopback mode
 75 #   sudo ./test_xsk.sh -i IFACE                    75 #   sudo ./test_xsk.sh -i IFACE
 76 #                                                  76 #
 77 # Run test suite in a specific mode only [skb,     77 # Run test suite in a specific mode only [skb,drv,zc]
 78 #   sudo ./test_xsk.sh -m MODE                     78 #   sudo ./test_xsk.sh -m MODE
 79 #                                                  79 #
 80 # List available tests                             80 # List available tests
 81 #   ./test_xsk.sh -l                               81 #   ./test_xsk.sh -l
 82 #                                                  82 #
 83 # Run a specific test from the test suite          83 # Run a specific test from the test suite
 84 #   sudo ./test_xsk.sh -t TEST_NAME                84 #   sudo ./test_xsk.sh -t TEST_NAME
 85 #                                                  85 #
 86 # Display the available command line options       86 # Display the available command line options
 87 #   ./test_xsk.sh -h                               87 #   ./test_xsk.sh -h
 88                                                    88 
 89 . xsk_prereqs.sh                                   89 . xsk_prereqs.sh
 90                                                    90 
 91 ETH=""                                             91 ETH=""
 92                                                    92 
 93 while getopts "vi:dm:lt:h" flag                    93 while getopts "vi:dm:lt:h" flag
 94 do                                                 94 do
 95         case "${flag}" in                          95         case "${flag}" in
 96                 v) verbose=1;;                     96                 v) verbose=1;;
 97                 d) debug=1;;                       97                 d) debug=1;;
 98                 i) ETH=${OPTARG};;                 98                 i) ETH=${OPTARG};;
 99                 m) MODE=${OPTARG};;                99                 m) MODE=${OPTARG};;
100                 l) list=1;;                       100                 l) list=1;;
101                 t) TEST=${OPTARG};;               101                 t) TEST=${OPTARG};;
102                 h) help=1;;                       102                 h) help=1;;
103         esac                                      103         esac
104 done                                              104 done
105                                                   105 
106 TEST_NAME="PREREQUISITES"                         106 TEST_NAME="PREREQUISITES"
107                                                   107 
108 URANDOM=/dev/urandom                              108 URANDOM=/dev/urandom
109 [ ! -e "${URANDOM}" ] && { echo "${URANDOM} no    109 [ ! -e "${URANDOM}" ] && { echo "${URANDOM} not found. Skipping tests."; test_exit $ksft_fail; }
110                                                   110 
111 VETH0_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9'     111 VETH0_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
112 VETH0=ve${VETH0_POSTFIX}                          112 VETH0=ve${VETH0_POSTFIX}
113 VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9'     113 VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
114 VETH1=ve${VETH1_POSTFIX}                          114 VETH1=ve${VETH1_POSTFIX}
115 MTU=1500                                          115 MTU=1500
116                                                   116 
117 trap ctrl_c INT                                   117 trap ctrl_c INT
118                                                   118 
119 function ctrl_c() {                               119 function ctrl_c() {
120         cleanup_exit ${VETH0} ${VETH1}            120         cleanup_exit ${VETH0} ${VETH1}
121         exit 1                                    121         exit 1
122 }                                                 122 }
123                                                   123 
124 setup_vethPairs() {                               124 setup_vethPairs() {
125         if [[ $verbose -eq 1 ]]; then             125         if [[ $verbose -eq 1 ]]; then
126                 echo "setting up ${VETH0}"        126                 echo "setting up ${VETH0}"
127         fi                                        127         fi
128         ip link add ${VETH0} numtxqueues 4 num    128         ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4
129         if [ -f /proc/net/if_inet6 ]; then        129         if [ -f /proc/net/if_inet6 ]; then
130                 echo 1 > /proc/sys/net/ipv6/co    130                 echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
131                 echo 1 > /proc/sys/net/ipv6/co    131                 echo 1 > /proc/sys/net/ipv6/conf/${VETH1}/disable_ipv6
132         fi                                        132         fi
133         if [[ $verbose -eq 1 ]]; then             133         if [[ $verbose -eq 1 ]]; then
134                 echo "setting up ${VETH1}"        134                 echo "setting up ${VETH1}"
135         fi                                        135         fi
136                                                   136 
137         if [[ $busy_poll -eq 1 ]]; then           137         if [[ $busy_poll -eq 1 ]]; then
138                 echo 2 > /sys/class/net/${VETH    138                 echo 2 > /sys/class/net/${VETH0}/napi_defer_hard_irqs
139                 echo 200000 > /sys/class/net/$    139                 echo 200000 > /sys/class/net/${VETH0}/gro_flush_timeout
140                 echo 2 > /sys/class/net/${VETH    140                 echo 2 > /sys/class/net/${VETH1}/napi_defer_hard_irqs
141                 echo 200000 > /sys/class/net/$    141                 echo 200000 > /sys/class/net/${VETH1}/gro_flush_timeout
142         fi                                        142         fi
143                                                   143 
144         ip link set ${VETH1} mtu ${MTU}           144         ip link set ${VETH1} mtu ${MTU}
145         ip link set ${VETH0} mtu ${MTU}           145         ip link set ${VETH0} mtu ${MTU}
146         ip link set ${VETH1} up                   146         ip link set ${VETH1} up
147         ip link set ${VETH0} up                   147         ip link set ${VETH0} up
148 }                                                 148 }
149                                                   149 
150 if [[ $list -eq 1 ]]; then                        150 if [[ $list -eq 1 ]]; then
151         ./${XSKOBJ} -l                            151         ./${XSKOBJ} -l
152         exit                                      152         exit
153 fi                                                153 fi
154                                                   154 
155 if [[ $help -eq 1 ]]; then                        155 if [[ $help -eq 1 ]]; then
156         ./${XSKOBJ}                               156         ./${XSKOBJ}
157         exit                                      157         exit
158 fi                                                158 fi
159                                                   159 
160 if [ ! -z $ETH ]; then                            160 if [ ! -z $ETH ]; then
161         VETH0=${ETH}                              161         VETH0=${ETH}
162         VETH1=${ETH}                              162         VETH1=${ETH}
163 else                                              163 else
164         validate_root_exec                        164         validate_root_exec
165         validate_veth_support ${VETH0}            165         validate_veth_support ${VETH0}
166         validate_ip_utility                       166         validate_ip_utility
167         setup_vethPairs                           167         setup_vethPairs
168                                                   168 
169         retval=$?                                 169         retval=$?
170         if [ $retval -ne 0 ]; then                170         if [ $retval -ne 0 ]; then
171                 test_status $retval "${TEST_NA    171                 test_status $retval "${TEST_NAME}"
172                 cleanup_exit ${VETH0} ${VETH1}    172                 cleanup_exit ${VETH0} ${VETH1}
173                 exit $retval                      173                 exit $retval
174         fi                                        174         fi
175 fi                                                175 fi
176                                                   176 
177                                                   177 
178 if [[ $verbose -eq 1 ]]; then                     178 if [[ $verbose -eq 1 ]]; then
179         ARGS+="-v "                               179         ARGS+="-v "
180 fi                                                180 fi
181                                                   181 
182 if [ -n "$MODE" ]; then                           182 if [ -n "$MODE" ]; then
183         ARGS+="-m ${MODE} "                       183         ARGS+="-m ${MODE} "
184 fi                                                184 fi
185                                                   185 
186 if [ -n "$TEST" ]; then                           186 if [ -n "$TEST" ]; then
187         ARGS+="-t ${TEST} "                       187         ARGS+="-t ${TEST} "
188 fi                                                188 fi
189                                                   189 
190 retval=$?                                         190 retval=$?
191 test_status $retval "${TEST_NAME}"                191 test_status $retval "${TEST_NAME}"
192                                                   192 
193 ## START TESTS                                    193 ## START TESTS
194                                                   194 
195 statusList=()                                     195 statusList=()
196                                                   196 
197 TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ"        197 TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ"
198                                                   198 
199 if [[ $debug -eq 1 ]]; then                       199 if [[ $debug -eq 1 ]]; then
200     echo "-i" ${VETH0} "-i" ${VETH1}              200     echo "-i" ${VETH0} "-i" ${VETH1}
201     exit                                          201     exit
202 fi                                                202 fi
203                                                   203 
204 exec_xskxceiver                                   204 exec_xskxceiver
205                                                   205 
206 if [ -z $ETH ]; then                              206 if [ -z $ETH ]; then
207         cleanup_exit ${VETH0} ${VETH1}            207         cleanup_exit ${VETH0} ${VETH1}
208 else                                              208 else
209         cleanup_iface ${ETH} ${MTU}               209         cleanup_iface ${ETH} ${MTU}
210 fi                                                210 fi
211                                                   211 
212 if [[ $list -eq 1 ]]; then                        212 if [[ $list -eq 1 ]]; then
213     exit                                          213     exit
214 fi                                                214 fi
215                                                   215 
216 TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"      216 TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
217 busy_poll=1                                       217 busy_poll=1
218                                                   218 
219 if [ -z $ETH ]; then                              219 if [ -z $ETH ]; then
220         setup_vethPairs                           220         setup_vethPairs
221 fi                                                221 fi
222 exec_xskxceiver                                   222 exec_xskxceiver
223                                                   223 
224 ## END TESTS                                      224 ## END TESTS
225                                                   225 
226 if [ -z $ETH ]; then                              226 if [ -z $ETH ]; then
227         cleanup_exit ${VETH0} ${VETH1}            227         cleanup_exit ${VETH0} ${VETH1}
228 else                                              228 else
229         cleanup_iface ${ETH} ${MTU}               229         cleanup_iface ${ETH} ${MTU}
230 fi                                                230 fi
231                                                   231 
232 failures=0                                        232 failures=0
233 echo -e "\nSummary:"                              233 echo -e "\nSummary:"
234 for i in "${!statusList[@]}"                      234 for i in "${!statusList[@]}"
235 do                                                235 do
236         if [ ${statusList[$i]} -ne 0 ]; then      236         if [ ${statusList[$i]} -ne 0 ]; then
237                 test_status ${statusList[$i]}     237                 test_status ${statusList[$i]} ${nameList[$i]}
238                 failures=1                        238                 failures=1
239         fi                                        239         fi
240 done                                              240 done
241                                                   241 
242 if [ $failures -eq 0 ]; then                      242 if [ $failures -eq 0 ]; then
243         echo "All tests successful!"              243         echo "All tests successful!"
244 fi                                                244 fi
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php