summaryrefslogtreecommitdiff
path: root/net-set-sriov-names
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-12-12 02:54:13 +0000
committerCoprDistGit <infra@openeuler.org>2024-12-12 02:54:13 +0000
commita35fcc8b3fc340a6b874440b2a87e155c807ece5 (patch)
tree02ca631dd69c05a4dfcbd98a0ed12e2b0d2cd035 /net-set-sriov-names
parentb7abaf7e217d7948f8101d25013189a9322dd6ef (diff)
automatic import of systemdopeneuler24.03_LTS
Diffstat (limited to 'net-set-sriov-names')
-rw-r--r--net-set-sriov-names79
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