icwmp/scripts/functions/layer_2_bridging
Anis Ellouze 9f1a1bea50 Change request #5825: Move sections from network config to its own
Signed-off-by: Anis Ellouze <anis.ellouze@pivasoftware.com>
2015-04-07 18:42:43 +01:00

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
}