162306a36Sopenharmony_ci# 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# Common parameter parsing for pktgen scripts 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci 662306a36Sopenharmony_cifunction usage() { 762306a36Sopenharmony_ci echo "" 862306a36Sopenharmony_ci echo "Usage: $0 [-vx] -i ethX" 962306a36Sopenharmony_ci echo " -i : (\$DEV) output interface/device (required)" 1062306a36Sopenharmony_ci echo " -s : (\$PKT_SIZE) packet size" 1162306a36Sopenharmony_ci echo " -d : (\$DEST_IP) destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed" 1262306a36Sopenharmony_ci echo " -m : (\$DST_MAC) destination MAC-addr" 1362306a36Sopenharmony_ci echo " -p : (\$DST_PORT) destination PORT range (e.g. 433-444) is also allowed" 1462306a36Sopenharmony_ci echo " -k : (\$UDP_CSUM) enable UDP tx checksum" 1562306a36Sopenharmony_ci echo " -t : (\$THREADS) threads to start" 1662306a36Sopenharmony_ci echo " -f : (\$F_THREAD) index of first thread (zero indexed CPU number)" 1762306a36Sopenharmony_ci echo " -c : (\$SKB_CLONE) SKB clones send before alloc new SKB" 1862306a36Sopenharmony_ci echo " -n : (\$COUNT) num messages to send per thread, 0 means indefinitely" 1962306a36Sopenharmony_ci echo " -b : (\$BURST) HW level bursting of SKBs" 2062306a36Sopenharmony_ci echo " -v : (\$VERBOSE) verbose" 2162306a36Sopenharmony_ci echo " -x : (\$DEBUG) debug" 2262306a36Sopenharmony_ci echo " -6 : (\$IP6) IPv6" 2362306a36Sopenharmony_ci echo " -w : (\$DELAY) Tx Delay value (ns)" 2462306a36Sopenharmony_ci echo " -a : (\$APPEND) Script will not reset generator's state, but will append its config" 2562306a36Sopenharmony_ci echo "" 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci## --- Parse command line arguments / parameters --- 2962306a36Sopenharmony_ci## echo "Commandline options:" 3062306a36Sopenharmony_ciwhile getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6ak" option; do 3162306a36Sopenharmony_ci case $option in 3262306a36Sopenharmony_ci i) # interface 3362306a36Sopenharmony_ci export DEV=$OPTARG 3462306a36Sopenharmony_ci info "Output device set to: DEV=$DEV" 3562306a36Sopenharmony_ci ;; 3662306a36Sopenharmony_ci s) 3762306a36Sopenharmony_ci export PKT_SIZE=$OPTARG 3862306a36Sopenharmony_ci info "Packet size set to: PKT_SIZE=$PKT_SIZE bytes" 3962306a36Sopenharmony_ci ;; 4062306a36Sopenharmony_ci d) # destination IP 4162306a36Sopenharmony_ci export DEST_IP=$OPTARG 4262306a36Sopenharmony_ci info "Destination IP set to: DEST_IP=$DEST_IP" 4362306a36Sopenharmony_ci ;; 4462306a36Sopenharmony_ci m) # MAC 4562306a36Sopenharmony_ci export DST_MAC=$OPTARG 4662306a36Sopenharmony_ci info "Destination MAC set to: DST_MAC=$DST_MAC" 4762306a36Sopenharmony_ci ;; 4862306a36Sopenharmony_ci p) # PORT 4962306a36Sopenharmony_ci export DST_PORT=$OPTARG 5062306a36Sopenharmony_ci info "Destination PORT set to: DST_PORT=$DST_PORT" 5162306a36Sopenharmony_ci ;; 5262306a36Sopenharmony_ci f) 5362306a36Sopenharmony_ci export F_THREAD=$OPTARG 5462306a36Sopenharmony_ci info "Index of first thread (zero indexed CPU number): $F_THREAD" 5562306a36Sopenharmony_ci ;; 5662306a36Sopenharmony_ci t) 5762306a36Sopenharmony_ci export THREADS=$OPTARG 5862306a36Sopenharmony_ci info "Number of threads to start: $THREADS" 5962306a36Sopenharmony_ci ;; 6062306a36Sopenharmony_ci c) 6162306a36Sopenharmony_ci export CLONE_SKB=$OPTARG 6262306a36Sopenharmony_ci info "CLONE_SKB=$CLONE_SKB" 6362306a36Sopenharmony_ci ;; 6462306a36Sopenharmony_ci n) 6562306a36Sopenharmony_ci export COUNT=$OPTARG 6662306a36Sopenharmony_ci info "COUNT=$COUNT" 6762306a36Sopenharmony_ci ;; 6862306a36Sopenharmony_ci b) 6962306a36Sopenharmony_ci export BURST=$OPTARG 7062306a36Sopenharmony_ci info "SKB bursting: BURST=$BURST" 7162306a36Sopenharmony_ci ;; 7262306a36Sopenharmony_ci w) 7362306a36Sopenharmony_ci export DELAY=$OPTARG 7462306a36Sopenharmony_ci info "DELAY=$DELAY" 7562306a36Sopenharmony_ci ;; 7662306a36Sopenharmony_ci v) 7762306a36Sopenharmony_ci export VERBOSE=yes 7862306a36Sopenharmony_ci info "Verbose mode: VERBOSE=$VERBOSE" 7962306a36Sopenharmony_ci ;; 8062306a36Sopenharmony_ci x) 8162306a36Sopenharmony_ci export DEBUG=yes 8262306a36Sopenharmony_ci info "Debug mode: DEBUG=$DEBUG" 8362306a36Sopenharmony_ci ;; 8462306a36Sopenharmony_ci 6) 8562306a36Sopenharmony_ci export IP6=6 8662306a36Sopenharmony_ci info "IP6: IP6=$IP6" 8762306a36Sopenharmony_ci ;; 8862306a36Sopenharmony_ci a) 8962306a36Sopenharmony_ci export APPEND=yes 9062306a36Sopenharmony_ci info "Append mode: APPEND=$APPEND" 9162306a36Sopenharmony_ci ;; 9262306a36Sopenharmony_ci k) 9362306a36Sopenharmony_ci export UDP_CSUM=yes 9462306a36Sopenharmony_ci info "UDP tx checksum: UDP_CSUM=$UDP_CSUM" 9562306a36Sopenharmony_ci ;; 9662306a36Sopenharmony_ci h|?|*) 9762306a36Sopenharmony_ci usage; 9862306a36Sopenharmony_ci err 2 "[ERROR] Unknown parameters!!!" 9962306a36Sopenharmony_ci esac 10062306a36Sopenharmony_cidone 10162306a36Sopenharmony_cishift $(( $OPTIND - 1 )) 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ciif [ -z "$PKT_SIZE" ]; then 10462306a36Sopenharmony_ci # NIC adds 4 bytes CRC 10562306a36Sopenharmony_ci export PKT_SIZE=60 10662306a36Sopenharmony_ci info "Default packet size set to: set to: $PKT_SIZE bytes" 10762306a36Sopenharmony_cifi 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ciif [ -z "$F_THREAD" ]; then 11062306a36Sopenharmony_ci # First thread (F_THREAD) reference the zero indexed CPU number 11162306a36Sopenharmony_ci export F_THREAD=0 11262306a36Sopenharmony_cifi 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ciif [ -z "$THREADS" ]; then 11562306a36Sopenharmony_ci export THREADS=1 11662306a36Sopenharmony_cifi 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci# default DELAY 11962306a36Sopenharmony_ci[ -z "$DELAY" ] && export DELAY=0 # Zero means max speed 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciexport L_THREAD=$(( THREADS + F_THREAD - 1 )) 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciif [ -z "$DEV" ]; then 12462306a36Sopenharmony_ci usage 12562306a36Sopenharmony_ci err 2 "Please specify output device" 12662306a36Sopenharmony_cifi 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ciif [ -z "$DST_MAC" ]; then 12962306a36Sopenharmony_ci warn "Missing destination MAC address" 13062306a36Sopenharmony_cifi 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ciif [ -z "$DEST_IP" ]; then 13362306a36Sopenharmony_ci warn "Missing destination IP address" 13462306a36Sopenharmony_cifi 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ciif [ ! -d /proc/net/pktgen ]; then 13762306a36Sopenharmony_ci info "Loading kernel module: pktgen" 13862306a36Sopenharmony_ci modprobe pktgen 13962306a36Sopenharmony_cifi 140