#! /bin/bash
#
# KBDPDK library boot script
# This script is used to configure the NIC drivers
# and huge pages in the system for usage of the kbdpdk library
#
### BEGIN INIT INFO
# Provides:             kbdpdk
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         
# Short-Description:    kbdpdk system configuration
### END INIT INFO


test -f /etc/kbdpdk/kbconfig.conf && . /etc/kbdpdk/kbconfig.conf || exit 0

KBDPDK_PATH=/usr/local/share/kbdpdk
DPDK_TOOLS_PATH=/usr/local/share/dpdk/usertools

case "$1" in
  start)
    numa_count=`cat /proc/cpuinfo |grep "physical id" | sort -n | uniq | wc -l`
    for (( i=0; i<$numa_count; i++ ))
    do
      hp1g=huge_page_1G_numa$i
      hp2m=huge_page_2M_numa$i
   
      [ -f "/sys/devices/system/node/node$i/hugepages/hugepages-2048kB/nr_hugepages" ] && echo ${!hp2m} > /sys/devices/system/node/node$i/hugepages/hugepages-2048kB/nr_hugepages
      [ -f "/sys/devices/system/node/node$i/hugepages/hugepages-1048576kB/nr_hugepages" ] && echo ${!hp1g} > /sys/devices/system/node/node$i/hugepages/hugepages-1048576kB/nr_hugepages
    done

    # Mount huge pages
    mkdir -p /dev/hugepages/huge_2MB
    mkdir -p /dev/hugepages/huge_1GB
    sudo mount -t hugetlbfs none /dev/hugepages/huge_2MB
    sudo mount -t hugetlbfs -o pagesize=1g none /dev/hugepages/huge_1GB

    # Bind NICs with UIO
    modprobe uio
    insmod "$KBDPDK_PATH/kmod/igb_uio.ko"

    for nic in $(echo $reserved_nics | sed "s/,/ /g")
    do
      $KBDPDK_PATH/tools/dpdk-devbind.py --force --bind=igb_uio $nic
    done
    
    # Insert KNI driver
    insmod $KBDPDK_PATH/kmod/rte_kni.ko kthread_mode=single carrier=on

    ;;
  restart|force-reload|reload)
    # do nothing
    ;;
  stop)
    sudo umount /dev/hugepages/huge_2MB
    sudo umount /dev/hugepages/huge_1GB
    ;;
  *)
    echo "Usage: /etc/init.d/kbdpdk {start|stop|restart}"
    exit 2
    ;;
esac

exit 0

