#!/bin/bash

PORT_NAME=$1
IFINDEX=$2

# Names for the first 4 SF representors on ECPF0  (function 0)
declare -A P0_SFRMAP=( [0]="p0_sf_r" [1]="pf0hpf_sf_r" [2]="pf0dpu0_sf_r" [3]="pf0dpu1_sf_r" )

# SF representor numbers 4 to 127 on ECPF0 (function 0) are mapped to VFs and follow pattern pf0vfx_sf_r
for i in $(seq 4 127);  do
	vf_idx=$((${i}-4))
	P0_SFRMAP[$i]="pf0vf${vf_idx}_sf_r"
done

# Names for the first 2 SF representors on ECPF1  (function 1)
declare -A P1_SFRMAP=( [0]="p1_sf_r" [1]="pf1hpf_sf_r" )
# SF representor 2 to 127 on ECPF1 (function 1) are mapped to VFs and follow pattern pf1vfx_sf
for i in $(seq 2 127);  do
	vf_idx=$((${i}-2))
	P1_SFRMAP[$i]="pf1vf${vf_idx}_sf_r"
done

for rep_ndev in `ls /sys/class/net/`; do
	_ifindex=`cat /sys/class/net/$rep_ndev/ifindex | head -1 2>/dev/null`
	if [ "$_ifindex" = "$IFINDEX" ]
	then
		devpath=`udevadm info /sys/class/net/$rep_ndev | grep "DEVPATH="`
		pcipath=`echo $devpath | awk -F "/net/$rep_ndev" '{print $1}'`
		array=($(echo "$pcipath" | sed 's/\// /g'))
		len=${#array[@]}
		# last element in array is pci parent device
		parent_pdev=${array[$len-1]}
		#pdev is : 0000:03:00.0, so extract them by their index
		b=`echo ${parent_pdev:5:2} | sed 's/^0//'`
		f=${parent_pdev: -1}
		SFNUM=$(($(echo "${PORT_NAME}" | grep -o -E '[0-9]+' | tail -1)))

		if (( $f == 0 )); then
			sfr_name="${P0_SFRMAP[${SFNUM}]}"
		elif (( $f == 1 )) ; then
			sfr_name="${P1_SFRMAP[${SFNUM}]}"
		else
			echo "Function: $f is not either of 0 or 1 " > /dev/kmsg
		fi

		echo "${sfr_name}" >> /tmp/sfr_devices
		echo "NAME=${sfr_name}"
		exit
	fi
done
