openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

l3_fib_int.h (12161B)


      1 /*! \file l3_fib_int.h
      2  *
      3  * L3 FIB internal header file.
      4  * This file contains L3 FIB definitions internal to the L3 module itself.
      5  */
      6 /*
      7  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      8  * 
      9  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
     10  */
     11 
     12 #ifndef BCMI_LTSW_L3_FIB_INT_H
     13 #define BCMI_LTSW_L3_FIB_INT_H
     14 
     15 #include <bcm_int/ltsw/types.h>
     16 #include <bcm_int/ltsw/uft.h>
     17 
     18 /* HA Sub component id for ALPM data mode. */
     19 #define BCMINT_LTSW_L3_FIB_HA_ALPM_DMODE 0
     20 
     21 /* Unicast forwarding fields. */
     22 typedef enum bcmint_ltsw_l3_fib_fld_uc_e {
     23     BCMINT_LTSW_L3_FIB_TBL_UC_IP_ADDR_0,
     24     BCMINT_LTSW_L3_FIB_TBL_UC_IP_ADDR_1,
     25     BCMINT_LTSW_L3_FIB_TBL_UC_IP_ADDR_0_MASK,
     26     BCMINT_LTSW_L3_FIB_TBL_UC_IP_ADDR_1_MASK,
     27     BCMINT_LTSW_L3_FIB_TBL_UC_VRF,
     28     BCMINT_LTSW_L3_FIB_TBL_UC_VRF_MASK,
     29     BCMINT_LTSW_L3_FIB_TBL_UC_DEST,
     30     BCMINT_LTSW_L3_FIB_TBL_UC_DEST_TYPE,
     31     BCMINT_LTSW_L3_FIB_TBL_UC_CLASS_ID,
     32     BCMINT_LTSW_L3_FIB_TBL_UC_NHOP_2_OR_ECMP_GRP_1,
     33     BCMINT_LTSW_L3_FIB_TBL_UC_ECMP_AND_PROT_SWT_PROFILE_IDX,
     34     BCMINT_LTSW_L3_FIB_TBL_UC_MISC_CTRL_0,
     35     BCMINT_LTSW_L3_FIB_TBL_UC_MISC_CTRL_1,
     36     BCMINT_LTSW_L3_FIB_TBL_UC_DATA_TYPE,
     37     BCMINT_LTSW_L3_FIB_TBL_UC_NAT_IDX,
     38     BCMINT_LTSW_L3_FIB_TBL_UC_NAT_CTRL,
     39     BCMINT_LTSW_L3_FIB_TBL_UC_STRENGTH_PROF_IDX,
     40     BCMINT_LTSW_L3_FIB_TBL_UC_FLD_CNT
     41 } bcmint_ltsw_l3_fib_fld_uc_fld_t;
     42 
     43 /* Multicast forwarding fields. */
     44 typedef enum bcmint_ltsw_l3_fib_fld_mc_e {
     45     BCMINT_LTSW_L3_FIB_TBL_MC_IP_ADDR,
     46     BCMINT_LTSW_L3_FIB_TBL_MC_IP_ADDR_MASK = BCMINT_LTSW_L3_FIB_TBL_MC_IP_ADDR + 2,
     47     BCMINT_LTSW_L3_FIB_TBL_MC_VRF = BCMINT_LTSW_L3_FIB_TBL_MC_IP_ADDR_MASK + 2,
     48     BCMINT_LTSW_L3_FIB_TBL_MC_VRF_MASK,
     49     BCMINT_LTSW_L3_FIB_TBL_MC_SIP_ADDR,
     50     BCMINT_LTSW_L3_FIB_TBL_MC_L3_IIF = BCMINT_LTSW_L3_FIB_TBL_MC_SIP_ADDR + 2,
     51     BCMINT_LTSW_L3_FIB_TBL_MC_DEST,
     52     BCMINT_LTSW_L3_FIB_TBL_MC_DEST_TYPE,
     53     BCMINT_LTSW_L3_FIB_TBL_MC_CLASS_ID,
     54     BCMINT_LTSW_L3_FIB_TBL_MC_MTU_PROFILE_IDX,
     55     BCMINT_LTSW_L3_FIB_TBL_MC_RPA_ID,
     56     BCMINT_LTSW_L3_FIB_TBL_MC_MISC_CTRL_0,
     57     BCMINT_LTSW_L3_FIB_TBL_MC_MISC_CTRL_1,
     58     BCMINT_LTSW_L3_FIB_TBL_MC_EXPECTED_L3_IIF,
     59     BCMINT_LTSW_L3_FIB_TBL_MC_FLEX_CTR_ACTION,
     60     BCMINT_LTSW_L3_FIB_TBL_MC_STRENGTH_PROF_IDX,
     61     BCMINT_LTSW_L3_FIB_TBL_MC_ENTRY_PRIORITY,
     62     BCMINT_LTSW_L3_FIB_TBL_MC_FLD_CNT
     63 } bcmint_ltsw_l3_fib_fld_mc_fld_t;
     64 
     65 /* ALPM usage key type. */
     66 typedef enum bcmint_ltsw_l3_alpm_usage_key_type_e {
     67     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV4_UC_GL,
     68     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV4_UC_VRF,
     69     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV4_UC_GH,
     70     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_SINGLE_GL,
     71     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_SINGLE_VRF,
     72     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_SINGLE_GH,
     73     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_DOUBLE_GL,
     74     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_DOUBLE_VRF,
     75     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_DOUBLE_GH,
     76     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_QUAD_GL,
     77     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_QUAD_VRF,
     78     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_UC_QUAD_GH,
     79     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV4_COMP,
     80     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_COMP,
     81     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV4_MC,
     82     BCMINT_LTSW_L3_ALPM_USAGE_KT_IPV6_MC,
     83     BCMINT_LTSW_L3_ALPM_USAGE_KT_CNT
     84 } bcmint_ltsw_l3_alpm_usage_key_type_t;
     85 
     86 /* ALPM Control key input type. */
     87 typedef enum bcmint_ltsw_alpm_key_input_e {
     88     BCMINT_LTSW_L3_ALPM_KI_LPM_DST_QUAD,
     89     BCMINT_LTSW_L3_ALPM_KI_LPM_DST_DOUBLE,
     90     BCMINT_LTSW_L3_ALPM_KI_LPM_DST_SINGLE,
     91     BCMINT_LTSW_L3_ALPM_KI_LPM_SRC_QUAD,
     92     BCMINT_LTSW_L3_ALPM_KI_LPM_SRC_DOUBLE,
     93     BCMINT_LTSW_L3_ALPM_KI_LPM_SRC_SINGLE,
     94     BCMINT_LTSW_L3_ALPM_KI_FP_COMP_DST,
     95     BCMINT_LTSW_L3_ALPM_KI_FP_COMP_SRC,
     96     BCMINT_LTSW_L3_ALPM_KI_LPM_L3MC_QUAD,
     97     BCMINT_LTSW_L3_ALPM_KI_LPM_L3MC_DOUBLE,
     98     BCMINT_LTSW_L3_ALPM_KI_LPM_L3MC_SINGLE,
     99     BCMINT_LTSW_L3_ALPM_KI_CNT
    100 } bcmint_ltsw_alpm_key_input_t;
    101 
    102 /* ALPM datebase. */
    103 typedef enum bcmint_ltsw_l3_alpm_db_e {
    104     BCMINT_LTSW_L3_ALPM_DB_0,
    105     BCMINT_LTSW_L3_ALPM_DB_1,
    106     BCMINT_LTSW_L3_ALPM_DB_2,
    107     BCMINT_LTSW_L3_ALPM_DB_3,
    108     BCMINT_LTSW_L3_ALPM_DB_CNT
    109 } bcmint_ltsw_l2_alpm_db_t;
    110 
    111 /* ALPM usage fields. */
    112 typedef enum bcmint_ltsw_l3_alpm_usage_fld_e {
    113     BCMINT_LTSW_L3_ALPM_USAGE_TBL_KEY_TYPE,
    114     BCMINT_LTSW_L3_ALPM_USAGE_TBL_DB,
    115     BCMINT_LTSW_L3_ALPM_USAGE_TBL_MAX_ENT,
    116     BCMINT_LTSW_L3_ALPM_USAGE_TBL_INUSE_ENT,
    117     BCMINT_LTSW_L3_ALPM_USAGE_TBL_ENT_UTILIZATION,
    118     BCMINT_LTSW_L3_ALPM_USAGE_TBL_MAX_RBKT,
    119     BCMINT_LTSW_L3_ALPM_USAGE_TBL_INUSE_RBKT,
    120     BCMINT_LTSW_L3_ALPM_USAGE_TBL_RBKT_UTILIZATION,
    121     BCMINT_LTSW_L3_ALPM_USAGE_TBL_FLD_CNT
    122 } bcmint_ltsw_l3_alpm_usage_fld_t;
    123 
    124 /* ALPM Control state. */
    125 typedef enum bcmint_ltsw_l3_alpm_op_state_e {
    126     BCMINT_LTSW_L3_ALPM_OP_STATE_VALID,
    127     BCMINT_LTSW_L3_ALPM_OP_STATE_CONFILICT,
    128     BCMINT_LTSW_L3_ALPM_OP_STATE_INUSE,
    129     BCMINT_LTSW_L3_ALPM_OP_STATE_CNT
    130 } bcmint_ltsw_l3_alpm_op_state_t;
    131 
    132 /* ALPM Control fields. */
    133 typedef enum bcmint_ltsw_l3_alpm_ctrl_fld_e {
    134     BCMINT_LTSW_L3_ALPM_CTRL_TBL_OP_STATE,
    135     BCMINT_LTSW_L3_ALPM_CTRL_TBL_ALPM_MODE,
    136     BCMINT_LTSW_L3_ALPM_CTRL_TBL_NUM_DB_0_LVLS,
    137     BCMINT_LTSW_L3_ALPM_CTRL_TBL_NUM_DB_1_LVLS,
    138     BCMINT_LTSW_L3_ALPM_CTRL_TBL_NUM_DB_2_LVLS,
    139     BCMINT_LTSW_L3_ALPM_CTRL_TBL_NUM_DB_3_LVLS,
    140     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_0,
    141     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_1,
    142     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_2,
    143     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_3,
    144     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_4,
    145     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_5,
    146     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_6,
    147     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_7,
    148     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_8,
    149     BCMINT_LTSW_L3_ALPM_CTRL_TBL_KEY_INPUT_LVL_1_BLK_9,
    150     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_0,
    151     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_1,
    152     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_2,
    153     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_3,
    154     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_4,
    155     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_5,
    156     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_6,
    157     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_7,
    158     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_8,
    159     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DB_LVL_1_BLK_9,
    160     BCMINT_LTSW_L3_ALPM_CTRL_TBL_HIT_MODE,
    161     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DEST,
    162     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DEST_MASK,
    163     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DEST_TYPE_MATCH,
    164     BCMINT_LTSW_L3_ALPM_CTRL_TBL_DEST_TYPE_NON_MATCH,
    165     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV4_UC_GL_STRENGTH_PROF_IDX,
    166     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV4_UC_VRF_STRENGTH_PROF_IDX,
    167     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV4_UC_GH_STRENGTH_PROF_IDX,
    168     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV6_UC_GL_STRENGTH_PROF_IDX,
    169     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV6_UC_VRF_STRENGTH_PROF_IDX,
    170     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV6_UC_GH_STRENGTH_PROF_IDX,
    171     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV4_COMP_STRENGTH_PROF_IDX,
    172     BCMINT_LTSW_L3_ALPM_CTRL_TBL_IPV6_COMP_STRENGTH_PROF_IDX,
    173     BCMINT_LTSW_L3_ALPM_CTRL_TBL_LARGE_VRF,
    174     BCMINT_LTSW_L3_ALPM_CTRL_TBL_FLD_CNT
    175 } bcmint_ltsw_l3_alpm_ctrl_fld_t;
    176 
    177 /* Field description. */
    178 typedef struct bcmint_ltsw_l3_fib_fld_s {
    179     /* Field name. */
    180     const char *fld_name;
    181 
    182     /* Filed ID. */
    183     uint32_t fld_id;
    184 
    185     /* Key field. */
    186     bool key;
    187 
    188     /* Symbol field. */
    189     bool symbol;
    190 
    191     /* Number of elements needed for field. */
    192     uint32_t elements;
    193 
    194     /* Callback to get scalar value from symbol. */
    195     bcmi_ltsw_symbol_to_scalar_f symbol_to_scalar;
    196 
    197     /* Callback to get symbol from scalar value. */
    198     bcmi_ltsw_scalar_to_symbol_f scalar_to_symbol;
    199 
    200 } bcmint_ltsw_l3_fib_fld_t;
    201 
    202 /* L3 FIB tables. */
    203 typedef enum bcmint_ltsw_l3_fib_tbl_id_e {
    204     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV4_UC,
    205     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV6_UC,
    206     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV4_MC_G,
    207     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV4_MC_SG,
    208     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV6_MC_G,
    209     BCMINT_LTSW_L3_FIB_TBL_HOST_IPV6_MC_SG,
    210     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV4_UC_GL,
    211     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV4_UC_VRF,
    212     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV4_UC_GH,
    213     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV6_UC_GL,
    214     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV6_UC_VRF,
    215     BCMINT_LTSW_L3_FIB_TBL_ROUTE_IPV6_UC_GH,
    216     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV4_UC_GL,
    217     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV4_UC_VRF,
    218     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV4_UC_GH,
    219     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV6_UC_GL,
    220     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV6_UC_VRF,
    221     BCMINT_LTSW_L3_FIB_TBL_ROUTE_SRC_IPV6_UC_GH,
    222     BCMINT_LTSW_L3_FIB_TBL_DEFIP_IPV4_MC,
    223     BCMINT_LTSW_L3_FIB_TBL_DEFIP_IPV6_MC_64,
    224     BCMINT_LTSW_L3_FIB_TBL_DEFIP_IPV6_MC_128,
    225     BCMINT_LTSW_L3_FIB_TBL_ALPM_LVL_1_USAGE,
    226     BCMINT_LTSW_L3_FIB_TBL_ALPM_LVL_2_USAGE,
    227     BCMINT_LTSW_L3_FIB_TBL_ALPM_LVL_3_USAGE,
    228     BCMINT_LTSW_L3_FIB_TBL_ALPM_CONTROL,
    229     BCMINT_LTSW_L3_FIB_TBL_CNT
    230 } bcmint_ltsw_l3_fib_tbl_id_t;
    231 
    232 /* Attributes of FIB tables. */
    233 /* Indicate IPv4 table. */
    234 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_V4      (1 << 0)
    235 /* Indicate IPv6 table. */
    236 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_V6      (1 << 1)
    237 /* Indicate unicast table. */
    238 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_UC      (1 << 2)
    239 /* Indicate multicast table. */
    240 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_MC      (1 << 3)
    241 /* Indicate host table. */
    242 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_HOST    (1 << 4)
    243 /* Indicate subnet route table. */
    244 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_SUBNET  (1 << 5)
    245 /* Indicate source route table. */
    246 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_SRC     (1 << 6)
    247 /* Indicate global low route table. */
    248 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_GL      (1 << 7)
    249 /* Indicate VRF aware route table. */
    250 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_VRF     (1 << 8)
    251 /* Indicate global high route table. */
    252 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_GH      (1 << 9)
    253 /* Indicate lpm128 route table. */
    254 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_LPM_128 (1 << 10)
    255 /* Indicate (S, G) table. */
    256 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_SG      (1 << 11)
    257 /* Indicate (*, G) table. */
    258 #define BCMINT_LTSW_L3_FIB_TBL_ATTR_G       (1 << 12)
    259 
    260 typedef enum bcmint_ltsw_l3_fib_tbl_rm_type_e {
    261     BCMINT_LTSW_L3_FIB_TBL_RM_T_HASH = 1,
    262     BCMINT_LTSW_L3_FIB_TBL_RM_T_TCAM = 2,
    263     BCMINT_LTSW_L3_FIB_TBL_RM_T_ALPM = 3,
    264     BCMINT_LTSW_L3_FIB_TBL_RM_T_CNT
    265 } bcmint_ltsw_l3_fib_tbl_rm_type_t;
    266 
    267 /* The structure of L3 forwarding table. */
    268 typedef struct bcmint_ltsw_l3_fib_tbl_s {
    269     /* Table name. */
    270     const char *name;
    271 
    272     /* Table ID. */
    273     uint32_t tbl_id;
    274 
    275     /* Table attributes: BCMINT_LTSW_L3_FIB_TBL_ATTR_xxx. */
    276     uint32_t attr;
    277 
    278     /* Multiple of base unit (IPv4 UC entry). */
    279     int multiple;
    280 
    281     /* Table resource management type. */
    282     bcmint_ltsw_l3_fib_tbl_rm_type_t rm_type;
    283 
    284     /* Field count. */
    285     uint32_t fld_cnt;
    286 
    287     /* Bitmap of valid fields. */
    288     uint64_t fld_bmp;
    289 
    290     /* The fields of table. */
    291     const bcmint_ltsw_l3_fib_fld_t *flds;
    292 
    293 } bcmint_ltsw_l3_fib_tbl_t;
    294 
    295 /* L3 forwarding table database. */
    296 typedef struct bcmint_ltsw_l3_fib_tbl_db_s {
    297     /* The table bitmap. */
    298     uint32_t tbl_bmp;
    299 
    300     /* The table array. */
    301     const bcmint_ltsw_l3_fib_tbl_t *tbls;
    302 } bcmint_ltsw_l3_fib_tbl_db_t;
    303 
    304 /*!
    305  * \brief Get L3 FIB logical table info.
    306  *
    307  * \param [in] unit Unit Number.
    308  * \param [in] tbl_id FIB logical table description ID.
    309  * \param [out] tbl_info Pointer to table description info.
    310  *
    311  * \retval SHR_E_UNAVAIL Logical table is not supported.
    312  * \retval SHR_E_NONE No errer.
    313  */
    314 extern int
    315 bcmint_ltsw_l3_fib_tbl_get(int unit,
    316                            bcmint_ltsw_l3_fib_tbl_id_t tbl_id,
    317                            const bcmint_ltsw_l3_fib_tbl_t **tbl_info);
    318 
    319 /*!
    320  * \brief Set L3_ALPM_CONTROL LT.
    321  *
    322  * \param [in] unit Unit number.
    323  * \param [in] alpm_temp ALPM template.
    324  *
    325  * \retval SHR_E_NONE No errors.
    326  * \retval !SHR_E_NONE Failure.
    327  */
    328 extern int
    329 bcmint_ltsw_l3_alpm_control_set(int unit,
    330                                 int alpm_temp,
    331                                 bcmi_ltsw_uft_mode_t uft_mode);
    332 
    333 #endif /* BCMI_LTSW_L3_FIB_INT_H */
    334