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

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