vbs让测试简单起来

       测多播很长时间了,从最开始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 
= ""
= 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+"
= 0
= 0

do 

= "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
= 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) = ""'去除后面的空字符
    
= 0
= 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)
= Order(str)
= split(a,chang_line,-1,1)
a_len 
= UBound(a) - 1

= 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 >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
< input  type ="Button"  NAME ="help"  value ="帮助"  align =right >
&nbsp;
< 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= 1then
                  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
= split(str,chang_line,-1,1)

a_len 
= delNull(a)
    
= 0
= 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)
= Order(str)
= split(a,chang_line,-1,1)
a_len 
= UBound(a) - 1

= 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 >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
< input  type ="Button"  NAME ="help"  value ="帮助"  align =right >
&nbsp;
< 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= 1then
                  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
= split(str,chang_line,-1,1)

a_len 
= delNull(a)
    
= 0
= 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)
= Order(str)
= split(a,chang_line,-1,1)
a_len 
= UBound(a) - 1

= 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
= 0
= 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)
= 0
= 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 >
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值