+apply_routing() {
+ local cfg="$1"
+ config_get iface "$cfg" iface
+ config_get oface "$cfg" oface
+ config_get_bool fwd "$cfg" fwd
+ config_get_bool nat "$cfg" nat
+ config_get_bool bidi "$cfg" bidi
+
+ config_get ifname "$iface" ifname
+ config_get ofname "$oface" ifname
+
+ [ -n "$ifname" ] || return 0
+ [ -n "$ofname" ] || return 0
+
+ [ "$fwd" -gt 0 ] && {
+ iptables -A luci_fw_forward -i "$ifname" -o "$ofname" -j ACCEPT
+ [ "$bidi" -gt 0 ] && iptables -A luci_fw_forward -i "$ofname" -o "$ifname" -j ACCEPT
+ }
+
+ [ "$nat" -gt 0 ] && {
+ config_get ifip "$iface" ipaddr
+ config_get ifmask "$iface" netmask
+ eval "$(ipcalc.sh $ifip $ifmask)"
+
+ iptables -t nat -A luci_fw_postrouting -s "$NETWORK/$PREFIX" -o "$ofname" -j MASQUERADE
+
+ [ "$bidi" -gt 0 ] && {
+ config_get ofip "$oface" ipaddr
+ config_get ofmask "$oface" netmask
+ eval "$(ipcalc.sh $ofip $ofmask)"
+
+ iptables -t nat -A luci_fw_postrouting -s "$NETWORK/$PREFIX" -o "$ifname" -j MASQUERADE
+ }
+ }
+}
+