#!/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 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.1 netmask 255.255.255.0 up sleep 1 } function vf_setup() { echo 8 > /sys/class/net/ens1/device/sriov_numvfs sleep 5 ifconfig ens1f3 up ip link set ens1 vf 2 vlan 200 ifconfig ens1f3 192.168.200.1 netmask 255.255.255.0 ifconfig ens1f1 up ifconfig ens1f2 up ifconfig ens1f3 up ifconfig ens1f4 up ifconfig ens1f5 up ifconfig ens1f6 up ifconfig ens1f7 up ifconfig enp1s1 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` VF5=`get_netdev_by_pci 01:00.5` VF6=`get_netdev_by_pci 01:00.6` VF7=`get_netdev_by_pci 01:00.7` VF8=`get_netdev_by_pci 01:01.0` 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}'` MAC5=`ifconfig ${VF5} |grep ether |awk -F' ' '{print $2}'` MAC6=`ifconfig ${VF6} |grep ether |awk -F' ' '{print $2}'` MAC7=`ifconfig ${VF7} |grep ether |awk -F' ' '{print $2}'` MAC8=`ifconfig ${VF8} |grep ether |awk -F' ' '{print $2}'` MAC9=`ifconfig ${PF} |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 ${MAC1} ${MAC2} ${MAC3} ${MAC4} ${MAC5} ${MAC6} ${MAC7} ${MAC8} ${MAC9} 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