#! /bin/bash
#
# (C) 2003-13 - ntop.org
#
### BEGIN INIT INFO
# Provides:          pf_ring
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $n2disk $nprobe
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop pf_ring
### END INIT INFO

MGMG_INTERFACE_DRIVER="$(/sbin/ethtool -i eth0 | grep driver | cut -d ' ' -f 2)"

start_pf_ring() {
    KERNEL_VERSION=$(uname -r)

    PFRING_CONFIG="/etc/pf_ring/pfring.conf"
    PARAM=""
    if [ -f $PFRING_CONFIG ]; then
        PARAM="$(cat $PFRING_CONFIG)"
    fi
    /sbin/insmod /lib/modules/$KERNEL_VERSION/kernel/net/pf_ring/pf_ring.ko $PARAM

    DNA_DRIVERS="$(/bin/ls /usr/local/pfring/drivers/DNA/|cut -d '.' -f 1)"

    for D in $DNA_DRIVERS ; do
	DRIVER_CONFIG="/etc/pf_ring/dna-$D.conf"
	if [ -f $DRIVER_CONFIG ]; then
	    if [ "$D" == "$MGMG_INTERFACE_DRIVER" ]; then
		echo "Unable to replace $D as it is used by the management interface"
	    else
		PARAM="$(cat $DRIVER_CONFIG)"
 	        # Remove the driver first as the original vanilla driver might be the one we want to overwrite	    
		NUM="$(grep $D /proc/modules|wc -l)"
		if [ $NUM -gt 0 ]; then
		    /sbin/rmmod $D
		fi
		/sbin/insmod /usr/local/pfring/drivers/DNA/$D.ko $PARAM
	    fi
	fi
    done

    sleep 1

    # /sbin/ifup -a
    
    # Enable all interfaces DNA and non DNA
    INTERFACES="$(cat /proc/net/dev | grep ':' | cut -d ':' -f 1|grep -v 'lo' | tr -d '\n' | sed 's/^  //'| sed 's/  / /')"
    for D in $INTERFACES ; do
	/sbin/ifconfig $D up
    done
}


stop_pf_ring() {
    if [ -f /etc/init.d/nprobe ]; then
	/etc/init.d/nprobe stop
	sleep 2
    fi

    if [ -f /etc/init.d/n2disk ]; then
	/etc/init.d/n2disk stop
	sleep 2
    fi

    if [ -f /etc/init.d/ntop ]; then
	/etc/init.d/ntop stop
	sleep 2
    fi

    DNA_DRIVERS="$(/bin/ls /usr/local/pfring/drivers/DNA/|cut -d '.' -f 1)"
    for D in $DNA_DRIVERS ; do
	DRIVER_CONFIG="/etc/pf_ring/dna-$D.conf"
	if [ -f $DRIVER_CONFIG ]; then
	    NUM="$(grep $D /proc/modules |wc -l)"
	    if [ $NUM -gt 0 ]; then
		if [ "$D" == "$MGMG_INTERFACE_DRIVER" ]; then
		    echo "Unable to replace $D as it is used by the management interface"
		else
		    /sbin/rmmod $D
		fi
	    fi
	fi
    done

    NUM="$(grep pf_ring /proc/modules|wc -l)"
    if [ $NUM -gt 0 ]; then
	/sbin/rmmod pf_ring
    fi
}

########

INTERFACE_NAME=$2

case "$1" in
  start)
	start_pf_ring;
	;;

  stop)
       	stop_pf_ring;
	;;

  restart)
        stop_pf_ring;
	start_pf_ring;
	;;

  *)
	echo "Usage: /etc/init.d/pf_ring {start|stop|restart}"
	exit 1
esac

exit 0
