}
# Setup triggers in procd for changes to specified network interfaces
-# network_is_up depends on /lib/functions/network.sh having been sourced
-interface_triggers() {
- local action="$1"
- local section="$2"
- local interface_reload_delay="${3:-$DEFAULT_PROCD_INTERFACE_RELOAD_DELAY}"
- local initscript="$4"
- if [ $# -ge 4 ]; then
- shift 4
+add_interface_triggers() {
+ local section="$1"
+ local interface_reload_delay="${2:-$DEFAULT_PROCD_INTERFACE_RELOAD_DELAY}"
+ local initscript="$3"
+ if [ $# -ge 3 ]; then
+ shift 3
fi
- local interfaces interface
- local have_up_interface
- local trigger_failed
+
+ local interfaces interface trigger_failed
config_get interfaces "$section" triggerlist
- # We list the actions we care about. Other actions are irrelevant.
- # We do not need to log or otherwise 'notice' other actions
- case "$action" in
- add_trigger)
- if [ -n "$interfaces" ] && [ "$interfaces" != "all" ]; then
- set -f
- trigger_failed="false"
- # interfaces is deliberately unquoted so we get word-splitting for
- # the for loop
- for interface in $interfaces; do
- # We use the variadic third and fourth parameters of procd_add_interface_trigger to
- # restart instead of reload on interface up/down events. Additionally the variadic
- # fifth and following parameters of procd_add_interface_trigger are passed through to
- # the <script>, so the trigger action becomes e.g. /etc/init.d/<script> restart <variadic_vars>.
- procd_add_interface_trigger "interface.*.up" "$interface" "/etc/init.d/$initscript" "restart" "$@" || trigger_failed="true"
- done
- set +f
- if [ "$trigger_failed" = "true" ]; then
- return 1
- fi
- elif [ "$interfaces" = "all" ]; then
- # Add a restart trigger on any interface's up status changing
- procd_add_raw_trigger "interface.*.up" "$interface_reload_delay" "/etc/init.d/$initscript" "restart" "$@" || return 1
- else
- return 0 # don't react to interface status
+ if [ -n "$interfaces" ] && [ "$interfaces" != "all" ]; then
+ set -f
+ trigger_failed="false"
+ # interfaces is deliberately unquoted so we get word-splitting for
+ # the for loop
+ for interface in $interfaces; do
+ # We use the variadic third and fourth parameters of procd_add_interface_trigger to
+ # restart instead of reload on interface up/down events. Additionally the variadic
+ # fifth and following parameters of procd_add_interface_trigger are passed through to
+ # the <script>, so the trigger action becomes e.g. /etc/init.d/<script> restart <variadic_vars>.
+ procd_add_interface_trigger "interface.*.up" "$interface" "/etc/init.d/$initscript" "restart" "$@" || trigger_failed="true"
+ done
+ set +f
+ if [ "$trigger_failed" = "true" ]; then
+ return 1
fi
- ;;
- check_interface_up)
- if [ -n "$interfaces" ] && [ "$interfaces" != "all" ]; then
- set -f
- have_up_interface="false"
- for interface in $interfaces; do
- network_is_up "$interface" && have_up_interface="true" && break
- done
- set +f
- if [ "$have_up_interface" = "false" ]; then
- log_msg "None of the trigger interfaces are up." "nut-service.sh" "nut-service" "notice"
- return 1
- fi
- elif [ "$interfaces" = "all" ]; then
- # Return true if any interface is up
- # -q for jsonfilter only suppress error output, not messages on
- # stdout, redirect to >/dev/null is needed to avoid all output
- if ubus -S call network.device status | jsonfilter -q -l 1 -e '$[@.up=true].up' >/dev/null; then
- return 0
- fi
- log_msg "No interfaces are up." "nut-service.sh" "nut-service" "notice"
+ elif [ "$interfaces" = "all" ]; then
+ # Add a restart trigger on any interface's up status changing
+ procd_add_raw_trigger "interface.*.up" "$interface_reload_delay" "/etc/init.d/$initscript" "restart" "$@" || return 1
+ else
+ return 0 # don't react to interface status
+ fi
+ return 0
+}
+
+# availability of network_is_up depends on /lib/functions/network.sh having
+# been sourced
+check_interface_up() {
+ local section="$1"
+ local interfaces interface have_up_interface
+
+ config_get interfaces "$section" triggerlist
+
+ if [ -n "$interfaces" ] && [ "$interfaces" != "all" ]; then
+ set -f
+ have_up_interface="false"
+ for interface in $interfaces; do
+ network_is_up "$interface" && have_up_interface="true" && break
+ done
+ set +f
+ if [ "$have_up_interface" = "false" ]; then
+ log_msg "None of the trigger interfaces are up." "nut-service.sh" "nut-service" "notice"
return 1
- else
- return 0 # don't depend on interface status
fi
- ;;
- esac
+ elif [ "$interfaces" = "all" ]; then
+ # Return true if any interface is up
+ # -q for jsonfilter only suppress error output, not messages on
+ # stdout, redirect to >/dev/null is needed to avoid all output
+ if ubus -S call network.device status | jsonfilter -q -l 1 -e '$[@.up=true].up' >/dev/null; then
+ return 0
+ fi
+ log_msg "No interfaces are up." "nut-service.sh" "nut-service" "notice"
+ return 1
+ else
+ return 0 # don't depend on interface status
+ fi
return 0
}