xref: /mOS-networking-stack/setup.sh (revision cfb1a230)
176404edcSAsim Jamshed#! /bin/bash
276404edcSAsim Jamshed
376404edcSAsim Jamshed############################ Common Utilities ################################
4d270d183SAsim JamshedGREEN='\033[0;32m'
5d270d183SAsim JamshedRED='\033[0;31m'
6d270d183SAsim JamshedNC='\033[0m'
7d270d183SAsim Jamshed
876404edcSAsim JamshedFL_PCAP=1
976404edcSAsim JamshedFL_DPDK=2
10522d5c66SAsim JamshedFL_NETMAP=3
1176404edcSAsim Jamshed
1276404edcSAsim Jamshed# vercomp returns 0 (=), 1 (>), or 2 (<)
1376404edcSAsim Jamshedvercomp () {
1476404edcSAsim Jamshed    if [[ $1 == $2 ]]
1576404edcSAsim Jamshed    then
1676404edcSAsim Jamshed        return 0
1776404edcSAsim Jamshed    fi
1876404edcSAsim Jamshed    local IFS=.
1976404edcSAsim Jamshed    local i ver1=($1) ver2=($2)
2076404edcSAsim Jamshed    # fill empty fields in ver1 with zeros
2176404edcSAsim Jamshed    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
2276404edcSAsim Jamshed    do
2376404edcSAsim Jamshed        ver1[i]=0
2476404edcSAsim Jamshed    done
2576404edcSAsim Jamshed    for ((i=0; i<${#ver1[@]}; i++))
2676404edcSAsim Jamshed    do
2776404edcSAsim Jamshed        if [[ -z ${ver2[i]} ]]
2876404edcSAsim Jamshed        then
2976404edcSAsim Jamshed            # fill empty fields in ver2 with zeros
3076404edcSAsim Jamshed            ver2[i]=0
3176404edcSAsim Jamshed        fi
3276404edcSAsim Jamshed        if ((10#${ver1[i]} > 10#${ver2[i]}))
3376404edcSAsim Jamshed        then
3476404edcSAsim Jamshed            return 1
3576404edcSAsim Jamshed        fi
3676404edcSAsim Jamshed        if ((10#${ver1[i]} < 10#${ver2[i]}))
3776404edcSAsim Jamshed        then
3876404edcSAsim Jamshed            return 2
3976404edcSAsim Jamshed        fi
4076404edcSAsim Jamshed    done
4176404edcSAsim Jamshed    return 0
4276404edcSAsim Jamshed}
4376404edcSAsim Jamshed
4476404edcSAsim Jamshed# valid_ip_addr returns 1 for valid ip address
4576404edcSAsim Jamshedvalid_ip_addr()
4676404edcSAsim Jamshed{
4776404edcSAsim Jamshed    local  ip=$1
4876404edcSAsim Jamshed    local  stat=1
4976404edcSAsim Jamshed
5076404edcSAsim Jamshed    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
5176404edcSAsim Jamshed        OIFS=$IFS
5276404edcSAsim Jamshed        IFS='.'
5376404edcSAsim Jamshed        ip=($ip)
5476404edcSAsim Jamshed        IFS=$OIFS
5576404edcSAsim Jamshed        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
5676404edcSAsim Jamshed            && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
5776404edcSAsim Jamshed        stat=$?
5876404edcSAsim Jamshed    fi
5976404edcSAsim Jamshed    return $stat
6076404edcSAsim Jamshed}
6176404edcSAsim Jamshed
6276404edcSAsim Jamshed# Create a mos.conf file
6376404edcSAsim Jamshedcreate_config()
6476404edcSAsim Jamshed{
6576404edcSAsim Jamshed    cd $CUR_DIR
6676404edcSAsim Jamshed    mkdir -p $2
6776404edcSAsim Jamshed    CONF_FILE=$2/mos.conf
683ae9e016SAsim Jamshed    CONF_MASTER_FILE=$2/mos-master.conf
693ae9e016SAsim Jamshed    CONF_SLAVE_FILE=$2/mos-slave.conf
7076404edcSAsim Jamshed
7176404edcSAsim Jamshed    echo
7276404edcSAsim Jamshed    echo "----------------------------------------"
7376404edcSAsim Jamshed    echo "Creating mos.conf file in $2"
7476404edcSAsim Jamshed    echo "----------------------------------------"
7576404edcSAsim Jamshed
7676404edcSAsim Jamshed    if [ -f $CONF_FILE ]; then
7776404edcSAsim Jamshed	echo
7876404edcSAsim Jamshed	echo "The config file $2/mos.conf already exists."
7976404edcSAsim Jamshed	echo "Skip writing a new config file.."
8076404edcSAsim Jamshed	return
8176404edcSAsim Jamshed    fi
8276404edcSAsim Jamshed
8376404edcSAsim Jamshed    # Get the number of CPUs and translate it into CPU mask
8476404edcSAsim Jamshed    let "z=2**$(nproc)-1"
8576404edcSAsim Jamshed    CPU_MASK=$(printf '0x%04X\n' $z)
8676404edcSAsim Jamshed
8776404edcSAsim Jamshed    # Get # of CPU sockets
8876404edcSAsim Jamshed    let "sockets=$(cat /proc/cpuinfo | grep "physical id" | awk '{print $4}' | sort -ur | head -n 1) + 1"
8976404edcSAsim Jamshed
9076404edcSAsim Jamshed    # Get the number of memory channels
9176404edcSAsim Jamshed    command -v dmidecode >/dev/null &&
9276404edcSAsim Jamshed    let "NUM_MEMCH=($(sudo dmidecode -t 17 | grep -c 'Size:')-$(sudo dmidecode -t 17 | grep -c 'Size: No Module'))/$sockets" ||
9376404edcSAsim Jamshed    { echo "dmidecode command not found. setting num_mem_ch = 4"; let "NUM_MEMCH=4"; }
9476404edcSAsim Jamshed
9576404edcSAsim Jamshed    # Get the number of interfaces
9676404edcSAsim Jamshed    counter=0
9776404edcSAsim Jamshed    if [[ $1 == $FL_DPDK ]]; then
9876404edcSAsim Jamshed	cd /sys/module/igb_uio/drivers/pci:igb_uio/
9976404edcSAsim Jamshed	DEV_NAME="dpdk"
100522d5c66SAsim Jamshed    elif [[ ( $1 != $FL_PCAP ) && ( $1 != $FL_NETMAP ) ]]; then
101522d5c66SAsim Jamshed	echo "invalid function call 1"
10276404edcSAsim Jamshed	exit 1
10376404edcSAsim Jamshed    fi
10476404edcSAsim Jamshed    for i in *
10576404edcSAsim Jamshed    do
10676404edcSAsim Jamshed	if [[ $i == *":"* ]]
10776404edcSAsim Jamshed	then
10876404edcSAsim Jamshed	    let "counter=$counter + 1"
10976404edcSAsim Jamshed	fi
11076404edcSAsim Jamshed    done
11176404edcSAsim Jamshed    cd $CUR_DIR
11276404edcSAsim Jamshed
11376404edcSAsim Jamshed    # Write up a new configuration file
11476404edcSAsim Jamshed    if [[ $1 == $FL_PCAP ]]; then
11576404edcSAsim Jamshed	cat .standalone-template.conf > $CONF_FILE
11676404edcSAsim Jamshed	DEVLIST=`ifconfig -s | grep -Eo '^[^ ]+' | tail -n+2`
11776404edcSAsim Jamshed	for dev in $DEVLIST; do
11876404edcSAsim Jamshed	    printf "Found $dev. Press y to select [y/N]: "
11976404edcSAsim Jamshed	    read option
12076404edcSAsim Jamshed	    if [[ "$option" == y* ]]; then
12176404edcSAsim Jamshed		DEVICE="\n\t\t$dev"
12276404edcSAsim Jamshed		DEVICEMASK="__coremask__devicemask"
12376404edcSAsim Jamshed		FMT=$(printf 's/__devicemask/%s %s/g' $DEVICE $DEVICEMASK)
12476404edcSAsim Jamshed		sed -i -e "$FMT" $CONF_FILE
12576404edcSAsim Jamshed
12676404edcSAsim Jamshed		DEVICE="$dev""__devicelist"
12776404edcSAsim Jamshed		FMT=$(printf 's/__devicelist/ %s/g' $DEVICE)
12876404edcSAsim Jamshed		sed -i -e "$FMT" $CONF_FILE
12976404edcSAsim Jamshed	    fi
13076404edcSAsim Jamshed	done
13176404edcSAsim Jamshed	sed -i -e 's/__devicemask//g' $CONF_FILE
13276404edcSAsim Jamshed	sed -i -e 's/__devicelist//g' $CONF_FILE
13376404edcSAsim Jamshed	sed -i -e 's/__coremask/0x0001/g' $CONF_FILE
13476404edcSAsim Jamshed	sed -i -e 's/__num_memch//g' $CONF_FILE
13576404edcSAsim Jamshed	sed -i -e 's/__forward/1/g' $CONF_FILE
1363ae9e016SAsim Jamshed	sed -i -e 's/__multiprocess//g' $CONF_FILE
13776404edcSAsim Jamshed
138522d5c66SAsim Jamshed    elif [[ $1 == $FL_NETMAP ]]; then
139522d5c66SAsim Jamshed	if [ "$3" = "epserver" ] || [ "$3" = "epwget" ] ; then
140522d5c66SAsim Jamshed	    cat .end-template.conf > $CONF_FILE
141522d5c66SAsim Jamshed	else
142522d5c66SAsim Jamshed	    cat .standalone-template.conf > $CONF_FILE
143522d5c66SAsim Jamshed	fi
144522d5c66SAsim Jamshed
145522d5c66SAsim Jamshed	DEVLIST=`ifconfig -s | grep -Eo '^[^ ]+' | tail -n+2`
146522d5c66SAsim Jamshed	for dev in $DEVLIST; do
147522d5c66SAsim Jamshed	    printf "Found $dev. Press y to select [y/N]: "
148522d5c66SAsim Jamshed	    read option
149522d5c66SAsim Jamshed	    if [[ "$option" == y* ]]; then
150522d5c66SAsim Jamshed		DEVICE="\n\t\t$dev"
151522d5c66SAsim Jamshed		DEVICEMASK="__coremask__devicemask"
152522d5c66SAsim Jamshed		FMT=$(printf 's/__devicemask/%s %s/g' $DEVICE $DEVICEMASK)
153522d5c66SAsim Jamshed		sed -i -e "$FMT" $CONF_FILE
154522d5c66SAsim Jamshed
155522d5c66SAsim Jamshed		DEVICE="$dev""__devicelist"
156522d5c66SAsim Jamshed		FMT=$(printf 's/__devicelist/ %s/g' $DEVICE)
157522d5c66SAsim Jamshed		sed -i -e "$FMT" $CONF_FILE
158522d5c66SAsim Jamshed	    fi
159522d5c66SAsim Jamshed	done
160522d5c66SAsim Jamshed	sed -i -e 's/__devicemask//g' $CONF_FILE
161522d5c66SAsim Jamshed	sed -i -e 's/__devicelist//g' $CONF_FILE
162522d5c66SAsim Jamshed	sed -i -e 's/__coremask/'$CPU_MASK'/g' $CONF_FILE
163522d5c66SAsim Jamshed	sed -i -e 's/__num_memch//g' $CONF_FILE
164522d5c66SAsim Jamshed	sed -i -e 's/__forward/1/g' $CONF_FILE
165522d5c66SAsim Jamshed	sed -i -e 's/__app/'$3'/g' $CONF_FILE
1663ae9e016SAsim Jamshed	sed -i -e 's/__multiprocess//g' $CONF_FILE
167522d5c66SAsim Jamshed
168522d5c66SAsim Jamshed	if [ "$3" = "nat" ] ; then
169522d5c66SAsim Jamshed	    sed -i -e 's/\# tcp_tw_interval = 30/tcp_tw_interval = 30/g' $CONF_FILE
170522d5c66SAsim Jamshed	fi
17176404edcSAsim Jamshed    else
17276404edcSAsim Jamshed	if [ "$3" = "epserver" ] || [ "$3" = "epwget" ] ; then
17376404edcSAsim Jamshed	    cat .end-template.conf > $CONF_FILE
1743ae9e016SAsim Jamshed	    cat .end-template.conf > $CONF_MASTER_FILE
1753ae9e016SAsim Jamshed	    cat .end-template.conf > $CONF_SLAVE_FILE
17676404edcSAsim Jamshed	else
17776404edcSAsim Jamshed	    cat .standalone-template.conf > $CONF_FILE
17876404edcSAsim Jamshed	fi
17976404edcSAsim Jamshed	start=0
18076404edcSAsim Jamshed	while [ $start -lt $counter ]
18176404edcSAsim Jamshed	do
18276404edcSAsim Jamshed	    DEVICE="\n\t\t$DEV_NAME$(($start))"
18376404edcSAsim Jamshed	    DEVICEMASK="__coremask__devicemask"
18476404edcSAsim Jamshed	    FMT=$(printf 's/__devicemask/%s %s/g' $DEVICE $DEVICEMASK)
18576404edcSAsim Jamshed	    sed -i -e "$FMT" $CONF_FILE
18676404edcSAsim Jamshed
18776404edcSAsim Jamshed	    DEVICE="$DEV_NAME$(($start))__devicelist"
18876404edcSAsim Jamshed	    FMT=$(printf 's/__devicelist/ %s/g' $DEVICE)
18976404edcSAsim Jamshed	    sed -i -e "$FMT" $CONF_FILE
19076404edcSAsim Jamshed
19176404edcSAsim Jamshed	    let "start=$start + 1"
19276404edcSAsim Jamshed	done
19376404edcSAsim Jamshed	sed -i -e 's/__devicemask//g' $CONF_FILE
19476404edcSAsim Jamshed	sed -i -e 's/__devicelist//g' $CONF_FILE
19576404edcSAsim Jamshed	sed -i -e 's/__coremask/'$CPU_MASK'/g' $CONF_FILE
19676404edcSAsim Jamshed	sed -i -e 's/__forward/1/g' $CONF_FILE
19776404edcSAsim Jamshed	sed -i -e 's/__app/'$3'/g' $CONF_FILE
19876404edcSAsim Jamshed
19976404edcSAsim Jamshed	if [ "$3" = "nat" ] ; then
20076404edcSAsim Jamshed	    sed -i -e 's/\# tcp_tw_interval = 30/tcp_tw_interval = 30/g' $CONF_FILE
20176404edcSAsim Jamshed	fi
20276404edcSAsim Jamshed
20376404edcSAsim Jamshed	if [[ $1 == $FL_DPDK ]]; then
20476404edcSAsim Jamshed	    FMT=$(printf 's/__num_memch/%snb_mem_channels = %d%s/g' '# number of memory channels per socket [mandatory for DPDK]\n\t' $NUM_MEMCH '\n')
20576404edcSAsim Jamshed	    sed -i -e "$FMT" $CONF_FILE
2063ae9e016SAsim Jamshed	if [ "$3" = "epserver" ] || [ "$3" = "epwget" ] ; then
2073ae9e016SAsim Jamshed	    cp $CONF_FILE $CONF_MASTER_FILE
2083ae9e016SAsim Jamshed	    cp $CONF_FILE $CONF_SLAVE_FILE
2093ae9e016SAsim Jamshed	    sed -i -e 's/__multiprocess/multiprocess = 0 master/g' $CONF_MASTER_FILE
2103ae9e016SAsim Jamshed	    sed -i -e 's/__multiprocess/multiprocess = slave/g' $CONF_SLAVE_FILE
2113ae9e016SAsim Jamshed	fi
21276404edcSAsim Jamshed	else
213522d5c66SAsim Jamshed	    echo "invalid function call 2"
21476404edcSAsim Jamshed	    exit 1
21576404edcSAsim Jamshed	fi
2163ae9e016SAsim Jamshed
2173ae9e016SAsim Jamshed	sed -i -e 's/__multiprocess//g' $CONF_FILE
21876404edcSAsim Jamshed    fi
21976404edcSAsim Jamshed    echo
22076404edcSAsim Jamshed    cat $CONF_FILE
22176404edcSAsim Jamshed}
22276404edcSAsim Jamshed
22376404edcSAsim Jamshedcreate_makefile()
22476404edcSAsim Jamshed{
22576404edcSAsim Jamshed    cd $CUR_DIR/samples
22676404edcSAsim Jamshed    for d in * ; do
22776404edcSAsim Jamshed	if [ -f $CUR_DIR/samples/$d/Makefile.in ]; then
22876404edcSAsim Jamshed	    cp $CUR_DIR/samples/$d/Makefile.in $CUR_DIR/samples/$d/Makefile
22976404edcSAsim Jamshed	    if [[ $1 == $FL_DPDK ]]; then
230d270d183SAsim Jamshed		FMT=$(printf 's/__IO_LIB_ARGS/LIBS    += -m64 -g -pthread -lrt -march=native -Wl,-export-dynamic -L\$(RTE_SDK)\/\$(RTE_TARGET)\/lib -Wl,-lnuma -Wl,-lmtcp -Wl,-lpthread -Wl,-lrt -Wl,-ldl -Wl,$(shell cat \$(RTE_SDK)\/\$(RTE_TARGET)\/lib\/ldflags.txt)/g')
23176404edcSAsim Jamshed	    elif [[ $1 == $FL_PCAP ]]; then
23276404edcSAsim Jamshed		FMT=$(printf 's/__IO_LIB_ARGS/GCC_OPT += -D__thread="" -DBE_RESILIENT_TO_PACKET_DROP\\nINC += -DENABLE_PCAP\\nLIBS += -lpcap/g')
233522d5c66SAsim Jamshed	    elif [[ $1 == $FL_NETMAP ]]; then
234522d5c66SAsim Jamshed		FMT=$(printf 's/__IO_LIB_ARGS/GCC_OPT += -DENABLE_NETMAP/g')
23576404edcSAsim Jamshed	    fi
23676404edcSAsim Jamshed	    sed -i -e "$FMT" $CUR_DIR/samples/$d/Makefile
23776404edcSAsim Jamshed	fi
23876404edcSAsim Jamshed    done
23976404edcSAsim Jamshed}
24076404edcSAsim Jamshed
24176404edcSAsim Jamshed# Setup MOS library
24276404edcSAsim Jamshedsetup_mos_library() {
24376404edcSAsim Jamshed    echo "Start building up the MOS library"
24476404edcSAsim Jamshed    cd $CUR_DIR
24576404edcSAsim Jamshed
24676404edcSAsim Jamshed    if [[ $1 == $FL_DPDK ]]; then
24776404edcSAsim Jamshed    	cd $CUR_DIR/scripts/
24876404edcSAsim Jamshed	./configure --enable-dpdk
24976404edcSAsim Jamshed    elif [[ $1 == $FL_PCAP ]]; then
25076404edcSAsim Jamshed    	cd $CUR_DIR/scripts/
25176404edcSAsim Jamshed	./configure --enable-pcap
252522d5c66SAsim Jamshed    elif [[ $1 == $FL_NETMAP ]]; then
253522d5c66SAsim Jamshed    	cd $CUR_DIR/scripts/
254522d5c66SAsim Jamshed	./configure --enable-netmap
25576404edcSAsim Jamshed    fi
25676404edcSAsim Jamshed    cd $CUR_DIR/core/src
25776404edcSAsim Jamshed    make clean;make
25876404edcSAsim Jamshed    cd $CUR_DIR
25976404edcSAsim Jamshed    create_makefile $1
26076404edcSAsim Jamshed    echo
26176404edcSAsim Jamshed    echo "----------------------------------------------------------"
26276404edcSAsim Jamshed    echo "Done with MOS library setup"
26376404edcSAsim Jamshed    echo "----------------------------------------------------------"
26476404edcSAsim Jamshed    echo
26576404edcSAsim Jamshed}
26676404edcSAsim Jamshed
26776404edcSAsim Jamshed#############################################################################
26876404edcSAsim Jamshed
26976404edcSAsim Jamshed############################### DPDK Utilities ##############################
27076404edcSAsim Jamshed# Creates hugepage filesystem.
27176404edcSAsim Jamshedcreate_mnt_huge()
27276404edcSAsim Jamshed{
27376404edcSAsim Jamshed    echo "Creating /mnt/huge and mounting as hugetlbfs"
27476404edcSAsim Jamshed    sudo mkdir -p /mnt/huge
27576404edcSAsim Jamshed
27676404edcSAsim Jamshed    grep -s '/mnt/huge' /proc/mounts > /dev/null
27776404edcSAsim Jamshed    if [ $? -ne 0 ] ; then
27876404edcSAsim Jamshed	sudo mount -t hugetlbfs nodev /mnt/huge
27976404edcSAsim Jamshed    fi
28076404edcSAsim Jamshed}
28176404edcSAsim Jamshed
28276404edcSAsim Jamshed# Removes hugepage filesystem.
28376404edcSAsim Jamshedremove_mnt_huge()
28476404edcSAsim Jamshed{
28576404edcSAsim Jamshed    echo "Unmounting /mnt/huge and removing directory"
28676404edcSAsim Jamshed    grep -s '/mnt/huge' /proc/mounts > /dev/null
28776404edcSAsim Jamshed    if [ $? -eq 0 ] ; then
28876404edcSAsim Jamshed	sudo umount /mnt/huge
28976404edcSAsim Jamshed    fi
29076404edcSAsim Jamshed
29176404edcSAsim Jamshed    if [ -d /mnt/huge ] ; then
29276404edcSAsim Jamshed	sudo rm -R /mnt/huge
29376404edcSAsim Jamshed    fi
29476404edcSAsim Jamshed}
29576404edcSAsim Jamshed
29676404edcSAsim Jamshed# Unloads igb_uio.ko.
29776404edcSAsim Jamshedremove_igb_uio_module()
29876404edcSAsim Jamshed{
29976404edcSAsim Jamshed    echo "Unloading any existing DPDK UIO module"
30076404edcSAsim Jamshed    /sbin/lsmod | grep -s igb_uio > /dev/null
30176404edcSAsim Jamshed    if [ $? -eq 0 ] ; then
30276404edcSAsim Jamshed	sudo /sbin/rmmod igb_uio
30376404edcSAsim Jamshed    fi
304d270d183SAsim Jamshed
305d270d183SAsim Jamshed    /sbin/lsmod | grep -s dpdk_iface > /dev/null
306d270d183SAsim Jamshed    if [ $? -eq 0 ] ; then
307d270d183SAsim Jamshed	sudo /sbin/rmmod dpdk_iface.ko
308d270d183SAsim Jamshed    fi
30976404edcSAsim Jamshed}
31076404edcSAsim Jamshed
31176404edcSAsim Jamshed# Loads new igb_uio.ko (and uio module if needed).
31276404edcSAsim Jamshedload_igb_uio_module()
31376404edcSAsim Jamshed{
31476404edcSAsim Jamshed    if [ ! -f $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko ];then
31576404edcSAsim Jamshed	echo "## ERROR: Target does not have the DPDK UIO Kernel Module."
31676404edcSAsim Jamshed	echo "       To fix, please try to rebuild target."
31776404edcSAsim Jamshed	return
31876404edcSAsim Jamshed    fi
31976404edcSAsim Jamshed
320d270d183SAsim Jamshed    if lsmod | grep igb_uio &> /dev/null ; then
321d270d183SAsim Jamshed	:
322d270d183SAsim Jamshed    else
32376404edcSAsim Jamshed	/sbin/lsmod | grep -s uio > /dev/null
32476404edcSAsim Jamshed	if [ $? -ne 0 ] ; then
32576404edcSAsim Jamshed	    modinfo uio > /dev/null
32676404edcSAsim Jamshed	    if [ $? -eq 0 ]; then
32776404edcSAsim Jamshed		echo "Loading uio module"
32876404edcSAsim Jamshed		sudo /sbin/modprobe uio
32976404edcSAsim Jamshed	    fi
33076404edcSAsim Jamshed	fi
33176404edcSAsim Jamshed
33276404edcSAsim Jamshed	# UIO may be compiled into kernel, so it may not be an error if it can't
33376404edcSAsim Jamshed	# be loaded.
33476404edcSAsim Jamshed	echo "Loading DPDK UIO module"
33576404edcSAsim Jamshed	sudo /sbin/insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko
33676404edcSAsim Jamshed	if [ $? -ne 0 ] ; then
33776404edcSAsim Jamshed	    echo "## ERROR: Could not load kmod/igb_uio.ko."
33876404edcSAsim Jamshed	    quit
33976404edcSAsim Jamshed	fi
340d270d183SAsim Jamshed    fi
34176404edcSAsim Jamshed}
34276404edcSAsim Jamshed
34376404edcSAsim Jamshed# Removes all reserved hugepages.
34476404edcSAsim Jamshedclear_numa_pages()
34576404edcSAsim Jamshed{
34676404edcSAsim Jamshed    echo > .echo_tmp
34776404edcSAsim Jamshed    for d in /sys/devices/system/node/node? ; do
34876404edcSAsim Jamshed	echo "echo 0 > $d/hugepages/hugepages-2048kB/nr_hugepages" >> .echo_tmp
34976404edcSAsim Jamshed    done
35076404edcSAsim Jamshed    echo "Removing currently reserved hugepages"
35176404edcSAsim Jamshed    sudo sh .echo_tmp
35276404edcSAsim Jamshed    rm -f .echo_tmp
35376404edcSAsim Jamshed
35476404edcSAsim Jamshed    remove_mnt_huge
35576404edcSAsim Jamshed}
35676404edcSAsim Jamshed# Removes all reserved hugepages.
35776404edcSAsim Jamshedclear_non_numa_pages()
35876404edcSAsim Jamshed{
35976404edcSAsim Jamshed    echo > .echo_tmp
36076404edcSAsim Jamshed	echo "echo 0 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages" > .echo_tmp
36176404edcSAsim Jamshed    echo "Removing currently reserved hugepages"
36276404edcSAsim Jamshed    sudo sh .echo_tmp
36376404edcSAsim Jamshed    rm -f .echo_tmp
36476404edcSAsim Jamshed    remove_mnt_huge
36576404edcSAsim Jamshed}
36676404edcSAsim Jamshed
36776404edcSAsim Jamshed#
36876404edcSAsim Jamshed# Creates hugepages.
36976404edcSAsim Jamshed#
37076404edcSAsim Jamshedset_non_numa_pages_default()
37176404edcSAsim Jamshed{
37276404edcSAsim Jamshed	clear_non_numa_pages
37376404edcSAsim Jamshed    echo > .echo_tmp
37476404edcSAsim Jamshed	echo "Number of pages : 1024"
37576404edcSAsim Jamshed
37676404edcSAsim Jamshed	Pages=1024
37776404edcSAsim Jamshed	echo "echo $Pages > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages" >> .echo_tmp
37876404edcSAsim Jamshed
37976404edcSAsim Jamshed    echo "Reserving hugepages"
38076404edcSAsim Jamshed    sudo sh .echo_tmp
38176404edcSAsim Jamshed    rm -f .echo_tmp
38276404edcSAsim Jamshed
38376404edcSAsim Jamshed    create_mnt_huge
38476404edcSAsim Jamshed}
38576404edcSAsim Jamshed
38676404edcSAsim Jamshed#
38776404edcSAsim Jamshed# Creates hugepages.
38876404edcSAsim Jamshed#
38976404edcSAsim Jamshedset_non_numa_pages()
39076404edcSAsim Jamshed{
39176404edcSAsim Jamshed
39276404edcSAsim Jamshed	clear_non_numa_pages
39376404edcSAsim Jamshed
39476404edcSAsim Jamshed	echo ""
39576404edcSAsim Jamshed	echo "  Input the number of 2MB pages"
39676404edcSAsim Jamshed	echo "  Example: to have 128MB of hugepages available, enter '64' to"
39776404edcSAsim Jamshed	echo "  reserve 64 * 2MB pages"
39876404edcSAsim Jamshed	echo -n "Number of pages: "
39976404edcSAsim Jamshed	read Pages
40076404edcSAsim Jamshed
40176404edcSAsim Jamshed	echo "echo $Pages > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages" > .echo_tmp
40276404edcSAsim Jamshed
40376404edcSAsim Jamshed	echo "Reserving hugepages"
40476404edcSAsim Jamshed	sudo sh .echo_tmp
40576404edcSAsim Jamshed	rm -f .echo_tmp
40676404edcSAsim Jamshed
40776404edcSAsim Jamshed	create_mnt_huge
40876404edcSAsim Jamshed
40976404edcSAsim Jamshed}
41076404edcSAsim Jamshed
41176404edcSAsim Jamshed# Creates hugepages on specific NUMA nodes.
41276404edcSAsim Jamshedset_numa_pages_default()
41376404edcSAsim Jamshed{
41476404edcSAsim Jamshed	clear_numa_pages
41576404edcSAsim Jamshed    echo > .echo_tmp
41676404edcSAsim Jamshed    for d in /sys/devices/system/node/node? ; do
41776404edcSAsim Jamshed	node=$(basename $d)
41876404edcSAsim Jamshed	echo "Number of pages for $node: 1024"
41976404edcSAsim Jamshed	Pages=1024
42076404edcSAsim Jamshed	echo "echo $Pages > $d/hugepages/hugepages-2048kB/nr_hugepages" >> .echo_tmp
42176404edcSAsim Jamshed    done
42276404edcSAsim Jamshed    echo "Reserving hugepages"
42376404edcSAsim Jamshed    sudo sh .echo_tmp
42476404edcSAsim Jamshed    rm -f .echo_tmp
42576404edcSAsim Jamshed
42676404edcSAsim Jamshed    create_mnt_huge
42776404edcSAsim Jamshed}
42876404edcSAsim Jamshed
42976404edcSAsim Jamshed# Creates hugepages on specific NUMA nodes.
43076404edcSAsim Jamshedset_numa_pages()
43176404edcSAsim Jamshed{
43276404edcSAsim Jamshed	clear_numa_pages
43376404edcSAsim Jamshed    echo ""
43476404edcSAsim Jamshed    echo "  Input the number of 2MB pages for each node"
43576404edcSAsim Jamshed    echo "  Example: to have 128MB of hugepages available per node,"
43676404edcSAsim Jamshed    echo "  enter '64' to reserve 64 * 2MB pages on each node"
43776404edcSAsim Jamshed
43876404edcSAsim Jamshed    echo > .echo_tmp
43976404edcSAsim Jamshed    for d in /sys/devices/system/node/node? ; do
44076404edcSAsim Jamshed	node=$(basename $d)
44176404edcSAsim Jamshed	echo -n "Number of pages for $node: "
44276404edcSAsim Jamshed	read Pages
44376404edcSAsim Jamshed	echo "echo $Pages > $d/hugepages/hugepages-2048kB/nr_hugepages" >> .echo_tmp
44476404edcSAsim Jamshed    done
44576404edcSAsim Jamshed    echo "Reserving hugepages"
44676404edcSAsim Jamshed    sudo sh .echo_tmp
44776404edcSAsim Jamshed    rm -f .echo_tmp
44876404edcSAsim Jamshed
44976404edcSAsim Jamshed    create_mnt_huge
45076404edcSAsim Jamshed}
45176404edcSAsim Jamshed
4523ae9e016SAsim Jamshed# Uses dpdk-devbind.py to move devices to work with igb_uio
45376404edcSAsim Jamshedbind_nics_to_igb_uio()
45476404edcSAsim Jamshed{
45576404edcSAsim Jamshed    if  /sbin/lsmod  | grep -q igb_uio ; then
4560be44444SAsim Jamshed	${RTE_SDK}/usertools/dpdk-devbind.py --status
45776404edcSAsim Jamshed	echo ""
45876404edcSAsim Jamshed	echo "Enter PCI address of device(s) to bind to IGB UIO driver (e.g., \"04:00.0 04:00.1\")."
45976404edcSAsim Jamshed	echo -n "> "
46076404edcSAsim Jamshed	read PCI_PATH
46176404edcSAsim Jamshed
46276404edcSAsim Jamshed
4630be44444SAsim Jamshed	sudo ${RTE_SDK}/usertools/dpdk-devbind.py -b igb_uio $PCI_PATH && echo "OK"
46476404edcSAsim Jamshed    else
46576404edcSAsim Jamshed	echo "# Please load the 'igb_uio' kernel module before querying or "
46676404edcSAsim Jamshed	echo "# adjusting NIC device bindings"
46776404edcSAsim Jamshed    fi
468d270d183SAsim Jamshed
469d270d183SAsim Jamshed    # Create interfaces
470d270d183SAsim Jamshed    printf "Creating ${GREEN}dpdk$NC interface entries\n"
471d270d183SAsim Jamshed    cd dpdk-iface-kmod
472d270d183SAsim Jamshed    make
473d270d183SAsim Jamshed    if lsmod | grep dpdk_iface &> /dev/null ; then
474d270d183SAsim Jamshed	:
475d270d183SAsim Jamshed    else
476d270d183SAsim Jamshed	sudo insmod ./dpdk_iface.ko
477d270d183SAsim Jamshed    fi
478d270d183SAsim Jamshed    sudo -E make run
479d270d183SAsim Jamshed    cd ..
48076404edcSAsim Jamshed}
48176404edcSAsim Jamshed
48276404edcSAsim Jamshed#
4833ae9e016SAsim Jamshed# Uses dpdk-devbind.py to move devices to work with kernel drivers again
48476404edcSAsim Jamshed#
48576404edcSAsim Jamshedunbind_nics()
48676404edcSAsim Jamshed{
48776404edcSAsim Jamshed    DEVLIST=`ifconfig -s | grep -Eo '^[^ ]+' | tail -n+2`
48876404edcSAsim Jamshed    for dev in $DEVLIST
48976404edcSAsim Jamshed    do
49076404edcSAsim Jamshed	echo $dev
49176404edcSAsim Jamshed	if [[ "$dev" == dpdk* ]]; then
49276404edcSAsim Jamshed	    sudo ifconfig $dev down
49376404edcSAsim Jamshed	fi
49476404edcSAsim Jamshed    done
49576404edcSAsim Jamshed
4960be44444SAsim Jamshed    ${RTE_SDK}/usertools/dpdk-devbind.py --status
49776404edcSAsim Jamshed    echo ""
49876404edcSAsim Jamshed    echo -n "Enter PCI address of device to unbind: "
49976404edcSAsim Jamshed    read PCI_PATH
50076404edcSAsim Jamshed    echo ""
50176404edcSAsim Jamshed    echo -n "Enter name of kernel driver to bind the device to: "
50276404edcSAsim Jamshed    read DRV
5030be44444SAsim Jamshed    sudo ${RTE_SDK}/usertools/dpdk-devbind.py -b $DRV $PCI_PATH && echo "OK"
50476404edcSAsim Jamshed}
50576404edcSAsim Jamshed
50676404edcSAsim Jamshed# Brings up the interface of DPDK devices up
50776404edcSAsim Jamshedsetup_iface_dpdk()
50876404edcSAsim Jamshed{
50976404edcSAsim Jamshed    # First check whether igb_uio module is already loaded
51076404edcSAsim Jamshed    MODULE="igb_uio"
51176404edcSAsim Jamshed
51276404edcSAsim Jamshed    if sudo lsmod | grep "$MODULE" &> /dev/null ; then
51376404edcSAsim Jamshed	echo "$MODULE is loaded!"
51476404edcSAsim Jamshed    else
51576404edcSAsim Jamshed	echo "$MODULE is not loaded!"
51676404edcSAsim Jamshed	exit 1
51776404edcSAsim Jamshed    fi
51876404edcSAsim Jamshed
5198c9e1184SAsim Jamshed	# set ip address for dpdk-enabled interfaces in the system
5208c9e1184SAsim Jamshed	list=`basename -a /sys/class/net/dpdk*`
5218c9e1184SAsim Jamshed	for if_name in ${list//\\n/ }; do
52276404edcSAsim Jamshed
52376404edcSAsim Jamshed		while [ 1 ]; do
52476404edcSAsim Jamshed			echo
5258c9e1184SAsim Jamshed			echo "[$if_name] enter IP address[/mask] (e.g., 10.0.0.1[/24])"
52676404edcSAsim Jamshed			echo -n "> "
5273ceda200SAsim Jamshed			read line
5283ceda200SAsim Jamshed			ip_addr=`echo $line | awk -F '/' '{print $1}'`
5293ceda200SAsim Jamshed			mask=`echo $line | awk -F '/' '{print $2}'`
53076404edcSAsim Jamshed			valid_ip_addr $ip_addr
53176404edcSAsim Jamshed			if [ $? -eq 0 ]; then
53276404edcSAsim Jamshed				break
53376404edcSAsim Jamshed			fi
53476404edcSAsim Jamshed			echo "invalid IP address!" # continue
53576404edcSAsim Jamshed		done
5368c9e1184SAsim Jamshed
5373ceda200SAsim Jamshed		if [ "$mask" == "" ];then
5388c9e1184SAsim Jamshed			echo "sudo /sbin/ifconfig $if_name $ip_addr up"
5398c9e1184SAsim Jamshed			sudo /sbin/ifconfig $if_name $ip_addr up
5403ceda200SAsim Jamshed		else
5418c9e1184SAsim Jamshed			echo "sudo /sbin/ifconfig $if_name $ip_addr/$mask up"
5428c9e1184SAsim Jamshed			sudo /sbin/ifconfig $if_name $ip_addr/$mask up
5433ceda200SAsim Jamshed		fi
54476404edcSAsim Jamshed	done
5458c9e1184SAsim Jamshed
54676404edcSAsim Jamshed}
54776404edcSAsim Jamshed#############################################################################
54876404edcSAsim Jamshed
54976404edcSAsim Jamshed############################### DPDK ########################################
55076404edcSAsim Jamshedstep0_func_dpdk()
55176404edcSAsim Jamshed{
55276404edcSAsim Jamshed	if [ -d "/sys/devices/system/node" ]; then
55376404edcSAsim Jamshed		set_numa_pages_default
55476404edcSAsim Jamshed	else
55576404edcSAsim Jamshed		set_non_numa_pages_default
55676404edcSAsim Jamshed	fi
55776404edcSAsim Jamshed
55876404edcSAsim Jamshed    step2_func_dpdk
55976404edcSAsim Jamshed    step3_func_dpdk
56076404edcSAsim Jamshed    step4_func_dpdk
56176404edcSAsim Jamshed}
56276404edcSAsim Jamshedstep1_func_dpdk()
56376404edcSAsim Jamshed{
56476404edcSAsim Jamshed	if [ -d "/sys/devices/system/node" ]; then
56576404edcSAsim Jamshed		set_numa_pages
56676404edcSAsim Jamshed	else
56776404edcSAsim Jamshed		set_non_numa_pages
56876404edcSAsim Jamshed	fi
56976404edcSAsim Jamshed}
57076404edcSAsim Jamshedstep2_func_dpdk()
57176404edcSAsim Jamshed{
57276404edcSAsim Jamshed    load_igb_uio_module
57376404edcSAsim Jamshed    bind_nics_to_igb_uio
57476404edcSAsim Jamshed}
57576404edcSAsim Jamshedstep3_func_dpdk()
57676404edcSAsim Jamshed{
57776404edcSAsim Jamshed    setup_iface_dpdk $last_octet
57876404edcSAsim Jamshed}
57976404edcSAsim Jamshedstep4_func_dpdk()
58076404edcSAsim Jamshed{
58176404edcSAsim Jamshed    cd $CUR_DIR/samples
58276404edcSAsim Jamshed    for d in * ; do
58376404edcSAsim Jamshed	create_config $FL_DPDK "samples/$d/config" $d
58476404edcSAsim Jamshed    done
58576404edcSAsim Jamshed    echo
58676404edcSAsim Jamshed    echo "------------------------------------------------"
58776404edcSAsim Jamshed    echo "Done with configuration file setup."
58876404edcSAsim Jamshed    echo "Use the arp command to add static ARP entries"
58976404edcSAsim Jamshed    echo "------------------------------------------------"
59076404edcSAsim Jamshed}
59176404edcSAsim Jamshedstep5_func_dpdk()
59276404edcSAsim Jamshed{
59376404edcSAsim Jamshed    unbind_nics
59476404edcSAsim Jamshed}
59576404edcSAsim Jamshedstep6_func_dpdk()
59676404edcSAsim Jamshed{
59776404edcSAsim Jamshed    echo
59876404edcSAsim Jamshed    exit 1
59976404edcSAsim Jamshed}
60076404edcSAsim Jamshed#############################################################################
60176404edcSAsim Jamshed
60276404edcSAsim Jamshed############################### PCAP ########################################
60376404edcSAsim Jamshedstep0_func_pcap()
60476404edcSAsim Jamshed{
60576404edcSAsim Jamshed    cd $CUR_DIR/samples
60676404edcSAsim Jamshed    for d in * ; do
60776404edcSAsim Jamshed	if [ -d $CUR_DIR/samples/$d/config ]; then
60876404edcSAsim Jamshed	    create_config $FL_PCAP "samples/$d/config" $d
60976404edcSAsim Jamshed	fi
61076404edcSAsim Jamshed    done
61176404edcSAsim Jamshed    echo
61276404edcSAsim Jamshed    echo "------------------------------------------------"
61376404edcSAsim Jamshed    echo "Done with configuration file setup."
61476404edcSAsim Jamshed    echo "Use the arp command to add static ARP entries"
61576404edcSAsim Jamshed    echo "------------------------------------------------"
61676404edcSAsim Jamshed    exit 1
61776404edcSAsim Jamshed}
61876404edcSAsim Jamshed#############################################################################
61976404edcSAsim Jamshed
620522d5c66SAsim Jamshed############################## NETMAP #######################################
621522d5c66SAsim Jamshedstep0_func_netmap()
622522d5c66SAsim Jamshed{
623522d5c66SAsim Jamshed    cd $CUR_DIR/samples
624522d5c66SAsim Jamshed    for d in * ; do
625522d5c66SAsim Jamshed	if [ -d $CUR_DIR/samples/$d/config ]; then
626522d5c66SAsim Jamshed	    create_config $FL_NETMAP "samples/$d/config" $d
627522d5c66SAsim Jamshed	fi
628522d5c66SAsim Jamshed    done
629522d5c66SAsim Jamshed    echo
630522d5c66SAsim Jamshed    echo "------------------------------------------------"
631522d5c66SAsim Jamshed    echo "Done with configuration file setup."
632522d5c66SAsim Jamshed    echo "Use the arp command to add static ARP entries"
633522d5c66SAsim Jamshed    echo "------------------------------------------------"
634522d5c66SAsim Jamshed    exit 1
635522d5c66SAsim Jamshed}
636522d5c66SAsim Jamshed#############################################################################
637522d5c66SAsim Jamshed
63876404edcSAsim Jamshed############################# Main Script ###################################
639d270d183SAsim Jamshed# Get to script directory
640d270d183SAsim Jamshedcd $(dirname ${BASH_SOURCE[0]})/
64176404edcSAsim Jamshedexport CUR_DIR=$PWD
64276404edcSAsim Jamshedkerver=$(uname -r)
64376404edcSAsim Jamshed
64476404edcSAsim Jamshedif [ "$1" == "--compile-dpdk" ]; then
645d270d183SAsim Jamshed    # check if RTE_SDK and RTE_TARGET env variables exist
646d270d183SAsim Jamshed    if [[ -z "${RTE_SDK}" ]]; then
647d270d183SAsim Jamshed	printf "${RED}Please define RTE_SDK env variable first\n $NC"
648d270d183SAsim Jamshed	exit 1
649d270d183SAsim Jamshed    fi
650d270d183SAsim Jamshed    if [[ -z "${RTE_TARGET}" ]]; then
651d270d183SAsim Jamshed	printf "${RED}Please define RTE_TARGET env variable first\n $NC"
652d270d183SAsim Jamshed	exit 1
653d270d183SAsim Jamshed    fi
654d270d183SAsim Jamshed
655d270d183SAsim Jamshed    # First download dpdk
656d270d183SAsim Jamshed    if [ -z "$(ls -A $PWD/drivers/dpdk)" ]; then
657d270d183SAsim Jamshed	cd drivers
658d270d183SAsim Jamshed	printf "${GREEN}Cloning dpdk...\n $NC"
659d270d183SAsim Jamshed	git submodule init
660d270d183SAsim Jamshed	git submodule update
661d270d183SAsim Jamshed	cd ..
662d270d183SAsim Jamshed    fi
663d270d183SAsim Jamshed
66476404edcSAsim Jamshed    vercomp $kerver "2.6.33"
66576404edcSAsim Jamshed    # if kernel version < 2.6.33
66676404edcSAsim Jamshed    if [ "$?" == "2" ]; then
66776404edcSAsim Jamshed	echo "[note] current kerner version ("$kerver") does not support DPDK"
66876404edcSAsim Jamshed	exit 1
66976404edcSAsim Jamshed    fi
670d270d183SAsim Jamshed
671d270d183SAsim Jamshed    if grep "ldflags.txt" $RTE_SDK/mk/rte.app.mk > /dev/null
672d270d183SAsim Jamshed    then
673d270d183SAsim Jamshed	:
674d270d183SAsim Jamshed    else
675d270d183SAsim Jamshed	sed -i -e 's/O_TO_EXE_STR =/\$(shell if [ \! -d \${RTE_SDK}\/\${RTE_TARGET}\/lib ]\; then mkdir \${RTE_SDK}\/\${RTE_TARGET}\/lib\; fi)\nLINKER_FLAGS = \$(call linkerprefix,\$(LDLIBS))\n\$(shell echo \${LINKER_FLAGS} \> \${RTE_SDK}\/\${RTE_TARGET}\/lib\/ldflags\.txt)\nO_TO_EXE_STR =/g' $RTE_SDK/mk/rte.app.mk
676d270d183SAsim Jamshed    fi
677d270d183SAsim Jamshed
67876404edcSAsim Jamshed    # Build and install DPDK library
67976404edcSAsim Jamshed    export DESTDIR="."
68076404edcSAsim Jamshed    echo
68176404edcSAsim Jamshed    echo "Selected DPDK library to be used for MOS"
68276404edcSAsim Jamshed    echo "----------------------------------------------------------"
68376404edcSAsim Jamshed    echo " RTE_SDK exported as $RTE_SDK"
68476404edcSAsim Jamshed    echo " RTE_TARGET exported as $RTE_TARGET"
68576404edcSAsim Jamshed    echo "----------------------------------------------------------"
68676404edcSAsim Jamshed    echo
68776404edcSAsim Jamshed    echo -n "Press enter to continue ..."; read
68876404edcSAsim Jamshed    cd $RTE_SDK
68976404edcSAsim Jamshed    make install T=$RTE_TARGET
69076404edcSAsim Jamshed    echo
69176404edcSAsim Jamshed    echo -n "Done with DPDK setup. Press enter to start MOS setup ..."; read
69276404edcSAsim Jamshed    # Build and compile MOS library
69376404edcSAsim Jamshed    setup_mos_library $FL_DPDK
69476404edcSAsim Jamshed
69576404edcSAsim Jamshedelif [ "$1" == "--compile-pcap" ]; then
69676404edcSAsim Jamshed    setup_mos_library $FL_PCAP
69776404edcSAsim Jamshed
698522d5c66SAsim Jamshedelif [ "$1" == "--compile-netmap" ]; then
699522d5c66SAsim Jamshed    setup_mos_library $FL_NETMAP
700522d5c66SAsim Jamshed
70176404edcSAsim Jamshedelif [ "$1" == "--run-dpdk" ]; then
702d270d183SAsim Jamshed    # check if RTE_SDK and RTE_TARGET env variables exist
703d270d183SAsim Jamshed    if [[ -z "${RTE_SDK}" ]]; then
704d270d183SAsim Jamshed	printf "${RED}Please define RTE_SDK env variable first\n $NC"
705d270d183SAsim Jamshed	exit 1
706d270d183SAsim Jamshed    fi
707d270d183SAsim Jamshed    if [[ -z "${RTE_TARGET}" ]]; then
708d270d183SAsim Jamshed	printf "${RED}Please define RTE_TARGET env variable first\n $NC"
709d270d183SAsim Jamshed	exit 1
710d270d183SAsim Jamshed    fi
711d270d183SAsim Jamshed
71276404edcSAsim Jamshed    while [ 1 ]; do
71376404edcSAsim Jamshed	clear
71476404edcSAsim Jamshed	echo
71576404edcSAsim Jamshed	echo "----------------------------------------------------------"
71676404edcSAsim Jamshed	echo " Full setup (from start)"
71776404edcSAsim Jamshed	echo "----------------------------------------------------------"
71876404edcSAsim Jamshed	echo "[0] Full setup for running mOS with DPDK"
71976404edcSAsim Jamshed	echo
72076404edcSAsim Jamshed	echo "----------------------------------------------------------"
72176404edcSAsim Jamshed	echo " Step-by-step setup for running mOS with DPDK"
72276404edcSAsim Jamshed	echo "----------------------------------------------------------"
72376404edcSAsim Jamshed	echo "[1] Setup hugepage mappings"
72476404edcSAsim Jamshed	echo "[2] Load and bind Ethernet devices to IGB_UIO module"
72576404edcSAsim Jamshed	echo "[3] Bring the interfaces up (DPDK devices)"
72676404edcSAsim Jamshed	echo "[4] Create new MOS configuration files for sample apps"
72776404edcSAsim Jamshed	echo "[5] Unbind dpdk-registered NICs"
72876404edcSAsim Jamshed	echo
72976404edcSAsim Jamshed	echo "[6] Exit script"
73076404edcSAsim Jamshed	echo
73176404edcSAsim Jamshed	echo -n "Option: "
73276404edcSAsim Jamshed	read entry
73376404edcSAsim Jamshed	if [ "$entry" ]; then
73476404edcSAsim Jamshed	    step"$entry"_func_dpdk
73576404edcSAsim Jamshed	    echo
73676404edcSAsim Jamshed	    echo -n "Press enter to continue ..."; read
73776404edcSAsim Jamshed	fi
73876404edcSAsim Jamshed    done
73976404edcSAsim Jamshed
74076404edcSAsim Jamshedelif [ "$1" == "--run-pcap" ]; then
74176404edcSAsim Jamshed    while [ 1 ]; do
74276404edcSAsim Jamshed	clear
74376404edcSAsim Jamshed	echo
74476404edcSAsim Jamshed	echo "----------------------------------------------------------"
74576404edcSAsim Jamshed	echo " Full setup (from start)"
74676404edcSAsim Jamshed	echo "----------------------------------------------------------"
74776404edcSAsim Jamshed	step0_func_pcap
74876404edcSAsim Jamshed	echo
74976404edcSAsim Jamshed	echo -n "Press enter to continue ..."; read
75076404edcSAsim Jamshed    done
75176404edcSAsim Jamshed
752522d5c66SAsim Jamshedelif [ "$1" == "--run-netmap" ]; then
753522d5c66SAsim Jamshed    while [ 1 ]; do
754522d5c66SAsim Jamshed	clear
755522d5c66SAsim Jamshed	echo
756522d5c66SAsim Jamshed	echo "----------------------------------------------------------"
757522d5c66SAsim Jamshed	echo " Full setup (from start)"
758522d5c66SAsim Jamshed	echo "----------------------------------------------------------"
759522d5c66SAsim Jamshed	step0_func_netmap
760522d5c66SAsim Jamshed	echo
761522d5c66SAsim Jamshed	echo -n "Press enter to continue ..."; read
762522d5c66SAsim Jamshed    done
763522d5c66SAsim Jamshed
76476404edcSAsim Jamshedelif [ "$1" == "--cleanup" ]; then
76576404edcSAsim Jamshed    find | grep mos.conf | xargs rm -f
76676404edcSAsim Jamshed    find | grep log__* | xargs rm -f
767d270d183SAsim Jamshed    find | grep mos-master.conf | xargs rm -f
768d270d183SAsim Jamshed    find | grep mos-slave.conf | xargs rm -f
76976404edcSAsim Jamshed
77076404edcSAsim Jamshed    for d in $CUR_DIR/samples/* ; do
77176404edcSAsim Jamshed	cd $d
77276404edcSAsim Jamshed	make clean > /dev/null 2> /dev/null
77376404edcSAsim Jamshed	cd ..
77476404edcSAsim Jamshed    done
77576404edcSAsim Jamshed    cd ..
776c44a07e4SAsim Jamshed    cd core/src
777c44a07e4SAsim Jamshed    make clean > /dev/null 2> /dev/null
778c44a07e4SAsim Jamshed    cd bpf
779c44a07e4SAsim Jamshed    rm -rf *.o
780c44a07e4SAsim Jamshed    cd ..
781c44a07e4SAsim Jamshed    rm -rf .*.d
7820be44444SAsim Jamshed    rm -f Makefile
783c44a07e4SAsim Jamshed    cd ../..
78476404edcSAsim Jamshed    find ./samples/ -name 'Makefile' | xargs rm -f
78576404edcSAsim Jamshed    rm -f scripts/config.log scripts/config.status
786d270d183SAsim Jamshed    cd dpdk-iface-kmod/
787d270d183SAsim Jamshed    make clean
788d270d183SAsim Jamshed    cd ..
78976404edcSAsim Jamshedelse
79076404edcSAsim Jamshed    echo "[error] please specify one of the following options"
79176404edcSAsim Jamshed    echo "--compile-dpdk   : compile and build mOS library with dpdk"
79276404edcSAsim Jamshed    echo "--compile-pcap   : compile and build mOS library with pcap"
793522d5c66SAsim Jamshed    echo "--compile-netmap : compile and build mOS library with netmap"
79476404edcSAsim Jamshed    echo "--run-dpdk       : setup environments and configurations for running applications with dpdk"
79576404edcSAsim Jamshed    echo "--run-pcap       : setup environments and configurations for running applications with pcap"
796522d5c66SAsim Jamshed    echo "--run-netmap     : setup environments and configurations for running applications with netmap"
79776404edcSAsim Jamshed    echo "--cleanup        : delete all binaries, config and Makefiles"
79876404edcSAsim Jamshedfi
799