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