1*b64b0d1eSJesper Dangaard Brouer# 2*b64b0d1eSJesper Dangaard Brouer# Common parameter parsing for pktgen scripts 3*b64b0d1eSJesper Dangaard Brouer# 4*b64b0d1eSJesper Dangaard Brouer 5*b64b0d1eSJesper Dangaard Brouerfunction usage() { 6*b64b0d1eSJesper Dangaard Brouer echo "" 7*b64b0d1eSJesper Dangaard Brouer echo "Usage: $0 [-vx] -i ethX" 8*b64b0d1eSJesper Dangaard Brouer echo " -i : (\$DEV) output interface/device (required)" 9*b64b0d1eSJesper Dangaard Brouer echo " -s : (\$PKT_SIZE) packet size" 10*b64b0d1eSJesper Dangaard Brouer echo " -d : (\$DEST_IP) destination IP" 11*b64b0d1eSJesper Dangaard Brouer echo " -m : (\$DST_MAC) destination MAC-addr" 12*b64b0d1eSJesper Dangaard Brouer echo " -t : (\$THREADS) threads to start" 13*b64b0d1eSJesper Dangaard Brouer echo " -c : (\$SKB_CLONE) SKB clones send before alloc new SKB" 14*b64b0d1eSJesper Dangaard Brouer echo " -b : (\$BURST) HW level bursting of SKBs" 15*b64b0d1eSJesper Dangaard Brouer echo " -v : (\$VERBOSE) verbose" 16*b64b0d1eSJesper Dangaard Brouer echo " -x : (\$DEBUG) debug" 17*b64b0d1eSJesper Dangaard Brouer echo "" 18*b64b0d1eSJesper Dangaard Brouer} 19*b64b0d1eSJesper Dangaard Brouer 20*b64b0d1eSJesper Dangaard Brouer## --- Parse command line arguments / parameters --- 21*b64b0d1eSJesper Dangaard Brouer## echo "Commandline options:" 22*b64b0d1eSJesper Dangaard Brouerwhile getopts "s:i:d:m:t:c:b:vxh" option; do 23*b64b0d1eSJesper Dangaard Brouer case $option in 24*b64b0d1eSJesper Dangaard Brouer i) # interface 25*b64b0d1eSJesper Dangaard Brouer export DEV=$OPTARG 26*b64b0d1eSJesper Dangaard Brouer info "Output device set to: DEV=$DEV" 27*b64b0d1eSJesper Dangaard Brouer ;; 28*b64b0d1eSJesper Dangaard Brouer s) 29*b64b0d1eSJesper Dangaard Brouer export PKT_SIZE=$OPTARG 30*b64b0d1eSJesper Dangaard Brouer info "Packet size set to: PKT_SIZE=$PKT_SIZE bytes" 31*b64b0d1eSJesper Dangaard Brouer ;; 32*b64b0d1eSJesper Dangaard Brouer d) # destination IP 33*b64b0d1eSJesper Dangaard Brouer export DEST_IP=$OPTARG 34*b64b0d1eSJesper Dangaard Brouer info "Destination IP set to: DEST_IP=$DEST_IP" 35*b64b0d1eSJesper Dangaard Brouer ;; 36*b64b0d1eSJesper Dangaard Brouer m) # MAC 37*b64b0d1eSJesper Dangaard Brouer export DST_MAC=$OPTARG 38*b64b0d1eSJesper Dangaard Brouer info "Destination MAC set to: DST_MAC=$DST_MAC" 39*b64b0d1eSJesper Dangaard Brouer ;; 40*b64b0d1eSJesper Dangaard Brouer t) 41*b64b0d1eSJesper Dangaard Brouer export THREADS=$OPTARG 42*b64b0d1eSJesper Dangaard Brouer export CPU_THREADS=$OPTARG 43*b64b0d1eSJesper Dangaard Brouer let "CPU_THREADS -= 1" 44*b64b0d1eSJesper Dangaard Brouer info "Number of threads to start: $THREADS (0 to $CPU_THREADS)" 45*b64b0d1eSJesper Dangaard Brouer ;; 46*b64b0d1eSJesper Dangaard Brouer c) 47*b64b0d1eSJesper Dangaard Brouer export CLONE_SKB=$OPTARG 48*b64b0d1eSJesper Dangaard Brouer info "CLONE_SKB=$CLONE_SKB" 49*b64b0d1eSJesper Dangaard Brouer ;; 50*b64b0d1eSJesper Dangaard Brouer b) 51*b64b0d1eSJesper Dangaard Brouer export BURST=$OPTARG 52*b64b0d1eSJesper Dangaard Brouer info "SKB bursting: BURST=$BURST" 53*b64b0d1eSJesper Dangaard Brouer ;; 54*b64b0d1eSJesper Dangaard Brouer v) 55*b64b0d1eSJesper Dangaard Brouer export VERBOSE=yes 56*b64b0d1eSJesper Dangaard Brouer info "Verbose mode: VERBOSE=$VERBOSE" 57*b64b0d1eSJesper Dangaard Brouer ;; 58*b64b0d1eSJesper Dangaard Brouer x) 59*b64b0d1eSJesper Dangaard Brouer export DEBUG=yes 60*b64b0d1eSJesper Dangaard Brouer info "Debug mode: DEBUG=$DEBUG" 61*b64b0d1eSJesper Dangaard Brouer ;; 62*b64b0d1eSJesper Dangaard Brouer h|?|*) 63*b64b0d1eSJesper Dangaard Brouer usage; 64*b64b0d1eSJesper Dangaard Brouer err 2 "[ERROR] Unknown parameters!!!" 65*b64b0d1eSJesper Dangaard Brouer esac 66*b64b0d1eSJesper Dangaard Brouerdone 67*b64b0d1eSJesper Dangaard Brouershift $(( $OPTIND - 1 )) 68*b64b0d1eSJesper Dangaard Brouer 69*b64b0d1eSJesper Dangaard Brouerif [ -z "$PKT_SIZE" ]; then 70*b64b0d1eSJesper Dangaard Brouer # NIC adds 4 bytes CRC 71*b64b0d1eSJesper Dangaard Brouer export PKT_SIZE=60 72*b64b0d1eSJesper Dangaard Brouer info "Default packet size set to: set to: $PKT_SIZE bytes" 73*b64b0d1eSJesper Dangaard Brouerfi 74*b64b0d1eSJesper Dangaard Brouer 75*b64b0d1eSJesper Dangaard Brouerif [ -z "$THREADS" ]; then 76*b64b0d1eSJesper Dangaard Brouer # Zero CPU threads means one thread, because CPU numbers are zero indexed 77*b64b0d1eSJesper Dangaard Brouer export CPU_THREADS=0 78*b64b0d1eSJesper Dangaard Brouer export THREADS=1 79*b64b0d1eSJesper Dangaard Brouerfi 80*b64b0d1eSJesper Dangaard Brouer 81*b64b0d1eSJesper Dangaard Brouerif [ -z "$DEV" ]; then 82*b64b0d1eSJesper Dangaard Brouer usage 83*b64b0d1eSJesper Dangaard Brouer err 2 "Please specify output device" 84*b64b0d1eSJesper Dangaard Brouerfi 85*b64b0d1eSJesper Dangaard Brouer 86*b64b0d1eSJesper Dangaard Brouerif [ -z "$DST_MAC" ]; then 87*b64b0d1eSJesper Dangaard Brouer warn "Missing destination MAC address" 88*b64b0d1eSJesper Dangaard Brouerfi 89*b64b0d1eSJesper Dangaard Brouer 90*b64b0d1eSJesper Dangaard Brouerif [ -z "$DEST_IP" ]; then 91*b64b0d1eSJesper Dangaard Brouer warn "Missing destination IP address" 92*b64b0d1eSJesper Dangaard Brouerfi 93*b64b0d1eSJesper Dangaard Brouer 94*b64b0d1eSJesper Dangaard Brouerif [ ! -d /proc/net/pktgen ]; then 95*b64b0d1eSJesper Dangaard Brouer info "Loading kernel module: pktgen" 96*b64b0d1eSJesper Dangaard Brouer modprobe pktgen 97*b64b0d1eSJesper Dangaard Brouerfi 98