Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_xsk.sh   Sprache: Shell

 
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright(c) 2020 Intel Corporation, Weqaar Janjua <weqaar.a.janjua@intel.com>

# AF_XDP selftests based on veth
#
# End-to-end AF_XDP over Veth test
#
# Topology:
# ---------
#                 -----------
#               _ | Process | _
#              /  -----------  \
#             /        |        \
#            /         |         \
#      -----------     |     -----------
#      | Thread1 |     |     | Thread2 |
#      -----------     |     -----------
#           |          |          |
#      -----------     |     -----------
#      |  xskX   |     |     |  xskY   |
#      -----------     |     -----------
#           |          |          |
#      -----------     |     ----------
#      |  vethX  | --------- |  vethY |
#      -----------   peer    ----------
#
# AF_XDP is an address family optimized for high performance packet processing,
# it is XDP’s user-space interface.
#
# An AF_XDP socket is linked to a single UMEM which is a region of virtual
# contiguous memory, divided into equal-sized frames.
#
# Refer to AF_XDP Kernel Documentation for detailed information:
https://www.kernel.org/doc/html/latest/networking/af_xdp.html
#
# Prerequisites setup by script:
#
#   Set up veth interfaces as per the topology shown ^^:
#   * setup two veth interfaces
#   ** veth<xxxx>
#   ** veth<yyyy>
#   *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid
#       conflict with any existing interface
#   * tests the veth and xsk layers of the topology
#
# See the source xskxceiver.c for information on each test
#
# Kernel configuration:
# ---------------------
# See "config" file for recommended kernel config options.
#
# Turn on XDP sockets and veth support when compiling i.e.
#  Networking support -->
#  Networking options -->
#  [ * ] XDP sockets
#
# Executing Tests:
# ----------------
# Must run with CAP_NET_ADMIN capability.
#
# Run:
#   sudo ./test_xsk.sh
#
# If running from kselftests:
#   sudo make run_tests
#
# Run with verbose output:
#   sudo ./test_xsk.sh -v
#
# Set up veth interfaces and leave them up so xskxceiver can be launched in a debugger:
#   sudo ./test_xsk.sh -d
#
# Run test suite for physical device in loopback mode
#   sudo ./test_xsk.sh -i IFACE
#
# Run test suite in a specific mode only [skb,drv,zc]
#   sudo ./test_xsk.sh -m MODE
#
# List available tests
#   ./test_xsk.sh -l
#
# Run a specific test from the test suite
#   sudo ./test_xsk.sh -t TEST_NAME
#
# Display the available command line options
#   ./test_xsk.sh -h

. xsk_prereqs.sh

ETH=""

while getopts "vi:dm:lt:h" flag
do
 case "${flag}" in
  v) verbose=1;;
  d) debug=1;;
  i) ETH=${OPTARG};;
  m) MODE=${OPTARG};;
  l) list=1;;
  t) TEST=${OPTARG};;
  h) help=1;;
 esac
done

TEST_NAME="PREREQUISITES"

URANDOM=/dev/urandom
[ ! -e "${URANDOM}" ] && { echo "${URANDOM} not found. Skipping tests."; test_exit $ksft_fail; }

VETH0_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
VETH0=ve${VETH0_POSTFIX}
VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
VETH1=ve${VETH1_POSTFIX}
MTU=1500

trap ctrl_c INT

function ctrl_c() {
        cleanup_exit ${VETH0} ${VETH1}
 exit 1
}

setup_vethPairs() {
 if [[ $verbose -eq 1 ]]; then
         echo "setting up ${VETH0}"
 fi
 ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4
 if [ -f /proc/net/if_inet6 ]; then
  echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
  echo 1 > /proc/sys/net/ipv6/conf/${VETH1}/disable_ipv6
 fi
 if [[ $verbose -eq 1 ]]; then
         echo "setting up ${VETH1}"
 fi

 if [[ $busy_poll -eq 1 ]]; then
         echo 2 > /sys/class/net/${VETH0}/napi_defer_hard_irqs
  echo 200000 > /sys/class/net/${VETH0}/gro_flush_timeout
  echo 2 > /sys/class/net/${VETH1}/napi_defer_hard_irqs
  echo 200000 > /sys/class/net/${VETH1}/gro_flush_timeout
 fi

 ip link set ${VETH1} mtu ${MTU}
 ip link set ${VETH0} mtu ${MTU}
 ip link set ${VETH1} up
 ip link set ${VETH0} up
}

if [[ $list -eq 1 ]]; then
        ./${XSKOBJ} -l
        exit
fi

if [[ $help -eq 1 ]]; then
 ./${XSKOBJ}
        exit
fi

if [ ! -z $ETH ]; then
 VETH0=${ETH}
 VETH1=${ETH}
else
 validate_root_exec
 validate_veth_support ${VETH0}
 validate_ip_utility
 setup_vethPairs

 retval=$?
 if [ $retval -ne 0 ]; then
  test_status $retval "${TEST_NAME}"
  cleanup_exit ${VETH0} ${VETH1}
  exit $retval
 fi
fi


if [[ $verbose -eq 1 ]]; then
 ARGS+="-v "
fi

if [ -n "$MODE" ]; then
 ARGS+="-m ${MODE} "
fi

if [ -n "$TEST" ]; then
 ARGS+="-t ${TEST} "
fi

retval=$?
test_status $retval "${TEST_NAME}"

## START TESTS

statusList=()

TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ"

if [[ $debug -eq 1 ]]; then
    echo "-i" ${VETH0} "-i" ${VETH1}
    exit
fi

exec_xskxceiver

if [ -z $ETH ]; then
 cleanup_exit ${VETH0} ${VETH1}
else
 cleanup_iface ${ETH} ${MTU}
fi

if [[ $list -eq 1 ]]; then
    exit
fi

TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
busy_poll=1

if [ -z $ETH ]; then
 setup_vethPairs
fi
exec_xskxceiver

## END TESTS

if [ -z $ETH ]; then
 cleanup_exit ${VETH0} ${VETH1}
else
 cleanup_iface ${ETH} ${MTU}
fi

failures=0
echo -e "\nSummary:"
for i in "${!statusList[@]}"
do
 if [ ${statusList[$i]} -ne 0 ]; then
         test_status ${statusList[$i]} ${nameList[$i]}
  failures=1
 fi
done

if [ $failures -eq 0 ]; then
        echo "All tests successful!"
else
 exit 1
fi

Messung V0.5
C=65 H=95 G=81

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge