#!/bin/bash

. /.initrd/initenv

. shell-error
. uevent-sh-functions
. network-sh-functions

PROG="${QUEUE:--}: session=${SESSION:-0}: $PROG"
message_time=1

is_online()
{
	set -- link addr route
	while [ "$#" -gt 0 ]; do
		[ -d "$net_statedir/up/$NET_IF/$1" ] || return 1
		shift
	done
}

handler()
{
	message "$NET_IF: process event: network.$ev_type.$ev_action"

	case "$ev_action" in
		 update|remove)
			case "$ev_type" in
				link|addr|route|hostname|resolvconf|config)
					NET_IF="$NET_IF" \
					NET_EV_TYPE="$ev_type" \
					NET_EV_ACTION="$ev_action" \
					"/lib/network/$ev_type"
					;;
				*)
					fatal "$NET_IF: unknown event type: $ev_type"
					;;
			esac
			;;
		updated) mkdir -p -- "$net_statedir/up/$NET_IF/$ev_type" ;;
		removed) rm -rf   -- "$net_statedir/up/$NET_IF/$ev_type" ;;
	esac

	if [ ! -e "/.initrd/online/$NET_IF" ] && is_online; then
		message "$NET_IF: online"
		echo online > "/sys/class/net/$NET_IF/uevent"
		touch "/.initrd/online/$NET_IF"
	fi
}

rc=0
for ev_type in $net_event_list config; do
	for e in "$1/network.$ev_type".*; do
		[ -e "$e" ] || break

		ev_action="${e##*/network.$ev_type.}"
		ev_action="${ev_action%%.*}"

		( . "$e"; handler; ) ||
			rc=1

		done_event "$e"
	done
done

exit $rc
