diff options
| author | CoprDistGit <infra@openeuler.org> | 2024-12-12 02:54:13 +0000 | 
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2024-12-12 02:54:13 +0000 | 
| commit | a35fcc8b3fc340a6b874440b2a87e155c807ece5 (patch) | |
| tree | 02ca631dd69c05a4dfcbd98a0ed12e2b0d2cd035 /net-set-sriov-names | |
| parent | b7abaf7e217d7948f8101d25013189a9322dd6ef (diff) | |
automatic import of systemdopeneuler24.03_LTS
Diffstat (limited to 'net-set-sriov-names')
| -rw-r--r-- | net-set-sriov-names | 79 | 
1 files changed, 79 insertions, 0 deletions
diff --git a/net-set-sriov-names b/net-set-sriov-names new file mode 100644 index 0000000..573a6cc --- /dev/null +++ b/net-set-sriov-names @@ -0,0 +1,79 @@ +#!/bin/bash -e +# +# This script is run to rename virtual interfaces +# + +if [ -n "$UDEV_LOG" ]; then +	if [ "$UDEV_LOG" -ge 7 ]; then +		set -x +	fi +fi + +# according to dev_new_index(), ifindex is within [1, INT_MAX] +int_max=$(/usr/bin/getconf INT_MAX) +ifindex_before() { +	a=$1 +	b=$2 + +	((0 < (b - a) && (b - a) < int_max / 2 || +		-1 * int_max < (b - a) && (b - a) < -1 * int_max / 2)) +} + +rename_interface() { +	local src_net=$1 +	local dest_net=$2 +	local err=0 + +	/sbin/ip link set dev $src_net down +	/sbin/ip link set dev $src_net name $dest_net +} + +if [ -z "$INTERFACE" ]; then +	echo "missing \$INTERFACE" >&2 +	exit 1 +fi + +if [ -e "/sys/class/net/$INTERFACE/device/physfn" ]; then +	pf=$(ls -1 "/sys/class/net/$INTERFACE/device/physfn/net") +	if [ $(echo "$pf" | wc -l) -ne 1 ]; then +		echo "too many pf's" >&2 +		exit 1 +	fi +	read vfindex < "/sys/class/net/$INTERFACE/ifindex" +	read pfindex < "/sys/class/net/$pf/ifindex" +	if ifindex_before $pfindex $vfindex; then +		bus_info=$(basename $(readlink "/sys/class/net/$INTERFACE/device")) +		for virtfn in "/sys/class/net/$pf/device/"virtfn*; do +			if [ "$(basename $(readlink "$virtfn"))" = "$bus_info" ]; then +				vfnum=$(basename "$virtfn") +				vfnum=${vfnum#virtfn} +				echo "INTERFACE_NEW=$pf.vf$vfnum" +				exit 0 +			fi +		done +	fi +fi + +read pfindex < "/sys/class/net/$INTERFACE/ifindex" +shopt -s nullglob +for virtfn in "/sys/class/net/$INTERFACE/device/"virtfn*; do +	vf=$(ls -1 "$virtfn/net") +	if [ $(echo "$vf" | wc -l) -ne 1 ]; then +		echo "too many vf's" >&2 +		exit 1 +	fi +	read vfindex < "/sys/class/net/$vf/ifindex" +	if ifindex_before $vfindex $pfindex; then +		vfnum=$(basename "$virtfn") +		vfnum=${vfnum#virtfn} +		if [ "$INTERFACE_NEW" ]; then +			new_name=$INTERFACE_NEW +		else +			new_name=$INTERFACE +		fi +		new_name="$new_name.vf$vfnum" +		if [ "$vf" != "$new_name" ]; then +			rename_interface "$vf" "$new_name" +		fi +	fi +done  | 
