xref: /linux/samples/pktgen/pktgen_sample04_many_flows.sh (revision cdd5b5a9761fd66d17586e4f4ba6588c70e640ea)
115f2cbbdSJesper Dangaard Brouer#!/bin/bash
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
315f2cbbdSJesper Dangaard Brouer#
415f2cbbdSJesper Dangaard Brouer# Script example for many flows testing
515f2cbbdSJesper Dangaard Brouer#
615f2cbbdSJesper Dangaard Brouer# Number of simultaneous flows limited by variable $FLOWS
715f2cbbdSJesper Dangaard Brouer# and number of packets per flow controlled by variable $FLOWLEN
815f2cbbdSJesper Dangaard Brouer#
915f2cbbdSJesper Dangaard Brouerbasedir=`dirname $0`
1015f2cbbdSJesper Dangaard Brouersource ${basedir}/functions.sh
1115f2cbbdSJesper Dangaard Brouerroot_check_run_with_sudo "$@"
1215f2cbbdSJesper Dangaard Brouer
1315f2cbbdSJesper Dangaard Brouer# Parameter parsing via include
1415f2cbbdSJesper Dangaard Brouersource ${basedir}/parameters.sh
15*a27ac539SJ.J. Martzki
16*a27ac539SJ.J. Martzki# Trap EXIT first
17*a27ac539SJ.J. Martzkitrap_exit
18*a27ac539SJ.J. Martzki
1915f2cbbdSJesper Dangaard Brouer# Set some default params, if they didn't get set
200f0c4f1bSJuhee Kangif [ -z "$DEST_IP" ]; then
210f0c4f1bSJuhee Kang    [ -z "$IP6" ] && DEST_IP="198.18.0.42" || DEST_IP="FD00::1"
220f0c4f1bSJuhee Kangfi
2315f2cbbdSJesper Dangaard Brouer[ -z "$DST_MAC" ]   && DST_MAC="90:e2:ba:ff:ff:ff"
2415f2cbbdSJesper Dangaard Brouer[ -z "$CLONE_SKB" ] && CLONE_SKB="0"
2569137ea6STariq Toukan[ -z "$COUNT" ]     && COUNT="0" # Zero means indefinitely
2640f843eeSDaniel T. Leeif [ -n "$DEST_IP" ]; then
270f0c4f1bSJuhee Kang    validate_addr${IP6} $DEST_IP
280f0c4f1bSJuhee Kang    read -r DST_MIN DST_MAX <<< $(parse_addr${IP6} $DEST_IP)
2940f843eeSDaniel T. Leefi
306e32a74aSDaniel T. Leeif [ -n "$DST_PORT" ]; then
31723d2904SDaniel T. Lee    read -r UDP_DST_MIN UDP_DST_MAX <<< $(parse_ports $DST_PORT)
32723d2904SDaniel T. Lee    validate_ports $UDP_DST_MIN $UDP_DST_MAX
336e32a74aSDaniel T. Leefi
3415f2cbbdSJesper Dangaard Brouer
3515f2cbbdSJesper Dangaard Brouer# NOTICE:  Script specific settings
3615f2cbbdSJesper Dangaard Brouer# =======
3715f2cbbdSJesper Dangaard Brouer# Limiting the number of concurrent flows ($FLOWS)
3815f2cbbdSJesper Dangaard Brouer# and also set how many packets each flow contains ($FLOWLEN)
3915f2cbbdSJesper Dangaard Brouer#
4015f2cbbdSJesper Dangaard Brouer[ -z "$FLOWS" ]     && FLOWS="8000"
4115f2cbbdSJesper Dangaard Brouer[ -z "$FLOWLEN" ]   && FLOWLEN="10"
4215f2cbbdSJesper Dangaard Brouer
4315f2cbbdSJesper Dangaard Brouerif [[ -n "$BURST" ]]; then
4415f2cbbdSJesper Dangaard Brouer    err 1 "Bursting not supported for this mode"
4515f2cbbdSJesper Dangaard Brouerfi
4615f2cbbdSJesper Dangaard Brouer
4740f843eeSDaniel T. Lee# 198.18.0.0 / 198.19.255.255
4840f843eeSDaniel T. Leeread -r SRC_MIN SRC_MAX <<< $(parse_addr 198.18.0.0/15)
4940f843eeSDaniel T. Lee
5015f2cbbdSJesper Dangaard Brouer# General cleanup everything since last run
51c8fd4852SIgor Russkikh[ -z "$APPEND" ] && pg_ctrl "reset"
5215f2cbbdSJesper Dangaard Brouer
5315f2cbbdSJesper Dangaard Brouer# Threads are specified with parameter -t value in $THREADS
54e0e16672STariq Toukanfor ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
5515f2cbbdSJesper Dangaard Brouer    dev=${DEV}@${thread}
5615f2cbbdSJesper Dangaard Brouer
5715f2cbbdSJesper Dangaard Brouer    # Add remove all other devices and add_device $dev to thread
58c8fd4852SIgor Russkikh    [ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
5915f2cbbdSJesper Dangaard Brouer    pg_thread $thread "add_device" $dev
6015f2cbbdSJesper Dangaard Brouer
6115f2cbbdSJesper Dangaard Brouer    # Base config
6215f2cbbdSJesper Dangaard Brouer    pg_set $dev "flag QUEUE_MAP_CPU"
6315f2cbbdSJesper Dangaard Brouer    pg_set $dev "count $COUNT"
6415f2cbbdSJesper Dangaard Brouer    pg_set $dev "clone_skb $CLONE_SKB"
6515f2cbbdSJesper Dangaard Brouer    pg_set $dev "pkt_size $PKT_SIZE"
6615f2cbbdSJesper Dangaard Brouer    pg_set $dev "delay $DELAY"
6715f2cbbdSJesper Dangaard Brouer    pg_set $dev "flag NO_TIMESTAMP"
6815f2cbbdSJesper Dangaard Brouer
6915f2cbbdSJesper Dangaard Brouer    # Single destination
7015f2cbbdSJesper Dangaard Brouer    pg_set $dev "dst_mac $DST_MAC"
710f0c4f1bSJuhee Kang    pg_set $dev "dst${IP6}_min $DST_MIN"
720f0c4f1bSJuhee Kang    pg_set $dev "dst${IP6}_max $DST_MAX"
7315f2cbbdSJesper Dangaard Brouer
746e32a74aSDaniel T. Lee    if [ -n "$DST_PORT" ]; then
756e32a74aSDaniel T. Lee	# Single destination port or random port range
766e32a74aSDaniel T. Lee	pg_set $dev "flag UDPDST_RND"
77723d2904SDaniel T. Lee	pg_set $dev "udp_dst_min $UDP_DST_MIN"
78723d2904SDaniel T. Lee	pg_set $dev "udp_dst_max $UDP_DST_MAX"
796e32a74aSDaniel T. Lee    fi
806e32a74aSDaniel T. Lee
81460a9aa2SLorenzo Bianconi    [ ! -z "$UDP_CSUM" ] && pg_set $dev "flag UDPCSUM"
82460a9aa2SLorenzo Bianconi
8315f2cbbdSJesper Dangaard Brouer    # Randomize source IP-addresses
8415f2cbbdSJesper Dangaard Brouer    pg_set $dev "flag IPSRC_RND"
8540f843eeSDaniel T. Lee    pg_set $dev "src_min $SRC_MIN"
8640f843eeSDaniel T. Lee    pg_set $dev "src_max $SRC_MAX"
8715f2cbbdSJesper Dangaard Brouer
8815f2cbbdSJesper Dangaard Brouer    # Limit number of flows (max 65535)
8915f2cbbdSJesper Dangaard Brouer    pg_set $dev "flows $FLOWS"
9015f2cbbdSJesper Dangaard Brouer    #
9115f2cbbdSJesper Dangaard Brouer    # How many packets a flow will send, before flow "entry" is
9215f2cbbdSJesper Dangaard Brouer    # re-generated/setup.
9315f2cbbdSJesper Dangaard Brouer    pg_set $dev "flowlen $FLOWLEN"
9415f2cbbdSJesper Dangaard Brouer    #
9515f2cbbdSJesper Dangaard Brouer    # Flag FLOW_SEQ will cause $FLOWLEN packets from the same flow
9615f2cbbdSJesper Dangaard Brouer    # being send back-to-back, before next flow is selected
9715f2cbbdSJesper Dangaard Brouer    # incrementally.  This helps lookup caches, and is more realistic.
9815f2cbbdSJesper Dangaard Brouer    #
9915f2cbbdSJesper Dangaard Brouer    pg_set $dev "flag FLOW_SEQ"
10015f2cbbdSJesper Dangaard Brouer
10115f2cbbdSJesper Dangaard Brouerdone
10215f2cbbdSJesper Dangaard Brouer
10315f2cbbdSJesper Dangaard Brouer# Run if user hits control-c
10415f2cbbdSJesper Dangaard Brouerfunction print_result() {
10515f2cbbdSJesper Dangaard Brouer    # Print results
106e0e16672STariq Toukan    for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
10715f2cbbdSJesper Dangaard Brouer	dev=${DEV}@${thread}
10815f2cbbdSJesper Dangaard Brouer	echo "Device: $dev"
10915f2cbbdSJesper Dangaard Brouer	cat /proc/net/pktgen/$dev | grep -A2 "Result:"
11015f2cbbdSJesper Dangaard Brouer    done
11115f2cbbdSJesper Dangaard Brouer}
11215f2cbbdSJesper Dangaard Brouer# trap keyboard interrupt (Ctrl-C)
11315f2cbbdSJesper Dangaard Brouertrap true SIGINT
11415f2cbbdSJesper Dangaard Brouer
115c8fd4852SIgor Russkikhif [ -z "$APPEND" ]; then
11615f2cbbdSJesper Dangaard Brouer    echo "Running... ctrl^C to stop" >&2
11715f2cbbdSJesper Dangaard Brouer    pg_ctrl "start"
11815f2cbbdSJesper Dangaard Brouer
11915f2cbbdSJesper Dangaard Brouer    print_result
120c8fd4852SIgor Russkikhelse
121c8fd4852SIgor Russkikh    echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
122c8fd4852SIgor Russkikhfi
123