xref: /OK3568_Linux_fs/kernel/samples/pktgen/parameters.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun# Common parameter parsing for pktgen scripts
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunfunction usage() {
7*4882a593Smuzhiyun    echo ""
8*4882a593Smuzhiyun    echo "Usage: $0 [-vx] -i ethX"
9*4882a593Smuzhiyun    echo "  -i : (\$DEV)       output interface/device (required)"
10*4882a593Smuzhiyun    echo "  -s : (\$PKT_SIZE)  packet size"
11*4882a593Smuzhiyun    echo "  -d : (\$DEST_IP)   destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed"
12*4882a593Smuzhiyun    echo "  -m : (\$DST_MAC)   destination MAC-addr"
13*4882a593Smuzhiyun    echo "  -p : (\$DST_PORT)  destination PORT range (e.g. 433-444) is also allowed"
14*4882a593Smuzhiyun    echo "  -t : (\$THREADS)   threads to start"
15*4882a593Smuzhiyun    echo "  -f : (\$F_THREAD)  index of first thread (zero indexed CPU number)"
16*4882a593Smuzhiyun    echo "  -c : (\$SKB_CLONE) SKB clones send before alloc new SKB"
17*4882a593Smuzhiyun    echo "  -n : (\$COUNT)     num messages to send per thread, 0 means indefinitely"
18*4882a593Smuzhiyun    echo "  -b : (\$BURST)     HW level bursting of SKBs"
19*4882a593Smuzhiyun    echo "  -v : (\$VERBOSE)   verbose"
20*4882a593Smuzhiyun    echo "  -x : (\$DEBUG)     debug"
21*4882a593Smuzhiyun    echo "  -6 : (\$IP6)       IPv6"
22*4882a593Smuzhiyun    echo ""
23*4882a593Smuzhiyun}
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun##  --- Parse command line arguments / parameters ---
26*4882a593Smuzhiyun## echo "Commandline options:"
27*4882a593Smuzhiyunwhile getopts "s:i:d:m:p:f:t:c:n:b:vxh6" option; do
28*4882a593Smuzhiyun    case $option in
29*4882a593Smuzhiyun        i) # interface
30*4882a593Smuzhiyun          export DEV=$OPTARG
31*4882a593Smuzhiyun	  info "Output device set to: DEV=$DEV"
32*4882a593Smuzhiyun          ;;
33*4882a593Smuzhiyun        s)
34*4882a593Smuzhiyun          export PKT_SIZE=$OPTARG
35*4882a593Smuzhiyun	  info "Packet size set to: PKT_SIZE=$PKT_SIZE bytes"
36*4882a593Smuzhiyun          ;;
37*4882a593Smuzhiyun        d) # destination IP
38*4882a593Smuzhiyun          export DEST_IP=$OPTARG
39*4882a593Smuzhiyun	  info "Destination IP set to: DEST_IP=$DEST_IP"
40*4882a593Smuzhiyun          ;;
41*4882a593Smuzhiyun        m) # MAC
42*4882a593Smuzhiyun          export DST_MAC=$OPTARG
43*4882a593Smuzhiyun	  info "Destination MAC set to: DST_MAC=$DST_MAC"
44*4882a593Smuzhiyun          ;;
45*4882a593Smuzhiyun        p) # PORT
46*4882a593Smuzhiyun          export DST_PORT=$OPTARG
47*4882a593Smuzhiyun	  info "Destination PORT set to: DST_PORT=$DST_PORT"
48*4882a593Smuzhiyun          ;;
49*4882a593Smuzhiyun        f)
50*4882a593Smuzhiyun	  export F_THREAD=$OPTARG
51*4882a593Smuzhiyun	  info "Index of first thread (zero indexed CPU number): $F_THREAD"
52*4882a593Smuzhiyun          ;;
53*4882a593Smuzhiyun        t)
54*4882a593Smuzhiyun	  export THREADS=$OPTARG
55*4882a593Smuzhiyun	  info "Number of threads to start: $THREADS"
56*4882a593Smuzhiyun          ;;
57*4882a593Smuzhiyun        c)
58*4882a593Smuzhiyun	  export CLONE_SKB=$OPTARG
59*4882a593Smuzhiyun	  info "CLONE_SKB=$CLONE_SKB"
60*4882a593Smuzhiyun          ;;
61*4882a593Smuzhiyun        n)
62*4882a593Smuzhiyun	  export COUNT=$OPTARG
63*4882a593Smuzhiyun	  info "COUNT=$COUNT"
64*4882a593Smuzhiyun          ;;
65*4882a593Smuzhiyun        b)
66*4882a593Smuzhiyun	  export BURST=$OPTARG
67*4882a593Smuzhiyun	  info "SKB bursting: BURST=$BURST"
68*4882a593Smuzhiyun          ;;
69*4882a593Smuzhiyun        v)
70*4882a593Smuzhiyun          export VERBOSE=yes
71*4882a593Smuzhiyun          info "Verbose mode: VERBOSE=$VERBOSE"
72*4882a593Smuzhiyun          ;;
73*4882a593Smuzhiyun        x)
74*4882a593Smuzhiyun          export DEBUG=yes
75*4882a593Smuzhiyun          info "Debug mode: DEBUG=$DEBUG"
76*4882a593Smuzhiyun          ;;
77*4882a593Smuzhiyun	6)
78*4882a593Smuzhiyun	  export IP6=6
79*4882a593Smuzhiyun	  info "IP6: IP6=$IP6"
80*4882a593Smuzhiyun	  ;;
81*4882a593Smuzhiyun        h|?|*)
82*4882a593Smuzhiyun          usage;
83*4882a593Smuzhiyun          err 2 "[ERROR] Unknown parameters!!!"
84*4882a593Smuzhiyun    esac
85*4882a593Smuzhiyundone
86*4882a593Smuzhiyunshift $(( $OPTIND - 1 ))
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunif [ -z "$PKT_SIZE" ]; then
89*4882a593Smuzhiyun    # NIC adds 4 bytes CRC
90*4882a593Smuzhiyun    export PKT_SIZE=60
91*4882a593Smuzhiyun    info "Default packet size set to: set to: $PKT_SIZE bytes"
92*4882a593Smuzhiyunfi
93*4882a593Smuzhiyun
94*4882a593Smuzhiyunif [ -z "$F_THREAD" ]; then
95*4882a593Smuzhiyun    # First thread (F_THREAD) reference the zero indexed CPU number
96*4882a593Smuzhiyun    export F_THREAD=0
97*4882a593Smuzhiyunfi
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunif [ -z "$THREADS" ]; then
100*4882a593Smuzhiyun    export THREADS=1
101*4882a593Smuzhiyunfi
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunexport L_THREAD=$(( THREADS + F_THREAD - 1 ))
104*4882a593Smuzhiyun
105*4882a593Smuzhiyunif [ -z "$DEV" ]; then
106*4882a593Smuzhiyun    usage
107*4882a593Smuzhiyun    err 2 "Please specify output device"
108*4882a593Smuzhiyunfi
109*4882a593Smuzhiyun
110*4882a593Smuzhiyunif [ -z "$DST_MAC" ]; then
111*4882a593Smuzhiyun    warn "Missing destination MAC address"
112*4882a593Smuzhiyunfi
113*4882a593Smuzhiyun
114*4882a593Smuzhiyunif [ -z "$DEST_IP" ]; then
115*4882a593Smuzhiyun    warn "Missing destination IP address"
116*4882a593Smuzhiyunfi
117*4882a593Smuzhiyun
118*4882a593Smuzhiyunif [ ! -d /proc/net/pktgen ]; then
119*4882a593Smuzhiyun    info "Loading kernel module: pktgen"
120*4882a593Smuzhiyun    modprobe pktgen
121*4882a593Smuzhiyunfi
122