#!/bin/bash

PATH=/opt/mellanox/iproute2/sbin:/bin:/sbin:/usr/bin:/usr/sbin

RC=0

is_bf=`lspci -s 00:00.0 2> /dev/null | grep -wq "PCI bridge: Mellanox Technologies" && echo 1 || echo 0`
if [ $is_bf -ne 1 ]; then
	exit 0
fi

for dev in `lspci -n -d 15b3:a2d2 | cut -d ' ' -f 1`
do
	if (mstconfig -d ${dev} q 2> /dev/null | grep -q "ECPF_ESWITCH_MANAGER.*ECPF(1)"); then
		# Make sure the device is in legacy mode before configuring SW steering
		devlink dev eswitch set pci/0000:${dev} mode legacy
		# devlink dev param set pci/0000:${dev} name flow_steering_mode value "smfs" cmode runtime || \
		echo smfs > /sys/bus/pci/devices/0000:${dev}/net/*/compat/devlink/steering_mode
		rc=$?
		if [ $rc -ne 0 ]; then
			logger -t 'mlnx_eswitch_set' -i "Failed to configure Software Steering for ${dev}"
			RC=$((RC+rc))
		else
			logger -t 'mlnx_eswitch_set' -i "Configured Software Steering for ${dev}"
		fi
		if ! (devlink dev eswitch show pci/0000:${dev} 2> /dev/null | grep -wq switchdev); then
			devlink dev eswitch set pci/0000:${dev} mode switchdev
			rc=$?
			if [ $rc -ne 0 ]; then
				logger -t 'mlnx_eswitch_set' -i "Failed to configure switchdev mode for ${dev}"
				RC=$((RC+rc))
			else
				logger -t 'mlnx_eswitch_set' -i "Configured switchdev mode for ${dev}"
			fi
		fi
	fi
done

exit $RC
