mirror of
https://github.com/dracutdevs/dracut.git
synced 2024-10-28 02:25:18 +03:00
1b31fc140b
As with other netroot boot arguments ip= lines should be parsed and checked. Having this has the advantage that other cmdline scripts can tell the ip= parser if dhcp or ip=:srv:... is needed, like parse-root.sh (renamed dhcp-fallback) or parse-nfsroot do. The nfs test-suite has one check which uses static ip lines, but the autoconf param is wrong. Fixed this as well.
91 lines
2.5 KiB
Bash
Executable File
91 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Format:
|
|
# ip=[dhcp|on|any]
|
|
#
|
|
# ip=<interface>:[dhcp|on|any]
|
|
#
|
|
# ip=<client-IP-number>:<server-id>:<gateway-IP-number>:<netmask>:<client-hostname>:<interface>:[dhcp|on|any|none|off]
|
|
#
|
|
|
|
# Sadly there's no easy way to split ':' separated lines into variables
|
|
ip_to_var() {
|
|
local v=${1}:
|
|
set --
|
|
while [ -n "$v" ]; do
|
|
set -- "$@" "${v%%:*}"
|
|
v=${v#*:}
|
|
done
|
|
|
|
unset ip srv gw mask hostname dev autoconf
|
|
case $# in
|
|
0) autoconf="error" ;;
|
|
1) autoconf=$1 ;;
|
|
2) dev=$1; autoconf=$2 ;;
|
|
*) ip=$1; srv=$2; gw=$3; mask=$4; hostname=$5; dev=$6; autoconf=$7 ;;
|
|
esac
|
|
}
|
|
|
|
# Warn if defaulting to ip=dhcp
|
|
if [ -n "$netroot" ] && [ -z "$(getarg ip=)" ] ; then
|
|
warn "No ip= argument(s) for netroot provided, defaulting to DHCP"
|
|
return;
|
|
fi
|
|
|
|
# Check ip= lines
|
|
# XXX Would be nice if we could errorcheck ip addresses here as well
|
|
[ "$CMDLINE" ] || read CMDLINE < /proc/cmdline
|
|
for p in $CMDLINE; do
|
|
[ -n "${p%ip=*}" ] && continue
|
|
|
|
ip_to_var ${p#ip=}
|
|
|
|
# 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 '$p'";;
|
|
bootp|rarp|both) die "Sorry, ip=$autoconf is currenty unsupported";;
|
|
none|off) \
|
|
[ -z "$ip" ] && \
|
|
die "For argument '$p'\nValue '$autoconf' without static configuration does not make sense"
|
|
[ -z "$mask" ] && \
|
|
die "Sorry, automatic calculation of netmask is not yet supported"
|
|
;;
|
|
dhcp|on|any) \
|
|
[ -n "$ip" ] && \
|
|
die "For argument '$p'\nSorry, setting client-ip does not make sense for '$autoconf'"
|
|
;;
|
|
*) die "For argument '$p'\nSorry, unknown value '$autoconf'";;
|
|
esac
|
|
|
|
# We don't like duplicate device configs
|
|
if [ -n "$dev" ] ; then
|
|
if [ -n "$IFACES" ] ; then
|
|
for i in $IFACES ; do
|
|
[ "$dev" = "$i" ] && die "For argument '$p'\nDuplication configurations for '$dev'"
|
|
done
|
|
fi
|
|
IFACES="$IFACES $dev"
|
|
fi
|
|
|
|
# Do we need DHCP? (It's simpler to check for a set ip. Checks above ensure that if
|
|
# ip is there, we're static)
|
|
[ -n "$NEEDDHCP" ] && [ -z "$ip" ] && DHCPOK="1"
|
|
|
|
# Do we need srv OR dhcp?
|
|
if [ -n "$DHCPORSERVER" ] ; then
|
|
[ -n "$DHCPOK" ] && SRVOK="1"
|
|
[ -n "$srv" ] && SRVOK="1"
|
|
fi
|
|
|
|
done
|
|
|
|
[ -n "$NEEDDHCP" ] && [ -z "$DHCPOK" ] && die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
|
|
|
|
[ -n "$DHCPORSERVER" ] && [ -z "$SRVOK" ] && die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
|