icwmp/scripts/functions/layer_2_bridging
2014-11-21 09:52:27 +01:00

611 lines
23 KiB
Bash

#!/bin/sh
# Copyright (C) 2013 Inteno Broadband Technology AB
# Author Feten Besbes <feten.besbes@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 layer2_interface_vlan |sed -n "s/layer2_interface_vlan\.[^.]\+\.instance=$bkey\.//p" | sort -n | head -n1`
[ "$inst" = "" ] && return
local vb=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.instance=$bkey\.$inst" | cut -f2 -d.`
$UCI_GET layer2_interface_vlan.$vb.vid
}
set_bridge_vlanid() {
local bridge="$1"
local val="$2"
local bkey=`$UCI_GET network.$bridge.bridge_instance`
local inst=`$UCI_SHOW layer2_interface_vlan |sed -n "s/layer2_interface_vlan\.[^.]\+\.instance=$bkey\.//p" | sort -n | head -n1`
if [ "$inst" = "" ]; then
local vb=`$UCI_ADD layer2_interface_vlan vlan_bridge`
local iv=`update_bridge_vlan_instance $vb $bkey`
$UCI_SET layer2_interface_vlan.$vb.bridgekey=$bkey
$UCI_SET layer2_interface_vlan.$vb.name="vlan_$bkey.$iv"
$UCI_SET layer2_interface_vlan.$vb.enable=0
$UCI_SET layer2_interface_vlan.$vb.vid=$val
delay_service reload "network" "1"
else
local vb=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@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 layer2_interface_vlan.$vb.vid`
vid=`printf '%d' $vid`
local bkey=`$UCI_GET layer2_interface_vlan.$vb.bridgekey`
local cval=`$UCI_GET layer2_interface_vlan.$vb.enable`
val=`echo $val|tr '[A-Z]' '[a-z]'`
if [ "$val" = "true" -o "$val" = "1" ] && [ "$cval" != "1" ]; then
$UCI_SET layer2_interface_vlan.$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 layer2_interface_vlan.$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 layer2_interface_vlan.$vb.vid`
val=`printf '%d' $val`
[ "$val" = "$cval" -o $val -le 0 ] && return
local enable=`$UCI_GET layer2_interface_vlan.$vb.enable`
if [ "$enable" = "1" ]; then
local bkey=`$UCI_GET layer2_interface_vlan.$vb.bridgekey`
update_remove_vlan_from_bridge_interface "$bkey" "$vb"
$UCI_SET layer2_interface_vlan.$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 layer2_interface_vlan.$vb.vid=$val
fi
}
set_marking_bridgekey() {
local mb="$1"
local val="$2"
local obkey=`$UCI_GET network.$mb.bridgekey`
$UCI_SET network.$mb.bridgekey=$val
local baseifname=`$UCI_GET network.$mb.baseifname`
case $baseifname in
eth0|atm*|ptm*)
local bkey=$obkey
local found=0
local cmb cmbs=`$UCI_SHOW network | grep "network\.@marking-bridge\[[0-9]\+\]\.baseifname=$baseifname" | cut -f2 -d.`
for cmb in $cmbs; do
[ "`$UCI_GET network.$cmb.bridgekey`" = "$bkey" ] && { found=1; break; }
done
if [ "$found" = "0" ]; then
local vb vbs=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
for vb in $vbs; do
local vid=`$UCI_GET layer2_interface_vlan.$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
[ "$bkey" = "" ] && return
local vb vbs=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
for vb in $vbs; do
local vid=`$UCI_GET layer2_interface_vlan.$vb.vid`
[ "$vid" = "" ] && continue
local enable=`$UCI_GET layer2_interface_vlan.$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"
local ab=`$UCI_SHOW network | grep "network\.@available-bridge\[[0-9]\+\]\.key=$val" | cut -f2 -d'.' | head -n1`
[ "$ab" = "" ] && return
$UCI_SET network.$mb.interfacekey=$val
local bifname=`$UCI_GET network.$ab.baseifname`
$UCI_SET network.$mb.baseifname=$bifname
case $bifname in
eth0|atm*|ptm*)
local bkey=`$UCI_GET network.$mb.bridgekey`
[ "$bkey" = "" ] && return
local vb vbs=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
for vb in $vbs; do
local vid=`$UCI_GET layer2_interface_vlan.$vb.vid`
[ "$vid" = "" ] && continue
local enable=`$UCI_GET layer2_interface_vlan.$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 layer2_interface_vlan.$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 layer2_interface_vlan.$vb.vid`
[ "$vid" = "" ] && return
local bifname="`$UCI_GET network.$bridge.ifname` "
local ifname vifname=""
local mb mbs=`$UCI_SHOW network | grep "network\.@marking-bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d'.'`
for mb in $mbs; do
ifname=`$UCI_GET network.$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 network | grep "network\.@marking-bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d'.'`
for mb in $mbs; do
ifname=`$UCI_GET network.$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 layer2_interface_vlan.$bvlan.instance`
if [ "$inst" != "" ]; then
echo "${inst#.}"
else
inst=`$UCI_SHOW layer2_interface_vlan |sed -n "s/layer2_interface_vlan\.[^.]\+\.instance=$ib\.//p" | sort -rn | head -n1`
inst=${inst:-0}
$UCI_SET layer2_interface_vlan.$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 layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.vid=$vid" | cut -f2 -d.`
if [ "$cbridgevlan" = "" ]; then
cbridgevlan=`$UCI_ADD layer2_interface_vlan vlan_bridge`
local iv=`update_bridge_vlan_instance "$cbridgevlan" "$bkey"`
$UCI_SET layer2_interface_vlan.$cbridgevlan.bridgekey=$bkey
$UCI_SET layer2_interface_vlan.$cbridgevlan.vid=$vid
$UCI_SET layer2_interface_vlan.$cbridgevlan.name=vlan_$bkey.$iv
fi
}
update_availableinterface_list() {
local iface="$1"
local key
local ciface=`$UCI_SHOW network | grep "network\.@available-bridge\[[0-9]\+\]\.baseifname=$iface" | cut -f2 -d'.' | head -n1`
if [ "$ciface" != "" ]; then
$UCI_GET network.$ciface.key
return
fi
key=`$UCI_SHOW network |sed -n "s/network\.@available-bridge\[[0-9]\+\]\.key=//p" | sort -rn | head -n1`
key=${key:-0}
ciface=`$UCI_ADD network available-bridge`
$UCI_SET network.$ciface.baseifname=$iface
$UCI_SET network.$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
case "$ifname" in
eth0*|atm*|ptm*)
ifname=${ifname%.*}
local mb mbs=`$UCI_SHOW network | grep "network\.@marking-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.'`
for mb in $mbs; do
[ "`$UCI_GET network.$mb.bridgekey`" = "$bkey" ] && { found=1; break; }
done
[ "$found" = "1" ] && continue
local ciface=`$UCI_SHOW network | grep "network\.@available-bridge\[[0-9]\+\]\.baseifname=$ifname" | cut -f2 -d'.' | head -n1`
local interfacekey=`$UCI_GET network.$ciface.key`
local inst=`$UCI_SHOW network |sed -n "s/network\.@marking-bridge\[[0-9]\+\]\.instance=//p" | sort -rn | head -n1`
inst=${inst:-0}
mb=`$UCI_ADD network marking-bridge`
$UCI_SET network.$mb.baseifname=$ifname
$UCI_SET network.$mb.bridgekey=$bkey
$UCI_SET network.$mb.interfacekey=$interfacekey
$UCI_SET network.$mb.instance="$((++inst))"
esac
done
$UCI_COMMIT
}
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 layer2_interface_vlan.$vb.enable" "set_bridgevlan_enable $vb \$val" "" "xsd:boolean"
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv.VLANName" "1" "$UCI_GET layer2_interface_vlan.$vb.name" "\$UCI_SET layer2_interface_vlan.$vb.name=\$val"
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN.$iv.VLANID" "1" "$UCI_GET layer2_interface_vlan.$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" "0" "$UCI_GET network.$iface.ifname"
get_object_cache_generic "InternetGatewayDevice.Layer2Bridging.Bridge.$ib.VLAN." "1"
update_bridge_all_vlan_config_bybridge $iface $ib
local vb vbs=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$ib" | cut -f2 -d.`
for vb in $vbs; do
local iv=`$UCI_GET layer2_interface_vlan.$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 network.$mb.bridgekey" "set_marking_bridgekey $mb \$val" "" "xsd:int"
get_param_cache_generic "InternetGatewayDevice.Layer2Bridging.Marking.$im.MarkingInterface" "1" "$UCI_GET network.$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
for interface in `get_lan_device_interface`;do
local lan_iface=${interface%%;*}
local idev=${lan_iface%%:*}
local ndev=${lan_iface#*:}
local eth eths=`get_lan_ethernet_interfaces $ndev`
local ieth=0
for eth in $eths; do
[ "${eth/eth/}" = "$eth" ] && continue
local oface="InternetGatewayDevice.LANDevice.$idev.LANEthernetInterfaceConfig.$((++ieth))."
ia=`update_availableinterface_list "$eth"`
get_cache_object_availableinterface "$ia" "$oface" "$ia" "LANInterface"
done
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 network | grep "network\.@marking-bridge\[[0-9]\+\]\.instance=" | cut -f2 -d'.'`
for mb in $mbs; do
local im=`$UCI_GET network.$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 layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$instance" | cut -f2 -d.`
for vb in $vbs; do
$UCI_DELETE layer2_interface_vlan.$vb
done
$UCI_COMMIT
delay_service reload "network" "1"
freecwmp_output "" "" "" "" "" "" "1"
sed -i "/$1/d" $cache_path/$filename
return $FAULT_CPE_NO_FAULT
}
add_layer2bridging_marking() {
local filename="$1"
local inst=`$UCI_SHOW network |sed -n "s/network\.@marking-bridge\[[0-9]\+\]\.instance=//p" | sort -rn | head -n1`
inst=${inst:-0}
mb=`$UCI_ADD network marking-bridge`
$UCI_SET network.$mb.instance="$((++inst))"
$UCI_COMMIT
get_cache_object_marking "$inst" "$mb" >> $cache_path/$filename
freecwmp_output "" "" "" "" "" "" "1" "$inst"
return $FAULT_CPE_NO_FAULT
}
delete_layer2bridging_marking() {
local instance="$2"
local filename="$3"
$UCI_SET network.$mb.instance="$((++inst))"
local tmp=`$UCI_SHOW network |grep "network\.@marking-bridge\[[0-9]\+\]\.instance=$instance" | cut -d. -f2`
if [ "$tmp" = "" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
local bkey=`$UCI_GET network.$tmp.bridgekey`
local baseifname=`$UCI_GET network.$tmp.baseifname`
$UCI_DELETE network.$tmp
case $baseifname in
eth0|atm*|ptm*)
local found=0
local cmb cmbs=`$UCI_SHOW network | grep "network\.@marking-bridge\[[0-9]\+\]\.baseifname=$baseifname" | cut -f2 -d.`
for cmb in $cmbs; do
[ "`$UCI_GET network.$cmb.bridgekey`" = "$bkey" ] && { found=1; break; }
done
if [ "$found" = "0" ]; then
local vb vbs=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.@vlan_bridge\[[0-9]\+\]\.bridgekey=$bkey" | cut -f2 -d.`
for vb in $vbs; do
local vid=`$UCI_GET layer2_interface_vlan.$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
esac
$UCI_COMMIT
freecwmp_output "" "" "" "" "" "" "1"
sed -i "/$1/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 layer2_interface_vlan vlan_bridge`
local iv=`update_bridge_vlan_instance $vb $ibridge`
$UCI_SET layer2_interface_vlan.$vb.bridgekey=$ibridge
$UCI_SET layer2_interface_vlan.$vb.name="vlan_$ibridge.$iv"
$UCI_SET layer2_interface_vlan.$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 layer2_interface_vlan | grep "layer2_interface_vlan\.@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 layer2_interface_vlan.$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% }"
$UCI_DELETE layer2_interface_vlan.$vb
$UCI_COMMIT
delay_service reload "network" "1"
freecwmp_output "" "" "" "" "" "" "1"
sed -i "/$1/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]*.)
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.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
;;
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
}