1#!/bin/bash 2# 3# Benchmark script: 4# - developed for benchmarking egress qdisc path, derived (more 5# like cut'n'pasted) from ingress benchmark script. 6# 7# Script for injecting packets into egress qdisc path of the stack 8# with pktgen "xmit_mode queue_xmit". 9# 10basedir=`dirname $0` 11source ${basedir}/functions.sh 12root_check_run_with_sudo "$@" 13 14# Parameter parsing via include 15source ${basedir}/parameters.sh 16if [ -z "$DEST_IP" ]; then 17 [ -z "$IP6" ] && DEST_IP="198.18.0.42" || DEST_IP="FD00::1" 18fi 19[ -z "$DST_MAC" ] && DST_MAC="90:e2:ba:ff:ff:ff" 20 21# Burst greater than 1 are invalid for queue_xmit mode 22if [[ -n "$BURST" ]]; then 23 err 1 "Bursting not supported for this mode" 24fi 25 26# Base Config 27DELAY="0" # Zero means max speed 28COUNT="10000000" # Zero means indefinitely 29 30# General cleanup everything since last run 31pg_ctrl "reset" 32 33# Threads are specified with parameter -t value in $THREADS 34for ((thread = 0; thread < $THREADS; thread++)); do 35 # The device name is extended with @name, using thread number to 36 # make then unique, but any name will do. 37 dev=${DEV}@${thread} 38 39 # Add remove all other devices and add_device $dev to thread 40 pg_thread $thread "rem_device_all" 41 pg_thread $thread "add_device" $dev 42 43 # Base config of dev 44 pg_set $dev "flag QUEUE_MAP_CPU" 45 pg_set $dev "count $COUNT" 46 pg_set $dev "pkt_size $PKT_SIZE" 47 pg_set $dev "delay $DELAY" 48 pg_set $dev "flag NO_TIMESTAMP" 49 50 # Destination 51 pg_set $dev "dst_mac $DST_MAC" 52 pg_set $dev "dst$IP6 $DEST_IP" 53 54 # Inject packet into TX qdisc egress path of stack 55 pg_set $dev "xmit_mode queue_xmit" 56done 57 58# start_run 59echo "Running... ctrl^C to stop" >&2 60pg_ctrl "start" 61echo "Done" >&2 62 63# Print results 64for ((thread = 0; thread < $THREADS; thread++)); do 65 dev=${DEV}@${thread} 66 echo "Device: $dev" 67 cat /proc/net/pktgen/$dev | grep -A2 "Result:" 68done 69