采用与交换板交互的方式配置PF/VF。

This commit is contained in:
Lu Qiuwen
2019-11-27 15:18:48 +08:00
parent a643223c88
commit cd7afe2477
18 changed files with 434 additions and 86 deletions

View File

@@ -1,25 +1,115 @@
#!/bin/bash
# set -x
CURRENT_PATH=`dirname $0`
TP_SVR=192.168.100.5
TP_PORT=10000
REMOTE_CONTROL_BIN=switch_control_client_non_block
modprobe 8021q
function get_netdev_by_pci()
{
DEV_LIST=`ifconfig -a |grep flags |awk -F: '{print $1}'`
for i in ${DEV_LIST}
do
ethtool -i ${i} |grep bus-info |grep "$1" > /dev/null 2>&1
if [ $? -eq 0 ];then
TARGET=${i}
break
fi
done
echo ${TARGET}
}
function pf_setup()
{
ifconfig ens1 up
modprobe 8021q
vconfig add ens1 100
vconfig set_flag ens1.100 1 1
ifconfig ens1.100 192.168.100.2 netmask 255.255.255.0 up
sleep 1
}
echo 0 > /sys/class/net/ens1/device/sriov_numvfs
sleep 1
function vf_setup()
{
echo 4 > /sys/class/net/ens1/device/sriov_numvfs
sleep 1
sleep 5
ifconfig ens1f3 up
ip link set ens1 vf 2 vlan 200
ifconfig ens1f3 192.168.200.2 netmask 255.255.255.0
ifconfig enp8s0 up
ifconfig enp9s0 up
ifconfig ens1f1 up
ifconfig ens1f2 up
ifconfig ens1f3 up
ifconfig ens1f4 up
ifconfig ens1f1 up
ifconfig ens1f2 up
ifconfig ens1f3 up
ifconfig ens1f4 up
sleep 5
}
function bring_down_pfvf()
{
echo 0 > /sys/class/net/ens1/device/sriov_numvfs
ifconfig ens1 down
sleep 3
}
# Main loop
while :
do
FAIL_FLAG=0
# Make sure PF is valid
ping ${TP_SVR} -c 1
if [ $? -ne 0 ];then
echo "Please make sure switch board is up."
bring_down_pfvf
pf_setup
continue
fi
# Make sure TestPoint is up.
${CURRENT_PATH}/${REMOTE_CONTROL_BIN} -s ${TP_SVR} -n ${TP_PORT} -c "show version"
if [ $? -ne 0 ];then
echo "Cannot reach TestPoint!"
echo "Please make sure TestPoint is up and in remote-listen mode."
sleep 5
continue
fi
# Create VFs and get MAC addresses
vf_setup
PF=`get_netdev_by_pci 01:00.0`
VF1=`get_netdev_by_pci 01:00.1`
VF2=`get_netdev_by_pci 01:00.2`
VF3=`get_netdev_by_pci 01:00.3`
VF4=`get_netdev_by_pci 01:00.4`
MAC0=`ifconfig ${PF} |grep ether |awk -F' ' '{print $2}'`
MAC1=`ifconfig ${VF1} |grep ether |awk -F' ' '{print $2}'`
MAC2=`ifconfig ${VF2} |grep ether |awk -F' ' '{print $2}'`
MAC3=`ifconfig ${VF3} |grep ether |awk -F' ' '{print $2}'`
MAC4=`ifconfig ${VF4} |grep ether |awk -F' ' '{print $2}'`
# Make sure VFs are valid
MAC_TABLE=`${CURRENT_PATH}/${REMOTE_CONTROL_BIN} -s ${TP_SVR} -n ${TP_PORT} -c "show mac table all"`
for i in ${MAC0} ${MAC1} ${MAC2} ${MAC3} ${MAC4}
do
echo ${MAC_TABLE} |grep ${i} > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "MAC ${i} is not in table!"
FAIL_FLAG=1
break
fi
done
if [ ${FAIL_FLAG} -eq 1 ];then
bring_down_pfvf
continue
fi
echo "PF/VF setup successful."
exit 0
done