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

📄 pm5337_eos_eapo.tcl

📁 用于EOS芯片的驱动程序, 供参考 参考
💻 TCL
📖 第 1 页 / 共 4 页
字号:
    set i4 [string index $input 4] 
    set i5 [string index $input 5 ]
    set i6 [string index $input 6 ] 
    set i7 [string index $input 7 ]
    set i8 [string index $input 8 ] 
    set i9 [string index $input 9 ]
    set i10 [string index $input 10]   
    set i11 [string index $input 11]   
    set i12 [string index $input 12]  
    set i13 [string index $input 13] 
    set i14 [string index $input 14] 
    set i15 [string index $input 15]  
    set i16 [string index $input 16]     
    set i17 [string index $input 17]     
      
    set lsb "0x$i10$i11$i12$i13$i14$i15$i16$i17"
    set msb "0x$i2$i3$i4$i5$i6$i7$i8$i9"
  }    

  # When the mask in only on the lower 32 bit          
  if {$msbpos <= 31} {        
    set masksize [expr $msbpos - $lsbpos]             
    if {$masksize == 31} {      
      return $lsb
    }
    if {$masksize == 30 && $lsbpos == 0} {          
      set mask 0x7FFFFFFF      
      set output [dec2hex [expr $mask & $lsb]]            
      return $output
    }
    if {$masksize == 30 && $lsbpos == 1} {          
      set mask 0x7FFFFFFF
      set lsb [dec2hex [expr $lsb >> 1]]      
      set output [dec2hex [expr $mask & $lsb]]       
      return $output
    }    
    if {$masksize <= 29} {          
      set mask [dec2hex [expr int(pow(2,$masksize+1)) -1]]      
      set lsb [dec2hex [expr $lsb >> $lsbpos]]      
      set output [dec2hex [expr $mask & $lsb]]            
      return $output
    }
  } 
  
  # When the mask in only on the upper 32 bit
  if {$msbpos > 31 && $lsbpos > 31} {    
    set masksize [expr $msbpos - $lsbpos]             
    if {$masksize == 31} {      
      return $msb
    }
    if {$masksize == 30 & $lsbpos == 32} {
      set mask 0x7FFFFFFF      
      set output [dec2hex [expr $mask & $msb]]
      return $output
    }
    if {$masksize == 30 & $lsbpos == 33} {
      set mask 0xFFFFFFFE
      set msb [dec2hex [expr $msb >> 1 ]]
      set output [dec2hex [expr ($mask & $msb) >> 1]]
      return $output
    }
    if {$masksize <= 29} {
      set mask [dec2hex [expr int(pow(2,$masksize+1)) -1]]
      set msb [dec2hex [expr $msb >> ($lsbpos - 32)]]
      set output [dec2hex [expr $mask & $msb]]
      return $output
    }
  }   
    
  # When the mask is across both 32 bits windows
  
  if {$msbpos > 31 && $lsbpos <= 31} {    
    set uppermasksize [expr $msbpos - 32]    
    set lowermasksize [expr 31 - $lsbpos ]  
             
    if {$uppermasksize <= 29} {
      set uppermask [dec2hex [expr int(pow(2,$uppermasksize+1)) -1]]
    }
    if {$uppermasksize == 30} {
      set uppermask 0x7FFFFFFF
    }
    
    if {$lowermasksize <= 29} {
      set lowermask [dec2hex [expr int(pow(2,$lowermasksize+1)) -1]]
    }
    if {$lowermasksize == 30} {
      set lowermask 0x7FFFFFFF    
    }
                    
    set lsb [dec2hex [expr $lsb >> $lsbpos]]         
    set output_msb [dec2hex [expr $uppermask & $msb]]
    set output_lsb [dec2hex [expr $lowermask & $lsb]]            
    set output [dec2hex [expr ($output_msb << ($lowermasksize +1)) | $output_lsb]]
    return $output              
  }
}



#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_Traffic_Police
#
# 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.  Set to 0 for normal operation.
#
#               port - 0 to 7
#
#               res - minimum resolution 0 = 1 Mbps, 1 = 64kbps
#
#               multi - 0x0 = Traffic Policing is disabled
#                       0x1 = Traffic Policing rate is 1x res 
#                       0x2 = Traffic Policing rate is 2x res 
#                       0x3 = Traffic Policing rate is 3x res 
#                       ....
#                       0x3FF = Traffic Policing rate is 1023x res 
#
# NOTES: 
#
#------------------------------------------------------------------------------
proc EOS_Traffic_Police {devID port res multi} {

  if {$res == 0} {
    # Set minimum resolution to 1 Mbps
    admwr $devID 0xEA4F 0x1B052A06
  }
  if {$res == 1} {
    # Set minimum resolution to 64 kbps
    admwr $devID 0xEA4F 0x88013E00
  }
      
  # Setup Bucket Size
  admwr $devID 0xEA45 0x8000  
  
  # Map multiplier to POL_THRES_CHn  
  set multi9 [expr ($multi >> 0) & 0x1]
  set multi8 [expr ($multi >> 1) & 0x1] 
  set multi7 [expr ($multi >> 2) & 0x1]
  set multi6 [expr ($multi >> 3) & 0x1] 
  set multi5 [expr ($multi >> 4) & 0x1] 
  set multi4 [expr ($multi >> 5) & 0x1] 
  set multi3 [expr ($multi >> 6) & 0x1] 
  set multi2 [expr ($multi >> 7) & 0x1] 
  set multi1 [expr ($multi >> 8) & 0x1] 
  set multi0 [expr ($multi >> 9) & 0x1]   
  set thres [expr ($multi9 << 9)|($multi8 << 8)|($multi7 << 7)|($multi6 << 6)|($multi5 << 5)|($multi4 << 4)|($multi3 << 3)|($multi2 << 2)|($multi1 << 1)|$multi0]
    
  if {$port == 0} {  
    set pol_thres_ch1 $thres
    set initvalue [admrd $devID 0xEA50]
    set dvalue [expr ($initvalue & 0xFFFFFC00)|$pol_thres_ch1]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA50 $dvalue
  }  
  if {$port == 1} {
    set pol_thres_ch2 $thres
    set initvalue [admrd $devID 0xEA50]
    set dvalue [expr ($initvalue & 0xFFF003FF)|($pol_thres_ch2 << 10)]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA50 $dvalue
  }
  if {$port == 2} {
    set pol_thres_ch3 $thres
    set initvalue [admrd $devID 0xEA50]
    set dvalue [expr ($initvalue & 0xC00FFFFF)|($pol_thres_ch3 << 20)]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA50 $dvalue
  }
  if {$port == 3} {  
    set pol_thres_ch4 $thres
    set initvalue [admrd $devID 0xEA51]
    set dvalue [expr ($initvalue & 0xFFFFFC00)|$pol_thres_ch4]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA51 $dvalue
  }  
  if {$port == 4} {
    set pol_thres_ch5 $thres
    set initvalue [admrd $devID 0xEA51]
    set dvalue [expr ($initvalue & 0xFFF003FF)|($pol_thres_ch5 << 10)]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA51 $dvalue
  }
  if {$port == 5} {
    set pol_thres_ch6 $thres
    set initvalue [admrd $devID 0xEA51]
    set dvalue [expr ($initvalue & 0xC00FFFFF)|($pol_thres_ch6 << 20)]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA51 $dvalue
  }  
  if {$port == 6} {  
    set pol_thres_ch7 $thres
    set initvalue [admrd $devID 0xEA52]
    set dvalue [expr ($initvalue & 0xFFFFFC00)|$pol_thres_ch7]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA52 $dvalue
  }  
  if {$port == 7} {
    set pol_thres_ch8 $thres
    set initvalue [admrd $devID 0xEA52]
    set dvalue [expr ($initvalue & 0xFFF003FF)|($pol_thres_ch8 << 10)]            
    set dvalue [dec2hex $dvalue]   
    admwr $devID 0xEA52 $dvalue
  }
          
}




#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_EAPO_Extract_RAM_Example
#
# DESCRIPTION:	In this example, the Add EAPO-I block of port 1 is setup to send any 
#        packets that have a MAC destination address = 0xFFFFFFFFFFFF or 
#        0x111111111111 or 0x222222222222 or 0x333333333333.  Packet with other 
#        MAC destination address is transported
#		
# PARAMETERS:   devID - This parameter is used to specify the device 
#                       under configuration
#
# NOTES: 
#
#     1) Call EAPO_RAM_Rd to read the extracted packet
#------------------------------------------------------------------------------

proc EOS_EAPO_Extract_RAM_Example {devID} {

  source /usr/lib/cgi-bin/apps/tclscripts/PM5337_util.tcl  
  
  set dir 0x1
  
  ### 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)]]
  
  # Setup Header Filter 1 to monitor Destination Addr in the Add Port #1
  # Setup Header Filter 2 to monitor Source Addr in the Add Port #1
  # Note: in this example, only the Destination address is look at.
  
  #                           add port pos  mask 1       pos  mask 2
  EOS_T1_Filter_Config $devID 0x1 0x0 0x0 0xFFFFFFFFFFFF 0x6 0xFFFFFFFFFFFF
  
  # For example:
  
  # Setup Table 1 to extract packet with SA = 0xFFFFFFFFFFFF to RAM
  # Setup Table 1 to extract packet with SA = 0x111111111111 to RAM
  # Setup Table 1 to extract packet with SA = 0x222222222222 to RAM
  # Setup Table 1 to extract packet with SA = 0x333333333333 to RAM
  
  #                          add n HF1 MAC Addr (m=0) HF1 MAC Addr (m =1)
  EOS_T1_Table_Config $devID 0x1 1 0x0 0xFFFFFFFFFFFF 0x0 0x111111111111  
  #                          add n HF1 MAC Addr (m=0) HF1 MAC Addr (m =1)
  EOS_T1_Table_Config $devID 0x1 2 0x0 0x222222222222 0x0 0x333333333333
  
  # Setup Consequential Action RAM
  
  # 5-bit Matching Index generated by Table 1
  # n_m    5-bit index
  # 1_0    00000
  # 1_1    00001
  # 2_0    00010
  # 2_1    00011
  # ...
  # 15_1   11101
  
  # Since Table 2 is not enabled, the generated index will be 11110 (0x1E)
    
  #                     dir T1ind T2ind Ext_to_RAM
  CA_Table_Config $devID 0x1 0x0 0x1E 0x2
  CA_Table_Config $devID 0x1 0x1 0x1E 0x2
  CA_Table_Config $devID 0x1 0x2 0x1E 0x2
  CA_Table_Config $devID 0x1 0x3 0x1E 0x2
      
  # Enable Consequential Action RAM and Table 1
  admwrb $devID 0xEA00 31 1
  admwrb $devID 0xEA03 0 1
 
}

#------------------------------------------------------------------------------
# SCRIPT NAME:	EOS_T1_Filter_Config (Used in EOS_EAPO_Extract_RAM_Example)
#
# DESCRIPTION:	Setup Table 1 Filter
#		
# 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 - Mask starting position: 0x0 to 0x19
#
#               mask1 - 0x000000000000 to 0xFFFFFFFFFFFF
#
#               start_pos2 - Mask starting position: 0x0 to 0x19
#
#               mask2 - 0x000000000000 to 0xFFFFFFFFFFFF
#
# NOTES: 
#     1) Examples:
#	 start_pos = 0x0: Destination MAC Address
#        start_pos = 0x6: Source MAC Address
#        start_pos = 0xC: Length/Type 
#
#------------------------------------------------------------------------------
proc EOS_T1_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

⌨️ 快捷键说明

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