#!/bin/sh

#set -e

# initramfs-tools header

PREREQ=""

prereqs()
{
   echo "${PREREQ}"
}

case "${1}" in
   prereqs)
      prereqs
      exit 0
   ;;
esac

. /scripts/live-functions

if [ -n "${NONETWORKING}" ]; then
   exit 0
fi

modprobe af_packet # req'd for DHCP

# initialize udev
# (this /might/ be required for firmware loading to complete)
if grep -q noudev /proc/cmdline; then
   log_begin_msg "Networking: Skipping udev as requested via bootoption noudev."
else
   udevadm trigger
   udevadm settle
fi

if [ -n "${IP}" ]; then
   # call into initramfs-tools provided network setup functions, so basic
   # networking is fine.
   log_begin_msg "Networking: Waiting for basic network to come up..."
   configure_networking
fi

# prepare a new /etc/network/interfaces file (and, possibly, a new /etc/resolv.conf)
IFFILE="/root/etc/network/interfaces"
if [ -L /root/etc/resolv.conf ] ; then
  # assume we have resolvconf
  RESOLVCONF=/root/etc/resolvconf/resolv.conf.d/base
else
  RESOLVCONF="/root/etc/resolv.conf"
fi

# config for loopback networking
cat > $IFFILE << EOF
# Initially generated on boot by initramfs' 23networking.

auto lo
iface lo inet loopback

EOF

unset HOSTNAME

# generate config for each present network device
for interface in /sys/class/net/eth* /sys/class/net/ath* /sys/class/net/wlan*; do
    [ -e ${interface} ] || continue
    interface=$(basename ${interface})
    method="dhcp"

    # NODHCP or a previously run ipconfig mean that ifupdown should never
    # touch this interface (IP-stack wise).
    netconfig=/tmp/net-${interface}.conf
    if [ -n "$NODHCP" ] || [ -e "${netconfig}" ]; then
        method="manual"
    fi

    cat >> $IFFILE << EOF
allow-hotplug ${interface}
iface ${interface} inet ${method}
EOF

    # DNS for resolvconf and /etc/resolv.conf
    if [ -e "${netconfig}" ]; then
        . "${netconfig}"
        if [ -n "${DNSDOMAIN}" ]; then
            echo "    dns-search ${DNSDOMAIN}" >> $IFFILE
        fi
        # make sure we don't have any 0.0.0.0 nameservers
        IPV4DNSLIST=""
        for IPV4DNS in ${IPV4DNS0} ${IPV4DNS1}; do
            [ -n "${IPV4DNS}" ] || continue
            [ "${IPV4DNS}" != "0.0.0.0" ] || continue
            IPV4DNSLIST="${IPV4DNSLIST}${IPV4DNS} "
        done
        if [ -n "${IPV4DNSLIST}" ]; then
            echo "    dns-nameservers ${IPV4DNSLIST}" >> $IFFILE
            for IPV4DNS in ${IPV4DNSLIST}; do
                echo "nameserver ${IPV4DNS}" >> $RESOLVCONF
            done
        fi
    fi

    if [ -z "$NODHCPHOSTNAME" -a -n "$HOSTNAME" ]; then
        echo $HOSTNAME > /root/etc/hostname
    fi

    unset DEVICE IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1 HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH filename
    unset IPV4DNS IPV4DNSLIST

    echo>> $IFFILE
done

# dns bootoption
if [ -n "$DNSSERVER1" ]
then
	# disable any existing entries
	if [ -r $RESOLVCONF ]
	then
		sed -i 's/nameserver/# nameserver/' $RESOLVCONF
	fi
	for i in $DNSSERVER1 $DNSSERVER2
	do
		echo "nameserver $i" >> $RESOLVCONF
	done
fi
