/* * Copyright (C) 2012 Realtek Semiconductor Corp. * All Rights Reserved. * * This program is the proprietary software of Realtek Semiconductor * Corporation and/or its licensors, and only be used, duplicated, * modified or distributed under the authorized license from Realtek. * * ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. */ #ifndef __RTK_RG_ASIC_APOLLOPROFB_H__ #define __RTK_RG_ASIC_APOLLOPROFB_H__ /* * Include Files */ #ifdef CONFIG_APOLLOPRO_FPGA #include <rtl_glue.h> // MUST BE included earlier than rtk_rg_struct.h #endif #include <common/rt_type.h> #include <common/rt_error.h> #include <rtk/l34.h> #include <rtk_rg_port.h> #include <rtk_rg_error.h> #include <rtk_rg_cpuReason.h> /* * Symbol Definition */ //#define RTL9602C_L34_HSB_WORD 10 // Table Size #ifdef CONFIG_APOLLOPRO_FPGA #define RTL9607C_TABLESIZE_FLOWSRAM 4096 #define RTL9607C_TABLESIZE_FLOWTCAM 4 #else #define RTL9607C_TABLESIZE_FLOWSRAM 4096 #define RTL9607C_TABLESIZE_FLOWTCAM 64 #endif #define RTL9607C_TABLESIZE_FLOWCAM 64 #define RTL9607C_TABLESIZE_FLOWTAG RTL9607C_TABLESIZE_FLOWSRAM #define RTL9607C_TABLESIZE_CAMTAG RTL9607C_TABLESIZE_FLOWCAM #define RTL9607C_TABLESIZE_INTF 16 #define RTL9607C_TABLESIZE_MACIND 256 #define RTL9607C_TABLESIZE_ETHERTYPE 8 #define RTL9607C_TABLESIZE_EXTPORT 32 #define RTL9607C_TABLESIZE_SHAREMTR 32 #define RTL9607C_TABLESIZE_EXTMBR 32 #define RTL9607C_TABLESIZE_SP2C 64 #define RTL9607C_TABLESIZE_WAL 32 // wan access limit #define RTL9607C_EXTRATAG_LISTMIN 1 #define RTL9607C_EXTRATAG_LISTMAX 7 #define RTL9607C_EXTRATAG_ACTIONS 8 #define FLOWTABLE_SRAM_SIZE 4096 #define FLOWTABLE_TCAM_SIZE 64 #define FLOWTABLE_DDR_8K (1 << 13) #define FLOWTABLE_DDR_16K (1 << 14) #define FLOWTABLE_DDR_32K (1 << 15) #define LUTTABLE_SRAM_SIZE 2048 #define LUTTABLE_BCAM_SIZE 64 #define LUT_BC_IDX 0xffe #define FLOW_V6HASHADDR_MC_BIT 0x80000000 #define FLOW_V4ADDR_MC_LO_BOUND 0xe0000000 #define FLOW_V4ADDR_MC_UP_BOUND 0xf0000000 #define RTK_RG_MAC_PORT_ALLCPUMASK ((1<<RTK_RG_MAC_PORT_SLAVECPU)|(1<<RTK_RG_MAC_PORT_MASTERCPU_CORE0)|(1<<RTK_RG_MAC_PORT_MASTERCPU_CORE1)) #define CTTLINIT 7 // cache entry time-to-live #define TRAPPRI_FLOWMISSINIT 1 // trap priority when flow miss #define DDRMODE_VALIDTBL_STARTPOSITION 512 // shared with traffic table /* * Data Declaration */ /* flow-based check state */ typedef enum rtk_rg_flowCheckType_s { FB_FLOW_CHECK_PATH12_TOS = 0, FB_FLOW_CHECK_PATH34_TOS, FB_FLOW_CHECK_PATH5_TOS, FB_FLOW_CHECK_PATH6_TOS, FB_FLOW_CHECK_PATH12_PROTOCOL, FB_FLOW_CHECK_PATH6_PROTOCOL, FB_FLOW_CHECK_PATH12_SPA, FB_FLOW_CHECK_PATH12_STREAM_IDX, FB_FLOW_CHECK_PATH6_SMAC_IDX, FB_FLOW_CHECK_PATH6_DMAC_IDX, FB_FLOW_CHECK_PATH6_SIP, FB_FLOW_CHECK_PATH6_DIP, FB_FLOW_CHECK_PATH6_SPORT, FB_FLOW_CHECK_PATH6_DPORT, FB_FLOW_CHECK_PATH6_GRE_CALL_ID, FB_FLOW_CHECK_PATH6_L2TP_TUNNEL_ID, FB_FLOW_CHECK_PATH6_L2TP_SID, FB_FLOW_CHECK_END }rtk_rg_flowCheckType_t; /* flow-based global state */ typedef enum rtk_rg_asic_globalStateType_s { FB_GLOBAL_STATE_START = 0, FB_GLOBAL_TTL_1 = FB_GLOBAL_STATE_START, FB_GLOBAL_TRAP_TCP_SYN_FIN_REST, FB_GLOBAL_TRAP_TCP_SYN_ACK, FB_GLOBAL_TRAP_FRAGMENT, FB_GLOBAL_L3_CS_CHK, FB_GLOBAL_L4_CS_CHK, FB_GLOBAL_PATH12_SKIP_CVID, FB_GLOBAL_PATH34_UCBC_SKIP_CVID, FB_GLOBAL_PATH34_MC_SKIP_CVID, FB_GLOBAL_PATH5_SKIP_CVID, FB_GLOBAL_PATH6_SKIP_CVID, FB_GLOBAL_PATH12_SKIP_SVID, FB_GLOBAL_PATH34_UCBC_SKIP_SVID, FB_GLOBAL_PATH34_MC_SKIP_SVID, FB_GLOBAL_PATH5_SKIP_SVID, FB_GLOBAL_PATH6_SKIP_SVID, FB_GLOBAL_PATH34_SKIP_DA, FB_GLOBAL_L2_FLOW_LOOKUP_BY_MAC, FB_GLOBAL_CMP_TOS, FB_GLOBAL_STATE_END }rtk_rg_asic_globalStateType_t; typedef enum rtk_rg_asic_pathValue_s { FB_PATH_12 = 0, FB_PATH_34 = 1, FB_PATH_5 = 2, FB_PATH_6 = 3, }rtk_rg_asic_pathValue_t; /* flow-based mode control */ typedef enum rtk_rg_asic_fbModeCtrl_s { FB_MODE_RST_VLD, FB_MODE_RST_TRF, FB_MODE_FB_MOD, }rtk_rg_asic_fbModeCtrl_t; typedef enum rtk_rg_asic_fbMode_s { FB_MODE_4K = 0, FB_MODE_8K = 1, FB_MODE_16K = 2, FB_MODE_32K = 3, }rtk_rg_asic_fbMode_t; typedef enum rtk_rg_asic_preHashPtn_s { FB_PREHASH_PTN_SPORT = 0, FB_PREHASH_PTN_DPORT, FB_PREHASH_PTN_SIP, FB_PREHASH_PTN_DIP, FB_PREHASH_PTN_END, }rtk_rg_asic_preHashPtn_t; /* flow-based dual header used registers */ typedef enum rtk_rg_asic_dualHdrInfo_s { FB_DUALHDR_GRESEQ = 0, FB_DUALHDR_GREACK, FB_DUALHDR_OUTER_IPV4ID, FB_DUALHDR_END, }rtk_rg_asic_dualHdrInfo_t; /* flow-based forwarding action */ typedef enum rtk_rg_asic_forwardAction_s { FB_ACTION_FORWARD = 0, FB_ACTION_TRAP2CPU, FB_ACTION_DROP, FB_ACTION_END }rtk_rg_asic_forwardAction_t; /* flow-based pppoe action */ typedef enum rtk_rg_asic_netifpppoeAct_e { FB_NETIFPPPOE_ACT_KEEP = 0, //tagif=1: keep; tagif=0: keep FB_NETIFPPPOE_ACT_ADD, // tagif=1: keep; tagif=0: add FB_NETIFPPPOE_ACT_MODIFY, // tagif=1: modify; tagif=0: keep FB_NETIFPPPOE_ACT_REMOVE, // tagif=1: remove; tagif=0: keep FB_NETIFPPPOE_ACT_END } rtk_rg_asic_netifpppoeAct_t; typedef enum rtk_rg_asic_extraTagAct_type_e { FB_EXTG_ACTBIT_NOACTION=0, //no-more action FB_EXTG_ACTBIT_1, //extra tag srcaddr_offset and len FB_EXTG_ACTBIT_2, //ethertype FB_EXTG_ACTBIT_3, //HSB.L2LEN + VALUE FB_EXTG_ACTBIT_4, //Gre FB_EXTG_ACTBIT_5, //offload l3 chksum FB_EXTG_ACTBIT_6, //offload l4 chksum }rtk_rg_asic_extraTagAct_type_t; /* flow-based table type for reset */ typedef enum rtk_rg_asic_resetTableType_s { FB_RST_IF_TBL = 1<<0, FB_RST_ETHER_TYPE = 1<<1, FB_RST_EXT_PMASK_TYPE = 1<<3, FB_RST_EXT_WAL_TYPE = 1<<4, FB_RST_FLOW_TBL = 1<<8, FB_RST_CAM_TBL = 1<<9, FB_RST_MAC_INDEX_TBL = 1<<10, FB_RST_TCAM_TBL = 1<<12, FB_RST_TRAFFIC_TBL, FB_RST_VLAN_TBL, FB_RST_VALID_TBL, FB_RST_ALL, FB_RST_VIR_MAC, FB_RST_END }rtk_rg_asic_resetTableType_t; typedef enum rtk_rg_asic_cacheCtrl_sysCmdCode_s { FB_CC_CMD_INVFLOW = 1, FB_CC_CMD_ADDFLOW, FB_CC_CMD_ULCKALL, FB_CC_CMD_ULCKFLOW, FB_CC_CMD_READFLOW, FB_CC_CMD_UPDFLOW, FB_CC_CMD_CHKALL, FB_CC_CMD_END }rtk_rg_asic_cacheCtrl_sysCmdCode_t; typedef enum rtk_rg_asic_cacheCtrl_faultRsn_s { FB_CC_FAULT_NONE=0, FB_CC_FAULT_CMD, FB_CC_FAULT_GRANT, FB_CC_FAULT_DATA, FB_CC_FAULT_UNKNOWN, }rtk_rg_asic_cacheCtrl_faultRsn_t; typedef enum rtk_rg_asic_cacheCtrl_ctrllerSta_s { FB_CC_STA_INIT=0, FB_CC_STA_IDLE, FB_CC_STA_LOOKUP, FB_CC_STA_EXECMD, }rtk_rg_asic_cacheCtrl_ctrllerSta_t; typedef enum rtk_rg_asic_cacheCtrl_globalCtrlType_s { FB_CC_GLOBAL_STATE_START = 0, FB_CC_GLOBAL_CACHE_EN = FB_CC_GLOBAL_STATE_START, FB_CC_GLOBAL_CAM_EN, FB_CC_GLOBAL_FLOW_VALID_EN, FB_CC_GLOBAL_CAM_TO_CACHE_EN, FB_CC_GLOBAL_BUS_ALIGN, FB_CC_GLOBAL_TAG_CHK, FB_CC_GLOBAL_END, }rtk_rg_asic_cacheCtrl_globalCtrlType_t; typedef enum rtk_rg_asic_cacheCtrl_systemCmd_s { FB_CC_SYSTEMCMD_INVALIDATE, FB_CC_SYSTEMCMD_ADD, FB_CC_SYSTEMCMD_UNLOCKALL, FB_CC_SYSTEMCMD_UNLOCKFLW, FB_CC_SYSTEMCMD_READ, FB_CC_SYSTEMCMD_UPDATE, FB_CC_SYSTEMCMD_CHECKALL, }rtk_rg_asic_cacheCtrl_systemCmd_t; /* the return code of system command INVALIDATE */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeInv_s { FB_CC_INVSTA_SUCCESS_CACHE = 0x00, FB_CC_INVSTA_SUCCESS_CAM = 0x01, FB_CC_INVSTA_WARNING_BOTHHIT = 0x20, FB_CC_INVSTA_WARNING_BOTHMISS = 0x40, }rtk_rg_asic_cacheCtrl_rtnCodeInv_t; /* the return code of system command ADD */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeAdd_s { FB_CC_ADDSTA_SUCCESS_CACHE = 0x00, FB_CC_ADDSTA_SUCCESS_CAM = 0x01, FB_CC_ADDSTA_SUCCESS_LOWPRI = 0x02, // Flow is not added into cache or cam because of lower priority. FB_CC_ADDSTA_WARNING_BOTHHIT = 0x20, FB_CC_ADDSTA_WARNING_CACHEEXIST = 0x40, // do replace FB_CC_ADDSTA_WARNING_CAMEXIST = 0x41, // do replace FB_CC_ADDSTA_WARNING_PARAMERR = 0x80, }rtk_rg_asic_cacheCtrl_rtnCodeAdd_t; /* the return code of system command UNLOCKALL */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeUlckAll_s { FB_CC_ULCKALLSTA_SUCCESS_DONE = 0x00, FB_CC_ULCKALLSTA_WARNING_ERR = 0x80, }rtk_rg_asic_cacheCtrl_rtnCodeUlckAll_t; /* the return code of system command UNLOCKFLW */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeUlck_s { FB_CC_ULCKSTA_SUCCESS_CACHE = 0x00, FB_CC_ULCKSTA_SUCCESS_CAM = 0x01, FB_CC_ULCKSTA_WARNING_BOTHHIT = 0x20, FB_CC_ULCKSTA_WARNING_BOTHMISS = 0x40, FB_CC_ULCKSTA_WARNING_CACHEUNLCK = 0x41, FB_CC_ULCKSTA_WARNING_CAMUNLCK = 0x42, }rtk_rg_asic_cacheCtrl_rtnCodeUlck_t; /* the return code of system command READ */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeRead_s { FB_CC_READSTA_SUCCESS_CACHE = 0x00, FB_CC_READSTA_SUCCESS_CAM = 0x01, FB_CC_READSTA_WARNING_BOTHHIT = 0x20, // read cache only FB_CC_READSTA_WARNING_BOTHMISS = 0x40, }rtk_rg_asic_cacheCtrl_rtnCodeRead_t; /* the return code of system command UPDATE */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeUpd_s { FB_CC_UPDSTA_SUCCESS_INVFLW_TO_CACHE = 0x00, // invalid flow in main memory FB_CC_UPDSTA_SUCCESS_INVFLW_TO_CAM = 0x01, FB_CC_UPDSTA_SUCCESS_INVFLW_BOTHMISS = 0x02, FB_CC_UPDSTA_SUCCESS_VALFLW_TO_CACHE = 0x03, // valid flow in main memory FB_CC_UPDSTA_SUCCESS_VALFLW_TO_CAM = 0x04, FB_CC_UPDSTA_SUCCESS_VALFLW_LOWPRI = 0x05, // flow is not added into cache or cam because of lower priority FB_CC_UPDSTA_WARNING_VALFLW_BOTHHIT = 0x20, FB_CC_UPDSTA_WARNING_INVFLW_BOTHHIT = 0x21, }rtk_rg_asic_cacheCtrl_rtnCodeUpd_t; /* the return code of system command CHECKALL */ typedef enum rtk_rg_asic_cacheCtrl_rtnCodeChkAll_s { FB_CC_CHKALLSTA_SUCCESS_DONE = 0x00, FB_CC_CHKALLSTA_WARNING_ERR = 0x80, }rtk_rg_asic_cacheCtrl_rtnCodeChkAll_t; typedef enum rtk_rg_asic_inprotocol_type_e { FB_INPROTOCOL_ETHTBL_0 = 0, FB_INPROTOCOL_ETHTBL_1, FB_INPROTOCOL_ETHTBL_2, FB_INPROTOCOL_ETHTBL_3, FB_INPROTOCOL_ETHTBL_4, FB_INPROTOCOL_ETHTBL_5, FB_INPROTOCOL_ETHTBL_6, FB_INPROTOCOL_RESERVED, FB_INPROTOCOL_INNER_IPV4 = 8, FB_INPROTOCOL_INNER_IPV6 = 9, FB_INPROTOCOL_OUTER_0800 = 10, FB_INPROTOCOL_OUTER_8863 = 11, FB_INPROTOCOL_OUTER_8864 = 12, FB_INPROTOCOL_OUTER_86DD = 13, FB_INPROTOCOL_OUTER_PPPOE = 14, FB_INPROTOCOL_ALL_ACCEPT = 15, }rtk_rg_asic_inprotocol_type_t; typedef enum rtk_rg_asic_pkt_type_e { FB_PKTTYPE_RESERVED = 0, FB_PKTTYPE_MC = 1, FB_PKTTYPE_UC = 2, FB_PKTTYPE_BC = 3, }rtk_rg_asic_pkt_type_t; /* L34 HSB data */ typedef struct rtk_rg_asic_hsb_entry_s { uint32 OUT_DPORT:16; uint32 OUT_SPORT:16; uint32 OUT_L4_PTC:1; uint32 OUT_L4_TYPE:1; uint32 OUT_IPMF:1; uint32 OUT_TOS:8; uint32 L2_LEN_DIFF:10; uint32 GRE_SEQ:32; uint32 L2TP_ID:16; uint32 L2TP_SESSION:16; uint32 L2TP:1; uint32 GRE:1; uint32 UDP_NOCS:1; uint32 TCP_FLAG:4; uint32 DPORT:16; uint32 SPORT:16; uint32 L4_CSOK:1; uint32 L4_PTC:1; uint32 L4_TYPE:1; uint32 DIP_HSH:32; uint32 SIP_HSH:32; uint32 DIP_V4:32; uint32 SIP_V4:32; uint32 IPV6_OUT:1; uint32 L3_CSOK:1; uint32 IPMF:1; uint32 IP_OPTION:1; uint32 TTL_ST:1; uint32 TOS:8; uint32 IPV4_6:1; uint32 IP:1; uint32 DUAL_FAIL:1; uint32 DUAL_HDR:1; uint32 L2_LEN:14; uint32 SA_IDX:12; uint32 DA_IDX:12; uint32 PPPOE_SID:16; uint32 SVLAN_ID:12; uint32 CVLAN_ID:12; uint32 PPPOE_IF:1; uint32 STAG_IF:1; uint32 CTAG_IF:1; uint32 ETH_TYPE:16; uint32 STM_IDX:7; uint32 SPA_EXT:3; uint32 SPA:4; uint32 GMAC_CHK:1; uint32 PKT_TYPE:2; }rtk_rg_asic_hsb_entry_t; /* L34 HSA data */ typedef struct rtk_rg_asic_hsa_entry_s { /* Non Path5 */ uint32 S2_SMAC_T:1; uint32 S2_EXTP_MASK:18; uint32 S2_PMASK:11; uint32 S2_EX_TAG_IDX:3; uint32 S2_PP_SID:16; uint32 S2_PP_ACT:1; uint32 S2_O_IF_IDX:4; uint32 S2_USER_PRI:3; uint32 S2_USER_PRI_ACT:1; uint32 S2_DSCP:6; uint32 S2_DSCP_ACT:1; uint32 S2_SPRI:3; uint32 S2_SVID:12; uint32 S2_EGS_SVID_ACT:1; uint32 S2_SPRI_ACT:1; uint32 S2_SVID_ACT:1; uint32 S2_STAG_ACT:1; uint32 S2_VID2S_ACT:1; uint32 S2_CPRI:3; uint32 S2_CVID:12; uint32 S2_EGS_CVID_ACT:1; uint32 S2_CPRI_ACT:1; uint32 S2_CVID_ACT:1; uint32 S2_CTAG_ACT:1; uint32 S2_VID2C_ACT:1; uint32 S2_ACT:1; /* Path5 */ uint32 S1_L4_CS:16; uint32 S1_L3_CS:16; uint32 S1_PORT:16; uint32 S1_IP:32; uint32 S1_L4_DIR:1; uint32 S1_L4_ACT:1; /* Shared Data for Path1~5 */ uint32 S1_P5:1; uint32 S1_SMAC_T:1; uint32 S1_EXTP_MASK:18; uint32 S1_PMASK:11; uint32 S1_EX_TAG_IDX:3; uint32 S1_PP_SID:16; uint32 S1_PP_ACT:1; uint32 S1_O_IF_IDX:4; uint32 S1_USER_PRI:3; uint32 S1_USER_PRI_ACT:1; uint32 S1_DSCP:6; uint32 S1_DSCP_ACT:1; uint32 S1_SPRI:3; uint32 S1_SVID:12; uint32 S1_EGS_SVID_ACT:1; uint32 S1_SPRI_ACT:1; uint32 S1_SVID_ACT:1; uint32 S1_STAG_ACT:1; uint32 S1_VID2S_ACT:1; uint32 S1_CPRI:3; uint32 S1_CVID:12; uint32 S1_EGS_CVID_ACT:1; uint32 S1_CPRI_ACT:1; uint32 S1_CVID_ACT:1; uint32 S1_CTAG_ACT:1; uint32 S1_VID2C_ACT:1; uint32 HSA_DMAC_IDX:12; uint32 HSA_DMAC_T:1; uint32 HSA_STREAM_IDX:7; uint32 HSA_STREAM_ACT:1; uint32 HSA_UC_LUT_LUP:1; uint32 HSA_I_IF_IDX:4; uint32 HSA_PKT_TYPE:2; uint32 HSA_HIT_DUAL:1; uint32 HSA_ACT_DROP:1; uint32 HSA_ACT_TRAP:1; uint32 HSA_ACT:2; /* Trap/Drop */ uint32 HSA_HID:15; uint32 HSA_HID_VLD:1; uint32 HSA_PRI:3; uint32 HSA_PRI_EN:1; uint32 HSA_RSN:6; }rtk_rg_asic_hsa_entry_t; typedef enum rtk_rg_out_egress_port_to_vid_act_e { FB_ACT_NONE = 0, FB_ACT_SP2C = 1, FB_ACT_SP2S = 2, FB_ACT_CP2C = 3, FB_ACT_XP2X_MAX, }rtk_rg_out_egress_port_to_vid_act_t; /* flow-based table - for path 1 */ typedef struct rtk_rg_asic_path1_entry_s { #ifdef _LITTLE_ENDIAN /* word 0 */ uint32 valid:1; uint32 out_dmac_trans:1; uint32 in_path:2; uint32 in_intf_idx:4; uint32 in_out_stream_idx_check_act:1; uint32 in_multiple_act:1; uint32 out_share_meter_act:1; uint32 out_share_meter_idx:5; uint32 in_spa_check:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 out_intf_idx:4; uint32 in_tos:8; /* word 1 */ uint32 in_protocol:4; uint32 in_smac_lut_idx:12; uint32 reserved1:4; uint32 in_dmac_lut_idx:12; /* word 2 */ uint32 reserved2:4; uint32 in_svlan_id:12; uint32 reserved3:4; uint32 in_cvlan_id:12; /* word 3 */ uint32 reserved4:4; uint32 in_spa:4; uint32 reserved5:5; uint32 in_ext_spa:3; uint32 in_pppoe_sid:16; /* word 4 */ uint32 out_dmac_idx:8; uint32 out_svid_format_act:1; uint32 out_user_priority:3; uint32 out_cvid_format_act:1; uint32 out_extra_tag_index:3; uint32 out_ext_portmask_idx:5; uint32 out_portmask:11; /* word 5 */ uint32 out_spri_format_act:1; uint32 out_spri:3; uint32 out_svlan_id:12; uint32 out_cpri_format_act:1; uint32 out_cpri:3; uint32 out_cvlan_id:12; /* word 6 */ uint32 in_pppoe_sid_check:1; uint32 in_out_stream_idx:7; uint32 out_multiple_act:1; uint32 out_dscp_act:1; uint32 out_dscp:6; uint32 out_drop:1; uint32 out_egress_cvid_act:1; uint32 out_egress_svid_act:1; uint32 out_ctag_format_act:1; uint32 out_stag_format_act:1; uint32 out_user_pri_act:1; uint32 out_egress_port_to_vid_act:2; //b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_smac_trans:1; uint32 out_uc_lut_lookup:1; uint32 reserved6:1; uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 out_intf_idx:4; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_spa_check:1; uint32 out_share_meter_idx:5; uint32 out_share_meter_act:1; uint32 in_multiple_act:1; uint32 in_out_stream_idx_check_act:1; uint32 in_intf_idx:4; uint32 in_path:2; uint32 out_dmac_trans:1; uint32 valid:1; /* word 1 */ uint32 in_dmac_lut_idx:12; uint32 reserved1:4; uint32 in_smac_lut_idx:12; uint32 in_protocol:4; /* word 2 */ uint32 in_cvlan_id:12; uint32 reserved3:4; uint32 in_svlan_id:12; uint32 reserved2:4; /* word 3 */ uint32 in_pppoe_sid:16; uint32 in_ext_spa:3; uint32 reserved5:5; uint32 in_spa:4; uint32 reserved4:4; /* word 4 */ uint32 out_portmask:11; uint32 out_ext_portmask_idx:5; uint32 out_extra_tag_index:3; uint32 out_cvid_format_act:1; uint32 out_user_priority:3; uint32 out_svid_format_act:1; uint32 out_dmac_idx:8; /* word 5 */ uint32 out_cvlan_id:12; uint32 out_cpri:3; uint32 out_cpri_format_act:1; uint32 out_svlan_id:12; uint32 out_spri:3; uint32 out_spri_format_act:1; /* word 6 */ uint32 reserved7:3; uint32 lock:1; uint32 in_tos_check:1; uint32 reserved6:1; uint32 out_uc_lut_lookup:1; uint32 out_smac_trans:1; uint32 out_egress_port_to_vid_act:2; //b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_user_pri_act:1; uint32 out_stag_format_act:1; uint32 out_ctag_format_act:1; uint32 out_egress_svid_act:1; uint32 out_egress_cvid_act:1; uint32 out_drop:1; uint32 out_dscp:6; uint32 out_dscp_act:1; uint32 out_multiple_act:1; uint32 in_out_stream_idx:7; uint32 in_pppoe_sid_check:1; #endif }rtk_rg_asic_path1_entry_t; /* flow-based table - for path 2 */ typedef struct rtk_rg_asic_path2_entry_s { #ifdef _LITTLE_ENDIAN /* word 0 */ uint32 valid:1; uint32 reserved1:1; uint32 in_path:2; uint32 reserved2:4; uint32 in_stream_idx_check:1; uint32 in_multiple_act:1; uint32 reserved3:6; uint32 in_spa_check:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 out_intf_idx:4; uint32 in_tos:8; /* word 1 */ uint32 in_protocol:4; uint32 in_smac_lut_idx:12; uint32 reserved4:4; uint32 in_dmac_lut_idx:12; /* word 2 */ uint32 reserved5:4; uint32 in_svlan_id:12; uint32 reserved6:4; uint32 in_cvlan_id:12; /* word 3 */ uint32 reserved7:4; uint32 in_spa:4; uint32 reserved8:5; uint32 in_ext_spa:3; uint32 in_pppoe_sid:16; /* word 4 */ uint32 reserved9:8; uint32 out_svid_format_act:1; uint32 out_user_priority:3; uint32 out_cvid_format_act:1; uint32 reserved10:3; uint32 out_ext_portmask_idx:5; uint32 out_portmask:11; /* word 5 */ uint32 out_spri_format_act:1; uint32 out_spri:3; uint32 out_svlan_id:12; uint32 out_cpri_format_act:1; uint32 out_cpri:3; uint32 out_cvlan_id:12; /* word 6 */ uint32 in_pppoe_sid_check:1; uint32 in_stream_idx:7; uint32 reserved11:1; uint32 out_dscp_act:1; uint32 out_dscp:6; uint32 reserved12:1; uint32 out_egress_cvid_act:1; uint32 out_egress_svid_act:1; uint32 out_ctag_format_act:1; uint32 out_stag_format_act:1; uint32 out_user_pri_act:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_smac_trans:1; uint32 reserved13:2; uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 out_intf_idx:4; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_spa_check:1; uint32 reserved3:6; uint32 in_multiple_act:1; uint32 in_stream_idx_check:1; uint32 reserved2:4; uint32 in_path:2; uint32 reserved1:1; uint32 valid:1; /* word 1 */ uint32 in_dmac_lut_idx:12; uint32 reserved4:4; uint32 in_smac_lut_idx:12; uint32 in_protocol:4; /* word 2 */ uint32 in_cvlan_id:12; uint32 reserved6:4; uint32 in_svlan_id:12; uint32 reserved5:4; /* word 3 */ uint32 in_pppoe_sid:16; uint32 in_ext_spa:3; uint32 reserved8:5; uint32 in_spa:4; uint32 reserved7:4; /* word 4 */ uint32 out_portmask:11; uint32 out_ext_portmask_idx:5; uint32 reserved10:3; uint32 out_cvid_format_act:1; uint32 out_user_priority:3; uint32 out_svid_format_act:1; uint32 reserved9:8; /* word 5 */ uint32 out_cvlan_id:12; uint32 out_cpri:3; uint32 out_cpri_format_act:1; uint32 out_svlan_id:12; uint32 out_spri:3; uint32 out_spri_format_act:1; /* word 6 */ uint32 reserved14:3; uint32 lock:1; uint32 in_tos_check:1; uint32 reserved13:2; uint32 out_smac_trans:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_user_pri_act:1; uint32 out_stag_format_act:1; uint32 out_ctag_format_act:1; uint32 out_egress_svid_act:1; uint32 out_egress_cvid_act:1; uint32 reserved12:1; uint32 out_dscp:6; uint32 out_dscp_act:1; uint32 reserved11:1; uint32 in_stream_idx:7; uint32 in_pppoe_sid_check:1; #endif }rtk_rg_asic_path2_entry_t; /* flow-based table - for path 3 */ typedef struct rtk_rg_asic_path3_entry_s { #ifdef _LITTLE_ENDIAN /* word 0 */ uint32 valid:1; uint32 out_dmac_trans:1; uint32 in_path:2; uint32 in_intf_idx:4; uint32 out_stream_idx_act:1; uint32 in_multiple_act:1; uint32 out_share_meter_act:1; uint32 out_share_meter_idx:5; uint32 in_ipv4_or_ipv6:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 out_intf_idx:4; uint32 in_tos:8; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; /* word 3 */ uint32 in_l4_src_port:16; uint32 in_l4_dst_port:16; /* word 4 */ uint32 out_dmac_idx:8; uint32 out_svid_format_act:1; uint32 out_user_priority:3; uint32 out_cvid_format_act:1; uint32 out_extra_tag_index:3; uint32 out_ext_portmask_idx:5; uint32 out_portmask:11; /* word 5 */ uint32 out_spri_format_act:1; uint32 out_spri:3; uint32 out_svlan_id:12; uint32 out_cpri_format_act:1; uint32 out_cpri:3; uint32 out_cvlan_id:12; /* word 6 */ uint32 in_pppoe_sid_check:1; uint32 out_stream_idx:7; uint32 out_multiple_act:1; uint32 out_dscp_act:1; uint32 out_dscp:6; uint32 out_drop:1; uint32 out_egress_cvid_act:1; uint32 out_egress_svid_act:1; uint32 out_ctag_format_act:1; uint32 out_stag_format_act:1; uint32 out_user_pri_act:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_smac_trans:1; uint32 out_uc_lut_lookup:1; uint32 in_l4proto:1; uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 out_intf_idx:4; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_ipv4_or_ipv6:1; uint32 out_share_meter_idx:5; uint32 out_share_meter_act:1; uint32 in_multiple_act:1; uint32 out_stream_idx_act:1; uint8 in_intf_idx:4; uint8 in_path:2; uint8 out_dmac_trans:1; uint8 valid:1; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; /* word 3 */ uint32 in_l4_dst_port:16; uint32 in_l4_src_port:16; /* word 4 */ uint32 out_portmask:11; uint32 out_ext_portmask_idx:5; uint32 out_extra_tag_index:3; uint32 out_cvid_format_act:1; uint32 out_user_priority:3; uint32 out_svid_format_act:1; uint32 out_dmac_idx:8; /* word 5 */ uint32 out_cvlan_id:12; uint32 out_cpri:3; uint32 out_cpri_format_act:1; uint32 out_svlan_id:12; uint32 out_spri:3; uint32 out_spri_format_act:1; /* word 6 */ uint32 reserved1:3; uint32 lock:1; uint32 in_tos_check:1; uint32 in_l4proto:1; uint32 out_uc_lut_lookup:1; uint32 out_smac_trans:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_user_pri_act:1; uint32 out_stag_format_act:1; uint32 out_ctag_format_act:1; uint32 out_egress_svid_act:1; uint32 out_egress_cvid_act:1; uint32 out_drop:1; uint32 out_dscp:6; uint32 out_dscp_act:1; uint32 out_multiple_act:1; uint32 out_stream_idx:7; uint32 in_pppoe_sid_check:1; #endif }rtk_rg_asic_path3_entry_t; /* flow-based table - for path 4 */ typedef struct rtk_rg_asic_path4_entry_s { #ifdef _LITTLE_ENDIAN /* word 0 */ uint32 valid:1; uint32 reserved1:1; uint32 in_path:2; uint32 in_intf_idx:4; uint32 reserved2:1; uint32 in_multiple_act:1; uint32 reserved3:6; uint32 in_ipv4_or_ipv6:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 out_intf_idx:4; uint32 in_tos:8; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; /* word 3 */ uint32 in_l4_src_port:16; uint32 in_l4_dst_port:16; /* word 4 */ uint32 reserved4:8; uint32 out_svid_format_act:1; uint32 out_user_priority:3; uint32 out_cvid_format_act:1; uint32 reserved5:3; uint32 out_ext_portmask_idx:5; uint32 out_portmask:11; /* word 5 */ uint32 out_spri_format_act:1; uint32 out_spri:3; uint32 out_svlan_id:12; uint32 out_cpri_format_act:1; uint32 out_cpri:3; uint32 out_cvlan_id:12; /* word 6 */ uint32 in_pppoe_sid_check:1; uint32 reserved6:8; uint32 out_dscp_act:1; uint32 out_dscp:6; uint32 reserved7:1; uint32 out_egress_cvid_act:1; uint32 out_egress_svid_act:1; uint32 out_ctag_format_act:1; uint32 out_stag_format_act:1; uint32 out_user_pri_act:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_smac_trans:1; uint32 reserved8:1; uint32 in_l4proto:1; uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 out_intf_idx:4; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_ipv4_or_ipv6:1; uint32 reserved3:6; uint32 in_multiple_act:1; uint32 reserved2:1; uint32 in_intf_idx:4; uint32 in_path:2; uint32 reserved1:1; uint32 valid:1; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; /* word 3 */ uint32 in_l4_dst_port:16; uint32 in_l4_src_port:16; /* word 4 */ uint32 out_portmask:11; uint32 out_ext_portmask_idx:5; uint32 reserved5:3; uint32 out_cvid_format_act:1; uint32 out_user_priority:3; uint32 out_svid_format_act:1; uint32 reserved4:8; /* word 5 */ uint32 out_cvlan_id:12; uint32 out_cpri:3; uint32 out_cpri_format_act:1; uint32 out_svlan_id:12; uint32 out_spri:3; uint32 out_spri_format_act:1; /* word 6 */ uint32 reserved9:3; uint32 lock:1; uint32 in_tos_check:1; uint32 in_l4proto:1; uint32 reserved8:1; uint32 out_smac_trans:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_user_pri_act:1; uint32 out_stag_format_act:1; uint32 out_ctag_format_act:1; uint32 out_egress_svid_act:1; uint32 out_egress_cvid_act:1; uint32 reserved7:1; uint32 out_dscp:6; uint32 out_dscp_act:1; uint32 reserved6:8; uint32 in_pppoe_sid_check:1; #endif }rtk_rg_asic_path4_entry_t; /* flow-based table - unicast l34 routing/napt, for path 5 */ typedef struct rtk_rg_asic_path5_entry_s { #ifdef _LITTLE_ENDIAN /* word 0 */ uint32 valid:1; uint32 reserved1:1; uint32 in_path:2; uint32 in_intf_idx:4; uint32 out_stream_idx_act:1; uint32 reserved2:1; uint32 out_share_meter_act:1; uint32 out_share_meter_idx:5; uint32 in_ipv4_or_ipv6:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 out_intf_idx:4; uint32 in_tos:8; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; //routing/napt mode uint32 in_dst_ipv6_addr_hash:32; //routing/napt mode uint32 out_dst_ipv4_addr:32; //napt-r mode }; /* word 3 */ uint32 in_l4_src_port:16; uint32 in_l4_dst_port:16; /* word 4 */ uint32 out_dmac_idx:8; uint32 out_svid_format_act:1; uint32 out_user_priority:3; uint32 out_cvid_format_act:1; uint32 out_extra_tag_index:3; uint32 out_l4_port:16; /* word 5 */ uint32 out_spri_format_act:1; uint32 out_spri:3; uint32 out_svlan_id:12; uint32 out_cpri_format_act:1; uint32 out_cpri:3; uint32 out_cvlan_id:12; /* word 6 */ uint32 out_l4_direction:1; // 0:inbound, 1:outbound uint32 out_stream_idx:7; uint32 out_l4_act:1; uint32 out_dscp_act:1; uint32 out_dscp:6; uint32 out_drop:1; uint32 out_egress_cvid_act:1; uint32 out_egress_svid_act:1; uint32 out_ctag_format_act:1; uint32 out_stag_format_act:1; uint32 out_user_pri_act:1; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 reserved3:2; uint32 in_l4proto:1; //0:UDP 1:TCP uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 out_intf_idx:4; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_ipv4_or_ipv6:1; uint32 out_share_meter_idx:5; uint32 out_share_meter_act:1; uint32 reserved2:1; uint32 out_stream_idx_act:1; uint32 in_intf_idx:4; uint32 in_path:2; uint32 reserved1:1; uint32 valid:1; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; //routing/napt mode uint32 in_dst_ipv6_addr_hash:32; //routing/napt mode uint32 out_dst_ipv4_addr:32; //napt-r mode }; /* word 3 */ uint32 in_l4_dst_port:16; uint32 in_l4_src_port:16; /* word 4 */ uint32 out_l4_port:16; uint32 out_extra_tag_index:3; uint32 out_cvid_format_act:1; uint32 out_user_priority:3; uint32 out_svid_format_act:1; uint32 out_dmac_idx:8; /* word 5 */ uint32 out_cvlan_id:12; uint32 out_cpri:3; uint32 out_cpri_format_act:1; uint32 out_svlan_id:12; uint32 out_spri:3; uint32 out_spri_format_act:1; /* word 6 */ uint32 reserved4:3; uint32 lock:1; uint32 in_tos_check:1; uint32 in_l4proto:1; uint32 reserved3:2; uint32 out_egress_port_to_vid_act:2;//b'00:none b'01:SP2C b'10:SP2S b'11:CP2C refto rtk_rg_out_egress_port_to_vid_act_t uint32 out_user_pri_act:1; uint32 out_stag_format_act:1; uint32 out_ctag_format_act:1; uint32 out_egress_svid_act:1; uint32 out_egress_cvid_act:1; uint32 out_drop:1; uint32 out_dscp:6; uint32 out_dscp_act:1; uint32 out_l4_act:1; uint32 out_stream_idx:7; uint32 out_l4_direction:1; // 0:inbound, 1:outbound #endif }rtk_rg_asic_path5_entry_t; /* flow-based table - dual header, for path 6 */ typedef struct rtk_rg_asic_path6_entry_s { #ifdef _LITTLE_ENDIAN uint32 valid:1; uint32 reserved1:1; uint32 in_path:2; uint32 in_intf_idx:4; uint32 in_l4_src_port_check:1; uint32 in_l4_dst_port_check:1; uint32 in_l2tp_tunnel_id_check:1; uint32 in_l2tp_session_id_check:1; uint32 in_src_mac_check:1; uint32 in_dst_mac_check:1; uint32 in_src_ip_check:1; uint32 in_dst_ip_check:1; uint32 in_dsliteif:1; uint32 in_ctagif:1; uint32 in_stagif:1; uint32 in_pppoeif:1; uint32 in_l2tpif:1; uint32 in_pptpif:1; uint32 in_pppoe_sid_check:1; uint32 reserved2:1; uint32 in_tos:8; union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; uint32 in_l4_src_port:16; uint32 in_l4_dst_port:16; uint32 in_protocol:4; uint32 reserved3:4; uint32 in_smac_lut_idx:12; uint32 in_dmac_lut_idx:12; uint32 in_l2tp_tunnel_id:16; union { uint16 in_l2tp_session_id:16; //l2tp mode uint16 in_gre_call_id:16; //pptp mode }; uint32 in_pppoe_sid:16; uint32 out_drop:1; uint32 reserved5:9; uint32 in_gre_call_id_check:1; uint32 in_tos_check:1; uint32 lock:1; #else /* word 0 */ uint32 in_tos:8; uint32 reserved2:1; uint32 in_pppoe_sid_check:1; uint32 in_pptpif:1; uint32 in_l2tpif:1; uint32 in_pppoeif:1; uint32 in_stagif:1; uint32 in_ctagif:1; uint32 in_dsliteif:1; uint32 in_dst_ip_check:1; uint32 in_src_ip_check:1; uint32 in_dst_mac_check:1; uint32 in_src_mac_check:1; uint32 in_l2tp_session_id_check:1; uint32 in_l2tp_tunnel_id_check:1; uint32 in_l4_dst_port_check:1; uint32 in_l4_src_port_check:1; uint32 in_intf_idx:4; uint32 in_path:2; uint32 reserved1:1; uint32 valid:1; /* word 1 */ union { uint32 in_src_ipv4_addr:32; uint32 in_src_ipv6_addr_hash:32; }; /* word 2 */ union { uint32 in_dst_ipv4_addr:32; uint32 in_dst_ipv6_addr_hash:32; }; /* word 3 */ uint32 in_l4_dst_port:16; uint32 in_l4_src_port:16; /* word 4 */ uint32 in_dmac_lut_idx:12; uint32 in_smac_lut_idx:12; uint32 reserved3:4; uint32 in_protocol:4; /* word 5 */ union { uint16 in_l2tp_session_id:16; //l2tp mode uint16 in_gre_call_id:16; //pptp mode }; uint32 in_l2tp_tunnel_id:16; /* word 6 */ uint32 reserved6:3; uint32 lock:1; uint32 in_tos_check:1; uint32 in_gre_call_id_check:1; uint32 reserved5:9; uint32 out_drop:1; uint32 in_pppoe_sid:16; #endif }rtk_rg_asic_path6_entry_t; /* flow Tag table for DDR mode */ typedef struct rtk_rg_asic_flowTag_entry_s { #ifdef _LITTLE_ENDIAN uint32 hashIdxMsb:3; uint32 TTL:4; uint32 reserved:25; #else uint32 reserved:25; uint32 TTL:4; uint32 hashIdxMsb:3; #endif }rtk_rg_asic_flowTag_entry_t; /* cam Tag table for DDR mode */ typedef struct rtk_rg_asic_camTag_entry_s { #ifdef _LITTLE_ENDIAN uint32 hsahIdx:15; uint32 lock:1; uint32 valid:1; uint32 reserved:15; #else uint32 reserved:15; uint32 valid:1; uint32 lock:1; uint32 hsahIdx:15; #endif }rtk_rg_asic_camTag_entry_t; /* interface table */ typedef struct rtk_rg_asic_netif_entry_s { uint8 valid; rtk_mac_t gateway_mac_addr; ipaddr_t gateway_ipv4_addr; uint16 intf_mtu; uint8 intf_mtu_check; uint16 out_pppoe_sid; uint8 out_pppoe_act; uint8 deny_ipv4; uint8 deny_ipv6; rtk_rg_asic_forwardAction_t ingress_action; rtk_rg_asic_forwardAction_t egress_action; rtk_portmask_t allow_ingress_portmask; rtk_portmask_t allow_ingress_ext_portmask; }rtk_rg_asic_netif_entry_t; /* interface table */ typedef struct rtk_rg_asic_netifMib_entry_s { uint32 in_intf_uc_packet_cnt; uint64 in_intf_uc_byte_cnt; uint32 in_intf_mc_packet_cnt; uint64 in_intf_mc_byte_cnt; uint32 in_intf_bc_packet_cnt; uint64 in_intf_bc_byte_cnt; uint32 out_intf_uc_packet_cnt; uint64 out_intf_uc_byte_cnt; uint32 out_intf_mc_packet_cnt; uint64 out_intf_mc_byte_cnt; uint32 out_intf_bc_packet_cnt; uint64 out_intf_bc_byte_cnt; }rtk_rg_asic_netifMib_entry_t; /* mac address indirect access table */ typedef struct rtk_rg_asic_indirectMac_entry_s { #ifdef _LITTLE_ENDIAN uint32 l2_idx:12; uint32 reserved:20; #else uint32 reserved:20; uint32 l2_idx:12; #endif }rtk_rg_asic_indirectMac_entry_t; /* extension port mask table */ typedef struct rtk_rg_asic_extPortMask_entry_s { #ifdef _LITTLE_ENDIAN uint32 extpmask:18; uint16 reserved:14; #else uint16 reserved:14; uint32 extpmask:18; #endif }rtk_rg_asic_extPortMask_entry_t; /* ether-type table */ typedef struct rtk_rg_asic_etherType_entry_s { #ifdef _LITTLE_ENDIAN uint16 ethertype; uint16 reserved; #else uint16 reserved; uint16 ethertype; #endif }rtk_rg_asic_etherType_entry_t; typedef struct rtk_rg_asic_wanAccessLimit_entry_s { #ifdef _LITTLE_ENDIAN uint32 valid:1; uint32 sa_idx:12; uint32 reserved:19; #else uint32 reserved:19; uint32 sa_idx:12; uint32 valid:1; #endif }rtk_rg_asic_wanAccessLimit_entry_t; /* extra tag action */ typedef struct rtk_rg_asic_extraTagActType1_s { // Inser extra tag to specific location uint32 reserve1: 4; uint32 src_addr_offset: 9; // MUST be 4-bytes alignment uint32 length: 8; uint32 reserve0: 8; uint32 act_bit: 3; }rtk_rg_asic_extraTagActType1_t; typedef struct rtk_rg_asic_extraTagActType2_s{ // Update Ethertype & MTU uint32 reserve0: 13; uint32 ethertype: 16; uint32 act_bit: 3; }rtk_rg_asic_extraTagActType2_t; typedef struct rtk_rg_asic_extraTagActType3_s{ // Update Outer IP header length uint32 reserve0: 2; uint32 operation: 2; // 0:+; 1:-; 2:*; 3:/; uint32 value: 9; uint32 length: 8; uint32 pkt_buff_offset: 8; // replaced offset uint32 act_bit: 3; }rtk_rg_asic_extraTagActType3_t; typedef struct rtk_rg_asic_extraTagActType4_s{ // Update GRE seg or IPv4 ID uint32 reserve1: 13; uint32 data_src_type: 1; // 0: GRE seq/ack 1:IP Identification uint32 reduce_ack:1; uint32 reduce_seq:1; uint32 reserve0: 1; uint32 seq_ack_reg_idx: 4; uint32 pkt_buff_offset: 8; uint32 act_bit: 3; }rtk_rg_asic_extraTagActType4_t; typedef struct rtk_rg_asic_extraTagActType5_s{ // Caculate outer L3 header checksum (L3 checksum offload) uint32 reserve0: 21; uint32 pkt_buff_offset: 8; uint32 act_bit: 3; }rtk_rg_asic_extraTagActType5_t; typedef struct rtk_rg_asic_extraTagActType6_s{ // Caculate outer L4 header checksum (L4 checksum offload) uint32 reserve0: 21; uint32 pkt_buff_offset: 8; uint32 act_bit: 3; }rtk_rg_asic_extraTagActType6_t; typedef struct rtk_rg_asic_extraTagAction_s { union{ rtk_rg_asic_extraTagActType1_t type1; rtk_rg_asic_extraTagActType2_t type2; rtk_rg_asic_extraTagActType3_t type3; rtk_rg_asic_extraTagActType4_t type4; rtk_rg_asic_extraTagActType5_t type5; rtk_rg_asic_extraTagActType6_t type6; }; }rtk_rg_asic_extraTagAction_t; typedef struct rtk_rg_asic_cacheCtrlCmd_e { #ifdef _LITTLE_ENDIAN uint32 hashID:15; uint32 reserved1:1; uint32 cBit:1; uint32 aBit:1; uint32 vBit:1; uint32 pBit:1; uint32 fBit:1; uint32 reserved2:3; uint32 cmdCode:7; uint32 reqExec:1; #else uint32 reqExec:1; uint32 cmdCode:7; uint32 reserved2:3; uint32 fBit:1; uint32 pBit:1; uint32 vBit:1; uint32 aBit:1; uint32 cBit:1; uint32 reserved1:1; uint32 hashID:15; #endif }rtk_rg_asic_cacheCtrlCmd_t; typedef struct rtk_rg_asic_cacheState_s { uint8 ccBusy:1; rtk_rg_asic_cacheCtrl_ctrllerSta_t ccCurState:2; rtk_rg_asic_cacheCtrl_faultRsn_t ccFaultStatus:3; union{ rtk_rg_asic_cacheCtrl_rtnCodeInv_t invRtn; rtk_rg_asic_cacheCtrl_rtnCodeAdd_t addRtn; rtk_rg_asic_cacheCtrl_rtnCodeUlckAll_t ulckallRtn; rtk_rg_asic_cacheCtrl_rtnCodeUlck_t ulckRtn; rtk_rg_asic_cacheCtrl_rtnCodeRead_t readRtn; rtk_rg_asic_cacheCtrl_rtnCodeUpd_t updRtn; rtk_rg_asic_cacheCtrl_rtnCodeChkAll_t chkRtn; uint32 cmdRtn; }ccCmdRtnCode; }rtk_rg_asic_cacheState_t; typedef struct rtk_rg_asic_cacheReadSta_e { uint8 TTL; uint8 readFromCache; uint8 readFromCam; }rtk_rg_asic_cacheReadSta_t; /* * Symbol Definition */ /* * Function Declaration */ extern rtk_rg_err_code_t rtk_rg_asic_l2UcAct_set(uint32 value); extern rtk_rg_err_code_t rtk_rg_asic_hsbaMode_set(rtk_l34_hsba_mode_t hsbaMode); extern rtk_rg_err_code_t rtk_rg_asic_hsbaMode_get(rtk_l34_hsba_mode_t *pHsbaMode); extern rtk_rg_err_code_t rtk_rg_asic_hsbData_get(rtk_rg_asic_hsb_entry_t *pHsbData); extern rtk_rg_err_code_t rtk_rg_asic_hsaData_get(rtk_rg_asic_hsa_entry_t *pHsaData); extern rtk_rg_err_code_t rtk_rg_asic_sramFlowEntry_get(uint32 idx, void *pFlowData); extern rtk_rg_err_code_t rtk_rg_asic_flowPath_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_flowPath1_add(uint32 *idx, rtk_rg_asic_path1_entry_t *pP1Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath1_set(uint32 idx, rtk_rg_asic_path1_entry_t *pP1Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath1_get(uint32 idx, rtk_rg_asic_path1_entry_t *pP1Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath2_add(uint32 *idx, rtk_rg_asic_path2_entry_t *pP2Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath2_set(uint32 idx, rtk_rg_asic_path2_entry_t *pP2Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath2_get(uint32 idx, rtk_rg_asic_path2_entry_t *pP2Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath3_add(uint32 *idx, rtk_rg_asic_path3_entry_t *pP3Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath3DAHash_add(uint32 *idx, rtk_rg_asic_path3_entry_t *pP3Data, uint16 igrSVID, uint16 igrCVID, uint16 lutDaIdx); extern rtk_rg_err_code_t rtk_rg_asic_flowPath3_set(uint32 idx, rtk_rg_asic_path3_entry_t *pP3Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath3_get(uint32 idx, rtk_rg_asic_path3_entry_t *pP3Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath4_add(uint32 *idx, rtk_rg_asic_path4_entry_t *pP4Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath4DAHash_add(uint32 *idx, rtk_rg_asic_path4_entry_t *pP4Data, uint16 igrSVID, uint16 igrCVID, uint16 lutDaIdx); extern rtk_rg_err_code_t rtk_rg_asic_flowPath4_set(uint32 idx, rtk_rg_asic_path4_entry_t *pP4Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath4_get(uint32 idx, rtk_rg_asic_path4_entry_t *pP4Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath5_add(uint32 *idx, rtk_rg_asic_path5_entry_t *pP5Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath5_set(uint32 idx, rtk_rg_asic_path5_entry_t *pP5Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath5_get(uint32 idx, rtk_rg_asic_path5_entry_t *pP5Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath6_add(uint32 *idx, rtk_rg_asic_path6_entry_t *pP6Data, uint16 igrSVID, uint16 igrCVID); extern rtk_rg_err_code_t rtk_rg_asic_flowPath6_set(uint32 idx, rtk_rg_asic_path6_entry_t *pP6Data); extern rtk_rg_err_code_t rtk_rg_asic_flowPath6_get(uint32 idx, rtk_rg_asic_path6_entry_t *pP6Data); extern rtk_rg_err_code_t rtk_rg_asic_netifTable_add(uint32 idx, rtk_rg_asic_netif_entry_t *pNetifEntry); extern rtk_rg_err_code_t rtk_rg_asic_netifTable_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_netifTable_get(uint32 idx, rtk_rg_asic_netif_entry_t *pNetifEntry); extern rtk_rg_err_code_t rtk_rg_asic_netifMib_get(uint32 idx, rtk_rg_asic_netifMib_entry_t *pNetifMibEntry); extern rtk_rg_err_code_t rtk_rg_asic_netifMib_reset(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_indirectMacTable_add(uint32 idx, rtk_rg_asic_indirectMac_entry_t *pIndirectMacEntry); extern rtk_rg_err_code_t rtk_rg_asic_indirectMacTable_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_indirectMacTable_get(uint32 idx, rtk_rg_asic_indirectMac_entry_t *pIndirectMacEntry); extern rtk_rg_err_code_t rtk_rg_asic_extPortMaskTable_add(uint32 idx, rtk_rg_asic_extPortMask_entry_t *pExtPMaskEntry); extern rtk_rg_err_code_t rtk_rg_asic_extPortMaskTable_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_extPortMaskTable_get(uint32 idx, rtk_rg_asic_extPortMask_entry_t *pExtPMaskEntry); extern rtk_rg_err_code_t rtk_rg_asic_etherTypeTable_add(uint32 idx, rtk_rg_asic_etherType_entry_t *pEtherTypeEntry); extern rtk_rg_err_code_t rtk_rg_asic_etherTypeTable_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_etherTypeTable_get(uint32 idx, rtk_rg_asic_etherType_entry_t *pEtherTypeEntry); extern rtk_rg_err_code_t rtk_rg_asic_wanAccessLimitTable_add(uint32 idx, rtk_rg_asic_wanAccessLimit_entry_t *pWALimitEntry); extern rtk_rg_err_code_t rtk_rg_asic_wanAccessLimitTable_del(uint32 idx); extern rtk_rg_err_code_t rtk_rg_asic_wanAccessLimitTable_get(uint32 idx, rtk_rg_asic_wanAccessLimit_entry_t *pWALimitEntry); extern rtk_rg_err_code_t rtk_rg_asic_wanAccessLimitPort_set(rtk_rg_port_idx_t portIdx , rtk_enable_t state); extern rtk_rg_err_code_t rtk_rg_asic_wanAccessLimitPort_get(rtk_rg_port_idx_t portIdx , rtk_enable_t *pState); extern rtk_rg_err_code_t rtk_rg_asic_extraTagAction_add(uint32 actionList, uint32 actionIdx, rtk_rg_asic_extraTagAction_t *pExtraTagAction); extern rtk_rg_err_code_t rtk_rg_asic_extraTagAction_del(uint32 actionList, uint32 actionIdx); extern rtk_rg_err_code_t rtk_rg_asic_extraTagAction_get(uint32 actionList, uint32 actionIdx, rtk_rg_asic_extraTagAction_t *pExtraTagAction); extern rtk_rg_err_code_t rtk_rg_asic_extraTagContentBuffer_set(uint32 actionList, char *pContentBuffer); extern rtk_rg_err_code_t rtk_rg_asic_extraTagContentBuffer_get(uint32 offset, uint32 len, char *pContentBuffer); extern rtk_rg_err_code_t rtk_rg_asic_extraTagInsertHdrLen_set(uint32 actionList, uint32 len); extern rtk_rg_err_code_t rtk_rg_asic_extraTagInsertHdrLen_get(uint32 actionList, uint32 *len); extern rtk_rg_err_code_t rtk_rg_asic_flowTrfIndicator_get(uint32 idx, rtk_enable_t *pFlowIndicator); extern rtk_rg_err_code_t rtk_rg_asic_flowTraffic_get(uint32 *validSet, uint32 *flowTrafficSet); extern rtk_rg_err_code_t rtk_rg_asic_netifTrfIndicator_get(uint32 idx, rtk_enable_t *pNetifIndicator); extern rtk_rg_err_code_t rtk_rg_asic_netifTraffic_get(uint32 *value); extern rtk_rg_err_code_t rtk_rg_asic_unmatchedCpuPriority_set(uint32 priority); extern rtk_rg_err_code_t rtk_rg_asic_unmatchedCpuPriority_get(uint32 *pPriority); extern rtk_rg_err_code_t rtk_rg_asic_trapCpuPriority_set(rtk_enable_t state, uint32 priority); extern rtk_rg_err_code_t rtk_rg_asic_trapCpuPriority_get(rtk_enable_t *pState, uint32 *pPriority); extern rtk_rg_err_code_t rtk_rg_asic_spaUnmatchAction_set(rtk_rg_asic_forwardAction_t action); extern rtk_rg_err_code_t rtk_rg_asic_spaUnmatchAction_get(rtk_rg_asic_forwardAction_t *pAction); extern rtk_rg_err_code_t rtk_rg_asic_globalState_set(rtk_rg_asic_globalStateType_t stateType, rtk_enable_t state); extern rtk_rg_err_code_t rtk_rg_asic_globalState_get(rtk_rg_asic_globalStateType_t stateType, rtk_enable_t *pState); extern rtk_rg_err_code_t rtk_rg_asic_fbModeCtrl_set(rtk_rg_asic_fbModeCtrl_t ctrlType, uint8 state); extern rtk_rg_err_code_t rtk_rg_asic_fbModeCtrl_get(rtk_rg_asic_fbModeCtrl_t ctrlType, uint8 *pState); extern rtk_rg_err_code_t rtk_rg_asic_preHashPtn_set(rtk_rg_asic_preHashPtn_t ptnType, uint32 code); extern rtk_rg_err_code_t rtk_rg_asic_preHashPtn_get(rtk_rg_asic_preHashPtn_t ptnType, uint32 *pCode); extern rtk_rg_err_code_t rtk_rg_asic_dualHdrInfo_set(rtk_rg_asic_dualHdrInfo_t target, uint8 intfIdx, uint32 value); extern rtk_rg_err_code_t rtk_rg_asic_dualHdrInfo_get(rtk_rg_asic_dualHdrInfo_t target, uint8 intfIdx, uint32 *value); extern rtk_rg_err_code_t rtk_rg_asic_shareMeter_set(uint32 index, uint32 rate, rtk_enable_t ifgInclude); extern rtk_rg_err_code_t rtk_rg_asic_shareMeter_get(uint32 index, uint32 *pRate , rtk_enable_t *pIfgInclude); extern rtk_rg_err_code_t rtk_rg_asic_shareMeterBucket_set(uint32 index, uint32 bucketSize); extern rtk_rg_err_code_t rtk_rg_asic_shareMeterBucket_get(uint32 index, uint32 *pBucketSize); extern rtk_rg_err_code_t rtk_rg_asic_table_reset(rtk_rg_asic_resetTableType_t type); extern rtk_rg_err_code_t rtk_rg_asic_ccMemAddr_set(void **pMemBase); extern rtk_rg_err_code_t rtk_rg_asic_ccMemAddr_get(void **pMemBase); extern rtk_rg_err_code_t rtk_rg_asic_ccInvalidFlow_cmd(rtk_enable_t invValid, uint32 entryIdx); extern rtk_rg_err_code_t rtk_rg_asic_ccAddFlow_cmd(rtk_enable_t forceAdd, rtk_enable_t highPri, rtk_enable_t rstValid, rtk_enable_t addToCAM, rtk_enable_t addToCache, uint32 entryIdx, uint32 *pFlowData); extern rtk_rg_err_code_t rtk_rg_asic_ccUnlockAll_cmd(rtk_enable_t unlockCAM, rtk_enable_t unlockCache); extern rtk_rg_err_code_t rtk_rg_asic_ccUnlockFlow_cmd(uint32 entryIdx); extern rtk_rg_err_code_t rtk_rg_asic_ccReadFlow_cmd(uint32 entryIdx, uint32 *pFlowData, rtk_rg_asic_cacheReadSta_t *cReadSta); extern rtk_rg_err_code_t rtk_rg_asic_ccUpdateFlow_cmd(rtk_enable_t forceAdd, rtk_enable_t addToCAM, rtk_enable_t addToCache, uint32 entryIdx); extern rtk_rg_err_code_t rtk_rg_asic_ccCheckAll_cmd(rtk_enable_t pktStatistic, rtk_enable_t tblStatistic); extern rtk_rg_err_code_t rtk_rg_asic_ccSysCmdState_get(rtk_rg_asic_cacheState_t *pCCState); extern rtk_rg_err_code_t rtk_rg_asic_ccPktStatistic_get(uint32 *pCompleteMissRate, uint32 *pCacheMissRate, uint32 *pMissCycle); extern rtk_rg_err_code_t rtk_rg_asic_ccTblStatisticValidCnt_get(uint32 *pCacheCnt, uint32 *pCamCnt); extern rtk_rg_err_code_t rtk_rg_asic_ccTblStatisticLockCnt_get(uint32 *pCacheCnt, uint32 *pCamCnt); extern rtk_rg_err_code_t rtk_rg_asic_ccGlobalState_set(rtk_rg_asic_cacheCtrl_globalCtrlType_t stateType, rtk_enable_t state); extern rtk_rg_err_code_t rtk_rg_asic_ccGlobalState_get(rtk_rg_asic_cacheCtrl_globalCtrlType_t stateType, rtk_enable_t *pState); extern rtk_rg_err_code_t rtk_rg_asic_ccFlowTagTTLThrd_set(uint32 initValue); extern rtk_rg_err_code_t rtk_rg_asic_ccFlowTagTTLThrd_get(uint32 *pInitValue); extern rtk_rg_err_code_t rtk_rg_asic_flowValidBit_get(uint32 idx, rtk_enable_t *pFlowValidBit); extern rtk_rg_err_code_t rtk_rg_asic_flowTagTable_set(uint32 index, rtk_rg_asic_flowTag_entry_t *pTagEntry); extern rtk_rg_err_code_t rtk_rg_asic_flowTagTable_get(uint32 index, rtk_rg_asic_flowTag_entry_t *pTagEntry); extern rtk_rg_err_code_t rtk_rg_asic_camTraffic_get(uint64 *pCamTrfBits); extern rtk_rg_err_code_t rtk_rg_asic_camTagTable_set(uint32 index, rtk_rg_asic_camTag_entry_t *pTagEntry); extern rtk_rg_err_code_t rtk_rg_asic_camTagTable_get(uint32 index, rtk_rg_asic_camTag_entry_t *pTagEntry); extern rtk_rg_err_code_t rtk_rg_asic_switch_reset(void); //extern rtk_rg_err_code_t call_rtk_rg_asic_fb_init(void); extern rtk_rg_err_code_t rtk_rg_asic_fb_init(void); #endif /* __RTK_RG_ASIC_APOLLOPROFB_H__ */