#!/bin/bash

usage()
{
	echo '/etc/net IPv4 handler'
	echo "Usage: $0 <interface> <start|stop>" >&2
	exit 1
}

[ $# -eq 2 ] || usage
NAME=$1
ACTION=$2
pickup_defaults
pickup_options

# operation\first word | add X | del X | Y X
#----------------------+-------+-------+------
# add                  | add X | del X | add X
#----------------------+-------+-------+------
# del                  | del X | del X | del X
#----------------------+-------+-------+------
process_ipv4rules()
{
	local OP=${1:?missing 1st arg to $FUNCNAME}
	SRCFILE=`profiled_filename $MYIFACEDIR/ipv4rule`
	[ -s "$SRCFILE" ] && $DENOISE "$SRCFILE" | \
	while read FIRST REST; do
		case "$FIRST" in
			add)
				[ $OP = "del" ] && FIRST=del
			;;
			del)
				# should we restore deleted rules on iface shutdown?
				# [ $OP = "del" ] && FIRST=add
			;;
			*)
				FIRST="$OP $FIRST"
			;;
		esac
		$IP -4 rule $FIRST $REST
		print_progress
	done
}

case $ACTION in
	start)
		. $SCRIPTDIR/functions-ipv4
		is_yes $DONT_FLUSH || {
			$IP -4 address flush dev $NAME >/dev/null 2>&1
			print_progress
		}
		if iface_is_up $NAME; then
			case "$BOOTPROTO" in
				static)
					try_static && config_ipv4_routes_rules
					;;
				dhcp)
					try_dhcp && config_ipv4_routes_rules
					;;
				ipv4ll)
					try_ipv4ll && config_ipv4_routes_rules
					;;
				dhcp-static)
					try_dhcp || try_static && config_ipv4_routes_rules
					;;
				dhcp-ipv4ll)
					try_dhcp || try_ipv4ll && config_ipv4_routes_rules
					;;
				dhcp-ipv4ll-static)
					try_dhcp || try_ipv4ll || try_static && config_ipv4_routes_rules
					;;
				*)
					print_error "unknown BOOTPROTO '$BOOTPROTO'"
					;;
			esac
		fi
	;;
	#------------------------------------------------------ 'start' case ends
	stop)
		process_ipv4rules del
		is_yes "$DONT_FLUSH" || $IP -4 address flush dev $NAME >/dev/null 2>&1
	;;
	#------------------------------------------------------ 'stop' case ends
	*)
		print_error "Illegal argument to $0: '$ACTION'"
	;;
esac
