f30d899
commit 4b2d10942e2d964ecc1fe58c9460c34993ff10be
f30d899
Author: Mingming Cao <mmc@linux.vnet.ibm.com>
f30d899
Date:   Thu Nov 19 21:38:24 2020 -0800
f30d899
f30d899
    Disable vnic as backup vdevice for migratable SR_IOV
f30d899
    
f30d899
    In version 1.0 we only allow configure ibmveth as
f30d899
    migritable SR_IOV backup vdevice. When ibmvnic become
f30d899
    more stablized we will enable vnic as backup.
f30d899
    
f30d899
    Signed-off-by: Mingming Cao <mmc@linux.vnet.ibm.com>
f30d899
    Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
f30d899
f30d899
diff --git a/scripts/hcnmgr b/scripts/hcnmgr
f30d899
index 1135a85..0c09d8c 100644
f30d899
--- a/scripts/hcnmgr
f30d899
+++ b/scripts/hcnmgr
f30d899
@@ -37,6 +37,8 @@ DRC_INDEX=0
f30d899
 DEVNAME=""
f30d899
 MODE=""
f30d899
 PHYSLOC=""
f30d899
+VIO_TYPE=""
f30d899
+VNIC_SPT=""
f30d899
 
f30d899
 # Usage statements
f30d899
 usage() {
f30d899
@@ -80,6 +82,7 @@ E_EPERM=1         # Platform not supported
f30d899
 E_BUSY=16         # Device busy
f30d899
 E_ENODEV=19       # Failed get device name
f30d899
 E_NOMODULE=5      # Failed to load bonding module
f30d899
+E_INVAL_DEV=6     # Vdevice not supported
f30d899
 E_ENETUNREACH=101 # No network management command nmcli
f30d899
 
f30d899
 #
f30d899
@@ -93,19 +96,22 @@ err() {
f30d899
 
f30d899
 	case $eno in
f30d899
 	"$E_INVAL")
f30d899
-		e_mesg="$HCNCMD:error code $eno, hybrid network ID HCNID does not exist"
f30d899
+		e_mesg="$HCNCMD:error code $eno, Hybrid network ID HCNID does not exist"
f30d899
+		;;
f30d899
+	"$E_INVAL_DEV")
f30d899
+		e_mesg="$HCNCMD:error code $eno, Backing vdevice not supported"
f30d899
 		;;
f30d899
 	"$E_EPERM")
f30d899
-		e_mesg="$HCNCMD:error code $eno, platform is not supported"
f30d899
+		e_mesg="$HCNCMD:error code $eno, Platform is not supported"
f30d899
 		;;
f30d899
 	"$E_BUSY")
f30d899
-		e_mesg="$HCNCMD:error code $eno, network device busy, no backup device"
f30d899
+		e_mesg="$HCNCMD:error code $eno, Network device busy, no backup device"
f30d899
 		;;
f30d899
 	"$E_ENODEV")
f30d899
-		e_mesg="$HCNCMD:error code $eno, failed to find device or get device name"
f30d899
+		e_mesg="$HCNCMD:error code $eno, Failed to find device or get device name"
f30d899
 		;;
f30d899
 	"$E_NOMODULE")
f30d899
-		e_mesg="$HCNCMD:error code $eno, failed to load bonding module"
f30d899
+		e_mesg="$HCNCMD:error code $eno, Failed to load bonding module"
f30d899
 		;;
f30d899
 	"$E_ENETUNREACH")
f30d899
 		e_mesg="$HCNCMD:error code $eno, nmcli command not installed"
f30d899
@@ -147,6 +153,7 @@ hcnlog() {
f30d899
 	esac
f30d899
 
f30d899
 }
f30d899
+
f30d899
 # function search_dev:
f30d899
 #	Given DRX_INDEX, Search for device-tree, looking for migratable SR_IOV
f30d899
 #	backend vnic or ibmveth device to configure hybrid network
f30d899
@@ -171,6 +178,7 @@ search_dev() {
f30d899
 			if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
 				hcnlog DEBUG "search_dev: found device "
f30d899
 				hcnlog DEBUG "search_dev: exit"
f30d899
+				VIO_TYPE="SRIOV"
f30d899
 				return $E_SUCCESS
f30d899
 			fi
f30d899
 		done
f30d899
@@ -184,6 +192,7 @@ search_dev() {
f30d899
 		if [[ $index == "$1" ]]; then
f30d899
 			hcnlog DEBUG "found matching drc_index $index in $dev"
f30d899
 			if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
+				VIO_TYPE="VNIC"
f30d899
 				hcnlog DEBUG "search_dev: found device "
f30d899
 				hcnlog DEBUG "search_dev: exit"
f30d899
 				return $E_SUCCESS
f30d899
@@ -201,6 +210,7 @@ search_dev() {
f30d899
 			if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
 				hcnlog DEBUG "search_dev: found device "
f30d899
 				hcnlog DEBUG "search_dev: exit"
f30d899
+				VIO_TYPE="L_LAN"
f30d899
 				return $E_SUCCESS
f30d899
 			fi
f30d899
 		fi
f30d899
@@ -340,6 +350,10 @@ do_config_vdevice() {
f30d899
 cfghcn() {
f30d899
 	hcnlog DEBUG "cfghcn: enter $1"
f30d899
 	search_dev "$1"
f30d899
+	if [[ $VIO_TYPE == "VNIC" && $VNIC_SPT == "OFF" ]]; then
f30d899
+		hcnlog WARN "Backing device $VIO_TYPE for Migratable VF is not supported in hcnmgr version $VERSION"
f30d899
+		err $E_INVAL_DEV
f30d899
+	fi
f30d899
 	do_config_vdevice
f30d899
 	return $E_SUCCESS
f30d899
 }
f30d899
@@ -512,23 +526,10 @@ scanhcn() {
f30d899
 		done
f30d899
 	done
f30d899
 
f30d899
-	hcnlog DEBUG "search vnic device with ibm,hcn-id propterty......"
f30d899
+	hcnlog DEBUG "search ibmveth device with ibm,hcn-id propterty......"
f30d899
 	# Look at every vNIC device with ibm,hcn-id propterty
f30d899
 	# join or create bond for this hcnid if not exist, add vnic device as
f30d899
 	# slave for this bond accosiated with hcnid, if not already to
f30d899
-	for dev in "$DT_PATH"/vdevice/vnic*; do
f30d899
-		[ -d "$dev" ] || continue
f30d899
-		if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
-			hcnlog DEBUG "scanhcn found vnic device with hcnid "
f30d899
-			hcnlog INFO "scanhcn configure HCN and vnic device"
f30d899
-			do_config_vdevice
f30d899
-		fi
f30d899
-	done
f30d899
-
f30d899
-	# Look at every veth device with ibm,hcn-id propterty
f30d899
-	# join or create bond for this hcnid if not exist, add ibmveth device as
f30d899
-	# slave for this bond accosiated with hcnid, if not already to
f30d899
-	hcnlog DEBUG "search ibmveth device with ibm,hcn-id propterty......"
f30d899
 	for dev in "$DT_PATH"/vdevice/l-lan*; do
f30d899
 		[ -d "$dev" ] || continue
f30d899
 		if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
@@ -538,6 +539,21 @@ scanhcn() {
f30d899
 		fi
f30d899
 	done
f30d899
 
f30d899
+	if [[ $VNIC_SPT != "OFF" ]]; then
f30d899
+		hcnlog DEBUG "search vnic device with ibm,hcn-id propterty......"
f30d899
+		# Look at every vNIC device with ibm,hcn-id propterty
f30d899
+		# join or create bond for this hcnid if not exist, add vnic device as
f30d899
+		# slave for this bond accosiated with hcnid, if not already to
f30d899
+		for dev in "$DT_PATH"/vdevice/vnic*; do
f30d899
+			[ -d "$dev" ] || continue
f30d899
+			if [ -e "$dev"/ibm,hcn-id ] && get_dev_hcn "$dev"; then
f30d899
+				hcnlog DEBUG "scanhcn found vnic device with hcnid "
f30d899
+				hcnlog INFO "scanhcn configure HCN and vnic device"
f30d899
+				do_config_vdevice
f30d899
+			fi
f30d899
+		done
f30d899
+	fi
f30d899
+
f30d899
 	# Next clean up dead connections left from orgitinal LPAR after inactive miration
f30d899
 
f30d899
 	# list of all HCN ids
f30d899
@@ -583,6 +599,9 @@ fi
f30d899
 if ! nmcli --version >/dev/null 2>&1; then
f30d899
 	err $E_ENETUNREACH
f30d899
 fi
f30d899
+if [[ $VERSION == "1.0" ]]; then
f30d899
+	VNIC_SPT="OFF"
f30d899
+fi
f30d899
 
f30d899
 #Validate bonding module is loaded
f30d899
 if ! lsmod | grep -q bonding; then