#!/bin/sh
#
# Copyright(c) 2007 Intel Corporation. All rights reserved.
# 
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
# version 2, as published by the Free Software Foundation.
# 
# This program is distributed in the hope it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
# 
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
# 
# Maintained at www.Open-FCoE.org
#
#
# chkconfig: 2345 92 19
# description: OpenFC and FCoE: Fibre Channel over Ethernet SAN setup
#
### BEGIN INIT INFO
# Provides: open-fcoe
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop:
# Description: Fibre Channel over Ethernet SAN setup
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

HBA=
FCOEADM=fcoeadm
FCOE_CONF=/etc/fcoe/fcoe.conf

# validates the ifname
fcoe_gethba() {
	HBA=
	if [ ! -e $FCOE_CONF ]
	then
		echo "Open-fcoe config file $FCOE_CONF not found!"
		return
	fi
	# get HBA=
	HBA=`grep -v "#" $FCOE_CONF | grep "HBA=" | cut -f2 -d=`
	if ifconfig $HBA &> /dev/null
	then
		echo "Found HBA $HBA!"
	else
		echo "HBA not found in $FCOE_CONF!"
		HBA=
	fi
}
# check fcoeadm
which $FCOEADM
if [ "$?" -eq "1" ]
then
	echo "$0: $FCOEADM command not installed" >&2
	exit 1
fi

# Switch on start / stop argument
case "$1" in
start)
	
	# start fcmon
	lsmod | grep fcoe &> dev/null
	if [ "$?" -eq "1" ]
	then
		modprobe -q fcoe 2> /dev/null
		if [ "$?" -eq "1" ]
		then
			echo "Failed to load FCoE driver module!"
			exit 1
		fi
	fi
	# get HBA from conf
	fcoe_gethba
	if [ -z "$HBA" ]
	then
		echo "Please setup the config file $FCOE_CONF first!"
		$FCOEADM --create $HBA >&2
		exit 1
	fi
	;;

stop)
	lsmod | grep fcoe &> /dev/null
	if [ "$?" -eq "1" ]
	then
		echo "Open-FCoE driver module not loaded!"
		exit 1
	fi
	fcoe_gethba
	if [ -n "$HBA" ]
	then
		$FCOEADM --destroy $HBA >&2
	fi
	;;

status)
	lsmod | grep fcoe &> dev/null
	if [ "$?" -eq "1" ]
	then
		echo "Open-FCoE driver module not loaded!"
		exit 1
	fi
	fcoe_gethba
	$FCOEADM --query $HBA >&2
	;;

restart | reload)
	$0 stop
	$0 start
	;;

save)
	;;

*)
	echo "Usage: $0 {start|stop|reload|restart|status}" >&2
	exit 1
	;;
esac
