Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8c62a91 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'pktgen-scripts'

Jesper Dangaard Brouer says:

====================
pktgen samples: new scripts and removing older samples

This patchset is adding some pktgen sample scripts that I've been
using for a while[1], and they seams to relevant for more people.

Patchset also remove some of the older style pktgen samples.

[1] https://github.com/netoptimizer/network-testing/tree/master/pktgen


====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 53d94892 d3c937bb
Loading
Loading
Loading
Loading
+0 −67
Original line number Diff line number Diff line
#!/bin/bash

#modprobe pktgen


function pgset() {
    local result

    echo $1 > $PGDEV

    result=`cat $PGDEV | fgrep "Result: OK:"`
    if [ "$result" = "" ]; then
         cat $PGDEV | fgrep Result:
    fi
}

# Config Start Here -----------------------------------------------------------


# thread config
# Each CPU has its own thread. One CPU example. We add eth1.

PGDEV=/proc/net/pktgen/kpktgend_0
  echo "Removing all devices"
 pgset "rem_device_all"
  echo "Adding eth1"
 pgset "add_device eth1"


# device config
# delay 0
# We need to do alloc for every skb since we cannot clone here.

CLONE_SKB="clone_skb 0"
# NIC adds 4 bytes CRC
PKT_SIZE="pkt_size 60"

# COUNT 0 means forever
#COUNT="count 0"
COUNT="count 10000000"
DELAY="delay 0"

PGDEV=/proc/net/pktgen/eth1
  echo "Configuring $PGDEV"
 pgset "$COUNT"
 pgset "$CLONE_SKB"
 pgset "$PKT_SIZE"
 pgset "$DELAY"
 # Random address with in the min-max range
 pgset "flag IPDST_RND"
 pgset "dst_min 10.0.0.0"
 pgset "dst_max 10.255.255.255"

 # 8k Concurrent flows at 4 pkts
 pgset "flows 8192"
 pgset "flowlen 4"

 pgset "dst_mac  00:04:23:08:91:dc"

# Time to run
PGDEV=/proc/net/pktgen/pgctrl

 echo "Running... ctrl^C to stop"
 trap true INT
 pgset "start"
 echo "Done"
 cat /proc/net/pktgen/eth1
+0 −64
Original line number Diff line number Diff line
#!/bin/bash

#modprobe pktgen


function pgset() {
    local result

    echo $1 > $PGDEV

    result=`cat $PGDEV | fgrep "Result: OK:"`
    if [ "$result" = "" ]; then
         cat $PGDEV | fgrep Result:
    fi
}

# Config Start Here -----------------------------------------------------------


# thread config
# Each CPU has its own thread. One CPU example. We add eth1.

PGDEV=/proc/net/pktgen/kpktgend_0
  echo "Removing all devices"
 pgset "rem_device_all"
  echo "Adding eth1"
 pgset "add_device eth1"


# device config
# delay 0

# We need to do alloc for every skb since we cannot clone here.

CLONE_SKB="clone_skb 0"
# NIC adds 4 bytes CRC
PKT_SIZE="pkt_size 60"

# COUNT 0 means forever
#COUNT="count 0"
COUNT="count 10000000"
DELAY="delay 0"

PGDEV=/proc/net/pktgen/eth1
  echo "Configuring $PGDEV"
 pgset "$COUNT"
 pgset "$CLONE_SKB"
 pgset "$PKT_SIZE"
 pgset "$DELAY"
 # Random address with in the min-max range
 pgset "flag IPDST_RND"
 pgset "dst_min 10.0.0.0"
 pgset "dst_max 10.255.255.255"

 pgset "dst_mac  00:04:23:08:91:dc"

# Time to run
PGDEV=/proc/net/pktgen/pgctrl

 echo "Running... ctrl^C to stop"
 trap true INT
 pgset "start"
 echo "Done"
 cat /proc/net/pktgen/eth1
+93 −0
Original line number Diff line number Diff line
#!/bin/bash
#
# Script example for many flows testing
#
# Number of simultaneous flows limited by variable $FLOWS
# and number of packets per flow controlled by variable $FLOWLEN
#
basedir=`dirname $0`
source ${basedir}/functions.sh
root_check_run_with_sudo "$@"

# Parameter parsing via include
source ${basedir}/parameters.sh
# Set some default params, if they didn't get set
[ -z "$DEST_IP" ]   && DEST_IP="198.18.0.42"
[ -z "$DST_MAC" ]   && DST_MAC="90:e2:ba:ff:ff:ff"
[ -z "$CLONE_SKB" ] && CLONE_SKB="0"

# NOTICE:  Script specific settings
# =======
# Limiting the number of concurrent flows ($FLOWS)
# and also set how many packets each flow contains ($FLOWLEN)
#
[ -z "$FLOWS" ]     && FLOWS="8000"
[ -z "$FLOWLEN" ]   && FLOWLEN="10"

# Base Config
DELAY="0"  # Zero means max speed
COUNT="0"  # Zero means indefinitely

if [[ -n "$BURST" ]]; then
    err 1 "Bursting not supported for this mode"
fi

# General cleanup everything since last run
pg_ctrl "reset"

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

    # Add remove all other devices and add_device $dev to thread
    pg_thread $thread "rem_device_all"
    pg_thread $thread "add_device" $dev

    # Base config
    pg_set $dev "flag QUEUE_MAP_CPU"
    pg_set $dev "count $COUNT"
    pg_set $dev "clone_skb $CLONE_SKB"
    pg_set $dev "pkt_size $PKT_SIZE"
    pg_set $dev "delay $DELAY"
    pg_set $dev "flag NO_TIMESTAMP"

    # Single destination
    pg_set $dev "dst_mac $DST_MAC"
    pg_set $dev "dst $DEST_IP"

    # Randomize source IP-addresses
    pg_set $dev "flag IPSRC_RND"
    pg_set $dev "src_min 198.18.0.0"
    pg_set $dev "src_max 198.19.255.255"

    # Limit number of flows (max 65535)
    pg_set $dev "flows $FLOWS"
    #
    # How many packets a flow will send, before flow "entry" is
    # re-generated/setup.
    pg_set $dev "flowlen $FLOWLEN"
    #
    # Flag FLOW_SEQ will cause $FLOWLEN packets from the same flow
    # being send back-to-back, before next flow is selected
    # incrementally.  This helps lookup caches, and is more realistic.
    #
    pg_set $dev "flag FLOW_SEQ"

done

# Run if user hits control-c
function print_result() {
    # Print results
    for ((thread = 0; thread < $THREADS; thread++)); do
	dev=${DEV}@${thread}
	echo "Device: $dev"
	cat /proc/net/pktgen/$dev | grep -A2 "Result:"
    done
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT

echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"

print_result
+81 −0
Original line number Diff line number Diff line
#!/bin/bash
#
# Script will generate one flow per thread (-t N)
#  - Same destination IP
#  - Fake source IPs for each flow (fixed based on thread number)
#
# Useful for scale testing on receiver, to see whether silo'ing flows
# works and scales.  For optimal scalability (on receiver) each
# separate-flow should not access shared variables/data. This script
# helps magnify any of these scaling issues by overloading the receiver.
#
basedir=`dirname $0`
source ${basedir}/functions.sh
root_check_run_with_sudo "$@"

# Parameter parsing via include
source ${basedir}/parameters.sh
# Set some default params, if they didn't get set
[ -z "$DEST_IP" ]   && DEST_IP="198.18.0.42"
[ -z "$DST_MAC" ]   && DST_MAC="90:e2:ba:ff:ff:ff"
[ -z "$CLONE_SKB" ] && CLONE_SKB="0"
[ -z "$BURST" ]     && BURST=32


# Base Config
DELAY="0"  # Zero means max speed
COUNT="0"  # Zero means indefinitely

# General cleanup everything since last run
pg_ctrl "reset"

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

    # Add remove all other devices and add_device $dev to thread
    pg_thread $thread "rem_device_all"
    pg_thread $thread "add_device" $dev

    # Base config
    pg_set $dev "flag QUEUE_MAP_CPU"
    pg_set $dev "count $COUNT"
    pg_set $dev "clone_skb $CLONE_SKB"
    pg_set $dev "pkt_size $PKT_SIZE"
    pg_set $dev "delay $DELAY"
    pg_set $dev "flag NO_TIMESTAMP"

    # Single destination
    pg_set $dev "dst_mac $DST_MAC"
    pg_set $dev "dst $DEST_IP"

    # Setup source IP-addresses based on thread number
    pg_set $dev "src_min 198.18.$((thread+1)).1"
    pg_set $dev "src_max 198.18.$((thread+1)).1"

    # Setup burst, for easy testing -b 0 disable bursting
    # (internally in pktgen default and minimum burst=1)
    if [[ ${BURST} -ne 0 ]]; then
	pg_set $dev "burst $BURST"
    else
	info "$dev: Not using burst"
    fi

done

# Run if user hits control-c
function print_result() {
    # Print results
    for ((thread = 0; thread < $THREADS; thread++)); do
	dev=${DEV}@${thread}
	echo "Device: $dev"
	cat /proc/net/pktgen/$dev | grep -A2 "Result:"
    done
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT

echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"

print_result