测多播很长时间了,从最开始igmp snooping,igmp,到pim-dm,再到pim-sm, rfc一天比一天熟悉了,但是好像自己的测试效率也没有提高多少,回想了一下,多播测试的时候,在上层协议测过多遍的情况下,多播的问题多数不再是协议了,而是不同产品的底层芯片和上层同步上可能出现问题。这里就出现了问题,不同产品,芯片和上层的映射关系多数都是不一样的,很多时间,我们都花在去查找,去记忆这些映射关系上了。既然,这里是效率的瓶颈,咱不妨自动化一把。
考虑到如果自动化分析底层、上层是否一致的话,至少需要知道3个关系:上层show ip mroute、show vlan,底层ipmc table show,这些命令的结果必须提供,为了可视化,脚本就嵌入到html中。
(Ps:不做不知道,一做吓一跳!vbs对文本,搜索遍历,获取关键字,排序,删除数组某元素等问题,这些东西,花了我好几个通宵,才逐一搞定!累啊,不过很有成就感!^_^!)
下面是代码,目前只分析了上层上游口、下游口是svi的情况,没有考虑ap、routed port的情况,以后会考虑优化,有时间再放上来!
代码最近一次的更新(2007-06-03 星期日 4:23:58.53):点击这里
<
html
>

<
head
>
<
title
>
底层位图和物理端口映射关系
</
title
>
</
head
>

<
body
>
请选择线卡类型:
<
select
size
="1"
name
="linecard"
>
<
option
value
="1"
>
86_24sfp
</
option
>
<
option
value
="2"
>
86_24gt
</
option
>
<
option
value
="3"
>
86_48gt_unit0
</
option
>
<
option
value
="4"
>
86_48gt_unit1
</
option
>
</
select
>

<
br
>

请输入你要转换的ipmc table show中的位图:
<
input
name
="l3_bitmap"
type
="text"
value
=""
>

<
input
type
="Button"
NAME
="Button1"
value
="转换"
>
底层:
<
textarea
name
="port_phy"
type
="textfield"
value
=""
cols
="5"
rows
="15"
></
textarea
>
上层:
<
textarea
name
="intf_set"
type
="textfield"
value
=""
cols
="5"
rows
="15"
></
textarea
>
<
br
>
<
br
>
sh ip mroute得到上游口、下游口:
<
input
type
="Button"
NAME
="Button2"
value
="get"
>
<
br
>
<
textarea
name
="sh_mroute"
type
="textfield"
value
=""
cols
="80"
rows
="10"
></
textarea
>
上游口:
<
textarea
name
="incoming"
type
="textfield"
value
=""
cols
="10"
rows
="10"
></
textarea
>
下游口:
<
textarea
name
="outgoing"
type
="textfield"
value
=""
cols
="10"
rows
="10"
></
textarea
>

<
br
>
<
br
>
sh vlan得到接口的vlan分布:
<
input
type
="Button"
NAME
="Button3"
value
="computer"
>
请输线卡卡槽:
<
input
name
="lc_slot"
type
="text"
value
="2"
maxlength
=1
size
=2
>
<
br
>
<
textarea
name
="sh_vlan"
type
="textfield"
value
=""
cols
="100"
rows
="60"
></
textarea
>


<
textarea
name
="intf_dis"
type
="textfield"
value
=""
cols
="20"
rows
="60"
></
textarea
>





<
SCRIPT
FOR
="Button1"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
'添加新的线卡类型时,需要再此添加ssp->物理接口的关系,
'还有上面的select选择框也需要添加对应的选项
if (l3_bitmap.value <> "") then
dim ssp_phy_24sfp,ssp_phy_24gt,ssp_phy_48gt0,ssp_phy_48gt1,ssp_phy
ssp_phy_24sfp = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_24gt = Array(3,4,1,2,7,8,5,6,11,12,9,10,15,16,13,14,19,20,17,18,23,24,21,22)
ssp_phy_48gt0 = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_48gt1 = Array(26,25,28,27,30,29,32,31,34,33,36,35,38,37,40,39,43,44,41,42,47,48,45,46)
lc_type = linecard.value
Select Case lc_type
Case "1" ssp_phy = ssp_phy_24sfp
Case "2" ssp_phy = ssp_phy_24gt
Case "3" ssp_phy = ssp_phy_48gt0
Case "4" ssp_phy = ssp_phy_48gt1
Case Else MsgBox "错误"
End Select 
l3_map = l3_bitmap.value
port_phy.value = ssp_to_phy(l3_map,ssp_phy)
port_phy.value = Order(port_phy.value)
end if
</
SCRIPT
>



<
SCRIPT
FOR
="Button2"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
if (sh_mroute.value <> "") then
chang_line = chr(13) & chr(10)
vlan_line = split(sh_mroute.value,chang_line,-1,1)
vlan_line_length = UBound(vlan_line)
incoming.value = ""
outgoing.value = ""
m = 0
do
If IsExist(vlan_line(m),"Incoming") Then
incoming.value = GetKey(vlan_line(m),"d+",0)
End If
If IsExist(vlan_line(m),"Outgoing") Then
do '找到出口列表时,继续向下遍历,到最后一行
outgoing.value = GetKey(vlan_line(m),"d+",0) + outgoing.value
m = m + 1
loop while(m <= vlan_line_length)
End If
m = m + 1 '这时实际m值已经为最大值+1了,这里再次加1,m值变为最大+2
loop while(m <= vlan_line_length)
outgoing.value = Order(outgoing.value)
end if
</
SCRIPT
>




<
SCRIPT
FOR
="Button3"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
if ((sh_vlan.value <> "") And(lc_slot.value <> "")) then
chang_line = chr(13) & chr(10)
v_line = split(sh_vlan.value,chang_line,-1,1)
v_line_length = UBound(v_line)
vlan_set = split(outgoing.value,chang_line,-1,1)
vlan_set_length = UBound(vlan_set)
do
i = 0
if(vlan_set(vlan_set_length-i) = "") then
vlan_set_length = vlan_set_length - 1
i = i + 1
end if
loop while(vlan_set(vlan_set_length) = "") '去除后面的空字符
intf_dis.value = ""
key_fuzhu = lc_slot.value & "/" '后面将把搜索到诸如"2/1",前面的"2/"删除
lc_port = lc_slot.value & "/d+"
n = 0
i = 0
do 
a = "VLANd*" & vlan_set(i)
If IsExist(v_line(n),a) Then '如果找到vlan(i),那么显示vlan(i),并继续向下找端口
intf_dis.value = intf_dis.value & GetKey(v_line(n),"VLANd+",-1) &_
Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"")
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1 '跳到下一行
while((n <= v_line_length) And (Not IsExist(v_line(n),"VLANd+"))) '如果找不到vlanxx,不显示valnxx,但继续向下找端口,直到找到下一个vlanxx时,跳出
intf_dis.value = intf_dis.value & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"")
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1
wend
i = i + 1 'vlan(i)一论搜索结束,调到下一个vlan(i+1)
else
n = n + 1 '这里需要注意,在if为真时,有一个n=n+1,那么这里就不应该在end if后添加n+1,而应该在else下添加n+1
End If

loop while((n <= v_line_length) And (i <= vlan_set_length))
intfs = Order_onlyone(intfs)
intf_set.value = intfs
Pass = "表项一致"
Fail = " 表项不一致!" & chr(13) & chr(10) & "致电黄米青!电话:8595"
if(StrComp(intf_set.value,port_phy.value) = 0) then
MsgBox Pass,64, "Pass"
else
msgbox Fail,48,"Fail"
end if
end if
</SCRIPT>

<!--以下是各个自定义函数-->
<SCRIPT LANGUAGE="VBScript">
Function ssp_to_phy(l3_bitmap,ssp_phy) '功能:转换ssp的位图为物理接口
'参数:1、类型:字符串,位图;2、类型:数组,ssp->物理接口的关系
'返回值:类型string,位图为1对应的所有物理接口,且接口间以回车为间隔的组成的一个字符串
length_l3_bitmap = len(l3_bitmap)
i = 1 '在i小于位图的16进制数的个数时,一直循环,总共要循环(i*4)次
while(i <= length_l3_bitmap)
temp = Mid(StrReverse(l3_bitmap),i,1) 'Mid函数从右向左提取字符,故先反转位图。这里表示依次从l3位图中提取一个16进制数
bin_temp = HexToBin(temp) '调用16进制转2进制函数
l3_bin = StrReverse(bin_temp) '同样道理,因为下面还用使用Mid函数,反转2进制位图
j = 1
while(j <= 4) '16进制数变为2进制,4:1,故循环4次
if(Mid(l3_bin,j,1) = 1) then
ssp_index = (i-1) * 4 + j - 1 '计算当前操作的bit位,在位图中的位置
phy_index = ssp_phy(ssp_index)
ssp_to_phy = phy_index & chr(13) & chr(10)& ssp_to_phy
end if
j = j + 1
wend
i = i + 1
wend
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function HexToBin(str_hex) '功能:16进制数转换为2进制数
'参数:类型:字符,16进制数
'返回值:类型:字符串,4位2进制数
Select Case str_hex
Case "0" HexToBin = "0000"
Case "1" HexToBin = "0001"
Case "2" HexToBin = "0010"
Case "3" HexToBin = "0011"
Case "4" HexToBin = "0100"
Case "5" HexToBin = "0101"
Case "6" HexToBin = "0110"
Case "7" HexToBin = "0111"
Case "8" HexToBin = "1000"
Case "9" HexToBin = "1001"
Case "a" HexToBin = "1010"
Case "b" HexToBin = "1011"
Case "c" HexToBin = "1100"
Case "d" HexToBin = "1101"
Case "e" HexToBin = "1110"
Case "f" HexToBin = "1111"
Case Else MsgBox "输入错误"
End Select
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function IsExist(str,key) '功能:判断是否存在某字符串
'参数:1、类型:字符串,要判断的字符串;2、类型:字符串,关键字(正则表达式)
'返回值:类型:字符串,4位2进制数
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Pattern = key
retVal = regEx.Test(str)
If retVal Then
IsExist = True
else
IsExist = False
End If
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function GetKey(str,key,mode) '功能:搜索所有符合条件的字符串
'参数:1、类型:字符串,要搜索的字符串;2、类型:字符串,关键字(正则表达式);3、类型:boolean,是否全局模式搜索
'返回值:类型:字符串,匹配搜索条件的所有关键字,关键字之间为回车,组成的一个字符串
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Global = mode '全局匹配,找到所有符合条件的关键字,false表示只找到第一个符合条件的关键字
regEx.Pattern = key
Set Matches = regEx.Execute(str)
For Each Match in Matches
GetKey = Match.value & chr(13) & chr(10) & GetKey
Next
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order(str) '功能:从大到小排列,不删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
dim a
a = split(str,chang_line,-1,1)
a_len = UBound(a)
do
i = 0
if(a(a_len-i) = "") then
a_len = a_len - 1
i = i + 1
end if
loop while(a(a_len) = "") '去除后面的空字符
i = 0
j = a_len
do
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)>a(i+1)) then
temp = a(i)
a(i) = a(i+1)
a(i+1) = temp
end if
i = i + 1
loop while(i < j)
Order = a(j) & chr(13) & chr(10) & Order
j = j -1
i = 0
loop while(j > 0)
Order = a(0) & chr(13) & chr(10) & Order
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order_onlyone(str) '功能:从大到小排列,但删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
a = Order(str)
a = split(a,chang_line,-1,1)
a_len = UBound(a) - 1
i = 0
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)<>a(i+1)) then
temp = a(i) & chr(13) & chr(10) & temp
end if
i = i + 1
loop while(i < a_len)
temp = a(a_len) & chr(13) & chr(10) & temp
Order_onlyone = Order(temp)
End Function
</
SCRIPT
>
</
body
>

</
html
>
Update at 2007-06-03 星期日 4:23:58.53
修正了几个bug,增加了对show vlan中,有L2ap的情况的支持!
<
html
>

<
head
>
<
title
>
测试辅助工具
</
title
>
</
head
>
<
body
>
请选择线卡类型:
<
select
size
="1"
name
="linecard"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
86_24sfp
</
option
>
<
option
value
="2"
>
86_24gt
</
option
>
<
option
value
="3"
>
86_48gt_unit0
</
option
>
<
option
value
="4"
>
86_48gt_unit1
</
option
>
</
select
>
<
input
type
="Button"
NAME
="help"
value
="帮助"
align
=right
>

<
SCRIPT
FOR
="help"
EVENT
="OnClick"
LANGUAGE
="VBScript"
>
...
str = "工具提供:" & chr(13) & chr(10) & chr(13) & chr(10) &_
" 底层和上层端口转换的功能!" & chr(13) & chr(10) & chr(13) & chr(10) &_
" 同时也提供底层L3位图" &_
"和上层是否一致的对比验证!" & chr(13) & chr(10) & chr(13) & chr(10) &_
"使用方法:点击下面各个按钮,会有提示操作!" &_
chr(13) & chr(10) & chr(13) & chr(10) & "限 制:目前不支持show ip mroute中有routed port!" &_
chr(13) & chr(10) & chr(13) &_
chr(10) & "bug 联系:peil@ruijie.com.cn"
msgbox str,64,"帮助"
</
SCRIPT
>
<
input
type
="Button"
NAME
="about"
value
="关于"
align
=right
>

<
SCRIPT
FOR
="about"
EVENT
="OnClick"
LANGUAGE
="VBScript"
>
...
str = "名称:测试辅助工具" & chr(13) & chr(10) & "版本:1.0" &_
chr(13) & chr(10) & "作者:裴亮 @ 网研四部"
msgbox str,64,"关于"
</
SCRIPT
>

<
SCRIPT
FOR
="linecard"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(linecard.value<>"") then
if(linecard.value="1" Or linecard.value="2" Or linecard.value="3") then
phy_port48.style.display="none"
phy_port24.style.display=""
phy_port24.value = ""
else
phy_port24.style.display="none"
phy_port48.style.display=""
phy_port48.value = ""
end if
ssp_port24.value = ""
phy_port.value = ""
ssp_port.value = ""
ssp_port.style.display=""
ssp_port24.style.display=""
phy_port.style.display=""
else
phy_port24.style.display="none"
phy_port48.style.display="none"
ssp_port.style.display="none"
ssp_port24.style.display="none"
phy_port.style.display="none"
end if
</
SCRIPT
>
<
br
>
请选择物理端口号:
<
select
STYLE
="display:none"
size
="1"
name
="phy_port24"
type
="hiden"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
01
</
option
>
<
option
value
="2"
>
02
</
option
>
<
option
value
="3"
>
03
</
option
>
<
option
value
="4"
>
04
</
option
>
<
option
value
="5"
>
05
</
option
>
<
option
value
="6"
>
06
</
option
>
<
option
value
="7"
>
07
</
option
>
<
option
value
="8"
>
08
</
option
>
<
option
value
="9"
>
09
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="11"
>
11
</
option
>
<
option
value
="12"
>
12
</
option
>
<
option
value
="13"
>
13
</
option
>
<
option
value
="14"
>
14
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="16"
>
16
</
option
>
<
option
value
="17"
>
17
</
option
>
<
option
value
="18"
>
18
</
option
>
<
option
value
="19"
>
19
</
option
>
<
option
value
="20"
>
20
</
option
>
<
option
value
="21"
>
21
</
option
>
<
option
value
="22"
>
22
</
option
>
<
option
value
="23"
>
23
</
option
>
<
option
value
="24"
>
24
</
option
>
</
select
>

<
select
STYLE
="display:none"
size
="1"
name
="phy_port48"
>
<
option
value
=""
selected
></
option
>
<
option
value
="25"
>
25
</
option
>
<
option
value
="26"
>
26
</
option
>
<
option
value
="27"
>
27
</
option
>
<
option
value
="28"
>
28
</
option
>
<
option
value
="29"
>
29
</
option
>
<
option
value
="30"
>
30
</
option
>
<
option
value
="31"
>
31
</
option
>
<
option
value
="32"
>
32
</
option
>
<
option
value
="33"
>
33
</
option
>
<
option
value
="34"
>
34
</
option
>
<
option
value
="35"
>
35
</
option
>
<
option
value
="36"
>
36
</
option
>
<
option
value
="37"
>
37
</
option
>
<
option
value
="38"
>
38
</
option
>
<
option
value
="39"
>
39
</
option
>
<
option
value
="40"
>
40
</
option
>
<
option
value
="41"
>
41
</
option
>
<
option
value
="42"
>
42
</
option
>
<
option
value
="43"
>
43
</
option
>
<
option
value
="44"
>
44
</
option
>
<
option
value
="45"
>
45
</
option
>
<
option
value
="46"
>
46
</
option
>
<
option
value
="47"
>
47
</
option
>
<
option
value
="48"
>
48
</
option
>
</
select
>
对应的底层端口为:
<
input
style
="display:none"
name
="ssp_port"
type
="text"
value
=""
maxlength
="2"
size
="2"
>

<
br
>
请选择底层端口号:
<
select
STYLE
="display:none"
size
="1"
name
="ssp_port24"
>
<
option
value
=""
selected
></
option
>
<
option
value
="0"
>
0
</
option
>
<
option
value
="1"
>
1
</
option
>
<
option
value
="2"
>
2
</
option
>
<
option
value
="3"
>
3
</
option
>
<
option
value
="4"
>
4
</
option
>
<
option
value
="5"
>
5
</
option
>
<
option
value
="6"
>
6
</
option
>
<
option
value
="7"
>
7
</
option
>
<
option
value
="8"
>
8
</
option
>
<
option
value
="09"
>
09
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="11"
>
11
</
option
>
<
option
value
="12"
>
12
</
option
>
<
option
value
="13"
>
13
</
option
>
<
option
value
="14"
>
14
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="16"
>
16
</
option
>
<
option
value
="17"
>
17
</
option
>
<
option
value
="18"
>
18
</
option
>
<
option
value
="19"
>
19
</
option
>
<
option
value
="20"
>
20
</
option
>
<
option
value
="21"
>
21
</
option
>
<
option
value
="22"
>
22
</
option
>
<
option
value
="23"
>
23
</
option
>
</
select
>
对应的物理端口为:
<
input
style
="display:none"
name
="phy_port"
type
="text"
value
=""
maxlength
="2"
size
="2"
>


<
SCRIPT
FOR
="ssp_port24"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port24.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(ssp_port24.value)
phy_port.value = ssp_phy(port_id)
else
phy_port.value = ""
end if
</
SCRIPT
>



<
SCRIPT
FOR
="phy_port24"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(phy_port24.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(phy_port24.value)
i = 0
do
if(ssp_phy(i) = port_id) then
ssp_port.value = i
end if
i = i + 1
loop while(i<24)
else
ssp_port.value = ""
end if
</
SCRIPT
>

<
SCRIPT
FOR
="phy_port48"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(phy_port48.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(phy_port48.value)
i = 0
do
if(ssp_phy(i) = port_id) then
ssp_port.value = i
end if
i = i + 1
loop while(i<24)
else
ssp_port.value = ""
end if
</
SCRIPT
>


<
br
>
请输入你要转换的ipmc table show中的位图:
<
input
name
="l3_bitmap"
type
="text"
value
=""
>

<
input
type
="Button"
NAME
="Button1"
value
="转换"
>
底层:
<
textarea
name
="port_phy"
type
="textfield"
value
=""
cols
="5"
rows
="10"
readonly
></
textarea
>
上层:
<
textarea
name
="intf_set"
type
="textfield"
value
=""
cols
="5"
rows
="10"
readonly
></
textarea
>
<
br
>
<
br
>
sh ip mroute得到上游口、下游口:
<
input
type
="Button"
NAME
="Button2"
value
="get"
>
<
br
>
<
textarea
name
="sh_mroute"
type
="textfield"
value
=""
cols
="80"
rows
="5"
></
textarea
>
上游口:
<
textarea
name
="incoming"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>
下游口:
<
textarea
name
="outgoing"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>
<
br
>
<
br
>

sh ap sum得到ap的成员属性:
<
input
type
="Button"
NAME
="Button4"
value
="get"
>
请输线卡卡槽:
<
input
name
="lc_slot"
type
="text"
value
=""
maxlength
=1
size
=2
>
<
br
>
<
textarea
name
="sh_ap"
type
="textfield"
value
=""
cols
="80"
rows
="5"
></
textarea
>
成员口:
<
textarea
name
="members"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>


<
SCRIPT
FOR
="Button4"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
if ((sh_ap.value <> "") And (lc_slot.value<>"")) then
chang_line = chr(13) & chr(10)
ap_line = split(sh_ap.value,chang_line,-1,1)
ap_line_length = UBound(ap_line)
members.value = ""
key_fuzhu = lc_slot.value & "/" '后面将把搜索到诸如"2/1",前面的"2/"删除
lc_port = lc_slot.value & "/d+"
n = 0
do
a = "Agd+"
If IsExist(ap_line(n),a) Then '如果找到vlan(i),那么显示vlan(i),并继续向下找端口
members.value = members.value & GetKey(ap_line(n),a,-1) &_
Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
member = member & Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1 '跳到下一行
if(n>=ap_line_length) then exit do
do while ((n <= ap_line_length) And (Not IsExist(ap_line(n),a))) '如果找不到agxx,不显示agxx,但继续向下找端口,直到找到下一个agxx时,跳出
members.value = members.value & Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1
if(n>=ap_line_length) then exit do
loop
else
n = n + 1 '这里需要注意,在if为真时,有一个n=n+1,那么这里就不应该在end if后添加n+1,而应该在else下添加n+1
End If
loop while(n <= ap_line_length)

else
msgbox "请输线卡卡槽 和 show ap sum结果!"
end if
</SCRIPT>
<br>
<br>
sh vlan得到接口的vlan分布:
<input type="Button" NAME="Button3" value="compute">
<br>
<textarea name="sh_vlan" type="textfield" value="" cols="100" rows="10"></textarea>

<textarea name="intf_dis" type="textfield" value="" cols="40" rows="10" readonly></textarea>
<SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript"> '添加新的线卡类型时,需要再此添加ssp->物理接口的关系,
'还有上面的select选择框也需要添加对应的选项
if ((l3_bitmap.value <> "") And (linecard.value<>"")) then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
l3_map = l3_bitmap.value
port_phy.value = ssp_to_phy(l3_map,ssp_phy)
port_phy.value = Order(port_phy.value)
else
msgbox "请选择线卡类型,并输入L3位图!"
end if
</SCRIPT>

<SCRIPT FOR="Button2" EVENT="onClick" LANGUAGE="VBScript">
if (sh_mroute.value <> "") then
chang_line = chr(13) & chr(10)
vlan_line = split(sh_mroute.value,chang_line,-1,1)
vlan_line_length = UBound(vlan_line)
incoming.value = ""
outgoing.value = ""
m = 0
do
If IsExist(vlan_line(m),"Incoming") Then
incoming.value = GetKey(vlan_line(m),"d+",0)
End If
If IsExist(vlan_line(m),"Outgoing") Then
do '找到出口列表时,继续向下遍历,到最后一行
outgoing.value = GetKey(vlan_line(m),"d+",0) + outgoing.value
m = m + 1
loop while(m <= vlan_line_length)
End If
m = m + 1 '这时实际m值已经为最大值+1了,这里再次加1,m值变为最大+2
loop while(m <= vlan_line_length)
outgoing.value = Order(outgoing.value)
else
msgbox "请输入show ip mroute结果!"
end if
</SCRIPT>


<SCRIPT FOR="Button3" EVENT="onClick" LANGUAGE="VBScript">
On Error Resume Next

if ((sh_vlan.value <> "") And(lc_slot.value <> "") And (outgoing.value<>"")) then 

aps_s = members.value
chang_line = chr(13) & chr(10)
v_line = split(sh_vlan.value,chang_line,-1,1)
v_line_length = UBound(v_line)
vlan_set = split(outgoing.value,chang_line,-1,1)
vlan_set_length = UBound(vlan_set)
do
i = 0
if(vlan_set(vlan_set_length-i) = "") then
vlan_set_length = vlan_set_length - 1
i = i + 1
end if
loop while(vlan_set(vlan_set_length) = "") '去除后面的空字符
intf_dis.value = ""
key_fuzhu = lc_slot.value & "/" '后面将把搜索到诸如"2/1",前面的"2/"删除
lc_port = lc_slot.value & "/d+"
n = 0
i = 0
do 
a = "VLANd*" & vlan_set(i)
If IsExist(v_line(n),a) Then '如果找到vlan(i),那么显示vlan(i),并继续向下找端口
intf_dis.value = intf_dis.value & GetKey(v_line(n),"VLANd+",-1) &_
Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & GetKey(v_line(n),"Agd+",-1)
aps = GetKey(v_line(n),"Agd+",-1)
ap_member = ApToMember(aps,aps_s)
msgbox UBound(ap_member)
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & ap_member
n = n + 1 '跳到下一行
while((n <= v_line_length) And (Not IsExist(v_line(n),"VLANd+"))) '如果找不到vlanxx,不显示valnxx,但继续向下找端口,直到找到下一个vlanxx时,跳出
intf_dis.value = intf_dis.value & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & GetKey(v_line(n),"Agd+",-1)
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & ap_member
n = n + 1
wend
i = i + 1 'vlan(i)一论搜索结束,调到下一个vlan(i+1)
else
n = n + 1 '这里需要注意,在if为真时,有一个n=n+1,那么这里就不应该在end if后添加n+1,而应该在else下添加n+1
End If

loop while((n <= v_line_length) And (i <= vlan_set_length))
intfs = Order_onlyone(intfs)
intf_set.value = intfs
Pass = "表项一致"
Fail = " 表项不一致!" & chr(13) & chr(10) & "致电黄米青!电话:8595"
if(StrComp(intf_set.value,port_phy.value) = 0) then
MsgBox Pass,64, "Pass"
else
msgbox Fail,48,"Fail"
end if
else
msgbox "请点击'get'计算出show ip mroute的下游口,并输入show vlan结果,以及线卡卡槽!"
end if
</
SCRIPT
>


<!--
以下是各个自定义函数
-->


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function ssp_to_phy(l3_bitmap,ssp_phy) '功能:转换ssp的位图为物理接口
'参数:1、类型:字符串,位图;2、类型:数组,ssp->物理接口的关系
'返回值:类型string,位图为1对应的所有物理接口,且接口间以回车为间隔的组成的一个字符串
length_l3_bitmap = len(l3_bitmap)
i = 1 '在i小于位图的16进制数的个数时,一直循环,总共要循环(i*4)次
while(i <= length_l3_bitmap)
temp = Mid(StrReverse(l3_bitmap),i,1) 'Mid函数从右向左提取字符,故先反转位图。这里表示依次从l3位图中提取一个16进制数
bin_temp = HexToBin(temp) '调用16进制转2进制函数
l3_bin = StrReverse(bin_temp) '同样道理,因为下面还用使用Mid函数,反转2进制位图
j = 1
while(j <= 4) '16进制数变为2进制,4:1,故循环4次
if(Mid(l3_bin,j,1) = 1) then
ssp_index = (i-1) * 4 + j - 1 '计算当前操作的bit位,在位图中的位置
phy_index = ssp_phy(ssp_index)
ssp_to_phy = phy_index & chr(10)& ssp_to_phy
end if
j = j + 1
wend
i = i + 1
wend
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function HexToBin(str_hex) '功能:16进制数转换为2进制数
'参数:类型:字符,16进制数
'返回值:类型:字符串,4位2进制数
Select Case str_hex
Case "0" HexToBin = "0000"
Case "1" HexToBin = "0001"
Case "2" HexToBin = "0010"
Case "3" HexToBin = "0011"
Case "4" HexToBin = "0100"
Case "5" HexToBin = "0101"
Case "6" HexToBin = "0110"
Case "7" HexToBin = "0111"
Case "8" HexToBin = "1000"
Case "9" HexToBin = "1001"
Case "a" HexToBin = "1010"
Case "b" HexToBin = "1011"
Case "c" HexToBin = "1100"
Case "d" HexToBin = "1101"
Case "e" HexToBin = "1110"
Case "f" HexToBin = "1111"
Case Else MsgBox "输入错误"
End Select
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function IsExist(str,key) '功能:判断是否存在某字符串
'参数:1、类型:字符串,要判断的字符串;2、类型:字符串,关键字(正则表达式)
'返回值:类型:字符串,4位2进制数
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Pattern = key
retVal = regEx.Test(str)
If retVal Then
IsExist = True
else
IsExist = False
End If
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function GetKey(str,key,mode) '功能:搜索所有符合条件的字符串
'参数:1、类型:字符串,要搜索的字符串;2、类型:字符串,关键字(正则表达式);3、类型:boolean,是否全局模式搜索
'返回值:类型:字符串,匹配搜索条件的所有关键字,关键字之间为回车,组成的一个字符串
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Global = mode '全局匹配,找到所有符合条件的关键字,false表示只找到第一个符合条件的关键字
regEx.Pattern = key
Set Matches = regEx.Execute(str)
For Each Match in Matches
GetKey = Match.value & chr(13) & chr(10) & GetKey
Next
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order(str) '功能:从大到小排列,不删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
dim a
a = split(str,chang_line,-1,1)
a_len = delNull(a)
i = 0
j = a_len
do
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)>a(i+1)) then
temp = a(i)
a(i) = a(i+1)
a(i+1) = temp
end if
i = i + 1
loop while(i < j)
Order = a(j) & chr(13) & chr(10) & Order
j = j -1
i = 0
loop while(j > 0)
Order = a(0) & chr(13) & chr(10) & Order
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order_onlyone(str) '功能:从大到小排列,但删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
a = Order(str)
a = split(a,chang_line,-1,1)
a_len = UBound(a) - 1
i = 0
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)<>a(i+1)) then
temp = a(i) & chr(13) & chr(10) & temp
end if
i = i + 1
loop while(i < a_len)
temp = a(a_len) & chr(13) & chr(10) & temp
Order_onlyone = Order(temp)
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function LcArray(lc_type) '功能:根据线卡类型,得到ssp和物理接口的关系
'参数:1、类型:字符串,线卡类型
'返回值:类型:数组,返回线卡关系数组
dim ssp_phy_24sfp,ssp_phy_24gt,ssp_phy_48gt0,ssp_phy_48gt1
ssp_phy_24sfp = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_24gt = Array(3,4,1,2,7,8,5,6,11,12,9,10,15,16,13,14,19,20,17,18,23,24,21,22)
ssp_phy_48gt0 = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_48gt1 = Array(26,25,28,27,30,29,32,31,34,33,36,35,38,37,40,39,43,44,41,42,47,48,45,46)
Select Case lc_type
Case "1" LcArray = ssp_phy_24sfp
Case "2" LcArray = ssp_phy_24gt
Case "3" LcArray = ssp_phy_48gt0
Case "4" LcArray = ssp_phy_48gt1
Case Else MsgBox "请选择线卡类型!"
End Select
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function ApToMember(str,str_member) '功能:判断当前行是否存在ap口,存在转化为成员口
'参数:1、类型:字符串
'返回值:类型:字符串,所有成员口组成的字符串
'返回值:类型:字符串,成员口组成的字符串
if(IsExist(str,"Agd+")) then
chang_line = chr(13) & chr(10)
aps = GetKey(str,"Agd+",-1)
aps = split(aps,chang_line,-1,1)

aps_s = GetKey(str_member,"Agd+",-1)
aps_s = split(aps_s,chang_line,-1,1)
single_str = split(str_member,chang_line,-1,1)
single_str_length = delNull(single_str)
aps_s_length = delNull(aps_s)
aps_length = delNull(aps)
i = 0
j = 0
Do
x=0
do
If(aps(i)= aps_s(x)) Then
y = 0
Do
If(single_str(y) = aps_s(x)) Then
j = y
End If
If(single_str(y) = aps_s(x)) Then Exit do
y = y + 1
Loop While(y<=single_str_length) '这个循环为了找到匹配的ap口,在ap+成员字符串中的坐标
x = x + 1
do
If(Left(single_str(j),2)<>"Ag") Then
temp = single_str(j) & chang_line & temp
End If
j = j + 1
If(j>single_str_length) Then Exit do
Loop While((j<=single_str_length) And (Left(single_str(j),2)<>"Ag")) '从匹配的ap口开始,向下累加成员口到下一个ap口
Else
x = x + 1
End If
Loop While(x<=aps_s_length) '将一个要比较的ap口匹配完所有的ap口
i = i + 1
Loop While(i<=aps_length) '要比较的所有ap口依次匹配,至完全
ApToMember = temp
end if
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function delNull(str) 
str_length = UBound(str)
do
i = 0
if(str(str_length-i) = "") then
str_length = str_length - 1
i = i + 1
end If
loop while(str(str_length) = "") '去除后面的空字符 
delNull = str_length
End Function
</
SCRIPT
>

</
body
>

</
html
>
Update at 2007-06-24 星期日 12:49:53.62
修正了几个bug,更改了几个函数实现,增加了对3750、5750、6610(这个最变态,不过为了增加对其的支持,还是学到了一点东西)的支持!请将代码保存为".hta"后缀名即可运行。
<
html
>

<
head
>
<
title
>
测试辅助工具
</
title
>
<
HTA:APPLICATION
APPLICATIONNAME
="Test Tool"
SCROLL
="yes"
SINGLEINSTANCE
="yes"
WINDOWSTATE
="maximize"
>
</
head
>
<
body
>
请选择线卡类型:
<
select
size
="1"
name
="linecard"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
86_24sfp
</
option
>
<
option
value
="2"
>
86_24gt
</
option
>
<
option
value
="3"
>
86_48gt_unit0
</
option
>
<
option
value
="4"
>
86_48gt_unit1
</
option
>
<
option
value
="5"
>
3750_24
</
option
>
<
option
value
="6"
>
5750_24
</
option
>
<
option
value
="7"
>
6610
</
option
>
</
select
>
<
input
type
="Button"
NAME
="help"
value
="帮助"
align
=right
>

<
SCRIPT
FOR
="help"
EVENT
="OnClick"
LANGUAGE
="VBScript"
>
...
str = "工具提供:" & chr(13) & chr(10) & chr(13) & chr(10) &_
" 底层和上层端口转换的功能!" & chr(13) & chr(10) & chr(13) & chr(10) &_
" 同时也提供底层L3位图" &_
"和上层是否一致的对比验证!" & chr(13) & chr(10) & chr(13) & chr(10) &_
"使用方法:点击下面各个按钮,会有提示操作!" &_
chr(13) & chr(10) & chr(13) & chr(10) & "限 制:目前不支持show ip mroute中有routed port!" &_
chr(13) & chr(10) & chr(13) &_
chr(10) & "bug 联系:peil@ruijie.com.cn"
msgbox str,64,"帮助"
</
SCRIPT
>
<
input
type
="Button"
NAME
="about"
value
="关于"
align
=right
>

<
SCRIPT
FOR
="about"
EVENT
="OnClick"
LANGUAGE
="VBScript"
>
...
str = "名称:测试辅助工具" & chr(13) & chr(10) & "版本:1.01" &_
chr(13) & chr(10) & "作者:裴亮 @ 网研四部"
msgbox str,64,"关于"
</
SCRIPT
>

<
SCRIPT
FOR
="linecard"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(linecard.value<>"") then
if(linecard.value="1" Or linecard.value="2" Or linecard.value="3" Or linecard.value="5" Or linecard.value="6") then
phy_port48.style.display="none"
phy_port24.style.display=""
ssp_port24.value = ""
phy_port.value = ""
ssp_port.value = ""
ssp_port.style.display=""
ssp_port24.style.display=""
phy_port.style.display=""
phy_port24.value = ""
for66.style.display="none"
for66_unit.style.display="none"
phy_port6.style.display="none"
slots_num.style.display="none"
ssp_port6_part4.style.display="none"
ssp_port6_part1.style.display="none"
ssp_port6_part2.style.display="none"
ssp_port6_part3.style.display="none"
ssp_unit.style.display="none"
select66_unit.style.display="none"
elseif(linecard.value="7") then
phy_port24.style.display="none"
phy_port48.style.display="none"
ssp_port.style.display="none"
ssp_port24.style.display="none"
phy_port.style.display="none"
for66.style.display=""
slots_num.style.display=""
slots_num.value = ""
ssp_port.style.display="none"
phy_port.style.display="none"
ssp_unit.style.display="none"
select66_unit.style.display=""
else
phy_port24.style.display="none"
phy_port48.style.display=""
phy_port48.value = ""
ssp_port24.value = ""
phy_port.value = ""
ssp_port.value = ""
ssp_port.style.display=""
ssp_port24.style.display=""
phy_port.style.display=""
for66.style.display="none"
for66_unit.style.display="none"
phy_port6.style.display="none"
slots_num.style.display="none"
ssp_port6_part4.style.display="none"
ssp_port6_part1.style.display="none"
ssp_port6_part2.style.display="none"
ssp_port6_part3.style.display="none"
ssp_unit.style.display="none"
select66_unit.style.display="none"
end if
else
phy_port24.style.display="none"
phy_port48.style.display="none"
ssp_port.style.display="none"
ssp_port24.style.display="none"
phy_port.style.display="none"
end if
</
SCRIPT
>


<
span
id
="for66"
style
="display:none"
><
br
>
请选择线卡卡槽:
</
span
>
<
select
STYLE
="display:none"
size
="1"
name
="slots_num"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
01
</
option
>
<
option
value
="2"
>
02
</
option
>
<
option
value
="3"
>
03
</
option
>
<
option
value
="4"
>
04
</
option
>
<
option
value
="5"
>
05
</
option
>
<
option
value
="6"
>
06
</
option
>
<
option
value
="7"
>
07
</
option
>
<
option
value
="8"
>
08
</
option
>
</
select
>
<
span
id
="for66_unit"
style
="display:none"
></
span
>


<
SCRIPT
FOR
="slots_num"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(slots_num.value<>"") then
for66_unit.style.display=""
phy_port6.style.display=""
ssp_port.style.display=""
phy_port.style.display=""
ssp_unit.style.display=""
ssp_port24.style.display=""
if(slots_num.value="1" Or slots_num.value="2" Or slots_num.value="6" Or slots_num.value="7") then
for66_unit.innerHTML="<br><B><U>线卡位于unit0</B></U>"
ssp_unit.VALUE="0"
else
for66_unit.innerHTML="<br><B><U>线卡位于unit1</B></U>"
ssp_unit.VALUE="1"
end if 
else
for66_unit.style.display="none"
phy_port6.style.display="none"
ssp_port6_part1.style.display="none"
ssp_port6_part2.style.display="none"
ssp_port6_part3.style.display="none"
ssp_port6_part4.style.display="none"
ssp_port.style.display="none"
phy_port.style.display="none"
end if
</
SCRIPT
>
<
br
>
请选择物理端口号:
<
select
STYLE
="display:none"
size
="1"
name
="phy_port24"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
01
</
option
>
<
option
value
="2"
>
02
</
option
>
<
option
value
="3"
>
03
</
option
>
<
option
value
="4"
>
04
</
option
>
<
option
value
="5"
>
05
</
option
>
<
option
value
="6"
>
06
</
option
>
<
option
value
="7"
>
07
</
option
>
<
option
value
="8"
>
08
</
option
>
<
option
value
="9"
>
09
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="11"
>
11
</
option
>
<
option
value
="12"
>
12
</
option
>
<
option
value
="13"
>
13
</
option
>
<
option
value
="14"
>
14
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="16"
>
16
</
option
>
<
option
value
="17"
>
17
</
option
>
<
option
value
="18"
>
18
</
option
>
<
option
value
="19"
>
19
</
option
>
<
option
value
="20"
>
20
</
option
>
<
option
value
="21"
>
21
</
option
>
<
option
value
="22"
>
22
</
option
>
<
option
value
="23"
>
23
</
option
>
<
option
value
="24"
>
24
</
option
>
</
select
>

<
select
STYLE
="display:none"
size
="1"
name
="phy_port6"
>
<
option
value
=""
selected
></
option
>
<
option
value
="1"
>
01
</
option
>
<
option
value
="2"
>
02
</
option
>
<
option
value
="3"
>
03
</
option
>
<
option
value
="4"
>
04
</
option
>
<
option
value
="5"
>
05
</
option
>
<
option
value
="6"
>
06
</
option
>
</
select
>

<
select
STYLE
="display:none"
size
="1"
name
="phy_port48"
>
<
option
value
=""
selected
></
option
>
<
option
value
="25"
>
25
</
option
>
<
option
value
="26"
>
26
</
option
>
<
option
value
="27"
>
27
</
option
>
<
option
value
="28"
>
28
</
option
>
<
option
value
="29"
>
29
</
option
>
<
option
value
="30"
>
30
</
option
>
<
option
value
="31"
>
31
</
option
>
<
option
value
="32"
>
32
</
option
>
<
option
value
="33"
>
33
</
option
>
<
option
value
="34"
>
34
</
option
>
<
option
value
="35"
>
35
</
option
>
<
option
value
="36"
>
36
</
option
>
<
option
value
="37"
>
37
</
option
>
<
option
value
="38"
>
38
</
option
>
<
option
value
="39"
>
39
</
option
>
<
option
value
="40"
>
40
</
option
>
<
option
value
="41"
>
41
</
option
>
<
option
value
="42"
>
42
</
option
>
<
option
value
="43"
>
43
</
option
>
<
option
value
="44"
>
44
</
option
>
<
option
value
="45"
>
45
</
option
>
<
option
value
="46"
>
46
</
option
>
<
option
value
="47"
>
47
</
option
>
<
option
value
="48"
>
48
</
option
>
</
select
>
对应的底层端口为:
<
input
style
="display:none"
name
="ssp_port"
type
="text"
value
=""
maxlength
="2"
size
="2"
>

<
br
>
<
span
id
="select66_unit"
style
="display:none"
>
请选择unit:
</
span
>
<
select
STYLE
="display:none"
size
="1"
name
="ssp_unit"
>
<
option
value
="0"
selected
>
unit0
</
option
>
<
option
value
="1"
>
unit1
</
option
>
</
select
>
请选择底层端口号:
<
select
STYLE
="display:none"
size
="1"
name
="ssp_port24"
>
<
option
value
=""
selected
></
option
>
<
option
value
="0"
>
0
</
option
>
<
option
value
="1"
>
1
</
option
>
<
option
value
="2"
>
2
</
option
>
<
option
value
="3"
>
3
</
option
>
<
option
value
="4"
>
4
</
option
>
<
option
value
="5"
>
5
</
option
>
<
option
value
="6"
>
6
</
option
>
<
option
value
="7"
>
7
</
option
>
<
option
value
="8"
>
8
</
option
>
<
option
value
="09"
>
09
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="11"
>
11
</
option
>
<
option
value
="12"
>
12
</
option
>
<
option
value
="13"
>
13
</
option
>
<
option
value
="14"
>
14
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="16"
>
16
</
option
>
<
option
value
="17"
>
17
</
option
>
<
option
value
="18"
>
18
</
option
>
<
option
value
="19"
>
19
</
option
>
<
option
value
="20"
>
20
</
option
>
<
option
value
="21"
>
21
</
option
>
<
option
value
="22"
>
22
</
option
>
<
option
value
="23"
>
23
</
option
>
</
select
>

<
select
STYLE
="display:none"
size
="1"
name
="ssp_port6_part1"
>
<
option
value
=""
selected
></
option
>
<
option
value
="0"
>
0
</
option
>
<
option
value
="1"
>
1
</
option
>
<
option
value
="2"
>
2
</
option
>
<
option
value
="3"
>
3
</
option
>
<
option
value
="4"
>
4
</
option
>
<
option
value
="5"
>
5
</
option
>
</
select
>
<
select
STYLE
="display:none"
size
="1"
name
="ssp_port6_part2"
>
<
option
value
=""
selected
></
option
>
<
option
value
="6"
>
6
</
option
>
<
option
value
="7"
>
7
</
option
>
<
option
value
="8"
>
8
</
option
>
<
option
value
="09"
>
09
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="11"
>
11
</
option
>
</
select
>
<
select
STYLE
="display:none"
size
="1"
name
="ssp_port6_part3"
>
<
option
value
=""
selected
></
option
>
<
option
value
="12"
>
12
</
option
>
<
option
value
="13"
>
13
</
option
>
<
option
value
="14"
>
14
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="16"
>
16
</
option
>
<
option
value
="17"
>
17
</
option
>
</
select
>
<
select
STYLE
="display:none"
size
="1"
name
="ssp_port6_part4"
>
<
option
value
=""
selected
></
option
>
<
option
value
="18"
>
18
</
option
>
<
option
value
="19"
>
19
</
option
>
<
option
value
="20"
>
20
</
option
>
<
option
value
="21"
>
21
</
option
>
<
option
value
="22"
>
22
</
option
>
<
option
value
="23"
>
23
</
option
>
</
select
>

对应的物理端口为:
<
input
style
="display:none"
name
="phy_port"
type
="text"
value
=""
maxlength
="2"
size
="2"
>


<
SCRIPT
FOR
="ssp_port24"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port24.value<>"") then
port_id = Int(ssp_port24.value)
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
if(lc_type="7") then
if(port_id<6) then
phy_port.value = ssp_phy(port_id)
if(ssp_unit.VALUE="0") then
slots_num.value="6"
for66_unit.innerHTML="<br><B><U>线卡位于unit0</B></U>"
else
slots_num.value="8"
for66_unit.innerHTML="<br><B><U>线卡位于unit1</B></U>"
end if
elseif(port_id<12) then
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
if(ssp_unit.VALUE="0") then
slots_num.value="2"
for66_unit.innerHTML="<br><B><U>线卡位于unit0</B></U>"
else
slots_num.value="5"
for66_unit.innerHTML="<br><B><U>线卡位于unit1</B></U>"
end if
elseif(port_id<18) then
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
if(ssp_unit.VALUE="0") then
slots_num.value="1"
for66_unit.innerHTML="<br><B><U>线卡位于unit0</B></U>"
else
slots_num.value="4"
for66_unit.innerHTML="<br><B><U>线卡位于unit1</B></U>"
end if
elseif(port_id<24) then
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
if(ssp_unit.VALUE="0") then
slots_num.value="7"
for66_unit.innerHTML="<br><B><U>线卡位于unit0</B></U>"
else
slots_num.value="3"
for66_unit.innerHTML="<br><B><U>线卡位于unit1</B></U>"
end if
end if
else
phy_port.value = ssp_phy(port_id)
end if
else
phy_port.value = ""
end if
</
SCRIPT
>


<
SCRIPT
FOR
="ssp_port6_part1"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port6_part1.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(ssp_port6_part1.value)
phy_port.value = ssp_phy(port_id)
else
phy_port.value = ""
end if
</
SCRIPT
>


<
SCRIPT
FOR
="ssp_port6_part2"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port6_part2.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(ssp_port6_part2.value)
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
else
phy_port.value = ""
end if
</
SCRIPT
>

<
SCRIPT
FOR
="ssp_port6_part3"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port6_part3.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(ssp_port6_part3.value)
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
else
phy_port.value = ""
end if
</
SCRIPT
>

<
SCRIPT
FOR
="ssp_port6_part4"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(ssp_port6_part4.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(ssp_port6_part4.value)
port_id = port_id Mod 6
phy_port.value = ssp_phy(port_id)
else
phy_port.value = ""
end if
</
SCRIPT
>


<
SCRIPT
FOR
="phy_port6"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(phy_port6.value<>"") then
lc_type = linecard.value
ssp_phy = ArrayLc(lc_type)
port_id = Int(phy_port6.value) - 1
ssp_port.value = ssp_phy(port_id)
else
ssp_port.value = ""
end if
</
SCRIPT
>


<
SCRIPT
FOR
="phy_port24"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(phy_port24.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(phy_port24.value)
i = 0
do
if(ssp_phy(i) = port_id) then
ssp_port.value = i
end if
i = i + 1
loop while(i<24)
else
ssp_port.value = ""
end if
</
SCRIPT
>

<
SCRIPT
FOR
="phy_port48"
EVENT
="Onchange"
LANGUAGE
="VBScript"
>
...
if(phy_port48.value<>"") then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
port_id = Int(phy_port48.value)
i = 0
do
if(ssp_phy(i) = port_id) then
ssp_port.value = i
end if
i = i + 1
loop while(i<24)
else
ssp_port.value = ""
end if
</
SCRIPT
>
<
br
>
请输入16进制数:
<
input
name
="hex_num"
type
="text"
value
=""
>
<
input
type
="Button"
NAME
="change_button"
value
="转换"
>
<
input
name
="bin_num"
type
="text"
value
=""
size
="36"
>

<
SCRIPT
FOR
="change_button"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
if (hex_num.value <> "") then
hex_len = len(hex_num.value)
hex_number = hex_num.value
i = 1 '在i小于位图的16进制数的个数时,一直循环,总共要循环(i*4)次
while(i <= hex_len)
temp = Mid(hex_number,i,1) 'Mid函数从右向左提取字符,故先反转位图。这里表示依次从l3位图中提取一个16进制数
bin_temp = HexToBin(temp) '调用16进制转2进制函数
if(i=1) then
l3_bin = bin_temp
else
l3_bin = l3_bin & "," & bin_temp '同样道理,因为下面还用使用Mid函数,反转2进制位图
end if
i = i + 1
wend
bin_num.value = l3_bin
else
msgbox "请输入16进制数!"
end if
</
SCRIPT
>
<
br
>
请输入你要转换的ipmc table show中的位图:
<
input
name
="l3_bitmap"
type
="text"
value
=""
>

<
input
type
="Button"
NAME
="Button1"
value
="转换"
>
底层:
<
textarea
name
="port_phy"
type
="textfield"
value
=""
cols
="5"
rows
="10"
readonly
></
textarea
>
上层:
<
textarea
name
="intf_set"
type
="textfield"
value
=""
cols
="5"
rows
="10"
readonly
></
textarea
>
<
br
>
<
br
>
sh ip mroute得到上游口、下游口:
<
input
type
="Button"
NAME
="Button2"
value
="get"
>
<
br
>
<
textarea
name
="sh_mroute"
type
="textfield"
value
=""
cols
="80"
rows
="5"
></
textarea
>
上游口:
<
textarea
name
="incoming"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>
下游口:
<
textarea
name
="outgoing"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>
<
br
>
<
br
>

sh ap sum得到ap的成员属性:
<
input
type
="Button"
NAME
="Button4"
value
="get"
>
请输线卡卡槽:
<
input
name
="lc_slot"
type
="text"
value
=""
maxlength
=1
size
=2
>
<
br
>
<
textarea
name
="sh_ap"
type
="textfield"
value
=""
cols
="80"
rows
="5"
></
textarea
>
成员口:
<
textarea
name
="members"
type
="textfield"
value
=""
cols
="10"
rows
="5"
readonly
></
textarea
>


<
SCRIPT
FOR
="Button4"
EVENT
="onClick"
LANGUAGE
="VBScript"
>
...
if ((sh_ap.value <> "") And (lc_slot.value<>"")) then
chang_line = chr(13) & chr(10)
ap_line = split(sh_ap.value,chang_line,-1,1)
ap_line_length = UBound(ap_line)
members.value = ""
key_fuzhu = lc_slot.value & "/" '后面将把搜索到诸如"2/1",前面的"2/"删除
lc_port = lc_slot.value & "/d+"
n = 0
do
a = "Agd+"
If IsExist(ap_line(n),a) Then '如果找到vlan(i),那么显示vlan(i),并继续向下找端口
members.value = members.value & GetKey(ap_line(n),a,-1) &_
Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
member = member & Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1 '跳到下一行
if(n>ap_line_length) then exit do
do while ((n <= ap_line_length) And (Not IsExist(ap_line(n),a))) '如果找不到agxx,不显示agxx,但继续向下找端口,直到找到下一个agxx时,跳出
members.value = members.value & Replace(GetKey(ap_line(n),lc_port,-1),key_fuzhu,"")
n = n + 1
if(n>=ap_line_length) then exit do
loop
else
n = n + 1 '这里需要注意,在if为真时,有一个n=n+1,那么这里就不应该在end if后添加n+1,而应该在else下添加n+1
End If
loop while(n <= ap_line_length)

else
msgbox "请输线卡卡槽 和 show ap sum结果!"
end if
</SCRIPT>
<br>
<br>
sh vlan得到接口的vlan分布:
<input type="Button" NAME="Button3" value="compute">
<br>
<textarea name="sh_vlan" type="textfield" value="" cols="100" rows="10"></textarea>

<textarea name="intf_dis" type="textfield" value="" cols="40" rows="10" readonly></textarea>
<SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript"> '添加新的线卡类型时,需要再此添加ssp->物理接口的关系,
'还有上面的select选择框也需要添加对应的选项
if ((l3_bitmap.value <> "") And (linecard.value<>"")) then
lc_type = linecard.value
ssp_phy = LcArray(lc_type)
l3_map = l3_bitmap.value
port_phy.value = ssp_to_phy(l3_map,ssp_phy)
port_phy.value = Order(port_phy.value)
else
msgbox "请选择线卡类型,并输入L3位图!"
end if
</SCRIPT>

<SCRIPT FOR="Button2" EVENT="onClick" LANGUAGE="VBScript">
if (sh_mroute.value <> "") then
chang_line = chr(13) & chr(10)
vlan_line = split(sh_mroute.value,chang_line,-1,1)
vlan_line_length = UBound(vlan_line)
incoming.value = ""
outgoing.value = ""
m = 0
do
If IsExist(vlan_line(m),"Incoming") Then
incoming.value = GetKey(vlan_line(m),"d+",0)
End If
If IsExist(vlan_line(m),"Outgoing") Then
do '找到出口列表时,继续向下遍历,到最后一行
outgoing.value = GetKey(vlan_line(m),"d+",0) + outgoing.value
m = m + 1
loop while(m <= vlan_line_length)
End If
m = m + 1 '这时实际m值已经为最大值+1了,这里再次加1,m值变为最大+2
loop while(m <= vlan_line_length)
outgoing.value = Order(outgoing.value)
else
msgbox "请输入show ip mroute结果!"
end if
</SCRIPT>


<SCRIPT FOR="Button3" EVENT="onClick" LANGUAGE="VBScript">
On Error Resume Next

if ((sh_vlan.value <> "") And(lc_slot.value <> "") And (outgoing.value<>"")) then 

aps_s = members.value
chang_line = chr(13) & chr(10)
v_line = split(sh_vlan.value,chang_line,-1,1)
v_line_length = UBound(v_line)
vlan_set = split(outgoing.value,chang_line,-1,1)
vlan_set_length = UBound(vlan_set)
do
i = 0
if(vlan_set(vlan_set_length-i) = "") then
vlan_set_length = vlan_set_length - 1
i = i + 1
end if
loop while(vlan_set(vlan_set_length) = "") '去除后面的空字符
intf_dis.value = ""
key_fuzhu = lc_slot.value & "/" '后面将把搜索到诸如"2/1",前面的"2/"删除
lc_port = lc_slot.value & "/d+"
n = 0
i = 0
do 
a = "VLANd*" & vlan_set(i)
If IsExist(v_line(n),a) Then '如果找到vlan(i),那么显示vlan(i),并继续向下找端口
intf_dis.value = intf_dis.value & GetKey(v_line(n),"VLANd+",-1) &_
Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & GetKey(v_line(n),"Agd+",-1)
aps = GetKey(v_line(n),"Agd+",-1)
ap_member = ApToMember(aps,aps_s)
msgbox UBound(ap_member)
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & ap_member
n = n + 1 '跳到下一行
while((n <= v_line_length) And (Not IsExist(v_line(n),"VLANd+"))) '如果找不到vlanxx,不显示valnxx,但继续向下找端口,直到找到下一个vlanxx时,跳出
intf_dis.value = intf_dis.value & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & GetKey(v_line(n),"Agd+",-1)
intfs = intfs & Replace(GetKey(v_line(n),lc_port,-1),key_fuzhu,"") & ap_member
n = n + 1
wend
i = i + 1 'vlan(i)一论搜索结束,调到下一个vlan(i+1)
else
n = n + 1 '这里需要注意,在if为真时,有一个n=n+1,那么这里就不应该在end if后添加n+1,而应该在else下添加n+1
End If

loop while((n <= v_line_length) And (i <= vlan_set_length))
intfs = Order_onlyone(intfs)
intf_set.value = intfs
Pass = "表项一致"
Fail = " 表项不一致!" & chr(13) & chr(10) & "致电黄米青!电话:8595"
if(StrComp(intf_set.value,port_phy.value) = 0) then
MsgBox Pass,64, "Pass"
else
msgbox Fail,48,"Fail"
end if
else
msgbox "请点击'get'计算出show ip mroute的下游口,并输入show vlan结果,以及线卡卡槽!"
end if
</
SCRIPT
>


<!--
以下是各个自定义函数
-->


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function ssp_to_phy(l3_bitmap,ssp_phy) '功能:转换ssp的位图为物理接口
'参数:1、类型:字符串,位图;2、类型:数组,ssp->物理接口的关系
'返回值:类型string,位图为1对应的所有物理接口,且接口间以回车为间隔的组成的一个字符串
length_l3_bitmap = len(l3_bitmap)
i = 1 '在i小于位图的16进制数的个数时,一直循环,总共要循环(i*4)次
while(i <= length_l3_bitmap)
temp = Mid(StrReverse(l3_bitmap),i,1) 'Mid函数从右向左提取字符,故先反转位图。这里表示依次从l3位图中提取一个16进制数
bin_temp = HexToBin(temp) '调用16进制转2进制函数
l3_bin = StrReverse(bin_temp) '同样道理,因为下面还用使用Mid函数,反转2进制位图
j = 1
while(j <= 4) '16进制数变为2进制,4:1,故循环4次
if(Mid(l3_bin,j,1) = 1) then
ssp_index = (i-1) * 4 + j - 1 '计算当前操作的bit位,在位图中的位置
phy_index = ssp_phy(ssp_index)
ssp_to_phy = phy_index & chr(10)& ssp_to_phy
end if
j = j + 1
wend
i = i + 1
wend
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function HexToBin(str_hex) '功能:16进制数转换为2进制数
'参数:类型:字符,16进制数
'返回值:类型:字符串,4位2进制数
Select Case str_hex
Case "0" HexToBin = "0000"
Case "1" HexToBin = "0001"
Case "2" HexToBin = "0010"
Case "3" HexToBin = "0011"
Case "4" HexToBin = "0100"
Case "5" HexToBin = "0101"
Case "6" HexToBin = "0110"
Case "7" HexToBin = "0111"
Case "8" HexToBin = "1000"
Case "9" HexToBin = "1001"
Case "a" HexToBin = "1010"
Case "b" HexToBin = "1011"
Case "c" HexToBin = "1100"
Case "d" HexToBin = "1101"
Case "e" HexToBin = "1110"
Case "f" HexToBin = "1111"
Case Else MsgBox "输入错误"
End Select
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function IsExist(str,key) '功能:判断是否存在某字符串
'参数:1、类型:字符串,要判断的字符串;2、类型:字符串,关键字(正则表达式)
'返回值:类型:字符串,4位2进制数
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Pattern = key
retVal = regEx.Test(str)
If retVal Then
IsExist = True
else
IsExist = False
End If
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function GetKey(str,key,mode) '功能:搜索所有符合条件的字符串
'参数:1、类型:字符串,要搜索的字符串;2、类型:字符串,关键字(正则表达式);3、类型:boolean,是否全局模式搜索
'返回值:类型:字符串,匹配搜索条件的所有关键字,关键字之间为回车,组成的一个字符串
Dim regEx, retVal,Maches
Set regEx = New RegExp
regEx.IgnoreCase = False '不区分大小写
regEx.Global = mode '全局匹配,找到所有符合条件的关键字,false表示只找到第一个符合条件的关键字
regEx.Pattern = key
Set Matches = regEx.Execute(str)
For Each Match in Matches
GetKey = Match.value & chr(13) & chr(10) & GetKey
Next
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order(str) '功能:从大到小排列,不删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
dim a
a = split(str,chang_line,-1,1)
a_len = delNull(a)
i = 0
j = a_len
do
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)>a(i+1)) then
temp = a(i)
a(i) = a(i+1)
a(i+1) = temp
end if
i = i + 1
loop while(i < j)
Order = a(j) & chr(13) & chr(10) & Order
j = j -1
i = 0
loop while(j > 0)
Order = a(0) & chr(13) & chr(10) & Order
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function Order_onlyone(str) '功能:从大到小排列,但删除重复项
'参数:1、类型:字符串,要排列的字符串
'返回值:类型:字符串,按照从小到大的顺序排列好的字符串
chang_line = chr(13) & chr(10)
a = Order(str)
a = split(a,chang_line,-1,1)
a_len = UBound(a) - 1
i = 0
do
a(i) = Int(a(i))
a(i+1) = Int(a(i+1))
if(a(i)<>a(i+1)) then
temp = a(i) & chr(13) & chr(10) & temp
end if
i = i + 1
loop while(i < a_len)
temp = a(a_len) & chr(13) & chr(10) & temp
Order_onlyone = Order(temp)
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function LcArray(lc_type) '功能:根据线卡类型,得到ssp和物理接口的关系
'参数:1、类型:字符串,线卡类型
'返回值:类型:数组,返回线卡关系数组
dim ssp_phy_24sfp,ssp_phy_24gt,ssp_phy_48gt0,ssp_phy_48gt1,ssp_phy_3750_24,ssp_phy_5750_24
dim ssp_phy_6610_part1,ssp_phy_6610_part2,ssp_phy_6610_part3,ssp_phy_6610_part4
ssp_phy_24sfp = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_24gt = Array(3,4,1,2,7,8,5,6,11,12,9,10,15,16,13,14,19,20,17,18,23,24,21,22)
ssp_phy_48gt0 = Array(2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23)
ssp_phy_48gt1 = Array(26,25,28,27,30,29,32,31,34,33,36,35,38,37,40,39,43,44,41,42,47,48,45,46)
ssp_phy_3750_24 = Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
ssp_phy_5750_24 = Array(4,3,2,1,8,7,6,5,12,11,10,9,16,15,14,13,20,19,18,17,24,23,22,21)
ssp_phy_6610 = Array(6,5,4,3,2,1,12,11,10,9,8,7,18,17,16,15,14,13,24,23,22,21,20,19 )
Select Case lc_type
Case "1" LcArray = ssp_phy_24sfp
Case "2" LcArray = ssp_phy_24gt
Case "3" LcArray = ssp_phy_48gt0
Case "4" LcArray = ssp_phy_48gt1
Case "5" LcArray = ssp_phy_3750_24
Case "6" LcArray = ssp_phy_5750_24
Case "7" LcArray = ssp_phy_6610
Case Else MsgBox "请选择线卡类型!"
End Select
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function ApToMember(str,str_member) '功能:判断当前行是否存在ap口,存在转化为成员口
'参数:1、类型:字符串
'返回值:类型:字符串,所有成员口组成的字符串
'返回值:类型:字符串,成员口组成的字符串
if(IsExist(str,"Agd+")) then
chang_line = chr(13) & chr(10)
aps = GetKey(str,"Agd+",-1)
aps = split(aps,chang_line,-1,1)

aps_s = GetKey(str_member,"Agd+",-1)
aps_s = split(aps_s,chang_line,-1,1)
single_str = split(str_member,chang_line,-1,1)
single_str_length = delNull(single_str)
aps_s_length = delNull(aps_s)
aps_length = delNull(aps)
i = 0
j = 0
Do
x=0
do
If(aps(i)= aps_s(x)) Then
y = 0
Do
If(single_str(y) = aps_s(x)) Then
j = y
End If
If(single_str(y) = aps_s(x)) Then Exit do
y = y + 1
Loop While(y<=single_str_length) '这个循环为了找到匹配的ap口,在ap+成员字符串中的坐标
x = x + 1
do
If(Left(single_str(j),2)<>"Ag") Then
temp = single_str(j) & chang_line & temp
End If
j = j + 1
If(j>single_str_length) Then Exit do
Loop While((j<=single_str_length) And (Left(single_str(j),2)<>"Ag")) '从匹配的ap口开始,向下累加成员口到下一个ap口
Else
x = x + 1
End If
Loop While(x<=aps_s_length) '将一个要比较的ap口匹配完所有的ap口
i = i + 1
Loop While(i<=aps_length) '要比较的所有ap口依次匹配,至完全
ApToMember = temp
end if
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function delNull(str) 
str_length = UBound(str)
do
i = 0
if(str(str_length-i) = "") then
str_length = str_length - 1
i = i + 1
end If
loop while(str(str_length) = "") '去除后面的空字符 
delNull = str_length
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function phy_to_ssp(old_array) '功能:将ssp-〉物理口的映射,转化为物理口->ssp的映射
'参数:1、类型:数组
'返回值:类型:数组
Length = UBound(old_array)
new_array = old_array
i = 0
j = Length
do
do
if(new_array(i)>new_array(i+1)) then
temp = new_array(i)
new_array(i) = new_array(i+1)
new_array(i+1) = temp
end if
i = i + 1
loop while(i < j)
j = j -1
i = 0
loop while(j > 0)
i = 0
j = 0
do
Do
temp = new_array(j)
If(temp = old_array(i)) Then
new_array(j) = i + 1
If(temp = old_array(i)) then Exit do
End if
i = i + 1
Loop While(i<=Length)
j = j + 1
i = 0
Loop While(j<=Length)
phy_to_ssp = new_array
End Function
</
SCRIPT
>


<
SCRIPT
LANGUAGE
="VBScript"
>
...
Function ArrayLc(lc_type) '功能:根据线卡类型,得到物理接口->ssp的关系
'参数:1、类型:字符串,线卡类型
'返回值:类型:数组,返回线卡关系数组
dim ssp_phy_6610_part1,ssp_phy_6610_part2,ssp_phy_6610_part3,ssp_phy_6610_part4
ssp_phy_6610_part1 = Array(5,4,3,2,1,0)
ssp_phy_6610_part2 = Array(11,10,9,8,7,6)
ssp_phy_6610_part3 = Array(17,16,15,14,13,12)
ssp_phy_6610_part4 = Array(23,22,21,20,19,18)
if(slots_num.value<>"") then
lc_num = slots_num.value
if(lc_type="7") then
if(lc_num="1" or lc_num="4") then
ArrayLc = ssp_phy_6610_part3
elseif(lc_num="2" or lc_num="5") then
ArrayLc = ssp_phy_6610_part2
elseif(lc_num="6" or lc_num="8") then
ArrayLc = ssp_phy_6610_part1
elseif(lc_num="3" or lc_num="7") then
ArrayLc = ssp_phy_6610_part4
end if
end if
end if
End Function
</
SCRIPT
>
</
body
>

</
html
>
164

被折叠的 条评论
为什么被折叠?



