?? pm5337_eos_eapo.tcl
字號(hào):
#------------------------------------------------------------------------------
# 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)]]
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -