X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/3d98699ef3197971484bd990d15e8b9eb0c506ce..7aabfee4089389a1ee2748590ef64d6bb2543a0d:/package/firewall/files/lib/core_interface.sh diff --git a/package/firewall/files/lib/core_interface.sh b/package/firewall/files/lib/core_interface.sh index f08975952..84e07e0e2 100644 --- a/package/firewall/files/lib/core_interface.sh +++ b/package/firewall/files/lib/core_interface.sh @@ -1,22 +1,34 @@ -# Copyright (C) 2009-2010 OpenWrt.org +# Copyright (C) 2009-2011 OpenWrt.org fw__uci_state_add() { local var="$1" local item="$2" local val="$(uci_get_state firewall core $var)" - uci_set_state firewall core $var "${val:+$val }$item" + local e1; for e1 in $item; do + local e2; for e2 in $val; do + [ "$e1" = "$e2" ] && e1="" + done + val="${val:+$val${e1:+ }}$e1" + done + + uci_toggle_state firewall core $var "$val" } fw__uci_state_del() { local var="$1" local item="$2" - local val=" $(uci_get_state firewall core $var) " - val="${val// $item / }" - val="${val# }" - val="${val% }" - uci_set_state firewall core $var "$val" + local rest="" + local val="$(uci_get_state firewall core $var)" + local e1; for e1 in $val; do + local e2; for e2 in $item; do + [ "$e1" = "$e2" ] && e1="" + done + rest="${rest:+$rest${e1:+ }}$e1" + done + + uci_toggle_state firewall core $var "$val" } fw_configure_interface() { @@ -70,6 +82,9 @@ fw_configure_interface() { # Need v4 while zone is v6 */*.*) fw_log info "zone $zone does not support IPv4 address family, skipping"; return ;; + + # Strip prefix + *) mode="${mode#G}" ;; esac lock /var/run/firewall-interface.lock @@ -146,14 +161,14 @@ fw_configure_interface() { fw_sysctl_interface $ifname fw_callback post interface - uci_set_state firewall core "${iface}_aliases" "$aliases" + uci_toggle_state firewall core "${iface}_aliases" "$aliases" } || { local subnets= config_get subnets core "${iface}_subnets" append subnets "$aliasnet" config_set core "${iface}_subnets" "$subnets" - uci_set_state firewall core "${iface}_subnets" "$subnets" + uci_toggle_state firewall core "${iface}_subnets" "$subnets" } local new_zones= @@ -172,8 +187,8 @@ fw_configure_interface() { } config_foreach load_zone zone - uci_set_state firewall core "${iface}_zone" "$new_zones" - uci_set_state firewall core "${iface}_ifname" "$ifname" + uci_toggle_state firewall core "${iface}_zone" "$new_zones" + uci_toggle_state firewall core "${iface}_ifname" "$ifname" } fw_sysctl_interface() {