Commit c8fd4852 authored by Igor Russkikh's avatar Igor Russkikh Committed by David S. Miller
Browse files

samples: pktgen: new append mode



To configure various complex flows we for sure can create custom
pktgen init scripts, but sometimes thats not that easy.

New "-a" (append) option in all the existing sample scripts allows
to append more "devices" into pktgen threads.

The most straightforward usecases for that are:
- using multiple devices. We have to generate full linerate on
all physical functions (ports) of our multiport device.
- pushing multiple flows (with different packet options)

Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ef700f2e
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -28,11 +28,28 @@ across the sample scripts. Usage example is printed on errors::
  -b : ($BURST)     HW level bursting of SKBs
  -v : ($VERBOSE)   verbose
  -x : ($DEBUG)     debug
  -6 : ($IP6)       IPv6
  -w : ($DELAY)     Tx Delay value (ns)
  -a : ($APPEND)    Script will not reset generator's state, but will append its config

The global variable being set is also listed.  E.g. the required
interface/device parameter "-i" sets variable $DEV.

"-a" parameter may be used to create different flows simultaneously.
In this mode script will keep the existing config, will append its settings.
In this mode you'll have to manually run traffic with "pg_ctrl start".

For example you may use:

    source ./samples/pktgen/functions.sh
    pg_ctrl reset
    # add first device
    ./pktgen_sample06_numa_awared_queue_irq_affinity.sh -a -i ens1f0 -m 34:80:0d:a3:fc:c9 -t 8
    # add second device
    ./pktgen_sample06_numa_awared_queue_irq_affinity.sh -a -i ens1f1 -m 34:80:0d:a3:fc:c9 -t 8
    # run joint traffic on two devs
    pg_ctrl start

Common functions
----------------
The functions.sh file provides; Three different shell functions for
+6 −1
Original line number Diff line number Diff line
@@ -108,7 +108,12 @@ function pgset() {
    fi
}

[[ $EUID -eq 0 ]] && trap 'pg_ctrl "reset"' EXIT
if [[ -z "$APPEND" ]]; then
	if [[ $EUID -eq 0 ]]; then
		# Cleanup pktgen setup on exit if thats not "append mode"
		trap 'pg_ctrl "reset"' EXIT
	fi
fi

## -- General shell tricks --

+6 −1
Original line number Diff line number Diff line
@@ -20,12 +20,13 @@ function usage() {
    echo "  -x : (\$DEBUG)     debug"
    echo "  -6 : (\$IP6)       IPv6"
    echo "  -w : (\$DELAY)     Tx Delay value (ns)"
    echo "  -a : (\$APPEND)    Script will not reset generator's state, but will append its config"
    echo ""
}

##  --- Parse command line arguments / parameters ---
## echo "Commandline options:"
while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6" option; do
while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6a" option; do
    case $option in
        i) # interface
          export DEV=$OPTARG
@@ -83,6 +84,10 @@ while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6" option; do
	  export IP6=6
	  info "IP6: IP6=$IP6"
	  ;;
        a)
          export APPEND=yes
          info "Append mode: APPEND=$APPEND"
          ;;
        h|?|*)
          usage;
          err 2 "[ERROR] Unknown parameters!!!"
+13 −9
Original line number Diff line number Diff line
@@ -37,11 +37,11 @@ UDP_SRC_MAX=109

# General cleanup everything since last run
# (especially important if other threads were configured by other scripts)
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Add remove all other devices and add_device $DEV to thread 0
thread=0
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $DEV

# How many packets to send (zero means indefinitely)
@@ -77,6 +77,7 @@ pg_set $DEV "flag UDPSRC_RND"
pg_set $DEV "udp_src_min $UDP_SRC_MIN"
pg_set $DEV "udp_src_max $UDP_SRC_MAX"

if [ -z "$APPEND" ]; then
    # start_run
    echo "Running... ctrl^C to stop" >&2
    pg_ctrl "start"
@@ -85,3 +86,6 @@ echo "Done" >&2
    # Print results
    echo "Result device: $DEV"
    cat /proc/net/pktgen/$DEV
else
    echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
 No newline at end of file
+16 −12
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ if [ -n "$DST_PORT" ]; then
fi

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
@@ -47,7 +47,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
    dev=${DEV}@${thread}

    # Add remove all other devices and add_device $dev to thread
    pg_thread $thread "rem_device_all"
    [ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
    pg_thread $thread "add_device" $dev

    # Notice config queue to map to cpu (mirrors smp_processor_id())
@@ -81,6 +81,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
    pg_set $dev "udp_src_max $UDP_SRC_MAX"
done

if [ -z "$APPEND" ]; then
    # start_run
    echo "Running... ctrl^C to stop" >&2
    pg_ctrl "start"
@@ -92,3 +93,6 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
        echo "Device: $dev"
        cat /proc/net/pktgen/$dev | grep -A2 "Result:"
    done
else
    echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
Loading