⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pm5337_eos_eapo.tcl

📁 用于EOS芯片的驱动程序, 供参考 参考
💻 TCL
📖 第 1 页 / 共 4 页
字号:
#------------------------------------------------------------------------------
# FILE NAME: PM5337_EOS_EAPO.tcl
#
# DESCRIPTION: 	This file includes the following procedures:
#		1) EOS_EtherType
#		2) EOS_Grooming_Demo
#               3) EOS_T3_Filter_Config
#               4) EOS_T3_Mapping_Config
#               5) EOS_Aggregation_Demo
#		6) EOS_Counter
#               7) EOS_Traffic_Police
#               8) EOS_EAPO_Extract_RAM_Example
#               9) EOS_T1_Filter_Config (Used in EOS_EAPO_Extract_RAM_Example)
#              10) EOS_T1_Table_Config (Used in EOS_EAPO_Extract_RAM_Example)
#              11) CA_Table_Config (Used in EOS_EAPO_Extract_RAM_Example)
#              12) EAPO_RAM_Rd
#              13) EOS_EAPO_Packet_Ins_Example
#
# NOTES:
#
# REVISION History:
# Preliminary 1 - Script created
# Released 2 - Added procedure 8) to 13)
# 
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_EtherType
#
# DESCRIPTION:	The procedure provides an example on how to configure the
#               EtherType header filter.  In this example, Header Filter 
#               Table 1, 2 and 3 are unused.  They are setup to pass packets
#               through.
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
#               dir - 0 (Drop direction), 
#                     1 (Add direction)
#
#               port - 0 (port 0), 1 (port 1), ... , 7 (port 7)
#
#               start_pos - Ether-type starting position: 0x0 to 0x19
#
#               mask - 0x000000000000 to 0xFFFFFFFFFFFF
#
#               value - 0x000000000000 to 0xFFFFFFFFFFFF
#
#               action - 0 (MATCH = pass through, MISMATCH = pass through)
#                        1 (MATCH = pass through, MISMATCH = drop)
#                        2 (MATCH = drop, MISMATCH = pass through)
#                        3 (MATCH = drop, MISMATCH = drop)
#
# NOTES: 
#     1) start_pos = 0x0: Destination MAC Address
#        start_pos = 0x6: Source MAC Address
#        start_pos = 0xC: Length/Type 
#
#     2) For example, to pass packet only when TYPE = 0x8100 on port# 0 
#        ADD direction enter:
#
#        EOS_EtherType 0 1 0 0xC 0xFFFF00000000 0x810000000000 1
#
#------------------------------------------------------------------------------
proc EOS_EtherType {devID dir port start_pos mask value action} {

  source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl  
  
  # Defining address for ingress or egress direction    
  set addr_0xE803 [dec2hex [expr 0xE803 + ($dir * 0x200)]]
  set addr_0xE804 [dec2hex [expr 0xE804 + ($dir * 0x200)]]
  set addr_0xE805 [dec2hex [expr 0xE805 + ($dir * 0x200)]]
  set addr_0xE806 [dec2hex [expr 0xE806 + ($dir * 0x200)]]
  set addr_0xE807 [dec2hex [expr 0xE807 + ($dir * 0x200)]]
  set addr_0xE808 [dec2hex [expr 0xE808 + ($dir * 0x200)]]
  set addr_0xE809 [dec2hex [expr 0xE809 + ($dir * 0x200)]]
  set addr_0xE80A [dec2hex [expr 0xE80A + ($dir * 0x200)]]
  set addr_0xE80B [dec2hex [expr 0xE80B + ($dir * 0x200)]]    
  
  # Temporarily disable Ether-type checking by setting INGPn_EC_EN to 0
  admwrb $devID $addr_0xE806 $port 0  
        
  # Configure ether-type header filter start position and mask 
  admwr $devID $addr_0xE807 [expr ($start_pos << 16)|[imask $mask 47 32]]
  admwr $devID $addr_0xE808 [imask $mask 31 0]  
  
  # Configure the expected header value  
  admwr $devID $addr_0xE809 [imask $value 47 32] ;# value [47:32]
  admwr $devID $addr_0xE80A [imask $value 31 0]  ;# value [31:0]
  
  # Configuration Ether-Type Consequential Action 
  if {$action == 0} {
    # (MATCH = pass through, MISMATCH = pass through)
    # Set Pn_CA_EC_T3[2:0] to 000b
    admwrb $devID $addr_0xE80B [expr 2 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 1 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 0 + ($port * 3)] 0
  }      
  if {$action == 1} {
    # (MATCH = pass through, MISMATCH = drop)
    # Set Pn_CA_EC_T3[2:0] to 010b    
    admwrb $devID $addr_0xE80B [expr 2 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 1 + ($port * 3)] 1
    admwrb $devID $addr_0xE80B [expr 0 + ($port * 3)] 0
  }
  if {$action == 2} {    
    # (MATCH = drop, MISMATCH = pass through)
    # Set Pn_CA_EC_T3[2:0] to 001b
    admwrb $devID $addr_0xE80B [expr 2 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 1 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 0 + ($port * 3)] 1
  }
  if {$action == 3} {
    # (MATCH = drop, MISMATCH = drop)
    # Set Pn_CA_EC_T3[2:0] to 011b
    admwrb $devID $addr_0xE80B [expr 2 + ($port * 3)] 0
    admwrb $devID $addr_0xE80B [expr 1 + ($port * 3)] 1
    admwrb $devID $addr_0xE80B [expr 0 + ($port * 3)] 1
  }
        
  # Disable Header Filter Table 1, 2, and 3
  admwr $devID $addr_0xE803 0x0
  admwr $devID $addr_0xE804 0x0
  admwr $devID $addr_0xE805 0x0
          
  # Enable Ether-type checking by setting INGPn_EC_EN to 1
  admwrb $devID $addr_0xE806 $port 1          
  
}

#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_Grooming_Demo
#
# DESCRIPTION:	The procedure provides an example on how to configure the
#               header filter 5/6 and table 3 to perform grooming.  In this example, 
#               Table 1, 2 and Ether-type Filter are unused.  They are setup 
#               to pass packets through.  
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
#               dir - 0 (Drop direction), 
#                     1 (Add direction)
#
# NOTE:
#      In this example:   
#
#      Packet with source MAC address A on VCG/Port 0 --> VCG/Port 0
#      Packet with source MAC address B on VCG/Port 0 --> VCG/Port 1
#      Packet with source MAC address C on VCG/Port 0 --> VCG/Port 2
#      Packet with source MAC address D on VCG/Port 0 --> VCG/Port 3
#      Packet with source MAC address E on VCG/Port 0 --> VCG/Port 4 
#      Packet with source MAC address F on VCG/Port 0 --> VCG/Port 5 
#      Packet with source MAC address G on VCG/Port 0 --> VCG/Port 6 
#      Packet with source MAC address H on VCG/Port 0 --> VCG/Port 7   
#
#------------------------------------------------------------------------------
proc EOS_Grooming_Demo {devID dir} {
            
  source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl  
  
  ### Defining source MAC address
  
  # Packet with source MAC address A on VCG/Port 0 --> VCG/Port 0
  # Packet with source MAC address B on VCG/Port 0 --> VCG/Port 1
  # Packet with source MAC address C on VCG/Port 0 --> VCG/Port 2
  # Packet with source MAC address D on VCG/Port 0 --> VCG/Port 3
  # Packet with source MAC address E on VCG/Port 0 --> VCG/Port 4 
  # Packet with source MAC address F on VCG/Port 0 --> VCG/Port 5 
  # Packet with source MAC address G on VCG/Port 0 --> VCG/Port 6 
  # Packet with source MAC address H on VCG/Port 0 --> VCG/Port 7 
    
  set src_addr_A 0x000000000000
  set src_addr_B 0x111111111111
  set src_addr_C 0x222222222222
  set src_addr_D 0x333333333333
  set src_addr_E 0x444444444444
  set src_addr_F 0x555555555555
  set src_addr_G 0x666666666666
  set src_addr_H 0x777777777777
  
  ### Defining address for ingress or egress direction ###     
  set addr_0xE803 [dec2hex [expr 0xE803 + ($dir * 0x200)]]
  set addr_0xE804 [dec2hex [expr 0xE804 + ($dir * 0x200)]] 
  set addr_0xE805 [dec2hex [expr 0xE805 + ($dir * 0x200)]]
  set addr_0xE806 [dec2hex [expr 0xE806 + ($dir * 0x200)]]
  set addr_0xE807 [dec2hex [expr 0xE807 + ($dir * 0x200)]]
  set addr_0xE808 [dec2hex [expr 0xE808 + ($dir * 0x200)]]
  set addr_0xE809 [dec2hex [expr 0xE809 + ($dir * 0x200)]]
  set addr_0xE80A [dec2hex [expr 0xE80A + ($dir * 0x200)]]
  set addr_0xE80B [dec2hex [expr 0xE80B + ($dir * 0x200)]]
  
  set addr_0xE869 [dec2hex [expr 0xE869 + ($dir * 0x200)]]
  set addr_0xE86A [dec2hex [expr 0xE86A + ($dir * 0x200)]]
  set addr_0xE86B [dec2hex [expr 0xE86B + ($dir * 0x200)]]
  set addr_0xE86C [dec2hex [expr 0xE86C + ($dir * 0x200)]]
  set addr_0xE86D [dec2hex [expr 0xE86D + ($dir * 0x200)]]
      
  ### Temporarily disable Table 3 header checking by setting INGPn_T3_EN to 0 ###
  admwrb $devID $addr_0xE805 0 0  
                    
  ### Configure header filters start position and mask ###
  EOS_T3_Filter_Config $devID $dir 0 0x6 0xFFFFFFFFFFFF 0x0 0x0
     
  ### Configure Table 3 filter value and configuration ###
  # n  m  | src  dst  SRC_MAC     header field
  #--------------------------------------------
  # 1  0  | 0x0  0x0  src_addr_A     5
  # 1  1  | 0x0  0x1  src_addr_B     5
  # 2  0  | 0x0  0x2  src_addr_C     5
  # 2  1  | 0x0  0x3  src_addr_D     5
  # 3  0  | 0x0  0x4  src_addr_E     5
  # 3  1  | 0x0  0x5  src_addr_F     5
  # 4  0  | 0x0  0x6  src_addr_G     5
  # 4  1  | 0x0  0x7  src_addr_H     5
  
  EOS_T3_Mapping_Config $devID $dir 1 0x0 0x0 $src_addr_A 0 0x0 0x1 $src_addr_B 0
  EOS_T3_Mapping_Config $devID $dir 2 0x0 0x2 $src_addr_C 0 0x0 0x3 $src_addr_D 0
  EOS_T3_Mapping_Config $devID $dir 3 0x0 0x4 $src_addr_E 0 0x0 0x5 $src_addr_F 0
  EOS_T3_Mapping_Config $devID $dir 4 0x0 0x6 $src_addr_G 0 0x0 0x7 $src_addr_H 0
      
  ### Disable Header Filter Table 1, 2, and Ether-type ###
  admwr $devID $addr_0xE803 0x0
  admwr $devID $addr_0xE804 0x0
  admwr $devID $addr_0xE806 0x0
          
  ### Enable Table 3 header filter checking by setting INGPn_T3_EN to 1 ###
  admwrb $devID $addr_0xE805 0 1          
  
}


#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_T3_Filter_Config (Used in EOS_Grooming)
#
# DESCRIPTION:	The procedure provides an example on how to setup the
#               Table header filter 5 and 6.  This procedure will be used in the
#               EOS_Grooming example
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
#               dir - 0 (Drop direction), 
#                     1 (Add direction)
#
#               port - 0 (port 0), 1 (port 1), ... , 7 (port 7)
#
#               start_pos1 - Ether-type starting position: 0x0 to 0x19
#
#               mask1 - 0x000000000000 to 0xFFFFFFFFFFFF
#
#               start_pos2 - Ether-type starting position: 0x0 to 0x19
#
#               mask2 - 0x000000000000 to 0xFFFFFFFFFFFF
#
# NOTES: 
#     1) start_pos = 0x0: Destination MAC Address
#        start_pos = 0x6: Source MAC Address
#        start_pos = 0xC: Length/Type 
#
#------------------------------------------------------------------------------
proc EOS_T3_Filter_Config {devID dir port start_pos1 mask1 start_pos2 mask2} {

  source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl  
  
  ### Defining address for ingress or egress direction ###
  set addr_0xE803 [dec2hex [expr 0xE803 + ($dir * 0x200)]]
  set addr_0xE804 [dec2hex [expr 0xE804 + ($dir * 0x200)]] 
  set addr_0xE805 [dec2hex [expr 0xE805 + ($dir * 0x200)]]
  set addr_0xE806 [dec2hex [expr 0xE806 + ($dir * 0x200)]]
  set addr_0xE807 [dec2hex [expr 0xE807 + ($dir * 0x200)]]
  set addr_0xE808 [dec2hex [expr 0xE808 + ($dir * 0x200)]]
  set addr_0xE809 [dec2hex [expr 0xE809 + ($dir * 0x200)]]
  set addr_0xE80A [dec2hex [expr 0xE80A + ($dir * 0x200)]]
  set addr_0xE80B [dec2hex [expr 0xE80B + ($dir * 0x200)]]
  
  set addr_0xE869 [dec2hex [expr 0xE869 + ($dir * 0x200)]]
  set addr_0xE86A [dec2hex [expr 0xE86A + ($dir * 0x200)]]
  set addr_0xE86B [dec2hex [expr 0xE86B + ($dir * 0x200)]]
  set addr_0xE86C [dec2hex [expr 0xE86C + ($dir * 0x200)]]
  set addr_0xE86D [dec2hex [expr 0xE86D + ($dir * 0x200)]]
           
  ### Configure header filters start position and mask ###
  # a) Write value to indirect data register
  # Bit 127 to 96 (IND_DATA3) <- imask2 [47:43] + start_pos2
  admwr $devID $addr_0xE869 [expr ($start_pos2 << 6)| [imask $mask2 47 43]] 	  
  # Bit 95 to 64 (IND_DATA2) <- imask2 [42:11]
  admwr $devID $addr_0xE86A [imask $mask2 42 11] 				  
  # Bit 63 to 32 (IND_DATA1) <- mask2[10:0] + startpos1 + mask1[47:32]  
  admwr $devID $addr_0xE86B [expr ([imask $mask2 10 0] << 21)|($start_pos1 << 16)|[imask $mask1 47 32]]   
  # Bit 31 to 0 (IND_DATA0) <- mask1[31:0]
  admwr $devID $addr_0xE86C [imask $mask1 31 0] 				
  
  # b) Write value to indirect address register
  set BUSY_ING 1
  set BUSY_EGR 0
  set RWB 0
  set IND_ADDR [expr 0x080 + ($port * 0x1)]
  set iaddr [expr ($BUSY_ING << 31)|($BUSY_EGR << 30)|($RWB << 29)|$IND_ADDR]
  set iaddr [dec2hex $iaddr]
  admwr $devID $addr_0xE86D $iaddr
  
  #c) Poll BUSY bit until low
  Poll_BUSY_Bit $devID $addr_0xE86D 31
             
}

#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_T3_Mapping_Config (Used in EOS_Grooming)
#
# DESCRIPTION:	The procedure provides an example on how to setup the
#               mapping on Table 3.  This procedure will be used in the
#               EOS_Grooming example
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
#               dir - 0 (Drop direction), 
#                     1 (Add direction)
#
#               index_n - 1 to 16
#
#               src1 - 0x0 to 0x7
#
#               dst1 - 0x0 to 0x7
#
#               value1 - The expected value: 0x000000000000 to 0xFFFFFFFFFFFF
#
#               hfindex1 - 0 (header field 5 is used), 1 (header field 6 is used)
#
#               src2 - 0x0 to 0x7
#
#               dst2 - 0x0 to 0x7
#
#               value2 - The expected value: 0x000000000000 to 0xFFFFFFFFFFFF
#
#               hfindex2 - 0 (header field 5 is used), 1 (header field 6 is used)
#
#------------------------------------------------------------------------------
proc EOS_T3_Mapping_Config {devID dir index_n src1 dst1 value1 hfindex1 src2 dst2 value2 hfindex2} {

  source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl  
  
  ### Defining address for ingress or egress direction ###
  set addr_0xE803 [dec2hex [expr 0xE803 + ($dir * 0x200)]]
  set addr_0xE804 [dec2hex [expr 0xE804 + ($dir * 0x200)]] 
  set addr_0xE805 [dec2hex [expr 0xE805 + ($dir * 0x200)]]
  set addr_0xE806 [dec2hex [expr 0xE806 + ($dir * 0x200)]]
  set addr_0xE807 [dec2hex [expr 0xE807 + ($dir * 0x200)]]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -