mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-03-06 09:21:14 +01:00
Feature request #5515: VLAN
Add the following object path and some sub params:
- InternetGatewayDevice.Layer2Bridging.Bridge.{i}.VLAN.{i}.
- InternetGatewayDevice.Layer2Bridging.Marking.{i}.
- InternetGatewayDevice.Layer2Bridging.AvailableInterface.{i}.
Signed-off-by: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
This commit is contained in:
parent
da66eb7ff3
commit
962e5d07bf
2 changed files with 487 additions and 49 deletions
|
|
@ -773,7 +773,7 @@ get_generic_dynamic() {
|
|||
}
|
||||
|
||||
cat_cache_filter_param() {
|
||||
cat "$1"* | grep "$2"
|
||||
cat "$1"* | grep -F "$2"
|
||||
}
|
||||
|
||||
get_param_prefix() {
|
||||
|
|
|
|||
|
|
@ -7,58 +7,208 @@ set_bridge_bridgename() {
|
|||
delay_service reload "network" "1"
|
||||
}
|
||||
|
||||
set_bridge_x_inteno_com_associatedinterfaces() {
|
||||
local iface="$1"
|
||||
shift
|
||||
local val="$*"
|
||||
$UCI_SET network.$iface.ifname="$val"
|
||||
delay_service reload "network" "1"
|
||||
}
|
||||
|
||||
get_bridge_bridgekey() {
|
||||
local bkey=`brctl show | grep "br-$1" | cut -d. -f2 | cut -d$'\t' -f1`
|
||||
[ "$bkey" != "" ] && printf '%u' "0x$bkey"
|
||||
}
|
||||
|
||||
get_bridge_vlanid() {
|
||||
local ifname vid
|
||||
local ifnames=`$UCI_GET network.$1.ifname`
|
||||
for ifname in $ifnames; do
|
||||
local tmp=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.[^.]\+\.ifname=$ifname" | cut -f2 -d.`
|
||||
vid=`$UCI_GET layer2_interface_vlan.$tmp.vlan8021q`
|
||||
if [ "$vid" != "" ]; then echo $vid; return; fi
|
||||
done
|
||||
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 ifname nifname vid dev idev
|
||||
local ifnames=`$UCI_GET network.$1.ifname`
|
||||
for ifname in $ifnames; do
|
||||
local tmp=`$UCI_SHOW layer2_interface_vlan | grep "layer2_interface_vlan\.[^.]\+\.ifname=$ifname" | cut -f2 -d.`
|
||||
vid=`$UCI_GET layer2_interface_vlan.$tmp.vlan8021q`
|
||||
if [ "$vid" != "" ]; then
|
||||
idev=${ifname%.*}
|
||||
break
|
||||
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
|
||||
|
||||
if [ "$vid" = "" ]; then
|
||||
for idev in atm ptm eth0; do
|
||||
dev=${ifnames#*$idev};
|
||||
[ "$dev" = "$ifnames" ] && continue
|
||||
idev="$idev${dev%%.*}"
|
||||
break
|
||||
done
|
||||
fi
|
||||
local nifname=`add_bridge_vlan_interface $idev $val`
|
||||
if [ "$vid" = "" ]; then
|
||||
$UCI_SET network.$1.ifname="$ifnames $nifname"
|
||||
else
|
||||
$UCI_SET network.$1.ifname="${ifnames//$ifname/$nifname}"
|
||||
fi
|
||||
delay_service restart "layer2_interface_vlan" "1"
|
||||
delay_service reload "network" "1"
|
||||
}
|
||||
|
||||
update_bridge_instance() {
|
||||
|
|
@ -76,28 +226,194 @@ update_bridge_instance() {
|
|||
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" "get_bridge_bridgekey $iface" "" "" "xsd:unsignedInt"
|
||||
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_bridge_x_inteno_com_associatedinterfaces $iface \$val"
|
||||
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() {
|
||||
|
|
@ -125,6 +441,10 @@ delete_layer2bridging_bridge() {
|
|||
|
||||
$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"
|
||||
|
||||
|
|
@ -133,15 +453,120 @@ delete_layer2bridging_bridge() {
|
|||
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
|
||||
}
|
||||
|
|
@ -150,13 +575,26 @@ 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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue