#!/bin/sh # Copyright (C) 2013 Inteno Broadband Technology AB # Author Feten Besbes 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 }