- add netmap (FreeBSD header files need to be updated with this) - move prototype perl scripts to prototype/ folder - create basic structure for sipcap app (no code yet)
83 lines
1.9 KiB
Bash
Executable File
83 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
#set -x
|
|
|
|
|
|
function pgset()
|
|
{
|
|
local result
|
|
|
|
echo $1 > ${PGDEV}
|
|
|
|
result=$(cat $PGDEV | fgrep "Result: OK:")
|
|
if [ "$result" = "" ]; then
|
|
cat $PGDEV | fgrep "Result:"
|
|
fi
|
|
}
|
|
|
|
|
|
##################### Script configuration ######################
|
|
N="$1" # number of TX kthreads minus one
|
|
if [ -z "$1" ]; then
|
|
N=0
|
|
fi
|
|
NCPUS="7" # number of CPUs on your machine minus one
|
|
IF="enp1s0f1" # network interface to test
|
|
DST_IP="10.216.8.1" # destination IP address
|
|
DST_MAC="00:1b:21:80:e7:d9" # destination MAC address
|
|
PKT_SIZE="60" # packet size
|
|
PKT_COUNT="10000000" # number of packets to send
|
|
CLONE_SKB="10000" # how many times a sk_buff is recycled
|
|
|
|
|
|
# Load pktgen kernel module
|
|
modprobe pktgen
|
|
|
|
|
|
# Clean the configuration for all the CPU-kthread (from 0 to ${NCPUS})
|
|
IDX=$(seq 0 1 ${NCPUS})
|
|
for cpu in ${IDX}; do
|
|
PGDEV="/proc/net/pktgen/kpktgend_${cpu}"
|
|
echo "Removing all devices (${cpu})"
|
|
pgset "rem_device_all"
|
|
done
|
|
|
|
IDX=$(seq 0 1 ${N})
|
|
for cpu in ${IDX}; do
|
|
# kthread-device configuration
|
|
PGDEV="/proc/net/pktgen/kpktgend_${cpu}"
|
|
echo "Configuring $PGDEV"
|
|
echo "Adding ${IF}@${cpu}"
|
|
pgset "add_device ${IF}@${cpu}"
|
|
|
|
# Packets/mode configuration
|
|
PGDEV="/proc/net/pktgen/${IF}@${cpu}"
|
|
echo "Configuring $PGDEV"
|
|
pgset "count ${PKT_COUNT}"
|
|
pgset "clone_skb ${CLONE_SKB}"
|
|
pgset "pkt_size ${PKT_SIZE}"
|
|
pgset "delay 0"
|
|
pgset "dst $DST_IP"
|
|
pgset "dst_mac $DST_MAC"
|
|
pgset "flag QUEUE_MAP_CPU"
|
|
|
|
echo ""
|
|
done
|
|
|
|
|
|
# Run
|
|
PGDEV="/proc/net/pktgen/pgctrl"
|
|
echo "Running... Ctrl-C to stop"
|
|
pgset "start"
|
|
echo "Done."
|
|
|
|
# Show results
|
|
NUMS=""
|
|
for cpu in ${IDX}; do
|
|
TMP=$(cat /proc/net/pktgen/${IF}@${cpu} | grep -o "[0-9]\+pps" | grep -o "[0-9]\+")
|
|
echo "$cpu $TMP"
|
|
NUMS="${NUMS} ${TMP}"
|
|
done
|
|
|
|
echo "Total TX rate: $(echo $NUMS | tr ' ' '+' | bc)"
|