#!/bin/sh

[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifupdate" ] || exit 0
[ -n "$DEVICE" ] || exit 0

. /usr/share/passwall2/utils.sh

[ -f "${LOCK_PATH}/${CONFIG}_ready.lock" ] || exit 0
[ "$(get_cache_var "ENABLED_DEFAULT_ACL")" = "1" ] || [ "$(get_cache_var "ENABLED_ACLS")" = "1" ] || exit 0

default_device=$(ip route show default 2>/dev/null | awk '{ for (i = 1; i < NF; i++) if ($i == "dev") { print $(i + 1); break } exit }')
default6_device=$(ip -6 route show default 2>/dev/null | awk '{ for (i = 1; i < NF; i++) if ($i == "dev") { print $(i + 1); break } exit }')
[ "$default_device" = "$DEVICE" ] || [ "$default6_device" = "$DEVICE" ] || exit 0

if [ "$ACTION" = "ifupdate" ]; then
	USE_TABLES=$(get_cache_var "USE_TABLES")
	[ -n "$USE_TABLES" ] && { "${APP_PATH}/${USE_TABLES}.sh" update_wan_sets >/dev/null 2>&1 & }
	exit 0
fi

mkdir -p "$LOCK_PATH" || {
	logger -p err -t network -s "${CONFIG}: cannot create lock directory $LOCK_PATH"
	exit 1
}

(
	command exec 9>"${LOCK_PATH}/${CONFIG}_ifup.lock" || {
		logger -p err -t network -s "${CONFIG}: cannot open ifup lock"
		exit 1
	}
	flock -xn 9 || exit 0

	# Keep this lock file: removing it would allow locks on different inodes.
	# The worker holds the lock until restart returns; children must not inherit it.
	logger -p notice -t network -s "${CONFIG}: restart when $INTERFACE ifup" 9>&-
	"/etc/init.d/${CONFIG}" restart 9>&-
) </dev/null >/dev/null 2>&1 &

exit 0
