|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
getargbool 0 rd.neednet && NEEDNET=1
|
|
|
|
|
|
|
|
# Don't continue if we don't need network
|
|
|
|
if [ -z "$netroot" ] && [ ! -e "/tmp/net.ifaces" ] && [ "$NEEDNET" != "1" ]; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
command -v fix_bootif > /dev/null || . /lib/net-lib.sh
|
|
|
|
|
|
|
|
# Write udev rules
|
|
|
|
{
|
|
|
|
# bridge: attempt only the defined interface
|
|
|
|
for i in /tmp/bridge.*.info; do
|
|
|
|
[ -e "$i" ] || continue
|
|
|
|
unset bridgeslaves
|
|
|
|
unset bridgename
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$i"
|
|
|
|
RAW_IFACES="$RAW_IFACES $bridgeslaves"
|
|
|
|
MASTER_IFACES="$MASTER_IFACES $bridgename"
|
|
|
|
done
|
|
|
|
|
|
|
|
# bond: attempt only the defined interface (override bridge defines)
|
|
|
|
for i in /tmp/bond.*.info; do
|
|
|
|
[ -e "$i" ] || continue
|
|
|
|
unset bondslaves
|
|
|
|
unset bondname
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$i"
|
|
|
|
# It is enough to fire up only one
|
|
|
|
RAW_IFACES="$RAW_IFACES $bondslaves"
|
|
|
|
MASTER_IFACES="$MASTER_IFACES ${bondname}"
|
|
|
|
done
|
|
|
|
|
|
|
|
for i in /tmp/team.*.info; do
|
|
|
|
[ -e "$i" ] || continue
|
|
|
|
unset teamslaves
|
|
|
|
unset teammaster
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$i"
|
|
|
|
RAW_IFACES="$RAW_IFACES ${teamslaves}"
|
|
|
|
MASTER_IFACES="$MASTER_IFACES ${teammaster}"
|
|
|
|
done
|
|
|
|
|
|
|
|
for i in /tmp/vlan.*.phy; do
|
|
|
|
[ -e "$i" ] || continue
|
|
|
|
unset phydevice
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$i"
|
|
|
|
RAW_IFACES="$RAW_IFACES $phydevice"
|
|
|
|
for j in /tmp/vlan.*".${phydevice}"; do
|
|
|
|
[ -e "$j" ] || continue
|
|
|
|
unset vlanname
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$j"
|
|
|
|
MASTER_IFACES="$MASTER_IFACES ${vlanname}"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
MASTER_IFACES="$(trim "$MASTER_IFACES")"
|
|
|
|
RAW_IFACES="$(trim "$RAW_IFACES")"
|
|
|
|
|
|
|
|
if [ -z "$IFACES" ]; then
|
|
|
|
[ -e /tmp/net.ifaces ] && read -r IFACES < /tmp/net.ifaces
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -e /tmp/net.bootdev ]; then
|
|
|
|
bootdev=$(cat /tmp/net.bootdev)
|
|
|
|
fi
|
|
|
|
|
|
|
|
# shellcheck disable=SC2016
|
|
|
|
ifup='/sbin/ifup $name'
|
|
|
|
|
|
|
|
runcmd="RUN+=\"/sbin/initqueue --name ifup-\$name --unique --onetime $ifup\""
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
|
|
|
|
# We have some specific interfaces to handle
|
|
|
|
if [ -n "${RAW_IFACES}${IFACES}" ]; then
|
|
|
|
echo 'SUBSYSTEM!="net", GOTO="net_end"'
|
|
|
|
echo 'ACTION!="add|change|move", GOTO="net_end"'
|
|
|
|
for iface in $IFACES $RAW_IFACES; do
|
|
|
|
case "$iface" in
|
|
|
|
??:??:??:??:??:??) # MAC address
|
|
|
|
cond="ATTR{address}==\"$iface\""
|
|
|
|
echo "$cond, $runcmd, GOTO=\"net_end\""
|
|
|
|
;;
|
|
|
|
??-??-??-??-??-??) # MAC address in BOOTIF form
|
|
|
|
cond="ATTR{address}==\"$(fix_bootif "$iface")\""
|
|
|
|
echo "$cond, $runcmd, GOTO=\"net_end\""
|
|
|
|
;;
|
|
|
|
*) # an interface name
|
|
|
|
cond="ENV{INTERFACE}==\"$iface\""
|
|
|
|
echo "$cond, $runcmd, GOTO=\"net_end\""
|
|
|
|
cond="NAME==\"$iface\""
|
|
|
|
echo "$cond, $runcmd, GOTO=\"net_end\""
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
# The GOTO prevents us from trying to ifup the same device twice
|
|
|
|
done
|
|
|
|
echo 'LABEL="net_end"'
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
|
|
|
|
for iface in $IFACES; do
|
|
|
|
if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
|
|
|
|
if [ -n "$netroot" ] && [ -n "$DRACUT_SYSTEMD" ]; then
|
|
|
|
echo "systemctl is-active initrd-root-device.target || [ -f /tmp/net.${iface}.did-setup ]"
|
|
|
|
else
|
|
|
|
echo "[ -f /tmp/net.${iface}.did-setup ]"
|
|
|
|
fi > "$hookdir"/initqueue/finished/wait-"$iface".sh
|
|
|
|
fi
|
|
|
|
done
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
# Default: We don't know the interface to use, handle all
|
|
|
|
# Fixme: waiting for the interface as well.
|
multinic support: Add bootdev cmdline argument
This introduces a new cmdline argument bootdev, to support the case
where multiple nics need to be up before the netroot handler is called.
Cases involved might be bonding, iscsi multipathing, bonding, ...
This argument is required to decide which interface is the primary to
use for dhcp root-path, default gw, etc.
When multiple ip= items are present on the cmdline, the ip= parser
now enforces the presence of <dev> further demands that the new argument
bootdev contains the name of the primary interface. Configurtion if of
course still delegated to netroot but in is enhance to ensure that netroot
"waits" for all required interfaces to be up.
Example: root=dhcp ip=eth0:dhcp ip=client-ip:::netmask::eth1:off bootdev=eth0
First, the ip= cmdline parser ensures that all ip items contain a <dev> then
checks the ip items and checks as well that an ip= item for the given bootdev
was found.
When the first netroot starts, probably for eth1, it checks wheter interface
configuration for all interfaces is available. If not it exits. The second
start of netroot (eth0, which was a bit delayed because of dhcp) sees that
all interfaces are present, configures them and continues.
16 years ago
|
|
|
else
|
|
|
|
cond='ACTION=="add", SUBSYSTEM=="net", ENV{DEVTYPE}!="wlan|wwan"'
|
|
|
|
# if you change the name of "91-default-net.rules", also change modules.d/80cms/cmssetup.sh
|
|
|
|
echo "$cond, $runcmd" > /etc/udev/rules.d/91-default-net.rules
|
|
|
|
if [ "$NEEDNET" = "1" ]; then
|
|
|
|
# shellcheck disable=SC2016
|
|
|
|
echo 'for i in /tmp/net.*.did-setup; do [ -f "$i" ] && exit 0; done; exit 1' > "$hookdir"/initqueue/finished/wait-network.sh
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# if you change the name of "90-net.rules", also change modules.d/80cms/cmssetup.sh
|
|
|
|
} > /etc/udev/rules.d/90-net.rules
|