Files
puppet-tripleo/templates/switchdev/switchdev.epp
waleed mousa cd7232bb8c Adding support for VF LAG in SR-IOV for Mellanox interfaces
It is possible to configure bond over two virtual functions
for the vms in case of using mellanox interfaces.

Change-Id: Iaeee31a9edaefec25498a734cac6eda389c38ec5
2018-08-19 05:50:05 +00:00

68 lines
2.2 KiB
Plaintext

<%- | String $content_string = '', String $interface = '', String $count = '' | -%>
<%=$content_string%>set -ex
set -o pipefail
if [ "<%=$interface%>" == "$1" ]
then
exec 1> >(logger -s -t $(basename $0)) 2>&1
vendor_id="$(cat /sys/class/net/<%=$interface%>/device/vendor)"
if [[ $vendor_id == "0x15b3" && $(/sbin/lsmod | grep bonding) ]]
then
declare -A bonds
for bond in `cat /sys/class/net/bonding_masters`
do
bonds[$bond]=`cat "/sys/class/net/$bond/bonding/slaves"`
for bond_interface in ${bonds[$bond]}
do
echo "-$bond_interface" > "/sys/class/net/$bond/bonding/slaves"
done
done
fi
if [ "$(cat /sys/class/net/<%=$interface%>/device/sriov_numvfs)" == "0" ]
then
echo <%=$count%> > /sys/class/net/<%=$interface%>/device/sriov_numvfs
else
exit 0
fi
if [ $vendor_id == "0x15b3" ]
then
vfs_pci_list=$(grep PCI_SLOT_NAME /sys/class/net/<%=$interface%>/device/virtfn*/uevent | cut -d'=' -f2)
for pci in $vfs_pci_list
do
echo "$pci" > /sys/bus/pci/drivers/mlx5_core/unbind
done
fi
interface_pci=$(grep PCI_SLOT_NAME /sys/class/net/<%=$interface%>/device/uevent | cut -d'=' -f2)
/usr/sbin/devlink dev eswitch set pci/"$interface_pci" mode switchdev
if [[ "$(/usr/sbin/devlink dev eswitch show pci/"$interface_pci")" =~ "mode switchdev" ]]
then
echo "PCI device $interface_pci set to mode switchdev."
else
echo "Failed to set PCI device $interface_pci to mode switchdev."
exit 1
fi
interface_device=$(cat /sys/class/net/<%=$interface%>/device/device)
if [ "$interface_device" == "0x1013" ] || [ "$interface_device" == "0x1015" ]
then
/usr/sbin/devlink dev eswitch set pci/"$interface_pci" inline-mode transport
fi
/usr/sbin/ethtool -K <%=$interface%> hw-tc-offload on
if [ $vendor_id == "0x15b3" ]
then
for pci in $vfs_pci_list
do
echo "$pci" > /sys/bus/pci/drivers/mlx5_core/bind
done
fi
if [[ $vendor_id == "0x15b3" && $(/sbin/lsmod | grep bonding) ]]
then
for bond in "${!bonds[@]}"
do
for bond_interface in ${bonds[$bond]}
do
echo "+$bond_interface" > "/sys/class/net/$bond/bonding/slaves"
done
done
fi
fi