62 lines
1.4 KiB
Bash
62 lines
1.4 KiB
Bash
#!/bin/sh
|
|
|
|
case $1 in
|
|
prereqs)
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
set -e
|
|
|
|
# Extract kernel parameters
|
|
set -- $(cat /proc/cmdline)
|
|
items=""
|
|
for x in "$@"; do
|
|
case "$x" in
|
|
Aboot=*)
|
|
aboot_flag="${x#Aboot=}"
|
|
;;
|
|
net_*)
|
|
item="${x#net_}"
|
|
items="$items $item"
|
|
;;
|
|
platform=*)
|
|
platform_flag="${x#platform=}"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
arista_net_rename() {
|
|
local device_path="$1"
|
|
local new_name="$2"
|
|
local from_name="$3"
|
|
for path in $(ls -d /sys/class/net/$from_name* 2>/dev/null); do
|
|
local devid="$(realpath "$path/device")"
|
|
if echo "$devid" | grep -q "$device_path"; then
|
|
local cur_name="${path##*/}"
|
|
ip link set "$cur_name" name "$new_name"
|
|
return
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Iterate over all the net_maX items found in the cmdline two times.
|
|
# First time renaming the interfaces to maX.
|
|
# The second time renaming them to their final name ethX.
|
|
if [ -n "$aboot_flag" -a "$platform_flag" == 'rook' ]; then
|
|
for item in $items; do
|
|
key="${item%=*}"
|
|
value="${item#*=}"
|
|
arista_net_rename "$value" "$key" eth
|
|
done
|
|
for item in $items; do
|
|
key="${item%=*}"
|
|
value="${item#*=}"
|
|
index="${key#ma}"
|
|
index="$(( $index - 1 ))"
|
|
newKey="eth$index"
|
|
arista_net_rename "$value" "$newKey" ma
|
|
done
|
|
fi
|
|
|