mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-01-28 01:27:16 +01:00
791 lines
28 KiB
Bash
791 lines
28 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2013-2015 Inteno Broadband Technology AB
|
|
# Author Feten Besbes <feten.besbes@pivasoftware.com>
|
|
# Author: Anis Ellouze <anis.ellouze@pivasoftware.com>
|
|
|
|
prefix_list="$prefix_list InternetGatewayDevice.Layer2Bridging."
|
|
|
|
set_bridge_bridgename() {
|
|
$UCI_RENAME network.$1=$2
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
get_bridge_vlanid() {
|
|
local bridge="$1"
|
|
local bkey=`$UCI_GET network.$bridge.bridge_instance`
|
|
local inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.[^.]\+\.instance=$bkey\.//p" | sort -n | head -n1`
|
|
[ "$inst" = "" ] && return
|
|
local vb=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.instance=$bkey\.$inst" | cut -f2 -d.`
|
|
$UCI_GET dmmap.$vb.vid
|
|
}
|
|
|
|
set_bridge_vlanid() {
|
|
local bridge="$1"
|
|
local val="$2"
|
|
local bkey=`$UCI_GET network.$bridge.bridge_instance`
|
|
local inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.[^.]\+\.instance=$bkey\.//p" | sort -n | head -n1`
|
|
if [ "$inst" = "" ]; then
|
|
local vb=`$UCI_ADD dmmap vlan_bridge`
|
|
local iv=`update_bridge_vlan_instance $vb $bkey`
|
|
$UCI_SET dmmap.$vb.bridgekey=$bkey
|
|
$UCI_SET dmmap.$vb.name="vlan_$bkey.$iv"
|
|
$UCI_SET dmmap.$vb.enable=0
|
|
$UCI_SET dmmap.$vb.vid=$val
|
|
delay_service reload "network" "1"
|
|
else
|
|
local vb=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.instance=$bkey\.$inst" | cut -f2 -d.`
|
|
set_bridgevlan_vid "$vb" "$val"
|
|
fi
|
|
}
|
|
|
|
set_bridgevlan_enable() {
|
|
local vb="$1"
|
|
local val="$2"
|
|
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
vid=`printf '%d' $vid`
|
|
|
|
local bkey=`$UCI_GET dmmap.$vb.bridgekey`
|
|
local cval=`$UCI_GET dmmap.$vb.enable`
|
|
val=`echo $val|tr '[A-Z]' '[a-z]'`
|
|
if [ "$val" = "true" -o "$val" = "1" ] && [ "$cval" != "1" ]; then
|
|
$UCI_SET dmmap.$vb.enable=1
|
|
[ $vid -le 0 ] && return
|
|
update_add_vlan_interfaces "$bkey" "$vid"
|
|
update_add_vlan_to_bridge_interface "$bkey" "$vb"
|
|
elif [ "$val" = "false" -o "$val" = "0" ] && [ "$cval" != "0" ]; then
|
|
$UCI_SET dmmap.$vb.enable=0
|
|
[ $vid -le 0 ] && return
|
|
update_remove_vlan_from_bridge_interface "$bkey" "$vb"
|
|
else
|
|
return
|
|
fi
|
|
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
set_bridgevlan_vid() {
|
|
local vb="$1"
|
|
local val="$2"
|
|
local cval=`$UCI_GET dmmap.$vb.vid`
|
|
val=`printf '%d' $val`
|
|
[ "$val" = "$cval" -o $val -le 0 ] && return
|
|
local enable=`$UCI_GET dmmap.$vb.enable`
|
|
if [ "$enable" = "1" ]; then
|
|
local bkey=`$UCI_GET dmmap.$vb.bridgekey`
|
|
update_remove_vlan_from_bridge_interface "$bkey" "$vb"
|
|
$UCI_SET dmmap.$vb.vid=$val
|
|
update_add_vlan_interfaces "$bkey" "$val"
|
|
update_add_vlan_to_bridge_interface "$bkey" "$vb"
|
|
delay_service reload "network" "1"
|
|
else
|
|
$UCI_SET dmmap.$vb.vid=$val
|
|
fi
|
|
}
|
|
|
|
set_marking_bridgekey() {
|
|
local mb="$1"
|
|
local val="$2"
|
|
[ "$val" = "" ] && return
|
|
local bkey
|
|
local obkey=`$UCI_GET dmmap.$mb.bridgekey`
|
|
$UCI_SET dmmap.$mb.bridgekey=$val
|
|
local baseifname=`$UCI_GET dmmap.$mb.baseifname`
|
|
case $baseifname in
|
|
cfg*)
|
|
bkey=$val
|
|
bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
$UCI_SET wireless.$baseifname.network=$bridge
|
|
delay_service reload "network" "1"
|
|
;;
|
|
eth[1-9])
|
|
local bridge
|
|
if [ -n "$obkey" ]; then
|
|
bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$obkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
local bifname=" `$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname/ $baseifname / }
|
|
bifname=${bifname# }; bifname=${bifname% }
|
|
$UCI_SET network.$bridge.ifname="$bifname"
|
|
fi
|
|
bkey=$val
|
|
bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
bifname="`$UCI_GET network.$bridge.ifname`"
|
|
bifname="$bifname $baseifname"
|
|
$UCI_SET network.$bridge.ifname="${bifname# }"
|
|
delay_service reload "network" "1"
|
|
;;
|
|
eth0|atm*|ptm*)
|
|
bkey=$obkey
|
|
local found=0
|
|
local cmb cmbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$baseifname" | cut -f2 -d.`
|
|
for cmb in $cmbs; do
|
|
[ "`$UCI_GET dmmap.$cmb.bridgekey`" = "$bkey" ] && { found=1; break; }
|
|
done
|
|
if [ "$found" = "0" ]; then
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
[ "$vid" = "" ] && continue
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
local bifname="`$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname//$baseifname.$vid[^0-9]/}
|
|
bifname=${bifname// / }; bifname=${bifname// / }
|
|
$UCI_SET network.$bridge.ifname="${bifname% }"
|
|
done
|
|
fi
|
|
bkey=$val
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
[ "$vid" = "" ] && continue
|
|
local enable=`$UCI_GET dmmap.$vb.enable `
|
|
[ "$enable" = "" -o "$enable" = "0" ] && continue
|
|
update_remove_vlan_from_bridge_interface $bkey $vb
|
|
update_add_vlan_interfaces "$bkey" "$vid"
|
|
update_add_vlan_to_bridge_interface $bkey $vb
|
|
done
|
|
delay_service reload "network" "1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
set_marking_interfacekey() {
|
|
local mb="$1"
|
|
local val="$2"
|
|
[ "$val" = "" ] && return
|
|
local ab=`$UCI_SHOW dmmap | grep "dmmap\.@available-bridge\[[0-9]\+\]\.key=$val" | cut -f2 -d'.' | head -n1`
|
|
[ "$ab" = "" ] && return
|
|
local bifname=`$UCI_GET dmmap.$ab.baseifname`
|
|
local bridge bkey=`$UCI_GET dmmap.$mb.bridgekey`
|
|
if [ -n "$bkey" ]; then
|
|
bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
if [ -n "$bridge" ]; then
|
|
local obifname=`$UCI_GET dmmap.$mb.baseifname`
|
|
local instance=`$UCI_GET dmmap.$mb.instance`
|
|
if [ -n "$obifname" ]; then
|
|
remove_config_interfaces "$obifname" "$bkey" "$bridge" "$instance"
|
|
fi
|
|
fi
|
|
fi
|
|
case $bifname in
|
|
cfg*)
|
|
local tmp=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$bifname"`
|
|
[ -n "$tmp" ] && return
|
|
$UCI_SET dmmap.$mb.interfacekey=$val
|
|
$UCI_SET dmmap.$mb.baseifname=$bifname
|
|
[ "$bkey" = "" -o "$bridge" = "" ] && return
|
|
$UCI_SET wireless.$bifname.network=$bridge
|
|
;;
|
|
eth[1-9])
|
|
local tmp=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$bifname"`
|
|
[ -n "$tmp" ] && return
|
|
$UCI_SET dmmap.$mb.interfacekey=$val
|
|
$UCI_SET dmmap.$mb.baseifname=$bifname
|
|
[ "$bkey" = "" -o "$bridge" = "" ] && return
|
|
local brgifname="`$UCI_GET network.$bridge.ifname`"
|
|
brgifname="$brgifname $bifname"
|
|
$UCI_SET network.$bridge.ifname="${brgifname# }"
|
|
delay_service reload "network" "1"
|
|
;;
|
|
eth0|atm*|ptm*)
|
|
$UCI_SET dmmap.$mb.interfacekey=$val
|
|
$UCI_SET dmmap.$mb.baseifname=$bifname
|
|
[ "$bkey" = "" ] && return
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
[ "$vid" = "" ] && continue
|
|
local enable=`$UCI_GET dmmap.$vb.enable `
|
|
[ "$enable" = "" -o "$enable" = "0" ] && continue
|
|
update_remove_vlan_from_bridge_interface $bkey $vb
|
|
update_add_vlan_interfaces "$bkey" "$vid"
|
|
update_add_vlan_to_bridge_interface $bkey $vb
|
|
done
|
|
delay_service reload "network" "1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
update_remove_vlan_from_bridge_interface() {
|
|
local bkey="$1"
|
|
local vb="$2"
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
local bifname="`$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname//[aep]t[mh][0-9].$vid[^0-9]/}
|
|
bifname=${bifname// / }; bifname=${bifname// / }
|
|
$UCI_SET network.$bridge.ifname="${bifname% }"
|
|
}
|
|
|
|
update_add_vlan_to_bridge_interface() {
|
|
local bkey="$1"
|
|
local vb="$2"
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
[ "$vid" = "" ] && return
|
|
|
|
local bifname="`$UCI_GET network.$bridge.ifname` "
|
|
local ifname vifname=""
|
|
local mb mbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d'.'`
|
|
for mb in $mbs; do
|
|
ifname=`$UCI_GET dmmap.$mb.baseifname`
|
|
case "$ifname" in
|
|
eth0|atm*|ptm*)
|
|
ifname="$ifname.$vid"
|
|
[ "${bifname/$ifname[^0-9]/}" != "$bifname" ] && continue
|
|
bifname="$bifname$ifname "
|
|
;;
|
|
esac
|
|
done
|
|
bifname=${bifname% }; bifname=${bifname# }
|
|
$UCI_SET network.$bridge.ifname="${bifname% }"
|
|
}
|
|
|
|
update_add_vlan_interfaces() {
|
|
local bkey="$1"
|
|
local vid="$2"
|
|
local ifname mb mbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d'.'`
|
|
for mb in $mbs; do
|
|
ifname=`$UCI_GET dmmap.$mb.baseifname`
|
|
local vif=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_interface\[[0-9]\+\]\.ifname=$ifname.$vid" | cut -f2 -d.`
|
|
if [ "$vif" = "" ]; then
|
|
case "$ifname" in
|
|
eth0|atm*|ptm*)
|
|
vif=`$UCI_ADD layer2_interface_vlan vlan_interface`
|
|
$UCI_SET layer2_interface_vlan.$vif.baseifname=$ifname
|
|
$UCI_SET layer2_interface_vlan.$vif.bridge=1
|
|
$UCI_SET layer2_interface_vlan.$vif.ifname=$ifname.$vid
|
|
$UCI_SET layer2_interface_vlan.$vif.name=$ifname.$vid
|
|
$UCI_SET layer2_interface_vlan.$vif.vlan8021q=$vid
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
}
|
|
|
|
update_bridge_instance() {
|
|
local iface="$1"
|
|
|
|
local inst=`$UCI_GET network.$iface.bridge_instance`
|
|
if [ "$inst" != "" ]; then
|
|
echo "$inst"
|
|
else
|
|
local inst=`$UCI_SHOW network |sed -n "s/network\.[^.]\+\.bridge_instance=//p" | sort -rn | head -n1`
|
|
inst=${inst:-0}
|
|
$UCI_SET network.$iface.bridge_instance="$((++inst))"
|
|
$UCI_COMMIT
|
|
echo $inst
|
|
fi
|
|
}
|
|
|
|
update_bridge_vlan_instance() {
|
|
local bvlan="$1"
|
|
local ib="$2"
|
|
local inst=`$UCI_GET dmmap.$bvlan.instance`
|
|
if [ "$inst" != "" ]; then
|
|
echo "${inst#.}"
|
|
else
|
|
inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.[^.]\+\.instance=$ib\.//p" | sort -rn | head -n1`
|
|
inst=${inst:-0}
|
|
$UCI_SET dmmap.$bvlan.instance="$ib.$((++inst))"
|
|
$UCI_COMMIT
|
|
echo $inst
|
|
fi
|
|
}
|
|
|
|
update_bridge_all_vlan_config_bybridge() {
|
|
local bridge="$1"
|
|
local bkey="$2"
|
|
local ifname ifnames=`$UCI_GET network.$bridge.ifname`
|
|
for ifname in $ifnames; do
|
|
case "$ifname" in
|
|
eth0*|atm*|ptm*)
|
|
local vid=${ifname#*.}
|
|
local vlan=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_interface\[[0-9]\+\]\.ifname=$ifname" | cut -f2 -d.`
|
|
[ "$vlan" = "" ] && continue
|
|
update_bridge_vlan_config "$bridge" "$bkey" "$vid" "$vlan"
|
|
;;
|
|
esac
|
|
done
|
|
$UCI_COMMIT
|
|
}
|
|
|
|
update_bridge_vlan_config() {
|
|
local bridge="$1"
|
|
local bkey="$2"
|
|
local vid="$3"
|
|
local vlan="$4"
|
|
local cbridgevlan=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.vid=$vid" | cut -f2 -d.`
|
|
if [ "$cbridgevlan" = "" ]; then
|
|
cbridgevlan=`$UCI_ADD dmmap vlan_bridge`
|
|
local iv=`update_bridge_vlan_instance "$cbridgevlan" "$bkey"`
|
|
$UCI_SET dmmap.$cbridgevlan.bridgekey=$bkey
|
|
$UCI_SET dmmap.$cbridgevlan.vid=$vid
|
|
$UCI_SET dmmap.$cbridgevlan.name=vlan_$bkey.$iv
|
|
fi
|
|
}
|
|
|
|
update_availableinterface_list() {
|
|
local iface="$1"
|
|
local key
|
|
local ciface=`$UCI_SHOW dmmap | grep "dmmap\.@available-bridge\[[0-9]\+\]\.baseifname=$iface" | cut -f2 -d'.' | head -n1`
|
|
if [ "$ciface" != "" ]; then
|
|
$UCI_GET dmmap.$ciface.key
|
|
return
|
|
fi
|
|
key=`$UCI_SHOW dmmap |sed -n "s/dmmap\.@available-bridge\[[0-9]\+\]\.key=//p" | sort -rn | head -n1`
|
|
key=${key:-0}
|
|
ciface=`$UCI_ADD dmmap available-bridge`
|
|
$UCI_SET dmmap.$ciface.baseifname=$iface
|
|
$UCI_SET dmmap.$ciface.key=$((++key))
|
|
$UCI_COMMIT
|
|
echo $key
|
|
}
|
|
|
|
update_markinginterface_list() {
|
|
local bkey="$1"
|
|
local iface="$2"
|
|
local found ifname ifnames=`$UCI_GET network.$iface.ifname`
|
|
for ifname in $ifnames; do
|
|
found=0
|
|
ifname=${ifname%.*}
|
|
local mb mbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.'`
|
|
for mb in $mbs; do
|
|
[ "`$UCI_GET dmmap.$mb.bridgekey`" = "$bkey" ] && { found=1; break; }
|
|
done
|
|
[ "$found" = "1" ] && continue
|
|
|
|
local ciface=`$UCI_SHOW dmmap | grep "dmmap\.@available-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.' | head -n1`
|
|
local interfacekey=`$UCI_GET dmmap.$ciface.key`
|
|
local inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.@marking-bridge\[[0-9]\+\]\.instance=//p" | sort -rn | head -n1`
|
|
inst=${inst:-0}
|
|
|
|
mb=`$UCI_ADD dmmap marking-bridge`
|
|
$UCI_SET dmmap.$mb.baseifname=$ifname
|
|
$UCI_SET dmmap.$mb.bridgekey=$bkey
|
|
$UCI_SET dmmap.$mb.interfacekey=$interfacekey
|
|
$UCI_SET dmmap.$mb.instance="$((++inst))"
|
|
done
|
|
|
|
local wifi wifis=`$UCI_SHOW -X wireless | grep "wireless\.[^.=]\+=wifi-iface" | awk -F'[.=]' '{print $2}'`
|
|
for wifi in $wifis; do
|
|
[ "`$UCI_GET wireless.$wifi.network`" != "$iface" ] && continue
|
|
ifname="$wifi"
|
|
found=0
|
|
local mb mbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.'`
|
|
for mb in $mbs; do
|
|
[ "`$UCI_GET dmmap.$mb.bridgekey`" = "$bkey" ] && { found=1; break; }
|
|
done
|
|
[ "$found" = "1" ] && continue
|
|
|
|
local ciface=`$UCI_SHOW dmmap | grep "dmmap\.@available-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.' | head -n1`
|
|
local interfacekey=`$UCI_GET dmmap.$ciface.key`
|
|
local inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.@marking-bridge\[[0-9]\+\]\.instance=//p" | sort -rn | head -n1`
|
|
inst=${inst:-0}
|
|
|
|
mb=`$UCI_ADD dmmap marking-bridge`
|
|
$UCI_SET dmmap.$mb.baseifname=$ifname
|
|
$UCI_SET dmmap.$mb.bridgekey=$bkey
|
|
$UCI_SET dmmap.$mb.interfacekey=$interfacekey
|
|
$UCI_SET dmmap.$mb.instance="$((++inst))"
|
|
done
|
|
|
|
$UCI_COMMIT
|
|
}
|
|
|
|
set_associated_interfaces() {
|
|
local iface=$1
|
|
shift
|
|
local val="$*"
|
|
$UCI_SET network.$iface.ifname="$val"
|
|
delay_service reload "network" "1"
|
|
}
|
|
|
|
get_cache_object_bridge_vlan() {
|
|
local ib="$1"
|
|
local vb="$2"
|
|
local iv="$3"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv." "1"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv.VLANEnable" "1" "$UCI_GET dmmap.$vb.enable" "set_bridgevlan_enable $vb \$val" "" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv.VLANName" "1" "$UCI_GET dmmap.$vb.name" "\$UCI_SET dmmap.$vb.name=\$val"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv.VLANID" "1" "$UCI_GET dmmap.$vb.vid" "set_bridgevlan_vid $vb \$val" "" "xsd:unsignedInt"
|
|
}
|
|
|
|
get_cache_object_bridge() {
|
|
local iface="$1"
|
|
local ib="$2"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib." "1"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.BridgeEnable" "1" "" "set_interface_enable_ubus $iface \$val" "get_interface_enable_ubus $iface" "xsd:boolean"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.BridgeKey" "0" "echo $ib" "" "" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.BridgeName" "1" "echo $iface" "set_bridge_bridgename $iface \$val"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLANID" "1" "get_bridge_vlanid $iface" "set_bridge_vlanid $iface \$val" "" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.X_INTENO_COM_AssociatedInterfaces" "1" "$UCI_GET network.$iface.ifname" "set_associated_interfaces $iface \$val"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN." "1"
|
|
update_bridge_all_vlan_config_bybridge $iface $ib
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$ib" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
local iv=`$UCI_GET dmmap.$vb.instance`
|
|
get_cache_object_bridge_vlan "$ib" "$vb" "${iv#*.}"
|
|
done
|
|
}
|
|
|
|
get_cache_object_availableinterface() {
|
|
local ia="$1"
|
|
local oface="$2"
|
|
local key="$3"
|
|
local type="$4"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.AvailableInterface.$ia." "0"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.AvailableInterface.$ia.AvailableInterfaceKey" "0" "echo $key" "" "" "xsd:unsignedInt"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.AvailableInterface.$ia.InterfaceReference" "0" "echo $oface"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.AvailableInterface.$ia.InterfaceType" "0" "echo $type"
|
|
}
|
|
|
|
get_cache_object_marking() {
|
|
local im="$1"
|
|
local mb="$2"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Marking.$im." "1"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Marking.$im.MarkingBridgeReference" "1" "$UCI_GET dmmap.$mb.bridgekey" "set_marking_bridgekey $mb \$val" "" "xsd:int"
|
|
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Marking.$im.MarkingInterface" "1" "$UCI_GET dmmap.$mb.interfacekey" "set_marking_interfacekey $mb \$val"
|
|
}
|
|
|
|
get_cache_InternetGatewayDevice_Layer2Bridging() {
|
|
local ib=0 iface
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging." "0"
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.AvailableInterface." "0"
|
|
local adev idev cdev ia
|
|
for adev in "$WAN_INST_ETH:ethernet" "$WAN_INST_ATM:adsl" "$WAN_INST_PTM:vdsl";do
|
|
idev=${adev%:*}
|
|
cdev=${adev#*:}
|
|
local fwan 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]};
|
|
local oface="InternetGatewayDevice.WANDevice.$idev.WANConnectionDevice.$((++iwan))."
|
|
ia=`update_availableinterface_list "$fwan"`
|
|
get_cache_object_availableinterface "$ia" "$oface" "$ia" "WANInterface"
|
|
done
|
|
done
|
|
local eth eths=`db get hw.board.ethernetLanPorts`
|
|
for eth in $eths; do
|
|
local ieth=${eth#eth}
|
|
local oface="InternetGatewayDevice.LANInterfaces.LANEthernetInterfaceConfig.$ieth."
|
|
ia=`update_availableinterface_list "$eth"`
|
|
get_cache_object_availableinterface "$ia" "$oface" "$ia" "LANInterface"
|
|
done
|
|
local wi=0
|
|
local wifi wifis=`$UCI_SHOW -X wireless | grep "wireless\.[^.=]\+=wifi-iface" | awk -F'[.=]' '{print $2}'`
|
|
for wifi in $wifis; do
|
|
local oface="InternetGatewayDevice.LANInterfaces.WLANConfiguration.$((++wi))."
|
|
ia=`update_availableinterface_list "$wifi"`
|
|
get_cache_object_availableinterface "$ia" "$oface" "$ia" "LANInterface"
|
|
done
|
|
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge." "1"
|
|
local ifaces=`$UCI_SHOW network | grep "network\.[^=]\+=interface" | cut -d. -f2 | cut -d= -f1`
|
|
for iface in $ifaces; do
|
|
if [ "`$UCI_GET network.$iface.type`" = "bridge" ]; then
|
|
ib=`update_bridge_instance $iface`
|
|
update_markinginterface_list "$ib" "$iface"
|
|
get_cache_object_bridge "$iface" "$ib"
|
|
fi
|
|
done
|
|
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Marking." "1"
|
|
local mb mbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.instance=" | cut -f2 -d'.'`
|
|
for mb in $mbs; do
|
|
local im=`$UCI_GET dmmap.$mb.instance`
|
|
get_cache_object_marking "$im" "$mb"
|
|
done
|
|
}
|
|
|
|
add_layer2bridging_bridge() {
|
|
local filename="$1"
|
|
local ib=`$UCI_SHOW network |sed -n "s/network\.[^.]\+\.bridge_instance=//p" | sort -rn | head -n1`
|
|
ib=${ib:-0}
|
|
iface="bridge_0_$((++ib))"
|
|
$UCI_SET network.$iface=interface
|
|
$UCI_SET network.$iface.bridge_instance=$ib
|
|
$UCI_SET network.$iface.type=bridge
|
|
$UCI_SET network.$iface.proto=dhcp
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
|
|
get_cache_object_bridge "$iface" "$ib" >> $cache_path/$filename
|
|
freecwmp_output "" "" "" "" "" "" "1" "$ib"
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_layer2bridging_bridge() {
|
|
local instance="$2"
|
|
local filename="$3"
|
|
local tmp=`$UCI_SHOW network |grep "network\.[^.]\+\.bridge_instance=$instance[^0-9]*" | cut -d. -f2`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
|
|
$UCI_SET network.$tmp.type=
|
|
$UCI_SET network.$tmp.bridge_instance=
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$instance" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
$UCI_DELETE dmmap.$vb
|
|
done
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1/d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_layer2bridging_bridge_all() {
|
|
local filename="$3"
|
|
local bridge bridge_list=`$UCI_SHOW network |grep "network\.[^.]\+\.bridge_instance=" | cut -d. -f2`
|
|
for bridge in $bridge_list; do
|
|
$UCI_SET network.$bridge.type=
|
|
$UCI_SET network.$bridge.bridge_instance=
|
|
done
|
|
local ivb ivbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=" | awk -F '[][]' '{print $2}' | sort -rn`
|
|
for ivb in $ivbs; do
|
|
$UCI_DELETE dmmap.@vlan_bridge[$ivb]
|
|
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_layer2bridging_marking() {
|
|
local filename="$1"
|
|
local inst=`$UCI_SHOW dmmap |sed -n "s/dmmap\.@marking-bridge\[[0-9]\+\]\.instance=//p" | sort -rn | head -n1`
|
|
inst=${inst:-0}
|
|
mb=`$UCI_ADD dmmap marking-bridge`
|
|
$UCI_SET dmmap.$mb.instance="$((++inst))"
|
|
$UCI_COMMIT
|
|
get_cache_object_marking "$inst" "$mb" >> $cache_path/$filename
|
|
freecwmp_output "" "" "" "" "" "" "1" "$inst"
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
remove_config_interfaces(){
|
|
local baseifname="$1"
|
|
local bkey="$2"
|
|
local bridge="$3"
|
|
local mbi="$4"
|
|
case $baseifname in
|
|
cfg*)
|
|
$UCI_SET wireless.$baseifname.network=
|
|
;;
|
|
eth[1-9])
|
|
local bifname=" `$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname// $baseifname / }
|
|
bifname=${bifname# }; bifname=${bifname% };
|
|
$UCI_SET network.$bridge.ifname="$bifname"
|
|
;;
|
|
eth0|atm*|ptm*)
|
|
local found=0
|
|
local cmb cmbs=`$UCI_SHOW dmmap | grep "dmmap\.@marking-bridge\[[0-9]\+\]\.baseifname=$baseifname" | cut -f2 -d.`
|
|
for cmb in $cmbs; do
|
|
[ "`$UCI_GET dmmap.$cmb.bridgekey`" = "$bkey" -a "`$UCI_GET dmmap.$cmb.instance`" != "$mbi" ] && { found=1; break; }
|
|
done
|
|
if [ "$found" = "0" ]; then
|
|
local vb vbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
|
|
for vb in $vbs; do
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
[ "$vid" = "" ] && continue
|
|
local bifname=" `$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname// $baseifname.$vid / }
|
|
bifname=${bifname# }; bifname=${bifname% };
|
|
$UCI_SET network.$bridge.ifname="$bifname"
|
|
done
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
delete_layer2bridging_marking() {
|
|
local instance="$2"
|
|
local filename="$3"
|
|
local tmp=`$UCI_SHOW dmmap |grep "dmmap\.@marking-bridge\[[0-9]\+\]\.instance=$instance" | cut -d. -f2`
|
|
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
local bkey=`$UCI_GET dmmap.$tmp.bridgekey`
|
|
local baseifname=`$UCI_GET dmmap.$tmp.baseifname`
|
|
$UCI_DELETE dmmap.$tmp
|
|
[ -z "$bkey" ] && return
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return
|
|
remove_config_interfaces "$baseifname" "$bkey" "$bridge"
|
|
$UCI_COMMIT
|
|
delay_service reload "network" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1/d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_layer2bridging_marking_all() {
|
|
local filename="$3"
|
|
local mb mbs=`$UCI_SHOW dmmap |grep "dmmap\.@marking-bridge\[[0-9]\+\]\.instance" | awk -F '[][]' '{print $2}' | sort -rn`
|
|
for mb in $mbs; do
|
|
local bkey=`$UCI_GET dmmap.@marking-bridge[$mb].bridgekey`
|
|
local baseifname=`$UCI_GET dmmap.@marking-bridge[$mb].baseifname`
|
|
$UCI_DELETE dmmap.@marking-bridge[$mb]
|
|
[ -z "$bkey" ] && continue
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$bkey" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && continue
|
|
remove_config_interfaces "$baseifname" "$bkey" "$bridge"
|
|
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_layer2bridging_bridge_vlan() {
|
|
local ibridge="$1"
|
|
local filename="$2"
|
|
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=$ibridge" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
|
|
local vb=`$UCI_ADD dmmap vlan_bridge`
|
|
local iv=`update_bridge_vlan_instance $vb $ibridge`
|
|
$UCI_SET dmmap.$vb.bridgekey=$ibridge
|
|
$UCI_SET dmmap.$vb.name="vlan_$ibridge.$iv"
|
|
$UCI_SET dmmap.$vb.enable=0
|
|
$UCI_COMMIT
|
|
|
|
get_cache_object_bridge_vlan "$ibridge" "$vb" "$iv" >> $cache_path/$filename
|
|
freecwmp_output "" "" "" "" "" "" "1" "$iv"
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_layer2bridging_bridge_vlan() {
|
|
local instances="$2"
|
|
local filename="$3"
|
|
instances=${instances// /.}
|
|
local vb=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.instance=$instances" | cut -f2 -d'.' | head -n1`
|
|
[ "$vb" = "" ] && return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=${instances%.*}" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return $FAULT_CPE_INTERNAL_ERROR
|
|
|
|
local vid=`$UCI_GET dmmap.$vb.vid`
|
|
local bifname="`$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname// [aep]t[mh][0-9].$vid / }
|
|
bifname=${bifname# }; bifname=${bifname% }
|
|
$UCI_SET network.$bridge.ifname="$bifname"
|
|
$UCI_DELETE dmmap.$vb
|
|
$UCI_COMMIT
|
|
|
|
delay_service reload "network" "1"
|
|
freecwmp_output "" "" "" "" "" "" "1"
|
|
sed -i "/$1/d" $cache_path/$filename
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
delete_layer2bridging_bridge_vlan_all() {
|
|
local instances="$2"
|
|
local filename="$3"
|
|
local bridge=`$UCI_SHOW network | grep "network\.[^.]\+\.bridge_instance=${instances}" | cut -f2 -d.`
|
|
[ "$bridge" = "" ] && return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
local ivb ivbs=`$UCI_SHOW dmmap | grep "dmmap\.@vlan_bridge\[[0-9]\+\]\.instance=$instances\." | awk -F '[][]' '{print $2}' | sort -rn`
|
|
for ivb in $ivbs; do
|
|
local vid=`$UCI_GET dmmap.@vlan_bridge[$ivb].vid`
|
|
local bifname=" `$UCI_GET network.$bridge.ifname` "
|
|
bifname=${bifname// [aep]t[mh][0-9].$vid / }
|
|
bifname=${bifname# }; bifname=${bifname% }
|
|
$UCI_SET network.$bridge.ifname="$bifname"
|
|
$UCI_DELETE dmmap.@vlan_bridge[$ivb]
|
|
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_Layer2Bridging() {
|
|
local filename="$2"
|
|
local fault_code
|
|
case $1 in
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.[1-9]*.VLAN.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Layer2Bridging.Bridge.{i}.VLAN." "rc" "ibridge"
|
|
if [ "$rc" != "0" ]; then
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME;
|
|
fi
|
|
add_layer2bridging_bridge_vlan "$ibridge" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.)
|
|
add_layer2bridging_bridge "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Marking.)
|
|
add_layer2bridging_marking "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
esac
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
}
|
|
|
|
delete_object_InternetGatewayDevice_Layer2Bridging() {
|
|
local filename="$2"
|
|
local fault_code instances
|
|
case $1 in
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.[1-9]*.VLAN.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Layer2Bridging.Bridge.{i}.VLAN.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_layer2bridging_bridge_vlan "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.[1-9]*.VLAN.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Layer2Bridging.Bridge.{i}.VLAN." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_layer2bridging_bridge_vlan_all "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Layer2Bridging.Bridge.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_layer2bridging_bridge "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Bridge.)
|
|
delete_layer2bridging_bridge_all "$1" "" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Marking.[1-9]*.)
|
|
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Layer2Bridging.Marking.{i}." "rc" "instances"
|
|
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
|
|
delete_layer2bridging_marking "$1" "$instances" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
InternetGatewayDevice.Layer2Bridging.Marking.)
|
|
delete_layer2bridging_marking_all "$1" "" "$filename"
|
|
fault_code="$?"
|
|
return $fault_code
|
|
;;
|
|
esac
|
|
return $FAULT_CPE_INVALID_PARAMETER_NAME
|
|
}
|
|
|
|
get_dynamic_InternetGatewayDevice_Layer2Bridging() {
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|
|
|
|
get_dynamic_linker_InternetGatewayDevice_Layer2Bridging() {
|
|
return $FAULT_CPE_NO_FAULT
|
|
}
|