|
|
|
#!/bin/sh
|
|
|
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
|
|
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
|
|
#
|
|
|
|
# Format:
|
|
|
|
# ip=[dhcp|on|any]
|
|
|
|
#
|
|
|
|
# ip=<interface>:[dhcp|on|any][:[<mtu>][:<macaddr>]]
|
|
|
|
#
|
|
|
|
# ip=<client-IP-number>:<server-IP-number>:<gateway-IP-number>:<netmask>:<client-hostname>:<interface>:{dhcp|on|any|none|off}[:[<mtu>][:<macaddr>]]
|
|
|
|
#
|
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
|
|
|
# When supplying more than only ip= line, <interface> is mandatory and
|
|
|
|
# bootdev= must contain the name of the primary interface to use for
|
|
|
|
# routing,dns,dhcp-options,etc.
|
|
|
|
#
|
|
|
|
|
|
|
|
command -v getarg >/dev/null || . /lib/dracut-lib.sh
|
|
|
|
command -v ibft_to_cmdline >/dev/null || . /lib/net-lib.sh
|
|
|
|
|
|
|
|
# Don't mix BOOTIF=macaddr from pxelinux and ip= lines
|
|
|
|
getarg ip= >/dev/null && getarg BOOTIF= >/dev/null && \
|
|
|
|
die "Mixing BOOTIF and ip= lines is dangerous"
|
|
|
|
|
|
|
|
# No more parsing stuff, BOOTIF says everything
|
|
|
|
[ -n "$(getarg BOOTIF)" ] && return
|
|
|
|
|
|
|
|
if [ -n "$netroot" ] && [ -z "$(getarg ip=)" ] ; then
|
|
|
|
# No ip= argument(s) for netroot provided, defaulting to DHCP
|
|
|
|
return;
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
# Count ip= lines to decide whether we need bootdev= or not
|
|
|
|
if [ -z "$NEEDBOOTDEV" ] ; then
|
|
|
|
count=0
|
|
|
|
for p in $(getargs ip=); do
|
|
|
|
count=$(( $count + 1 ))
|
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
|
|
|
done
|
|
|
|
[ $count -gt 1 ] && NEEDBOOTDEV=1
|
|
|
|
fi
|
|
|
|
unset count
|
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
|
|
|
|
|
|
|
# If needed, check if bootdev= contains anything usable
|
|
|
|
BOOTDEV=$(getarg bootdev=)
|
|
|
|
|
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
|
|
|
if [ -n "$NEEDBOOTDEV" ] ; then
|
|
|
|
[ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines"
|
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
|
|
|
fi
|
|
|
|
|
|
|
|
# If ibft is requested, read ibft vals and write ip=XXX cmdline args
|
|
|
|
[ "ibft" = "$(getarg ip=)" ] && ibft_to_cmdline
|
|
|
|
|
|
|
|
# Check ip= lines
|
|
|
|
# XXX Would be nice if we could errorcheck ip addresses here as well
|
|
|
|
for p in $(getargs ip=); do
|
|
|
|
ip_to_var $p
|
|
|
|
|
|
|
|
# skip ibft since we did it above
|
|
|
|
[ "$autoconf" = "ibft" ] && continue
|
|
|
|
|
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 need to have an ip= line for the specified bootdev
|
|
|
|
[ -n "$NEEDBOOTDEV" ] && [ "$dev" = "$BOOTDEV" ] && BOOTDEVOK=1
|
|
|
|
|
|
|
|
# Empty autoconf defaults to 'dhcp'
|
|
|
|
if [ -z "$autoconf" ] ; then
|
|
|
|
warn "Empty autoconf values default to dhcp"
|
|
|
|
autoconf="dhcp"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Error checking for autoconf in combination with other values
|
|
|
|
case $autoconf in
|
|
|
|
error) die "Error parsing option 'ip=$p'";;
|
|
|
|
bootp|rarp|both) die "Sorry, ip=$autoconf is currenty unsupported";;
|
|
|
|
none|off)
|
|
|
|
[ -z "$ip" ] && \
|
|
|
|
die "For argument 'ip=$p'\nValue '$autoconf' without static configuration does not make sense"
|
|
|
|
[ -z "$mask" ] && \
|
|
|
|
die "Sorry, automatic calculation of netmask is not yet supported"
|
|
|
|
;;
|
|
|
|
auto6);;
|
|
|
|
dhcp|dhcp6|on|any) \
|
|
|
|
[ -n "$NEEDBOOTDEV" ] && [ -z "$dev" ] && \
|
|
|
|
die "Sorry, 'ip=$p' does not make sense for multiple interface configurations"
|
|
|
|
[ -n "$ip" ] && \
|
|
|
|
die "For argument 'ip=$p'\nSorry, setting client-ip does not make sense for '$autoconf'"
|
|
|
|
;;
|
|
|
|
*) die "For argument 'ip=$p'\nSorry, unknown value '$autoconf'";;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if [ -n "$dev" ] ; then
|
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 don't like duplicate device configs
|
|
|
|
if [ -n "$IFACES" ] ; then
|
|
|
|
for i in $IFACES ; do
|
|
|
|
[ "$dev" = "$i" ] && die "For argument 'ip=$p'\nDuplication configurations for '$dev'"
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
# IFACES list for later use
|
|
|
|
IFACES="$IFACES $dev"
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
# Do we need to check for specific options?
|
|
|
|
if [ -n "$NEEDDHCP" ] || [ -n "$DHCPORSERVER" ] ; then
|
|
|
|
# Correct device? (Empty is ok as well)
|
|
|
|
[ "$dev" = "$BOOTDEV" ] || continue
|
|
|
|
# Server-ip is there?
|
|
|
|
[ -n "$DHCPORSERVER" ] && [ -n "$srv" ] && continue
|
|
|
|
# dhcp? (It's simpler to check for a set ip. Checks above ensure that if
|
|
|
|
# ip is there, we're static
|
|
|
|
[ -z "$ip" ] && continue
|
|
|
|
# Not good!
|
|
|
|
die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
|
|
|
|
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
|
|
|
# This ensures that BOOTDEV is always first in IFACES
|
|
|
|
if [ -n "$BOOTDEV" ] && [ -n "$IFACES" ] ; then
|
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
|
|
|
IFACES="${IFACES%$BOOTDEV*} ${IFACES#*$BOOTDEV}"
|
|
|
|
IFACES="$BOOTDEV $IFACES"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Store BOOTDEV and IFACES for later use
|
|
|
|
[ -n "$BOOTDEV" ] && echo $BOOTDEV > /tmp/net.bootdev
|
|
|
|
[ -n "$IFACES" ] && echo $IFACES > /tmp/net.ifaces
|
|
|
|
|
|
|
|
# We need a ip= line for the configured bootdev=
|
|
|
|
[ -n "$NEEDBOOTDEV" ] && [ -z "$BOOTDEVOK" ] && die "Bootdev Argument '$BOOTDEV' not found"
|