a8ce17c97662ce87b6b263b2a0d64ee09ce381ed
[openwrt/openwrt.git] / package / firewall / files / new / 20-firewall
1 . /lib/firewall/uci_firewall.sh
2 unset ZONE
3 config_get ifname $INTERFACE ifname
4 INTERFACE=$ifname
5 [ "$INTERFACE" == "lo" ] && exit 0
6 load_zones() {
7 local name
8 local network
9 config_get name $1 name
10 config_get network $1 network
11 [ -z "$network" ] && return
12 for n in $network; do
13 local ifname
14 config_get ifname $n ifname
15 list_contains ifname $INTERFACE && {
16 list_contains ZONE $name || ZONE="$ZONE $name"
17 }
18 done
19 }
20
21 config_foreach load_zones zone
22
23 IFACE=$(find_config $INTERFACE)
24 [ -n "$IFACE" ] &&
25 list_contains ZONE $IFACE || ZONE="$ZONE $IFACE"
26
27 [ ifup = "$ACTION" ] && {
28 for z in $ZONE; do
29 local loaded
30 config_get loaded core loaded
31 [ -n "$loaded" ] && addif $INTERFACE $z
32 done
33 }
34
35 [ ifdown = "$ACTION" ] && {
36 for z in $ZONE; do
37 local up
38 config_get up $z up
39 [ "$up" == "1" ] && delif $INTERFACE $z
40 done
41 }