lpm.h (17315B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 */ 7 8 #ifndef _LPM_H_ 9 #define _LPM_H_ 10 #include <shared/l3.h> 11 12 /* 13 * Reserved VRF values 14 */ 15 #define SOC_L3_VRF_OVERRIDE _SHR_L3_VRF_OVERRIDE /* Matches before vrf */ 16 /* specific entries. */ 17 #define SOC_L3_VRF_GLOBAL _SHR_L3_VRF_GLOBAL /* Matches after vrf */ 18 /* specific entries. */ 19 #define SOC_L3_VRF_DEFAULT _SHR_L3_VRF_DEFAULT /* Default vrf id. */ 20 21 #define SOC_APOLLO_L3_DEFIP_URPF_SIZE (0x800) 22 #define SOC_APOLLO_B0_L3_DEFIP_URPF_SIZE (0xC00) 23 24 #define SOC_LPM_LOCK(u) soc_mem_lock(u, ((SOC_MEM_IS_VALID(u, L3_DEFIP_LEVEL1m))?L3_DEFIP_LEVEL1m:L3_DEFIPm)) 25 #define SOC_LPM_UNLOCK(u) soc_mem_unlock(u, ((SOC_MEM_IS_VALID(u, L3_DEFIP_LEVEL1m))?L3_DEFIP_LEVEL1m:L3_DEFIPm)) 26 27 #define PRESERVE_HIT TRUE 28 29 #ifdef BCM_HELIX4_SUPPORT 30 #define FB_LPM_HASH_INDEX_NULL (0x3FFFF) 31 #define FB_LPM_HASH_INDEX_MASK (0x1FFFF) 32 #define FB_LPM_HASH_IPV6_MASK (0x20000) 33 #else 34 #define FB_LPM_HASH_INDEX_NULL (0xFFFF) 35 #define FB_LPM_HASH_INDEX_MASK (0x7FFF) 36 #define FB_LPM_HASH_IPV6_MASK (0x8000) 37 #endif 38 39 #define _SOC_HASH_L3_VRF_GLOBAL 0 40 #define _SOC_HASH_L3_VRF_OVERRIDE 1 41 #define _SOC_HASH_L3_VRF_DEFAULT 2 42 #define _SOC_HASH_L3_VRF_SPECIFIC 3 43 44 #ifdef BCM_FIREBOLT_SUPPORT 45 #define IPV6_PFX_ZERO 33 46 #define MAX_LPM_ZONE_IPV4(u) (soc_feature(u, soc_feature_td3_lpm_ipmc_war) ? 6 : 3) 47 #define MAX_LPM_ZONE(u) (MAX_LPM_ZONE_IPV4(u) * 2) 48 #define IPV4_PFX_ZERO(u) (MAX_LPM_ZONE_IPV4(u) * (64 + 32 + 2 + 1)) 49 #define MAX_PFX_ENTRIES(u) (2 * (IPV4_PFX_ZERO(u))) 50 #define MAX_PFX_INDEX(u) (MAX_PFX_ENTRIES(u) - 1) 51 #define SOC_LPM_INIT_CHECK(u) (soc_lpm_state[(u)] != NULL) 52 #define SOC_LPM_STATE(u) (soc_lpm_state[(u)]) 53 #define SOC_LPM_STATE_START(u, pfx) (soc_lpm_state[(u)][(pfx)].start) 54 #define SOC_LPM_STATE_END(u, pfx) (soc_lpm_state[(u)][(pfx)].end) 55 #define SOC_LPM_STATE_PREV(u, pfx) (soc_lpm_state[(u)][(pfx)].prev) 56 #define SOC_LPM_STATE_NEXT(u, pfx) (soc_lpm_state[(u)][(pfx)].next) 57 #define SOC_LPM_STATE_VENT(u, pfx) (soc_lpm_state[(u)][(pfx)].vent) 58 #define SOC_LPM_STATE_FENT(u, pfx) (soc_lpm_state[(u)][(pfx)].fent) 59 #define SOC_LPM_STATE_HFENT(u, pfx) (soc_lpm_state[(u)][(pfx)].hfent) 60 #define SOC_LPM_PFX_IS_V4(u, pfx) ((soc_feature(u, soc_feature_l3_shared_defip_table) || \ 61 soc_feature(u, soc_feature_l3_kt2_shared_defip_table)) ? \ 62 ((pfx) >= IPV4_PFX_ZERO(u) ? TRUE : FALSE) : \ 63 ((((pfx) % (MAX_PFX_ENTRIES(u) / MAX_LPM_ZONE(u))) < IPV6_PFX_ZERO) ? TRUE : FALSE)) 64 #define SOC_LPM_PFX_IS_V6_64(u, pfx) ((soc_feature(u, soc_feature_l3_shared_defip_table) || \ 65 soc_feature(u, soc_feature_l3_kt2_shared_defip_table)) ? \ 66 ((pfx) < IPV4_PFX_ZERO(u) ? TRUE : FALSE) : \ 67 ((((pfx) % (MAX_PFX_ENTRIES(u) / MAX_LPM_ZONE(u))) >= IPV6_PFX_ZERO) ? TRUE : FALSE)) 68 69 #define SOC_LPM128_PFX_IS_V6_128(u, pfx) \ 70 ((pfx) >= (MAX_PFX_64_OFFSET + MAX_PFX_32_OFFSET) && ((pfx) < MAX_PFX128_INDEX)) 71 #define SOC_LPM128_PFX_IS_V6_64(u, pfx) \ 72 ((pfx) >= MAX_PFX_32_OFFSET && (pfx) < (MAX_PFX_64_OFFSET + MAX_PFX_32_OFFSET)) 73 #define SOC_LPM128_PFX_IS_V4(u, pfx) ((pfx) < MAX_PFX_32_OFFSET && (pfx) >= 0) 74 #define SOC_LPM128_PFX_IS_V6(u, pfx) (!SOC_LPM128_PFX_IS_V4(u, (pfx))) && ((pfx) < MAX_PFX128_INDEX) 75 #define SOC_LPM_STAT_INIT_CHECK(u) (soc_lpm_stat[u] != NULL) 76 #define SOC_LPM_V4_COUNT(u) (soc_lpm_stat[u]->used_v4_count) 77 #define SOC_LPM_64BV6_COUNT(u) (soc_lpm_stat[u]->used_64b_count) 78 #define SOC_LPM_128BV6_COUNT(u) (soc_lpm_stat[u]->used_128b_count) 79 #define SOC_LPM_MAX_V4_COUNT(u) (soc_lpm_stat[u]->max_v4_count) 80 #define SOC_LPM_MAX_64BV6_COUNT(u) (soc_lpm_stat[u]->max_64b_count) 81 #define SOC_LPM_MAX_128BV6_COUNT(u) (soc_lpm_stat[u]->max_128b_count) 82 #define SOC_LPM_V4_HALF_ENTRY_COUNT(u) (soc_lpm_stat[u]->half_entry_count) 83 #define SOC_LPM_COUNT_INC(val) (val)++ 84 #define SOC_LPM_COUNT_DEC(val) (val)-- 85 #ifdef FB_LPM_DEBUG 86 #define SOC_LPM_V4_COUNT2(u) (soc_lpm_stat[u]->used_v4_count2) 87 #define SOC_LPM_64BV6_COUNT2(u) (soc_lpm_stat[u]->used_64b_count2) 88 #define SOC_LPM_V4_HALF_ENTRY_COUNT2(u) (soc_lpm_stat[u]->half_entry_count2) 89 #define SOC_LPM_V4_COUNT1(u) (soc_lpm_stat[u]->used_v4_count1) 90 #define SOC_LPM_64BV6_COUNT1(u) (soc_lpm_stat[u]->used_64b_count1) 91 #define SOC_LPM_V4_HALF_ENTRY_COUNT1(u) (soc_lpm_stat[u]->half_entry_count1) 92 #endif 93 94 #define SOC_EXT_LPM_STAT_INIT_CHECK(u) (soc_ext_lpm_stat[u] != NULL) 95 #define SOC_EXT_LPM_V4_COUNT(u) (soc_ext_lpm_stat[u]->used_v4_count) 96 #define SOC_EXT_LPM_64BV6_COUNT(u) (soc_ext_lpm_stat[u]->used_64b_count) 97 #define SOC_EXT_LPM_128BV6_COUNT(u) (soc_ext_lpm_stat[u]->used_128b_count) 98 #define SOC_EXT_LPM_MAX_V4_COUNT(u) (soc_ext_lpm_stat[u]->max_v4_count) 99 #define SOC_EXT_LPM_MAX_64BV6_COUNT(u) (soc_ext_lpm_stat[u]->max_64b_count) 100 #define SOC_EXT_LPM_MAX_128BV6_COUNT(u) (soc_ext_lpm_stat[u]->max_128b_count) 101 #define SOC_EXT_LPM_COUNT_INC(val) (val)++ 102 #define SOC_EXT_LPM_COUNT_DEC(val) (val)-- 103 104 typedef struct soc_lpm_stat_s { 105 uint16 used_v4_count; 106 uint16 used_64b_count; 107 uint16 used_128b_count; 108 uint16 max_v4_count; 109 uint16 max_64b_count; 110 uint16 max_128b_count; 111 uint16 half_entry_count; 112 #ifdef FB_LPM_DEBUG 113 uint16 used_v4_count2; 114 uint16 used_64b_count2; 115 uint16 used_128b_count2; 116 uint16 half_entry_count2; 117 uint16 used_v4_count1; 118 uint16 used_64b_count1; 119 uint16 used_128b_count1; 120 uint16 half_entry_count1; 121 #endif 122 } soc_lpm_stat_t; 123 typedef soc_lpm_stat_t *soc_lpm_stat_p; 124 125 typedef struct soc_lpm_state_s { 126 int start; /* start index for this prefix length */ 127 int end; /* End index for this prefix length */ 128 int prev; /* Previous (Lo to Hi) prefix length with non zero entry count*/ 129 int next; /* Next (Hi to Lo) prefix length with non zero entry count */ 130 int vent; /* valid entries */ 131 int fent; /* free entries */ 132 uint8 hfent; /* Indicates Half free entry available for v4 entries. */ 133 } soc_lpm_state_t; 134 typedef soc_lpm_state_t *soc_lpm_state_p; 135 136 typedef struct soc_ext_lpm_stat_s { 137 uint16 used_v4_count; 138 uint16 used_64b_count; 139 uint16 used_128b_count; 140 uint16 max_v4_count; 141 uint16 max_64b_count; 142 uint16 max_128b_count; 143 } soc_ext_lpm_stat_t; 144 typedef soc_ext_lpm_stat_t *soc_ext_lpm_stat_p; 145 146 /* 147 * The idea of these offsets is to create unique space for each prefix type 148 * The precedence is as follows 149 * 128BV6 > 64B V6 > V4 irrespective of whether the entry is public or private 150 * i.e any prefix of V4 is lesser than min prefix of 64B V6 and any prefix of 151 * 64B V6 is lesser than 128B V6 from software perspective 152 */ 153 #if defined(BCM_TRIDENT3_SUPPORT) 154 #define MAX_PFX_128_OFFSET (6 * 129) 155 #define MAX_PFX_64_OFFSET (6 * 65) 156 #define MAX_PFX_32_OFFSET (6 * 33) 157 #else 158 #define MAX_PFX_128_OFFSET (3 * 129) 159 #define MAX_PFX_64_OFFSET (3 * 65) 160 #define MAX_PFX_32_OFFSET (3 * 33) 161 #endif 162 #define MAX_PFX128_ENTRIES (MAX_PFX_128_OFFSET + \ 163 MAX_PFX_64_OFFSET + \ 164 MAX_PFX_32_OFFSET + 2) 165 #define MAX_PFX128_INDEX (MAX_PFX128_ENTRIES - 1) 166 #define SOC_LPM128_STATE_TABLE(u) (soc_lpm128_state_table[u]) 167 #define SOC_LPM128_STATE_TABLE_INIT_CHECK(u) \ 168 (soc_lpm128_state_table[(u)] != NULL) 169 #define SOC_LPM128_STATE_TABLE_TOTAL_COUNT(u) \ 170 (soc_lpm128_state_table[u]->total_count) 171 172 #define SOC_LPM128_INIT_CHECK(u) \ 173 (soc_lpm128_state_table[(u)]->soc_lpm_state != NULL) 174 #define SOC_LPM128_STATE(u) \ 175 (soc_lpm128_state_table[(u)]->soc_lpm_state) 176 #define SOC_LPM128_STATE_START1(u, lpm_state, pfx) (lpm_state[pfx].start1) 177 #define SOC_LPM128_STATE_START2(u, lpm_state, pfx) (lpm_state[pfx].start2) 178 #define SOC_LPM128_STATE_END1(u, lpm_state, pfx) (lpm_state[pfx].end1) 179 #define SOC_LPM128_STATE_END2(u, lpm_state, pfx) (lpm_state[pfx].end2) 180 #define SOC_LPM128_STATE_PREV(u, lpm_state, pfx) (lpm_state[pfx].prev) 181 #define SOC_LPM128_STATE_NEXT(u, lpm_state, pfx) (lpm_state[pfx].next) 182 #define SOC_LPM128_STATE_VENT(u, lpm_state, pfx) (lpm_state[pfx].vent) 183 #define SOC_LPM128_STATE_FENT(u, lpm_state, pfx) (lpm_state[pfx].fent) 184 #define SOC_LPM128_STATE_HFENT(u, lpm_state, pfx) (lpm_state[pfx].hfent) 185 186 #define SOC_LPM128_UNRESERVED_INIT_CHECK(u) \ 187 (soc_lpm128_state_table[(u)]->soc_lpm_unreserved_state != NULL) 188 #define SOC_LPM128_UNRESERVED_STATE(u) \ 189 (soc_lpm128_state_table[(u)]->soc_lpm_unreserved_state) 190 191 #define SOC_LPM128_INDEX_TO_PFX_GROUP_TABLE(u) \ 192 soc_lpm128_index_to_pfx_group[u] 193 #define SOC_LPM128_INDEX_TO_PFX_GROUP(u, index) \ 194 soc_lpm128_index_to_pfx_group[u][index] 195 196 #define SOC_LPM128_STAT_V4_COUNT(u) \ 197 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_v4_count) 198 #define SOC_LPM128_STAT_64BV6_COUNT(u) \ 199 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_64b_count) 200 #define SOC_LPM128_STAT_128BV6_COUNT(u) \ 201 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_128b_count) 202 #define SOC_LPM128_STAT_MAX_V4_COUNT(u) \ 203 (soc_lpm128_state_table[(u)]->soc_lpm_stat.max_v4_count) 204 #define SOC_LPM128_STAT_MAX_64BV6_COUNT(u) \ 205 (soc_lpm128_state_table[(u)]->soc_lpm_stat.max_64b_count) 206 #define SOC_LPM128_STAT_MAX_128BV6_COUNT(u) \ 207 (soc_lpm128_state_table[(u)]->soc_lpm_stat.max_128b_count) 208 #define SOC_LPM128_STAT_V4_HALF_ENTRY_COUNT(u) \ 209 (soc_lpm128_state_table[(u)]->soc_lpm_stat.half_entry_count) 210 #ifdef FB_LPM_DEBUG 211 #define SOC_LPM128_STAT_V4_COUNT2(u) \ 212 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_v4_count2) 213 #define SOC_LPM128_STAT_64BV6_COUNT2(u) \ 214 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_64b_count2) 215 #define SOC_LPM128_STAT_128BV6_COUNT2(u) \ 216 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_128b_count2) 217 #define SOC_LPM128_STAT_V4_HALF_ENTRY_COUNT2(u) \ 218 (soc_lpm128_state_table[(u)]->soc_lpm_stat.half_entry_count2) 219 #define SOC_LPM128_STAT_V4_COUNT1(u) \ 220 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_v4_count1) 221 #define SOC_LPM128_STAT_64BV6_COUNT1(u) \ 222 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_64b_count1) 223 #define SOC_LPM128_STAT_128BV6_COUNT1(u) \ 224 (soc_lpm128_state_table[(u)]->soc_lpm_stat.used_128b_count1) 225 #define SOC_LPM128_STAT_V4_HALF_ENTRY_COUNT1(u) \ 226 (soc_lpm128_state_table[(u)]->soc_lpm_stat.half_entry_count1) 227 #endif 228 /* 229 * This structure maintains 128B V6, 64B V6, V4 prefix groups 230 * Ideally all entries of same length should be contigous. 231 * But for V4, the entries may not be continous because V6 entries occupy odd 232 * TCAM entries as well. So if the V4 prefix is not continous, start2 and end2 233 * are used to represent this split. 234 * In case of V6 entries, if end1 is crossing tcam boundary, then we add offset 235 * of tcam_depth(1024) as we start V6 entry in the odd TCAM. However start2, 236 * end2 are not set. 237 * fent: For V6 fent of 2 represents 2 entries end1 + 1 and end1 + 1 + 1024. 238 * For V4 prefixes fent of 2 represents entries end1/end2 + 1, 239 * end1/end2 + 2 240 * vent: For V6 or V4 if we add a entry then vent will be increased by 1. 241 */ 242 243 typedef struct soc_lpm128_state_s { 244 int start1; /* start index for this prefix length */ 245 int start2; /* start index for this prefix length */ 246 int end1; /* End index for this prefix length */ 247 int end2; /* End index for this prefix length */ 248 int prev; /* Previous (Lo to Hi) prefix length with non zero entry count*/ 249 int next; /* Next (Hi to Lo) prefix length with non zero entry count */ 250 int vent; /* valid entries */ 251 int fent; /* free entries */ 252 uint8 hfent; /* Indicates Half free entry available for v4 entries. */ 253 } soc_lpm128_state_t; 254 typedef soc_lpm128_state_t *soc_lpm128_state_p; 255 256 typedef struct soc_lpm128_table_s { 257 soc_lpm128_state_p soc_lpm_state; 258 soc_lpm128_state_p soc_lpm_unreserved_state; 259 uint16 total_count; 260 soc_lpm_stat_t soc_lpm_stat; 261 } soc_lpm128_table_t; 262 263 typedef enum soc_lpm_entry_type_s { 264 socLpmEntryTypeV4 = 0x1, 265 socLpmEntryType64BV6 = 0x02, 266 socLpmEntryType128BV6 = 0x04, 267 socLpmEntryTypeLast = 0x08 268 } soc_lpm_entry_type_t; 269 270 extern soc_lpm_state_p soc_lpm_state[SOC_MAX_NUM_DEVICES]; 271 extern soc_lpm_stat_p soc_lpm_stat[SOC_MAX_NUM_DEVICES]; 272 extern soc_lpm128_table_t *soc_lpm128_state_table[SOC_MAX_NUM_DEVICES]; 273 extern soc_ext_lpm_stat_p soc_ext_lpm_stat[SOC_MAX_NUM_DEVICES]; 274 275 extern int soc_fb_lpm_state_config(int u, int ipv6_64_depth, int start); 276 extern int soc_fb_lpm_init(int u); 277 extern int soc_fb_lpm_deinit(int u); 278 extern int soc_fb_lpm_insert(int unit, void *entry); 279 extern int soc_fb_lpm_insert_index(int unit, void *entry, int index); 280 extern int soc_fb_lpm_delete(int u, void *key_data); 281 extern int soc_fb_lpm_delete_index(int u, void *key_data, int index); 282 extern int soc_fb_lpm_match(int u, void *key_data, void *e, int *index_ptr); 283 extern int soc_fb_lpm_ipv4_delete_index(int u, int index); 284 extern int soc_fb_lpm_ipv6_delete_index(int u, int index); 285 extern int soc_fb_lpm_ip4entry0_to_0(int u, void *src, void *dst, int copy_hit); 286 extern int soc_fb_lpm_ip4entry1_to_1(int u, void *src, void *dst, int copy_hit); 287 extern int soc_fb_lpm_ip4entry0_to_1(int u, void *src, void *dst, int copy_hit); 288 extern int soc_fb_lpm_ip4entry1_to_0(int u, void *src, void *dst, int copy_hit); 289 extern int soc_fb_lpm_vrf_get(int unit, void *lpm_entry, int *vrf); 290 extern int soc_fb_lpm128_init(int u); 291 extern int soc_fb_lpm128_deinit(int u); 292 extern int soc_fb_get_largest_prefix(int u, int ipv6, void *e, 293 int *index, int *pfx_len, int* count); 294 extern int soc_fb_lpm128_insert(int u, void *hw_entry_lwr, void *hw_entry_upr, 295 int *index); 296 extern int soc_fb_lpm128_match(int u, 297 void *key_data, 298 void *key_data_upr, 299 void *e, /* return entry data if found */ 300 void *eupr, /* return entry data if found */ 301 int *index_ptr, 302 int *pfx, 303 soc_lpm_entry_type_t *type); 304 extern int soc_fb_lpm128_delete(int u, void *key_data, void* key_data_upr); 305 extern int soc_fb_lpm_tcam_pair_count_get(int u, int *tcam_pair_count); 306 extern int soc_fb_lpm128_get_smallest_movable_prefix(int u, int ipv6, void *e, 307 void *eupr, int *index, 308 int *pfx_len, int *count); 309 int soc_fb_lpm128_is_v4_64b_allowed_in_paired_tcam(int unit); 310 int soc_fb_lpm_table_sizes_get(int unit, int *paired_table_size, 311 int *defip_table_size); 312 int soc_lpm_max_v4_route_get(int u, int *entries); 313 int soc_lpm_max_64bv6_route_get(int u, int *entries); 314 int soc_lpm_max_128bv6_route_get(int u, int *entries); 315 int soc_lpm_free_v4_route_get(int u, int *entries); 316 int soc_lpm_free_64bv6_route_get(int u, int *entries); 317 int soc_lpm_free_128bv6_route_get(int u, int *entries); 318 int soc_lpm_used_v4_route_get(int u, int *entries); 319 int soc_lpm_used_64bv6_route_get(int u, int *entries); 320 int soc_lpm_used_128bv6_route_get(int u, int *entries); 321 int soc_fb_lpm_stat_init(int u); 322 int soc_fb_lpm128_stat_init(int u); 323 void soc_lpm_stat_128b_count_update(int u, int incr); 324 int soc_lpm_reserved_route_get(int u, int *v4_entries, 325 int *v6_64_entries, 326 int *v6_128_entries); 327 int soc_lpm_fb_urpf_entry_replicate_index_offset(int unit, 328 int *offset); 329 330 #ifdef BCM_KATANA_SUPPORT 331 332 typedef struct soc_kt_lpm_ipv6_cfg_s { 333 uint32 sip_start_offset; 334 uint32 dip_start_offset; 335 uint32 depth; 336 } soc_kt_lpm_ipv6_cfg_t; 337 338 typedef struct soc_kt_lpm_info_s { 339 soc_kt_lpm_ipv6_cfg_t ipv6_128b; 340 soc_kt_lpm_ipv6_cfg_t ipv6_64b; 341 } soc_kt_lpm_ipv6_info_t; 342 343 extern soc_kt_lpm_ipv6_info_t *soc_kt_lpm_ipv6_info_get(int unit); 344 #endif 345 #ifdef BCM_WARM_BOOT_SUPPORT 346 extern int soc_fb_lpm_reinit(int unit, int idx, uint32 *lpm_entry); 347 extern int soc_fb_lpm_reinit_done(int unit, int ipv6); 348 extern int soc_fb_lpm128_reinit(int unit, int idx, uint32 *lpm_entry, 349 uint32 *lpm_entry_upr); 350 extern int soc_fb_lpm128_reinit_done(int unit, int ipv6); 351 352 #else 353 #define soc_fb_lpm_reinit(u, t, s) (SOC_E_UNAVAIL) 354 #define soc_fb_lpm_reinit_done(u, i) (SOC_E_UNAVAIL) 355 #define soc_fb_lpm128_reinit(u, i, l, l1) (SOC_E_UNAVAIL) 356 #define soc_fb_lpm128_reinit_done(u, i) (SOC_E_UNAVAIL) 357 #endif /* BCM_WARM_BOOT_SUPPORT */ 358 359 #ifndef BCM_SW_STATE_DUMP_DISABLE 360 extern void soc_fb_lpm_sw_dump(int unit); 361 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 362 363 /* Ranger2PLUS scale numbers with RPF */ 364 #define R2P_V4_MAX 512 365 #define R2P_64V6_MAX 256 366 #define R2P_128V6_MAX 128 367 368 #endif /* BCM_FIREBOLT_SUPPORT */ 369 370 #endif /* !_LPM_H_ */