Browse Source

Add ifname= argument for persistent netdev names

ifname=<interface>:<MAC>
Assign network device name <interface> (ie eth0) to the NIC
with MAC <MAC>.
Note that if you use this option you *must* specify an ifname=
argument for all interfaces used in ip= or fcoe= arguments
master
Hans de Goede 16 years ago committed by Harald Hoyer
parent
commit
04a8f224c1
  1. 21
      modules.d/40network/ifname-genrules.sh
  2. 37
      modules.d/40network/parse-ifname.sh

21
modules.d/40network/ifname-genrules.sh

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
#!/bin/sh

# if there are no ifname parameters, just use NAME=KERNEL
if ! getarg ifname= >/dev/null ; then
echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="?*", ATTR{type}=="1", NAME="%k"' \
> /etc/udev/rules.d/50-ifname.rules
return
fi

{
for p in $(getargs ifname=); do
parse_ifname_opts $p
printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%s", ATTR{type}=="1", NAME="%s"\n' "$ifname_mac" "$ifname_if"
done

# Rename non named interfaces out of the way for named ones.
for p in $(getargs ifname=); do
parse_ifname_opts $p
printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="?*", ATTR{type}=="1", NAME!="?*", KERNEL=="%s", NAME="%%k-renamed"\n' "$ifname_if"
done
} > /etc/udev/rules.d/50-ifname.rules

37
modules.d/40network/parse-ifname.sh

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
#!/bin/sh
#
# Format:
# ifname=<interface>:<mac>
#
# Note letters in the macaddress must be lowercase!
#
# Examples:
# ifname=eth0:4a:3f:4c:04:f8:d7
#
# Note when using ifname= to get persistent interface names, you must specify
# an ifname= argument for each interface used in an ip= or fcoe= argument

# check if there are any ifname parameters
if ! getarg ifname= >/dev/null ; then
return
fi

parse_ifname_opts() {
local IFS=:
set $1

case $# in
7)
ifname_if=$1
ifname_mac=$2:$3:$4:$5:$6:$7
;;
*)
die "Invalid arguments for ifname="
;;
esac
}

# Check ifname= lines
for p in $(getargs ifname=); do
parse_ifname_opts $p
done
Loading…
Cancel
Save