#!/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 /tmp/net.$netif.override case $autoconf in dhcp|on|any) do_dhcp ;; *) do_static ;; esac break done exit 0