#!/usr/bin/openrc-run

description="Setting L2 mode for ConnectX2/3 VPI"

. /opt/etc/functions.openrc

depend()
{
	use modules
	after rdma
	before opensmd
	provide ${SVCNAME}
}

start()
{
	local _rv=0 _modeline _dev _modes _port1 _port2 _mode _mode1 _mode2
	ebegin "Starting \"${SVCNAME}\""
	eindent
	for _modeline in ${MLX4_MODES}; do
		_dev=$(echo ${_modeline} | sed 's/=.*//')
		_modes=$(echo ${_modeline} | sed 's/.*=//')
		if [[ ${_modes} == *","* ]]; then 
			_mode1=$(echo ${_modes} | sed 's/,.*//')
			_mode2=$(echo ${_modes} | sed 's/.*,//')
		else
			_mode1=${_modes}
			_mode2=""
		fi
		_dev="/sys/bus/pci/devices/${_dev}"
		_port1="${_dev}/mlx4_port1"
		_port2="${_dev}/mlx4_port2"
		for _mode in ${_mode1} ${_mode2}; do
			if [ "${_mode}" != "" ]; then
				if [ -f ${_port1} ]; then
					update_me
					einfo "${ME}: setting mode \"${_mode}\" for port ${_port1}"
					echo ${_mode} > ${_port1}
					_mode1=`cat ${_port1}`
						if [ "${_mode1}" != "${_mode}" ]; then
						eerror "${ME}: unable to set mode (current mode: ${_mode1})"
						_rv=1
					fi
				else
					eerror "${ME}: port ${_port1} does not exist"
					_rv=1
				fi
			fi
			_port1=${_port2}
		done
	done
	eend ${_rv}
	return ${_rv}
}

stop()
{
	ebegin "Stopping service \"${SVCNAME}\""
	eend 0
	return 0
}
