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