b64b0d1e64
Preparing for removing existing samples/pktgen/ scripts, and replacing these with easier to use samples. This commit provides two helper shell files, that can be "included" by shell source'ing. Namely "functions.sh" and "parameters.sh". The parameters.sh file support easy and consistant parameter parsing across the sample scripts. Usage example is printed on errors. The functions.sh file provides, three new shell functions for configuring the different components of pktgen: pg_ctrl(), pg_thread() and pg_set(). A slightly improved version of the old pgset() function is also provided for backwards compat. The new functions correspond to pktgens different components. * pg_ctrl() control "pgctrl" (/proc/net/pktgen/pgctrl) * pg_thread() control the kernel threads and binding to devices * pg_set() control setup of individual devices These changes are borrowed from: https://github.com/netoptimizer/network-testing/tree/master/pktgen Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
98 lines
2.4 KiB
Bash
98 lines
2.4 KiB
Bash
#
|
|
# Common parameter parsing for pktgen scripts
|
|
#
|
|
|
|
function usage() {
|
|
echo ""
|
|
echo "Usage: $0 [-vx] -i ethX"
|
|
echo " -i : (\$DEV) output interface/device (required)"
|
|
echo " -s : (\$PKT_SIZE) packet size"
|
|
echo " -d : (\$DEST_IP) destination IP"
|
|
echo " -m : (\$DST_MAC) destination MAC-addr"
|
|
echo " -t : (\$THREADS) threads to start"
|
|
echo " -c : (\$SKB_CLONE) SKB clones send before alloc new SKB"
|
|
echo " -b : (\$BURST) HW level bursting of SKBs"
|
|
echo " -v : (\$VERBOSE) verbose"
|
|
echo " -x : (\$DEBUG) debug"
|
|
echo ""
|
|
}
|
|
|
|
## --- Parse command line arguments / parameters ---
|
|
## echo "Commandline options:"
|
|
while getopts "s:i:d:m:t:c:b:vxh" option; do
|
|
case $option in
|
|
i) # interface
|
|
export DEV=$OPTARG
|
|
info "Output device set to: DEV=$DEV"
|
|
;;
|
|
s)
|
|
export PKT_SIZE=$OPTARG
|
|
info "Packet size set to: PKT_SIZE=$PKT_SIZE bytes"
|
|
;;
|
|
d) # destination IP
|
|
export DEST_IP=$OPTARG
|
|
info "Destination IP set to: DEST_IP=$DEST_IP"
|
|
;;
|
|
m) # MAC
|
|
export DST_MAC=$OPTARG
|
|
info "Destination MAC set to: DST_MAC=$DST_MAC"
|
|
;;
|
|
t)
|
|
export THREADS=$OPTARG
|
|
export CPU_THREADS=$OPTARG
|
|
let "CPU_THREADS -= 1"
|
|
info "Number of threads to start: $THREADS (0 to $CPU_THREADS)"
|
|
;;
|
|
c)
|
|
export CLONE_SKB=$OPTARG
|
|
info "CLONE_SKB=$CLONE_SKB"
|
|
;;
|
|
b)
|
|
export BURST=$OPTARG
|
|
info "SKB bursting: BURST=$BURST"
|
|
;;
|
|
v)
|
|
export VERBOSE=yes
|
|
info "Verbose mode: VERBOSE=$VERBOSE"
|
|
;;
|
|
x)
|
|
export DEBUG=yes
|
|
info "Debug mode: DEBUG=$DEBUG"
|
|
;;
|
|
h|?|*)
|
|
usage;
|
|
err 2 "[ERROR] Unknown parameters!!!"
|
|
esac
|
|
done
|
|
shift $(( $OPTIND - 1 ))
|
|
|
|
if [ -z "$PKT_SIZE" ]; then
|
|
# NIC adds 4 bytes CRC
|
|
export PKT_SIZE=60
|
|
info "Default packet size set to: set to: $PKT_SIZE bytes"
|
|
fi
|
|
|
|
if [ -z "$THREADS" ]; then
|
|
# Zero CPU threads means one thread, because CPU numbers are zero indexed
|
|
export CPU_THREADS=0
|
|
export THREADS=1
|
|
fi
|
|
|
|
if [ -z "$DEV" ]; then
|
|
usage
|
|
err 2 "Please specify output device"
|
|
fi
|
|
|
|
if [ -z "$DST_MAC" ]; then
|
|
warn "Missing destination MAC address"
|
|
fi
|
|
|
|
if [ -z "$DEST_IP" ]; then
|
|
warn "Missing destination IP address"
|
|
fi
|
|
|
|
if [ ! -d /proc/net/pktgen ]; then
|
|
info "Loading kernel module: pktgen"
|
|
modprobe pktgen
|
|
fi
|