mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-01-28 01:27:16 +01:00
1259 lines
No EOL
43 KiB
Bash
1259 lines
No EOL
43 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2011-2012 Luka Perkov <freecwmp@lukaperkov.net>
|
|
# Copyright (C) 2013-2015 Inteno Broadband Technology AB
|
|
# Author Ahmed Zribi <ahmed.zribi@pivasoftware.com>
|
|
# Author: Anis Ellouze <anis.ellouze@pivasoftware.com>
|
|
|
|
prefix_list="$prefix_list InternetGatewayDevice.WANDevice."
|
|
|
|
WAN_INST_ETH=1
|
|
WAN_INST_ATM=2
|
|
WAN_INST_PTM=3
|
|
WAN_IP_CONNECTION=1
|
|
WAN_PPP_CONNECTION=2
|
|
default_wan=""
|
|
|
|
get_wan_device_mng_status() {
|
|
# TODO: Unconfigured ; Connecting ; Connected ; PendingDisconnect ; Disconneting ; Disconnected
|
|
local val=""
|
|
local intf="$1"
|
|
|
|
json_load "$(ifstatus $intf)"
|
|
json_get_var up up
|
|
if [ "$up" = "1" ];then
|
|
json_get_var uptime uptime
|
|
json_get_var pending pending
|
|
else
|
|
uptime=0
|
|
fi
|
|
if [ $uptime -gt 0 ];then
|
|
val="Connected"
|
|
elif [ "$pending" = "1" ];then
|
|
val="Pending Disconnect"
|
|
else
|
|
val="Disconnected"
|
|
fi
|
|
echo $val
|
|
}
|
|
|
|
get_wan_device_ppp_status() {
|
|
# TODO: Unconfigured ; Connecting ; Connected ; PendingDisconnect ; Disconneting ; Disconnected
|
|
local val=""
|
|
local intf="$1"
|
|
|
|
json_load "$(ifstatus $intf)"
|
|
json_get_var up up
|
|
if [ "$up" = "1" ];then
|
|
json_get_var uptime uptime
|
|
json_get_var pending pending
|
|
else
|
|
uptime=0
|
|
fi
|
|
if [ $uptime -gt 0 ];then
|
|
val="Connected"
|
|
elif [ $pending = 1 ];then
|
|
val="Pending Disconnect"
|
|
else
|
|
val="Disconnected"
|
|
fi
|
|
echo $val
|
|
}
|
|
|
|
get_wan_device_mng_interface_ip() {
|
|
local val=""
|
|
local intf="$1"
|
|
|
|
if [ -z "$default_wan_device_mng_interface_ip" ]; then
|
|
network_get_ipaddr val $intf
|
|
else
|
|
val=$default_wan_device_mng_interface_ip
|
|
fi
|
|
echo $val
|
|
}
|
|
|
|
get_wan_device_ppp_interface_ip() {
|
|
local val=""
|
|
local intf="$1"
|
|
|
|
if [ -z "$default_wan_device_mng_interface_ip" ]; then
|
|
network_get_ipaddr val $intf
|
|
else
|
|
val=$default_wan_device_mng_interface_ip
|
|
fi
|
|
echo $val
|
|
}
|
|
|
|
get_wan_device_mng_interface_mac() {
|
|
local val=""
|
|
local intf="$1"
|
|
local device
|
|
|
|
json_load "$(ifstatus $intf)"
|
|
json_get_var device device
|
|
json_load "$(devstatus $device)"
|
|
json_get_var macaddr macaddr
|
|
val="$macaddr"
|
|
echo $val
|
|
}
|
|
|
|
get_wan_device_wan_access_type() {
|
|
case $1 in
|
|
$WAN_INST_ETH) echo "Ethernet";;
|
|
$WAN_INST_ATM|$WAN_INST_PTM) echo "DSL";;
|
|
esac
|
|
}
|
|
|
|
get_wan_device_get_dslstats () {
|
|
local object="$1"
|
|
local param="$2"
|
|
local val
|
|
json_init
|
|
json_load "`ubus call router dslstats`"
|
|
for str in $object; do
|
|
json_select "$str"
|
|
done
|
|
json_get_var val "$param"
|
|
json_close_object
|
|
echo "$val"
|
|
}
|
|
|
|
get_wan_device_wan_dsl_traffic () {
|
|
local val=`get_wan_device_get_dslstats "dslstats" "traffic"`
|
|
case "$val" in
|
|
ATM*) echo "adsl";;
|
|
PTM*) echo "vdsl";;
|
|
esac
|
|
}
|
|
|
|
get_wan_device_wan_dsl_interface_config_status() {
|
|
local val=""
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "NoSignal Not a dsl interface"
|
|
else
|
|
local status=`get_wan_device_get_dslstats "dslstats" "status"`
|
|
case "$status" in
|
|
"Showtime")
|
|
val="Up"
|
|
;;
|
|
"Training")
|
|
val="Initializing"
|
|
;;
|
|
"Channel Analysis")
|
|
val="EstablishingLink"
|
|
;;
|
|
"Disabled")
|
|
val="Disabled"
|
|
;;
|
|
*)
|
|
val="NoSignal"
|
|
;;
|
|
esac
|
|
local dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo $val
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo $val
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_wan_dsl_interface_config_modulation_type() {
|
|
local val=""
|
|
local dev="$1"
|
|
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "Not a dsl interface"
|
|
else
|
|
local mode=`get_wan_device_get_dslstats "dslstats" "mode"`
|
|
case "$mode" in
|
|
G.Dmt)
|
|
val="ADSL_G.dmt"
|
|
;;
|
|
G.lite)
|
|
val="ADSL_G.lite"
|
|
;;
|
|
T1.413)
|
|
val="ADSL_ANSI_T1.413"
|
|
;;
|
|
ADSL2)
|
|
val="ADSL_G.dmt.bis"
|
|
;;
|
|
AnnexL)
|
|
val="ADSL_re-adsl"
|
|
;;
|
|
ADSL2+)
|
|
val="ADSL_2plus"
|
|
;;
|
|
*)
|
|
val="$mode"
|
|
;;
|
|
esac
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo $val
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo $val
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_datapath() {
|
|
local val=""
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "None"
|
|
else
|
|
val=`adsl info --state|grep "Upstream rate"| awk -F'['$'\t'' ,]' '$1!="Max:" {print $2}'`
|
|
case "$val" in
|
|
FAST)
|
|
val="Fast"
|
|
;;
|
|
INTR)
|
|
val="Interleaved"
|
|
;;
|
|
*)
|
|
val="None"
|
|
;;
|
|
esac
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo $val
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo $val
|
|
else
|
|
echo "None"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_downstreamcurrrate() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local rate_down=`get_wan_device_get_dslstats "dslstats bearers 1" "rate_down"`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${rate_down:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${rate_down:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_downstreammaxrate() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local max_rate_down=`get_wan_device_get_dslstats "dslstats bearers 1" "max_rate_down"`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${max_rate_down:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${max_rate_down:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_downstreamattenuation() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local attn_down_x100=`get_wan_device_get_dslstats "dslstats" "attn_down_x100"`
|
|
local attn_down=`expr ${attn_down_x100} / 10`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${attn_down:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${attn_down:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_downstreamnoisemargin() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local snr_down_x100=`get_wan_device_get_dslstats "dslstats" "snr_down_x100"`
|
|
local snr_down=`expr ${snr_down_x100} / 10`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${snr_down:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${snr_down:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_upstreamcurrrate() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local rate_up=`get_wan_device_get_dslstats "dslstats bearers 1" "rate_up"`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${rate_up:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${rate_up:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_upstreammaxrate() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local max_rate_up=`get_wan_device_get_dslstats "dslstats bearers 1" "max_rate_up"`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${max_rate_up:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${max_rate_up:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_upstreamattenuation() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local attn_up_x100=`get_wan_device_get_dslstats "dslstats" "attn_up_x100"`
|
|
local attn_up=`expr ${attn_up_x100} / 10`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${attn_up:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${attn_up:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_wan_device_dsl_upstreamnoisemargin() {
|
|
local dev="$1"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
echo "0"
|
|
else
|
|
local snr_up_x100=`get_wan_device_get_dslstats "dslstats" "snr_up_x100"`
|
|
local snr_up=`expr ${snr_up_x100} / 10`
|
|
dsl=`get_wan_device_wan_dsl_traffic`
|
|
if [ "$dev" = "$WAN_INST_ATM" -a "$dsl" = "adsl" ]; then
|
|
echo ${snr_up:-0}
|
|
elif [ "$dev" = "$WAN_INST_PTM" -a "$dsl" = "vdsl" ]; then
|
|
echo ${snr_up:-0}
|
|
else
|
|
echo "0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
set_wan_device() {
|
|
local uci_name=$1
|
|
local val=$2
|
|
$UCI_SET $uci_name="$val"
|
|
[ -f /etc/init.d/ppp_password ] && delay_service reload "ppp_password" "1"
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
get_wan_dsl_link_config_destination_address() {
|
|
local if_atm="$1"
|
|
local atmbridge=`$UCI_SHOW layer2_interface_adsl|grep "layer2_interface_adsl\.[^.]\+\.ifname=$if_atm"| cut -f2 -d'.'`
|
|
if [ "$atmbridge" = "" ]; then return; fi
|
|
local vpi="`$UCI_GET layer2_interface_adsl.$atmbridge.vpi`"
|
|
local vci="`$UCI_GET layer2_interface_adsl.$atmbridge.vci`"
|
|
echo "PVC: $vpi/$vci"
|
|
}
|
|
|
|
set_wan_dsl_link_config_destination_address() {
|
|
local if_atm="$1"
|
|
shift
|
|
local val="$*"
|
|
local atmbridge=`$UCI_SHOW layer2_interface_adsl|grep "layer2_interface_adsl\.[^.]\+\.ifname=$if_atm"| cut -f2 -d'.'`
|
|
if [ "$atmbridge" = "" ]; then return; fi
|
|
local val=${val#PVC:}
|
|
local vpi=${val%/*}; vpi=${vpi/ /}
|
|
local vci=${val#*/}; vci=${vci/ /}
|
|
$UCI_SET layer2_interface_adsl.$atmbridge.vpi="$vpi"
|
|
$UCI_SET layer2_interface_adsl.$atmbridge.vci="$vci"
|
|
delay_service restart "layer2_interface_adsl" "1"
|
|
delay_service restart "layer2_interface" "1"
|
|
}
|
|
|
|
get_wan_dsl_link_config_atm_encapsulation() {
|
|
local if_atm="$1"
|
|
local encaptype
|
|
local atmbridge=`$UCI_SHOW layer2_interface_adsl|grep "layer2_interface_adsl\.[^.]\+\.ifname=$if_atm"| cut -f2 -d'.'`
|
|
if [ "$atmbridge" = "" ]; then return; fi
|
|
type="`uci get layer2_interface_adsl.$atmbridge.link_type`"
|
|
case $type in
|
|
"EoA") encaptype="eoa";;
|
|
"PPPoA") encaptype="pppoa";;
|
|
"IPoA") encaptype="ipoa";;
|
|
esac
|
|
local encapsulation="`$UCI_GET layer2_interface_adsl.$atmbridge.encaps$encaptype`"
|
|
case $encapsulation in
|
|
vcmux*) echo "VCMUX";;
|
|
llc*) echo "LLC";;
|
|
esac
|
|
}
|
|
|
|
set_wan_dsl_link_config_atm_encapsulation() {
|
|
local val="$1"
|
|
local if_atm="$2"
|
|
local encaptype encapsulation
|
|
local atmbridge=`$UCI_SHOW layer2_interface_adsl|grep "layer2_interface_adsl\.[^.]\+\.ifname=$if_atm"| cut -f2 -d'.'`
|
|
if [ "$atmbridge" = "" ]; then return; fi
|
|
type="`uci get layer2_interface_adsl.$atmbridge.link_type`"
|
|
case $type in
|
|
"EoA") encaptype="eoa"; encapsulation="vcmux_eth:llcsnap_eth";;
|
|
"PPPoA") encaptype="pppoa"; encapsulation="vcmux_pppoa:llcencaps_ppp";;
|
|
"IPoA") encaptype="ipoa"; encapsulation="vcmux_ipoa:llcsnap_rtip";;
|
|
esac
|
|
case $val in
|
|
"VCMUX") encapsulation=${encapsulation%:*};;
|
|
"LLC") encapsulation=${encapsulation#*:};;
|
|
*) return;;
|
|
esac
|
|
$UCI_SET layer2_interface_adsl.$atmbridge.encaps$encaptype="$encapsulation"
|
|
delay_service restart "layer2_interface_adsl" "1"
|
|
delay_service restart "layer2_interface" "1"
|
|
}
|
|
|
|
|
|
get_wan_ip_link_connection_addressing_type() {
|
|
local iface="$1"
|
|
local proto="`$UCI_GET network.$iface.proto`"
|
|
case $proto in
|
|
"dhcp") echo "DHCP";;
|
|
"static") echo "Static";;
|
|
*) echo "$proto";;
|
|
esac
|
|
}
|
|
|
|
set_wan_ip_link_connection_addressing_type() {
|
|
local val="$1"
|
|
local iface="$2"
|
|
local proto
|
|
case $val in
|
|
"DHCP") proto="dhcp";;
|
|
"Static") proto="static";;
|
|
*) return;;
|
|
esac
|
|
$UCI_SET network.$iface.proto="$proto"
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
get_wan_ip_link_connection_connection_type() {
|
|
local iface="$1"
|
|
local type="`$UCI_GET network.$iface.type`"
|
|
case $type in
|
|
"bridge"|"alias") echo "IP_Bridged";;
|
|
*) echo "IP_Routed";;
|
|
esac
|
|
}
|
|
|
|
set_wan_ip_link_connection_connection_type() {
|
|
local val="$1"
|
|
local iface="$2"
|
|
local type="`$UCI_GET network.$iface.type`"
|
|
case $val in
|
|
"IP_Bridged")
|
|
[ "$type" = "bridge" -o "$type" = "alias" ] && return
|
|
type="bridge"
|
|
;;
|
|
"IP_Routed")
|
|
[ "$type" != "bridge" -a "$type" != "alias" ] && return
|
|
type=""
|
|
;;
|
|
*) return;;
|
|
esac
|
|
$UCI_SET network.$iface.type="$type"
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
get_wan_ip_link_connection_nat_enabled() {
|
|
local iface="$1"
|
|
local i=0
|
|
while [ "`$UCI_GET firewall.@zone[$i]`" != "" ]; do
|
|
if [ "`$UCI_GET firewall.@zone[$i].masq`" = "1" ]; then
|
|
if [ "`$UCI_GET firewall.@zone[$i].network| grep $iface`" != "" ]; then
|
|
echo 1; return
|
|
fi
|
|
fi
|
|
let i++
|
|
done
|
|
echo "0"
|
|
}
|
|
|
|
set_wan_ip_link_connection_nat_enabled() {
|
|
local val="$1"
|
|
local iface="$2"
|
|
local cnt=0
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ]; then
|
|
val="1"
|
|
elif [ "$val" = "false" -o "$val" = "0" ]; then
|
|
val=""
|
|
else
|
|
return
|
|
fi
|
|
local i=0
|
|
while [ "`$UCI_GET firewall.@zone[$i]`" != "" ]; do
|
|
if [ "`$UCI_GET firewall.@zone[$i].network| grep $iface`" != "" ]; then
|
|
$UCI_SET firewall.@zone[$i].masq=$val
|
|
let cnt++
|
|
if [ "$val" != "" ]; then break; fi
|
|
fi
|
|
let i++
|
|
done
|
|
if [ "$cnt" = "0" -a "$val" != "" ]; then
|
|
local obj=`create_firewall_zone_config nat $iface`
|
|
$UCI_SET firewall.$obj.masq=$val
|
|
fi
|
|
delay_service reload "firewall" "1"
|
|
}
|
|
|
|
get_wan_igmp_rule_idx() {
|
|
local iface="$1"
|
|
local izone irule izname __rule __zone __zname __enable
|
|
for izone in `$UCI_SHOW firewall | grep "firewall\.@zone\[[0-9]\+\]\.network=.*$iface" | cut -d. -f2`; do
|
|
izname=`$UCI_GET firewall.$izone.name`
|
|
if [ "`$UCI_GET firewall.$izone.network`" = "$iface" -a "$__rule" = "" ]; then
|
|
__zone="$izone"
|
|
__zname="$izname"
|
|
fi
|
|
[ "`$UCI_GET firewall.$izone.input`" = "DROP" ] && __enable="0"
|
|
for irule in `$UCI_SHOW firewall | grep "firewall\.@rule\[[0-9]\+\]\.src=.*$izname" | cut -d. -f2`; do
|
|
if [ "`$UCI_GET firewall.$irule.proto`" = "igmp" ]; then
|
|
__rule="$irule"
|
|
__zone="$izone"
|
|
__zname="$izname"
|
|
[ "`$UCI_GET firewall.$irule.enabled`" = "0" ] && break
|
|
[ "`$UCI_GET firewall.$irule.target`" = "DROP" ] && __enable="0" || __enable="1"
|
|
break
|
|
fi
|
|
done
|
|
[ "$__rule" != "" ] && break
|
|
done
|
|
__enable=${__enable:-1}
|
|
eval "export -- \"$2=\"\"$__rule\"\"\""
|
|
eval "export -- \"$3=\"\"$__zone\"\"\""
|
|
eval "export -- \"$4=\"\"$__zname\"\"\""
|
|
eval "export -- \"$5=\"\"$__enable\"\"\""
|
|
}
|
|
|
|
get_wan_ip_link_connection_igmp_enabled() {
|
|
local iface="$1"
|
|
local rule zone zname enable
|
|
get_wan_igmp_rule_idx $iface rule zone zname enable
|
|
echo "$enable"
|
|
}
|
|
|
|
set_wan_ip_link_connection_igmp_enabled() {
|
|
local val="$1"
|
|
local iface="$2"
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ]; then
|
|
val="ACCEPT"
|
|
elif [ "$val" = "false" -o "$val" = "0" ]; then
|
|
val="DROP"
|
|
else
|
|
return
|
|
fi
|
|
local rule zone enable zname
|
|
get_wan_igmp_rule_idx $iface rule zone zname enable
|
|
if [ "$zone" = "" ]; then
|
|
zone=`create_firewall_zone_config igmp $iface`
|
|
zname="igmp_$iface"
|
|
fi
|
|
if [ "$rule" = "" ]; then
|
|
rule=`$UCI_ADD firewall rule`
|
|
$UCI_SET firewall.$rule.src=$zname
|
|
$UCI_SET firewall.$rule.proto=igmp
|
|
fi
|
|
|
|
$UCI_SET firewall.$rule.target=$val
|
|
$UCI_SET firewall.$rule.enabled=1
|
|
delay_service reload "firewall" "1"
|
|
}
|
|
|
|
get_wan_ip_link_connection_dns_enabled() {
|
|
local iface="$1"
|
|
local val=`$UCI_GET network.$iface.peerdns`
|
|
echo ${val:-1}
|
|
}
|
|
|
|
set_wan_ip_link_connection_dns_enabled() {
|
|
local val="$1"
|
|
local iface="$2"
|
|
local obj
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ]; then
|
|
val=""
|
|
elif [ "$val" = "false" -o "$val" = "0" ]; then
|
|
val="0"
|
|
else
|
|
return
|
|
fi
|
|
$UCI_SET network.$iface.peerdns=$val
|
|
delay_service reload "network" "1"
|
|
delay_service reload "dnsmasq" "1"
|
|
}
|
|
|
|
get_wan_eth_intf_enable() {
|
|
local fdev="$1"
|
|
local val
|
|
json_load "$(devstatus $fdev)"
|
|
json_get_var val up
|
|
[ "$val" != "true" -a "$val" != "1" ] && val="false"
|
|
echo $val
|
|
}
|
|
|
|
set_wan_eth_intf_enable() {
|
|
local val="$1"
|
|
local fdev="$2"
|
|
local cval
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ]; then
|
|
val="true"
|
|
elif [ "$val" = "false" -o "$val" = "0" ]; then
|
|
val="false"
|
|
else
|
|
return
|
|
fi
|
|
json_load "$(devstatus $fdev)"
|
|
json_get_var cval up
|
|
[ "$cval" = "$val" ] && return
|
|
|
|
local intf
|
|
local intfs=`$UCI_SHOW network | grep "network\.[^.]\+\.ifname=.*$fdev" | cut -d. -f2 | sort -u`
|
|
if [ "$val" = "true" ]; then
|
|
for intf in $intfs; do
|
|
ubus call network.interface.$intf up '{}' &
|
|
done
|
|
else
|
|
for intf in $intfs; do
|
|
local type=`$UCI_GET network.$intf.type`
|
|
if [ "$type" != "anywan" -a "$type" != "multiwan" ]; then
|
|
ubus call network.interface.$intf down '{}' &
|
|
break
|
|
else
|
|
local device
|
|
json_load "$(ifstatus $intf)"
|
|
json_get_var device device
|
|
case "$device" in "$fdev"*)
|
|
ubus call network.interface.$intf down '{}' &
|
|
break
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
get_wan_eth_intf_status() {
|
|
local fdev="$1"
|
|
local val
|
|
json_load "$(devstatus $fdev)"
|
|
json_get_var val up
|
|
[ "$val" != "true" -a "$val" != "1" ] && echo "Disabled" || echo "Up"
|
|
}
|
|
|
|
get_wan_eth_intf_mac() {
|
|
local fdev="$1"
|
|
local val
|
|
json_load "$(devstatus $fdev)"
|
|
json_get_var val macaddr
|
|
[ "$val" = "" ] && val="00:00:00:00:00:00"
|
|
echo $val
|
|
}
|
|
|
|
get_wan_eth_intf_stats() {
|
|
local fdev="$1"
|
|
local svar="$2"
|
|
local val
|
|
json_load "$(devstatus $fdev)"
|
|
json_select "statistics" > /dev/null
|
|
json_get_var val "$svar" > /dev/null
|
|
json_select ".." > /dev/null
|
|
echo ${val:-0}
|
|
}
|
|
|
|
get_max_pcon_instance() {
|
|
$UCI_SHOW network |sed -n "s/network\.[^.]\+\.wan_instance=$1\.//p" | sort -rn | head -n1
|
|
}
|
|
|
|
get_max_layer2_interface_index() {
|
|
$UCI_SHOW layer2_interface_$2 | sed -n "s/layer2_interface_$2\.[^.]\+\.baseifname=$1//p" | sort -rn | head -n1
|
|
}
|
|
|
|
update_wan_instance() {
|
|
local dev="$1"
|
|
local wan="$2"
|
|
local iface="$3"
|
|
local proto="$4"
|
|
local iproto
|
|
|
|
if [ "$proto" = "dhcp" -o "$proto" = "static" ]; then
|
|
iproto=$WAN_IP_CONNECTION
|
|
elif [ "$proto" = "pppoa" -o "$proto" = "pppoe" ];then
|
|
iproto=$WAN_PPP_CONNECTION
|
|
else
|
|
return
|
|
fi
|
|
|
|
local inst=`$UCI_GET network.$iface.wan_instance`
|
|
if [ "$dev.$wan.$iproto" = ${inst%.*} ]; then
|
|
echo ${inst##*.}
|
|
else
|
|
local iconp=`get_max_pcon_instance $dev.$wan.$iproto`
|
|
iconp=${iconp:-0}
|
|
let iconp++
|
|
$UCI_SET network.$iface.wan_instance="$dev.$wan.$iproto.$iconp"
|
|
$UCI_COMMIT
|
|
echo $iconp
|
|
fi
|
|
}
|
|
|
|
check_multiwan_interface() {
|
|
local iface="$1"
|
|
local cnt=0
|
|
local allwans=""
|
|
local ifnames=`$UCI_GET network.$iface.ifname`
|
|
for ifname in $ifnames; do
|
|
case $ifname in
|
|
atm*|ptm*|eth0*)
|
|
ifname=${ifname%.*}
|
|
if [ "${allwans/$ifname/}" = "$allwans" ]; then
|
|
let cnt++
|
|
allwans="$allwans $ifname"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
if [ "`$UCI_GET network.$iface.type`" != "" -a $cnt -gt 1 ]; then echo "$cnt"; fi
|
|
}
|
|
|
|
get_multiwan_instance() {
|
|
local iface="$1"
|
|
local __iwan __idev ifname
|
|
local ifnames=`$UCI_GET network.$iface.ifname`
|
|
json_load "$(ifstatus $iface)"
|
|
json_get_var device device
|
|
ifnames="$device $ifnames"
|
|
for ifname in $ifnames; do
|
|
case $ifname in
|
|
atm*)
|
|
__idev=$WAN_INST_ATM
|
|
__iwan=${ifname#atm}; __iwan=${__iwan%.*}; let __iwan++
|
|
break
|
|
;;
|
|
ptm*)
|
|
__idev=$WAN_INST_PTM
|
|
__iwan=${ifname#ptm}; __iwan=${__iwan%.*}; let __iwan++
|
|
break
|
|
;;
|
|
eth0*)
|
|
__idev=$WAN_INST_ETH
|
|
__iwan=1
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
eval "export -- \"$2=\"\"$__idev\"\"\""
|
|
eval "export -- \"$3=\"\"$__iwan\"\"\""
|
|
}
|
|
|
|
get_wan_device_by_instance() {
|
|
local __pref __layer2
|
|
case $1 in
|
|
$WAN_INST_ETH) __pref="eth"; __layer2=ethernet;;
|
|
$WAN_INST_ATM) __pref="atm"; __layer2=adsl;;
|
|
$WAN_INST_PTM) __pref="ptm"; __layer2=vdsl;;
|
|
esac
|
|
eval "export -- \"$2=\"\"$__pref\"\"\""
|
|
eval "export -- \"$3=\"\"$__layer2\"\"\""
|
|
}
|
|
|
|
set_annexm_enable() {
|
|
local dev="$1"
|
|
local val="$2"
|
|
if [ "$dev" = "$WAN_INST_ATM" ]; then
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ]; then
|
|
val="Enabled"
|
|
elif [ "$val" = "false" -o "$val" = "0" ]; then
|
|
val=""
|
|
else
|
|
return
|
|
fi
|
|
$UCI_SET layer2_interface.capabilities.AnnexM="$val"
|
|
delay_service restart "layer2_interface" "1"
|
|
fi
|
|
}
|
|
|
|
get_annexm_status() {
|
|
local dev="$1"
|
|
local val=""
|
|
if [ "$dev" = "$WAN_INST_ATM" ]; then
|
|
val=`$UCI_GET layer2_interface.capabilities.AnnexM`
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
fi
|
|
[ "$val" = "enabled" ] && echo "1" || echo "0"
|
|
}
|
|
|
|
get_wandevice_wandevice_parameters() {
|
|
local dev="$1"
|
|
local fdev="$2"
|
|
local notif_permission=`$UCI_SHOW network |grep "network\.$default_wan\.ifname=.*$fdev"`
|
|
local cwritable=1
|
|
[ "$dev" = "$WAN_INST_ETH" ] && cwritable=0
|
|
[ "$notif_permission" != "" ] && notif_permission=0
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev." "0" "$notif_permission"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice." "$cwritable" "$notif_permission"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANCommonInterfaceConfig." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANCommonInterfaceConfig.WANAccessType" "0" "get_wan_device_wan_access_type $dev"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.Status" "0" "" "" "get_wan_device_wan_dsl_interface_config_status $dev"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.ModulationType" "0" "get_wan_device_wan_dsl_interface_config_modulation_type $dev"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.DataPath" "0" "" "" "get_wan_device_dsl_datapath $dev"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.DownstreamCurrRate" "0" "" "" "get_wan_device_dsl_downstreamcurrrate $dev" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.DownstreamMaxRate" "0" "" "" "get_wan_device_dsl_downstreammaxrate $dev" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.DownstreamAttenuation" "0" "" "" "get_wan_device_dsl_downstreamattenuation $dev" "xsd:int"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.DownstreamNoiseMargin" "0" "" "" "get_wan_device_dsl_downstreamnoisemargin $dev" "xsd:int"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.UpstreamCurrRate" "0" "" "" "get_wan_device_dsl_upstreamcurrrate $dev" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.UpstreamMaxRate" "0" "" "" "get_wan_device_dsl_upstreammaxrate $dev" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.UpstreamAttenuation" "0" "" "" "get_wan_device_dsl_upstreamattenuation $dev" "xsd:int"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.UpstreamNoiseMargin" "0" "" "" "get_wan_device_dsl_upstreamnoisemargin $dev" "xsd:int"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANDSLInterfaceConfig.X_INTENO_SE_AnnexMEnable" "1" "get_annexm_status $dev" "set_annexm_enable $dev \$val" "" "xsd:boolean"
|
|
if [ "$dev" = "$WAN_INST_ETH" ]; then
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Enable" "1" "" "set_wan_eth_intf_enable \$val $fdev" "get_wan_eth_intf_enable $fdev" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Status" "0" "" "" "get_wan_eth_intf_status $fdev"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.MACAddress" "0" "" "" "get_wan_eth_intf_mac $fdev"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Stats." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Stats.BytesSent" "0" "" "" "get_wan_eth_intf_stats $fdev tx_bytes" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Stats.BytesReceived" "0" "" "" "get_wan_eth_intf_stats $fdev rx_bytes" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Stats.PacketsSent" "0" "" "" "get_wan_eth_intf_stats $fdev tx_packets" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANEthernetInterfaceConfig.Stats.PacketsReceived" "0" "" "" "get_wan_eth_intf_stats $fdev rx_packets" "xsd:unsignedInt"
|
|
fi
|
|
}
|
|
|
|
get_wandevice_wanconnectiondevice_parameters() {
|
|
local dev="$1"
|
|
local wan="$2"
|
|
local fwan="$3"
|
|
|
|
local notif_permission=`$UCI_SHOW network |grep "network\.$default_wan\.ifname=.*$fwan"`
|
|
local ipn_perm pppn_perm cwritable=1
|
|
[ "$dev" = "$WAN_INST_ETH" ] && cwritable=0
|
|
if [ "$notif_permission" != "" ]; then
|
|
notif_permission="0"
|
|
local proto=`$UCI_GET network.$default_wan.proto`
|
|
[ "$proto" = "dhcp" -o "$proto" = "static" ] && ipn_perm="0"
|
|
[ "$proto" = "pppoa" -o "$proto" = "pppoe" ] && pppn_perm="0"
|
|
fi
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan." "$cwritable" "$notif_permission"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection." "1" "$ipn_perm"
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection." "1" "$pppn_perm"
|
|
if [ "$dev" = $WAN_INST_ATM ]; then
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANDSLLinkConfig." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANDSLLinkConfig.Enable" "0" "echo 1" "" "" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANDSLLinkConfig.DestinationAddress" "1" "get_wan_dsl_link_config_destination_address $fwan" "set_wan_dsl_link_config_destination_address $fwan \$val"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANDSLLinkConfig.ATMEncapsulation" "1" "get_wan_dsl_link_config_atm_encapsulation $fwan" "set_wan_dsl_link_config_atm_encapsulation \$val $fwan"
|
|
fi
|
|
}
|
|
|
|
get_wandevice_wanprotoclconnection_parameters() {
|
|
local dev="$1"
|
|
local wan="$2"
|
|
local conp="$3"
|
|
local iface="$4"
|
|
local proto="$5"
|
|
|
|
local forced_inform_eip=""
|
|
local forced_notify=""
|
|
local notif_permission=""
|
|
local linker="linker_interface:$iface"
|
|
|
|
if [ "$default_wan" = "$iface" ];then
|
|
forced_inform_eip="1"
|
|
forced_notify="2"
|
|
notif_permission="0"
|
|
fi
|
|
if [ "$proto" = "dhcp" -o "$proto" = "static" ];then
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp." "1" "$notif_permission" "$linker"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.Enable" "1" "" "set_interface_enable_ubus $iface \$val" "get_interface_enable_ubus $iface" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.ConnectionStatus" "0" "" "" "get_wan_device_mng_status $iface"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.ExternalIPAddress" "0" "" "" "get_wan_device_mng_interface_ip $iface" "" "$notif_permission" "$forced_inform_eip" "$forced_notify"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.MACAddress" "0" "get_wan_device_mng_interface_mac $iface"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.ConnectionType" "1" "get_wan_ip_link_connection_connection_type $iface" "set_wan_ip_link_connection_connection_type \$val $iface" ""
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.AddressingType" "1" "get_wan_ip_link_connection_addressing_type $iface" "set_wan_ip_link_connection_addressing_type \$val $iface"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.NATEnabled" "1" "get_wan_ip_link_connection_nat_enabled $iface" "set_wan_ip_link_connection_nat_enabled \$val $iface" "" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.X_BROADCOM_COM_FirewallEnabled" "1" "get_interface_firewall_enabled $iface" "set_interface_firewall_enabled $iface \$val" "" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.X_BROADCOM_COM_IGMPEnabled" "1" "get_wan_ip_link_connection_igmp_enabled $iface" "set_wan_ip_link_connection_igmp_enabled \$val $iface" "" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.DNSEnabled" "1" "get_wan_ip_link_connection_dns_enabled $iface" "set_wan_ip_link_connection_dns_enabled \$val $iface" "" "xsd:boolean"
|
|
#get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANIPConnection.$conp.DNSOverrideAllowed" "0" ""
|
|
fi
|
|
if [ "$proto" = "pppoa" -o "$proto" = "pppoe" ];then
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp." "1" "$notif_permission" "$linker"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.Enable" "1" "" "set_interface_enable_ubus $iface \$val" "get_interface_enable_ubus $iface" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.ConnectionStatus" "0" "" "" "get_wan_device_ppp_status $iface"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.ExternalIPAddress" "0" "" "" "get_wan_device_ppp_interface_ip $iface" "" "$notif_permission" "$forced_inform_eip" "$forced_notify"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.MACAddress" "0" "get_wan_device_mng_interface_mac $iface"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.Username" "1" "$UCI_GET network.$iface.username" "set_wan_device network.$iface.username \$val"
|
|
get_param_cache_generic "InternetGatewayDevice.WANDevice.$dev.WANConnectionDevice.$wan.WANPPPConnection.$conp.Password" "1" "" "set_wan_device network.$iface.password \$val" "" "" "" "" "" "1"
|
|
fi
|
|
}
|
|
|
|
get_cache_InternetGatewayDevice_WANDevice() {
|
|
local adev idev fdev cdev fwan fconp
|
|
default_wan=`$UCI_GET cwmp.cpe.default_wan_interface`
|
|
get_object_cache_generic "InternetGatewayDevice.WANDevice." "0" "0"
|
|
for adev in "$WAN_INST_ETH:eth0,ethernet" "$WAN_INST_ATM:atm,adsl" "$WAN_INST_PTM:ptm,vdsl";do
|
|
idev=${adev%:*}
|
|
adev=${adev#*:}
|
|
fdev=${adev%,*}
|
|
cdev=${adev#*,}
|
|
get_wandevice_wandevice_parameters "$idev" "$fdev"
|
|
local wans=`$UCI_SHOW layer2_interface_$cdev | sed -n "s/layer2_interface_$cdev\.[^.]\+\.baseifname=//p" | sort -u`
|
|
for fwan in $wans; do
|
|
local iwan=${fwan##*[hm]}; let iwan++
|
|
get_wandevice_wanconnectiondevice_parameters "$idev" "$iwan" "$fwan"
|
|
local conps=`$UCI_SHOW network | grep "network\.[^.]\+\.ifname=.*$fwan" | cut -d. -f2 | sort -u`
|
|
for fconp in $conps; do
|
|
[ "`check_multiwan_interface $fconp`" != "" ] && continue
|
|
local proto=`$UCI_GET network.$fconp.proto`
|
|
local iconp=`update_wan_instance "$idev" "$iwan" "$fconp" "$proto"`
|
|
get_wandevice_wanprotoclconnection_parameters "$idev" "$iwan" "$iconp" "$fconp" "$proto"
|
|
done
|
|
done
|
|
done
|
|
}
|
|
|
|
get_dynamic_InternetGatewayDevice_WANDevice() {
|
|
local idev iwan fconp
|
|
case "$1" in
|
|
""|\
|
|
InternetGatewayDevice.|\
|
|
InternetGatewayDevice.WANDevice.|\
|
|
InternetGatewayDevice.WANDevice.[1-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9][0-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.[1-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.[1-9].*|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.[1-9][0-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.[1-9][0-9].*|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.[1-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.[1-9].*|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.[1-9][0-9].|\
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.[1-9][0-9].*)
|
|
|
|
default_wan=`$UCI_GET cwmp.cpe.default_wan_interface`
|
|
local conps=`$UCI_SHOW network | grep "network\.[^.]\+\.ifname=" | cut -d. -f2 | sort -u`
|
|
for fconp in $conps; do
|
|
[ "`check_multiwan_interface $fconp`" = "" ] && continue
|
|
local proto=`$UCI_GET network.$fconp.proto`
|
|
get_multiwan_instance "$fconp" idev iwan
|
|
local iconp=`update_wan_instance "$idev" "$iwan" "$fconp" "$proto"`
|
|
get_wandevice_wanprotoclconnection_parameters "$idev" "$iwan" "$iconp" "$fconp" "$proto"
|
|
done
|
|
esac
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
add_wan_wanconnectiondevice() {
|
|
local idev="$1"
|
|
local filename="$2"
|
|
local fdev iwan fwan layer2
|
|
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
local iwan=`get_max_layer2_interface_index $fdev $layer2`
|
|
iwan=${iwan:--1}
|
|
let iwan++
|
|
|
|
if [ "$fdev" = "atm" ]; then
|
|
local catm=`$UCI_ADD layer2_interface_adsl atm_bridge`
|
|
$UCI_SET layer2_interface_adsl.$catm.baseifname=atm$iwan
|
|
$UCI_SET layer2_interface_adsl.$catm.bridge=0
|
|
$UCI_SET layer2_interface_adsl.$catm.encapseoa=llcsnap_eth
|
|
$UCI_SET layer2_interface_adsl.$catm.ifname=atm$iwan.1
|
|
$UCI_SET layer2_interface_adsl.$catm.link_type=EoA
|
|
$UCI_SET layer2_interface_adsl.$catm.unit=$iwan
|
|
$UCI_SET layer2_interface_adsl.$catm.vci=35
|
|
$UCI_SET layer2_interface_adsl.$catm.vpi=8
|
|
delay_service restart "layer2_interface_adsl" "1"
|
|
else
|
|
local cptm=`$UCI_ADD layer2_interface_vdsl vdsl_interface`
|
|
$UCI_SET layer2_interface_vdsl.$cptm.baseifname=ptm$iwan
|
|
$UCI_SET layer2_interface_vdsl.$cptm.bridge=0
|
|
$UCI_SET layer2_interface_vdsl.$cptm.ifname=ptm$iwan.1
|
|
$UCI_SET layer2_interface_vdsl.$cptm.unit=$iwan
|
|
delay_service restart "layer2_interface_vdsl" "1"
|
|
fi
|
|
$UCI_COMMIT
|
|
delay_service restart "layer2_interface" "1"
|
|
|
|
fwan="$fdev$iwan"
|
|
let iwan++
|
|
|
|
get_wandevice_wanconnectiondevice_parameters "$idev" "$iwan" "$fwan" >> $cache_path/$filename
|
|
freecwmp_output "" "" "" "" "" "" "1" "$iwan"
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
add_wan_wanprotocolconnection() {
|
|
local instances="$1"
|
|
local proto="$2"
|
|
local iproto="$3"
|
|
local filename="$4"
|
|
local idev fdev iwan fwan layer2
|
|
|
|
idev=${instances%% *}
|
|
iwan=${instances##* }
|
|
if [ "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" -a "$idev" != "$WAN_INST_ETH" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
fwan="$fdev$((iwan-1))"
|
|
local tmp=`$UCI_SHOW layer2_interface_$layer2 | grep "layer2_interface_$layer2\.[^.]\+\.baseifname=$fwan"`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
fwan="$fwan.1"
|
|
local iconp=`get_max_pcon_instance $idev.$iwan.$iproto`
|
|
iconp=${iconp:-0}
|
|
local fconp="wan_""$idev""_$iwan""_$iproto""_$((++iconp))"
|
|
|
|
$UCI_SET network.$fconp=interface
|
|
$UCI_SET network.$fconp.wan_instance="$idev.$iwan.$iproto.$iconp"
|
|
$UCI_SET network.$fconp.ifname=$fwan
|
|
$UCI_SET network.$fconp.proto=$proto
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
|
|
get_wandevice_wanprotoclconnection_parameters "$idev" "$iwan" "$iconp" "$fconp" "$proto" >> $cache_path/$filename
|
|
freecwmp_output "" "" "" "" "" "" "1" "$iconp"
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_wan_wanconnectiondevice() {
|
|
local instances="$2"
|
|
local filename="$3"
|
|
local idev fdev iwan fwan layer2 fconp
|
|
|
|
idev=${instances%% *}
|
|
iwan=${instances##* }
|
|
if [ "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
fwan="$fdev$((iwan-1))"
|
|
local tmp=`$UCI_SHOW layer2_interface_$layer2 | grep "layer2_interface_$layer2\.[^.]\+\.baseifname=$fwan" | cut -f2 -d.`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
$UCI_SHOW network | grep "network\.[^.]\+\.ifname=.*$fwan" | cut -f2 -d. | while read fconp; do
|
|
$UCI_DELETE network.$fconp
|
|
done
|
|
$UCI_DELETE layer2_interface_$layer2.$tmp
|
|
$UCI_COMMIT
|
|
delay_service restart "layer2_interface_$layer2" "1"
|
|
delay_service restart "layer2_interface" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1/d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_wan_wanconnectiondevice_all() {
|
|
local instances="$2"
|
|
local filename="$3"
|
|
local idev fdev iwan fwan layer2 fconp
|
|
|
|
idev=${instances%% *}
|
|
iwan=${instances##* }
|
|
if [ "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
local wcd wcds=`$UCI_SHOW -X layer2_interface_$layer2 | grep "layer2_interface_$layer2\.[^.]\+\.baseifname=$fdev" | cut -d. -f2`
|
|
for wcd in $wcds; do
|
|
$UCI_DELETE layer2_interface_$layer2.$wcd
|
|
done
|
|
$UCI_SHOW network | grep "network\.[^.]\+\.ifname=.*$fdev" | cut -f2 -d. | while read fconp; do
|
|
$UCI_DELETE network.$fconp
|
|
done
|
|
$UCI_COMMIT
|
|
delay_service restart "layer2_interface_$layer2" "1"
|
|
delay_service restart "layer2_interface" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1[0-9]\+\./d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_wan_wanprotocolconnection() {
|
|
local instances="$2"
|
|
local iproto="$3"
|
|
local filename="$4"
|
|
local idev fdev iwan fwan layer2
|
|
|
|
idev=${instances%% *}
|
|
instances=${instances#* }
|
|
iwan=${instances%% *}
|
|
iconp=${instances##* }
|
|
|
|
if [ "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" -a "$idev" != "$WAN_INST_ETH" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
fwan="$fdev$((iwan-1))"
|
|
local tmp=`$UCI_SHOW layer2_interface_$layer2 | grep "layer2_interface_$layer2\.[^.]\+\.baseifname=$fwan"`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
tmp=`$UCI_SHOW network | grep "network\.[^.]\+\.wan_instance=$idev.$iwan.$iproto.$iconp" | cut -f2 -d.`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
|
|
$UCI_DELETE network.$tmp
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1/d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_wan_wanprotocolconnection_all() {
|
|
local instances="$2"
|
|
local iproto="$3"
|
|
local filename="$4"
|
|
local idev fdev iwan fwan layer2
|
|
|
|
idev=${instances%% *}
|
|
instances=${instances#* }
|
|
iwan=${instances%% *}
|
|
|
|
if [ "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" -a "$idev" != "$WAN_INST_ETH" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
get_wan_device_by_instance $idev fdev layer2
|
|
fwan="$fdev$((iwan-1))"
|
|
local tmp=`$UCI_SHOW layer2_interface_$layer2 | grep "layer2_interface_$layer2\.[^.]\+\.baseifname=$fwan"`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
local iconp iconps=`$UCI_SHOW network | grep "network\.[^.]\+\.wan_instance=$idev.$iwan.$iproto" | cut -f2 -d.`
|
|
if [ "$iconps" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
for iconp in $iconps; do
|
|
$UCI_DELETE network.$iconp
|
|
done
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1[0-9]\+\./d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
add_object_InternetGatewayDevice_WANDevice() {
|
|
local filename="$2"
|
|
local idev fault_code instances
|
|
default_wan=`$UCI_GET cwmp.cpe.default_wan_interface`
|
|
case $1 in
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice." "rc" "idev"
|
|
if [ "$rc" != "0" -o "$idev" != "$WAN_INST_ATM" -a "$idev" != "$WAN_INST_PTM" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
add_wan_wanconnectiondevice "$idev" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANIPConnection." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
add_wan_wanprotocolconnection "$instances" "dhcp" "$WAN_IP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANPPPConnection." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
add_wan_wanprotocolconnection "$instances" "pppoe" "$WAN_PPP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
esac
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
}
|
|
|
|
delete_object_InternetGatewayDevice_WANDevice() {
|
|
local filename="$2"
|
|
local fault_code instances
|
|
case $1 in
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANIPConnection.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanprotocolconnection "$1" "$instances" "$WAN_IP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANIPConnection.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANIPConnection." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanprotocolconnection_all "$1" "$instances" "$WAN_IP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANPPPConnection.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanprotocolconnection "$1" "$instances" "$WAN_PPP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.WANPPPConnection.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}.WANPPPConnection." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanprotocolconnection_all "$1" "$instances" "$WAN_PPP_CONNECTION" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanconnectiondevice "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.WANDevice.[1-9].WANConnectionDevice.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.WANDevice.{i}.WANConnectionDevice." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_wan_wanconnectiondevice_all "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
esac
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
}
|
|
|
|
get_dynamic_linker_InternetGatewayDevice_WANDevice() {
|
|
return $FAULT_CPE_NO_FAULT
|
|
} |