#! /bin/bash

# set -x

modprobe pktgen

function pgset () {
    local result

    echo $1 > $PGDEV

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

function pg () {
    echo inject > $PGDEV
    cat $PGDEV
}

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


# thread config

NETDEV=eth3
PGDEV=/proc/net/pktgen/kpktgend_0
echo "Removing all devices"
pgset "rem_device_all" 
echo "Adding $NETDEV"
pgset "add_device $NETDEV" 
echo "Setting max_before_softirq 10000"
pgset "max_before_softirq 10000"


# device config

# NIC adds 4 bytes CRC
PKT_SIZE="124"

FLOWS="20" # (*1024)
COUNT="10000000"

PGDEV=/proc/net/pktgen/$NETDEV
echo "Configuring $PGDEV"
pgset "clone_skb 0"
pgset "count $COUNT"
pgset "delay 0"
pgset "pkt_size $PKT_SIZE"
if [ "$NETDEV" == eth4 ]; then
	pgset "dst_mac 00:1b:21:72:2d:36"
	pgset "dst 192.168.201.5"
else
	pgset "dst_mac 00:1b:21:72:2d:35"
	#pgset "dst 192.168.200.5"
	pgset "dst_min 10.0.0.0"
	pgset "dst_max 10.0.3.255"
fi
pgset "udp_src_min 1000"
pgset "udp_src_max $((1000 + $FLOWS - 1))"
pgset "queue_map_min 0"
pgset "queue_map_max 7"
#pgset "flows $FLOWS"
#pgset "flowlen $(($COUNT / $FLOWS))"
#pgset "rate 1000M"
pgset "ratep 450000"


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

date
echo "Running... ctrl^C to stop"
pgset "start" 
echo "Done"
date

# Result can be vieved in /proc/net/pktgen/$NETDEV
cat /proc/net/pktgen/$NETDEV
