You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.8 KiB
119 lines
2.8 KiB
#!/bin/sh |
|
|
|
PATH=$PATH:/sbin:/usr/sbin |
|
|
|
. /lib/dracut-lib |
|
|
|
getarg rdnetdebug && { |
|
exec >/tmp/ifup.$1.$$.out |
|
exec 2>>/tmp/ifup.$1.$$.out |
|
set -x |
|
} |
|
|
|
netif=$1 |
|
|
|
# bail immediatly if the interface is already up |
|
[ -f "/tmp/net.$netif.up" ] && exit 0 |
|
|
|
# loopback is always handled the same way |
|
[ "$netif" = "lo" ] && { |
|
ip link set lo up |
|
ip addr add 127.0.0.1/8 dev lo |
|
>/tmp/net.$netif.up |
|
exit 0 |
|
} |
|
|
|
# XXX need error handling like dhclient-script |
|
|
|
die() { |
|
echo $netif: "$@" 1>&2 |
|
exit 1 |
|
} |
|
|
|
do_static() { |
|
[ -n "$ip" ] || die "static: need IP address" |
|
[ -n "$mask" ] || { |
|
net=${ip%%.*} |
|
mask=255.0.0.0 |
|
[ $net -ge 128 ] && mask=255.255.0.0 |
|
[ $net -ge 192 ] && mask=255.255.255.0 |
|
} |
|
ip addr add $ip/$mask dev $netif || die "static: setting IP $ip/$mask" |
|
[ -n "$gw" ] && { |
|
ip route add default via $gw dev $netif || |
|
die "static: setting default route via $gw" |
|
} |
|
ip link set $netif up |
|
[ -e /tmp/hostname.set ] || { |
|
[ -n "$hostname" ] && mknod /tmp/hostname.set p 2>/dev/null && |
|
hostname $hostname |
|
} |
|
[ -n "$srv" ] && |
|
echo "new_dhcp_server_identifier=$srv" > /tmp/net.$netif.dhcpopts |
|
|
|
>/tmp/net.$netif.up |
|
echo online > /sys/class/net/$netif/uevent |
|
} |
|
|
|
do_dhcp() { |
|
reqs=subnet-mask,broadcast-address,routers,domain-name |
|
reqs=${reqs},domain-name-servers,domain-search |
|
reqs=${reqs},host-name,root-path,interface-mtu |
|
|
|
for i in ip srv gw mask hostname; do |
|
eval '[ "$'$i'" ] && echo '$i'="$'$i'"' |
|
done > /tmp/net.$netif.override |
|
[ -n "$ip" ] && echo bcast= >> /tmp/net.$netif.override |
|
|
|
# /sbin/dhclient-script will mark the netif up and generate the online |
|
# event for nfsroot |
|
# XXX add -V vendor class and option parsing per kernel |
|
dhclient -1 -q -R ${reqs} -pf /tmp/dhclient.$netif.pid $netif |
|
} |
|
|
|
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=off ;; |
|
1) autoconf=$1 ;; |
|
2) dev=$1; autoconf=$2 ;; |
|
*) ip=$1; srv=$2; gw=$3; mask=$4; hostname=$5; dev=$6; autoconf=$7 |
|
case $autoconf in |
|
''|none|off) [ -n "$ip" ] && autoconf=static ;; |
|
esac |
|
esac |
|
[ -n "$dev" ] || dev=$netif |
|
[ -n "$autoconf" ] || autoconf=off |
|
} |
|
|
|
root=$(getarg root) |
|
ip=$(getarg ip) |
|
|
|
if [ "$root" = "dhcp" -a -z "$ip" ]; then |
|
do_dhcp; |
|
else |
|
# spin through the kernel command line, looking for ip= lines |
|
for p in $(cat /proc/cmdline); do |
|
[ -n "${p%ip=*}" ] && continue |
|
ip_to_var ${p#ip=} |
|
|
|
# If this option isn't directed at our interface, skip it |
|
[ "$dev" = "$netif" ] || continue |
|
|
|
case $autoconf in |
|
static) do_static ;; |
|
dhcp|on|any) do_dhcp ;; |
|
bootp|rarp|both) die "autoconfig type $autoconf is not supported" ;; |
|
''|none|off) ;; |
|
esac |
|
break |
|
done |
|
fi |
|
exit 0
|
|
|