lpmv6.h (4041B)
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 * File: lpmv6.h 8 * Purpose: Function declarations for LPMV6 Internal functions. 9 */ 10 11 #ifndef _BCM_INT_LPMV6_H 12 #define _BCM_INT_LPMV6_H 13 14 #include <bcm_int/esw/firebolt.h> 15 #include <bcm_int/esw/l3.h> 16 17 #define _BCM_DEFIP_TCAM_DEPTH 1024 18 #define _BCM_DEFIP_TCAM_NUM 8 19 20 /* L3 LPM state */ 21 #define BCM_DEFIP_PAIR128_HASH_SZ (0x6) 22 #define BCM_DEFIP_PAIR128(_unit_) l3_defip_pair128[(_unit_)] 23 #define BCM_DEFIP_PAIR128_INIT_CHECK(_unit_) (l3_defip_pair128[(_unit_)] != NULL) 24 #define BCM_DEFIP_PAIR128_ARR(_unit_) BCM_DEFIP_PAIR128((_unit_))->entry_array 25 #define BCM_DEFIP_PAIR128_IDX_MAX(_unit_) BCM_DEFIP_PAIR128((_unit_))->idx_max 26 #define BCM_DEFIP_PAIR128_USED_COUNT(_unit_) BCM_DEFIP_PAIR128((_unit_))->used_count 27 #define BCM_DEFIP_PAIR128_TOTAL(_unit_) BCM_DEFIP_PAIR128((_unit_))->total_count 28 #define BCM_DEFIP_PAIR128_URPF_OFFSET(_unit_) BCM_DEFIP_PAIR128((_unit_))->urpf_offset 29 #define BCM_DEFIP_PAIR128_ENTRY_SET(_unit_, _idx_, _plen_, _hash_) \ 30 BCM_DEFIP_PAIR128_ARR((_unit_))[(_idx_)].prefix_len = (_plen_); \ 31 BCM_DEFIP_PAIR128_ARR((_unit_))[(_idx_)].entry_hash = (_hash_) 32 33 typedef struct _bcm_defip_pair128_entry_s { 34 uint16 prefix_len; /* Route entry prefix length.*/ 35 uint16 entry_hash; /* Route entry key hash. */ 36 } _bcm_defip_pair128_entry_t; 37 38 typedef struct _bcm_defip_pair128_table_s { 39 _bcm_defip_pair128_entry_t *entry_array; /* Cam entries array. */ 40 uint16 idx_max; /* Last cam entry index. */ 41 uint16 used_count; /* Used cam entry count. */ 42 uint16 total_count; /* Total number of available entries.*/ 43 uint16 urpf_offset; /* Src lookup start offset. */ 44 } _bcm_defip_pair128_table_t; 45 46 #if defined(INCLUDE_L3) 47 48 /* LPM */ 49 extern _bcm_defip_pair128_table_t *l3_defip_pair128[BCM_MAX_NUM_UNITS]; 50 51 extern int _bcm_l3_lpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, 52 int *nh_ecmp_idx); 53 extern int _bcm_l3_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, 54 int nh_ecmp_idx); 55 extern int _bcm_l3_lpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg); 56 extern int _bcm_l3_lpm_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data); 57 extern int _bcm_l3_defip_init(int unit); 58 extern int _bcm_l3_defip_deinit(int unit); 59 extern int _bcm_l3_defip_urpf_enable(int unit, int enable); 60 extern int _bcm_defip_pair128_deinit(int unit); 61 extern int _bcm_l3_defip_pair128_get(int unit, _bcm_defip_cfg_t *lpm_cfg, 62 int *nh_ecmp_idx); 63 extern int _bcm_l3_defip_pair128_add(int unit, _bcm_defip_cfg_t *lpm_cfg, 64 int nh_ecmp_idx); 65 extern int _bcm_l3_defip_pair128_del(int unit, _bcm_defip_cfg_t *lpm_cfg); 66 extern int _bcm_l3_defip_pair128_update_match(int unit, 67 _bcm_l3_trvrs_data_t *trv_data); 68 extern int _bcm_l3_scaled_lpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, 69 int *nh_ecmp_idx); 70 extern int _bcm_l3_scaled_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, 71 int nh_ecmp_idx); 72 extern int _bcm_l3_scaled_lpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg); 73 extern int _bcm_l3_lpm128_ripple_entries(int unit); 74 extern int _bcm_l3_lpm_ripple_entries(int unit, _bcm_defip_cfg_t *lpm_cfg, 75 int new_nh_ecmp_idx); 76 extern int _bcm_l3_scaled_lpm_update_match(int unit, 77 _bcm_l3_trvrs_data_t *trv_data); 78 extern int _bcm_defip_pair128_field_cache_init(int unit); 79 80 extern int _bcm_defip_pair128_idx_alloc(int unit, _bcm_defip_cfg_t *lpm_cfg, 81 int *hw_index, int nh_ecmp_idx); 82 #endif /* INCLUDE_L3 */ 83 #endif