采用与交换板交互的方式配置PF/VF。
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user