+get_interface_zones() {
+ local interface="$2"
+ local name
+ local network
+ config_get name $1 name
+ config_get network $1 network
+ [ -z "$network" ] && network=$name
+ for n in $network; do
+ [ "$n" = "$interface" ] && append add_zone "$name"
+ done
+}
+
+fw_event() {
+ local action="$1"
+ local interface="$2"
+ local ifname="$(sh -c ". /etc/functions.sh; include /lib/network; scan_interfaces; config_get "$interface" ifname")"
+ add_zone=
+ local up
+
+ [ -z "$ifname" ] && return 0
+ config_foreach get_interface_zones zone "$interface"
+ [ -z "$add_zone" ] && return 0
+
+ case "$action" in
+ ifup)
+ for z in $add_zone; do
+ local loaded
+ config_get loaded core loaded
+ [ -n "$loaded" ] && addif "$interface" "$ifname" "$z"
+ done
+ ;;
+ ifdown)
+ config_get up "$interface" up
+
+ for z in $ZONE; do
+ [ "$up" == "1" ] && delif "$interface" "$ifname" "$z"
+ done
+ ;;
+ esac
+}
+