|
|
|
@ -1,9 +1,38 @@ |
|
|
|
|
#!/bin/sh |
|
|
|
|
|
|
|
|
|
. /etc/functions.sh |
|
|
|
|
. /usr/share/libubox/jshn.sh |
|
|
|
|
|
|
|
|
|
find_iface_address() |
|
|
|
|
{ |
|
|
|
|
local iface="$1" |
|
|
|
|
local ipaddr="$2" |
|
|
|
|
local prefix="$3" |
|
|
|
|
|
|
|
|
|
local tmp="$(ubus call network.interface."$iface" status 2>/dev/null)" |
|
|
|
|
|
|
|
|
|
json_load "${tmp:-{}}" |
|
|
|
|
json_get_type tmp address |
|
|
|
|
|
|
|
|
|
if [ "$tmp" = array ]; then |
|
|
|
|
|
|
|
|
|
json_select address |
|
|
|
|
json_get_type tmp 1 |
|
|
|
|
|
|
|
|
|
if [ "$tmp" = object ]; then |
|
|
|
|
|
|
|
|
|
json_select 1 |
|
|
|
|
[ -n "$ipaddr" ] && json_get_var "$ipaddr" address |
|
|
|
|
[ -n "$prefix" ] && json_get_var "$prefix" mask |
|
|
|
|
|
|
|
|
|
fi |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if [ "$ACTION" = "add" ] && [ "$INTERFACE" = "wan" ]; then |
|
|
|
|
local wanip=$(uci -P/var/state get network.wan.ipaddr) |
|
|
|
|
local wanip |
|
|
|
|
find_iface_address wan wanip |
|
|
|
|
[ -n "$wanip" ] || return |
|
|
|
|
|
|
|
|
|
iptables -t nat -F nat_reflection_in 2>/dev/null || { |
|
|
|
|
iptables -t nat -N nat_reflection_in |
|
|
|
@ -60,8 +89,9 @@ if [ "$ACTION" = "add" ] && [ "$INTERFACE" = "wan" ]; then |
|
|
|
|
|
|
|
|
|
local net |
|
|
|
|
for net in $(find_networks "$dest"); do |
|
|
|
|
local lanip=$(uci -P/var/state get network.$net.ipaddr) |
|
|
|
|
local lanmk=$(uci -P/var/state get network.$net.netmask) |
|
|
|
|
local lanip lanmk |
|
|
|
|
find_iface_address "$net" lanip lanmk |
|
|
|
|
[ -n "$lanip" ] || return |
|
|
|
|
|
|
|
|
|
local proto |
|
|
|
|
config_get proto "$cfg" proto |
|
|
|
|