140 lines · bash
1#2# SPDX-License-Identifier: GPL-2.03# Common parameter parsing for pktgen scripts4#5 6function usage() {7 echo ""8 echo "Usage: $0 [-vx] -i ethX"9 echo " -i : (\$DEV) output interface/device (required)"10 echo " -s : (\$PKT_SIZE) packet size"11 echo " -d : (\$DEST_IP) destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed"12 echo " -m : (\$DST_MAC) destination MAC-addr"13 echo " -p : (\$DST_PORT) destination PORT range (e.g. 433-444) is also allowed"14 echo " -k : (\$UDP_CSUM) enable UDP tx checksum"15 echo " -t : (\$THREADS) threads to start"16 echo " -f : (\$F_THREAD) index of first thread (zero indexed CPU number)"17 echo " -c : (\$SKB_CLONE) SKB clones send before alloc new SKB"18 echo " -n : (\$COUNT) num messages to send per thread, 0 means indefinitely"19 echo " -b : (\$BURST) HW level bursting of SKBs"20 echo " -v : (\$VERBOSE) verbose"21 echo " -x : (\$DEBUG) debug"22 echo " -6 : (\$IP6) IPv6"23 echo " -w : (\$DELAY) Tx Delay value (ns)"24 echo " -a : (\$APPEND) Script will not reset generator's state, but will append its config"25 echo ""26}27 28## --- Parse command line arguments / parameters ---29## echo "Commandline options:"30while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6ak" option; do31 case $option in32 i) # interface33 export DEV=$OPTARG34 info "Output device set to: DEV=$DEV"35 ;;36 s)37 export PKT_SIZE=$OPTARG38 info "Packet size set to: PKT_SIZE=$PKT_SIZE bytes"39 ;;40 d) # destination IP41 export DEST_IP=$OPTARG42 info "Destination IP set to: DEST_IP=$DEST_IP"43 ;;44 m) # MAC45 export DST_MAC=$OPTARG46 info "Destination MAC set to: DST_MAC=$DST_MAC"47 ;;48 p) # PORT49 export DST_PORT=$OPTARG50 info "Destination PORT set to: DST_PORT=$DST_PORT"51 ;;52 f)53 export F_THREAD=$OPTARG54 info "Index of first thread (zero indexed CPU number): $F_THREAD"55 ;;56 t)57 export THREADS=$OPTARG58 info "Number of threads to start: $THREADS"59 ;;60 c)61 export CLONE_SKB=$OPTARG62 info "CLONE_SKB=$CLONE_SKB"63 ;;64 n)65 export COUNT=$OPTARG66 info "COUNT=$COUNT"67 ;;68 b)69 export BURST=$OPTARG70 info "SKB bursting: BURST=$BURST"71 ;;72 w)73 export DELAY=$OPTARG74 info "DELAY=$DELAY"75 ;;76 v)77 export VERBOSE=yes78 info "Verbose mode: VERBOSE=$VERBOSE"79 ;;80 x)81 export DEBUG=yes82 info "Debug mode: DEBUG=$DEBUG"83 ;;84 6)85 export IP6=686 info "IP6: IP6=$IP6"87 ;;88 a)89 export APPEND=yes90 info "Append mode: APPEND=$APPEND"91 ;;92 k)93 export UDP_CSUM=yes94 info "UDP tx checksum: UDP_CSUM=$UDP_CSUM"95 ;;96 h|?|*)97 usage;98 err 2 "[ERROR] Unknown parameters!!!"99 esac100done101shift $(( $OPTIND - 1 ))102 103if [ -z "$PKT_SIZE" ]; then104 # NIC adds 4 bytes CRC105 export PKT_SIZE=60106 info "Default packet size set to: set to: $PKT_SIZE bytes"107fi108 109if [ -z "$F_THREAD" ]; then110 # First thread (F_THREAD) reference the zero indexed CPU number111 export F_THREAD=0112fi113 114if [ -z "$THREADS" ]; then115 export THREADS=1116fi117 118# default DELAY119[ -z "$DELAY" ] && export DELAY=0 # Zero means max speed120 121export L_THREAD=$(( THREADS + F_THREAD - 1 ))122 123if [ -z "$DEV" ]; then124 usage125 err 2 "Please specify output device"126fi127 128if [ -z "$DST_MAC" ]; then129 warn "Missing destination MAC address"130fi131 132if [ -z "$DEST_IP" ]; then133 warn "Missing destination IP address"134fi135 136if [ ! -d /proc/net/pktgen ]; then137 info "Loading kernel module: pktgen"138 modprobe pktgen139fi140