icwmp/scripts/functions/wan_device
2015-05-14 16:44:02 +01:00

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
}