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.
122 lines
2.9 KiB
122 lines
2.9 KiB
#!/bin/sh |
|
# |
|
# We don't need to check for ip= errors here, that is handled by the |
|
# cmdline parser script |
|
# |
|
|
|
# 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 |
|
} |
|
|
|
# Run dhclient |
|
do_dhcp() { |
|
# /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 -cf /etc/dhclient.conf -pf /tmp/dhclient.$netif.pid -lf /tmp/dhclient.$netif.lease $netif |
|
} |
|
|
|
# Handle static ip configuration |
|
do_static() { |
|
{ |
|
echo ip link set $netif up |
|
echo ip addr flush dev $netif |
|
echo ip addr add $ip/$mask dev $netif |
|
} > /tmp/net.$netif.up |
|
|
|
[ -n "$gw" ] && echo ip route add default via $gw dev $netif > /tmp/net.$netif.gw |
|
[ -n "$hostname" ] && echo hostname $hostname > /tmp/net.$netif.hostname |
|
|
|
echo online > /sys/class/net/$netif/uevent |
|
} |
|
|
|
PATH=$PATH:/sbin:/usr/sbin |
|
|
|
. /lib/dracut-lib.sh |
|
|
|
if getarg rdnetdebug ; then |
|
exec >/tmp/ifup.$1.$$.out |
|
exec 2>>/tmp/ifup.$1.$$.out |
|
set -x |
|
fi |
|
|
|
# Huh? No $1? |
|
[ -z "$1" ] && exit 1 |
|
|
|
# $netif reads easier than $1 |
|
netif=$1 |
|
|
|
# bridge this interface? |
|
if [ -e /tmp/bridge.info ]; then |
|
. /tmp/bridge.info |
|
if [ "$netif" = "$ethname" ]; then |
|
netif="$bridgename" |
|
fi |
|
fi |
|
|
|
# bail immediately if the interface is already up |
|
# or we don't need the network |
|
[ -f "/tmp/net.$netif.up" ] && exit 0 |
|
[ -f "/tmp/root.info" ] || exit 0 |
|
. /tmp/root.info |
|
[ -z "$netroot" ] && exit 0 |
|
|
|
# loopback is always handled the same way |
|
if [ "$netif" = "lo" ] ; then |
|
ip link set lo up |
|
ip addr add 127.0.0.1/8 dev lo |
|
>/tmp/net.$netif.up |
|
exit 0 |
|
fi |
|
|
|
# XXX need error handling like dhclient-script |
|
|
|
# start bridge if necessary |
|
if [ "$netif" = "$bridgename" ] && [ ! -e /tmp/net.$bridgename.up ]; then |
|
ip link set $ethname up |
|
# Create bridge and add eth to bridge |
|
brctl addbr $bridgename |
|
brctl setfd $bridgename 0 |
|
brctl addif $bridgename $ethname |
|
fi |
|
|
|
# No ip lines default to dhcp |
|
ip=$(getarg ip) |
|
[ -z "$ip" ] && do_dhcp; |
|
|
|
# Specific configuration, spin through the kernel command line |
|
# looking for ip= lines |
|
[ "$CMDLINE" ] || read CMDLINE </proc/cmdline; |
|
for p in $CMDLINE; do |
|
[ -n "${p%ip=*}" ] && continue |
|
ip_to_var ${p#ip=} |
|
|
|
# If this option isn't directed at our interface, skip it |
|
[ -n "$dev" ] && [ "$dev" != "$netif" ] && continue |
|
|
|
# Store config for later use |
|
for i in ip srv gw mask hostname; do |
|
eval '[ "$'$i'" ] && echo '$i'="$'$i'"' |
|
done > /tmp/net.$netif.override |
|
|
|
case $autoconf in |
|
dhcp|on|any) do_dhcp ;; |
|
*) do_static ;; |
|
esac |
|
break |
|
done |
|
exit 0
|
|
|