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

alpm_trie_v6.h (4456B)


      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  * trie IPv6 data structure
      7  */
      8 
      9 #ifndef _ESW_TRIDENT2_ALPM_TRIE_V6_H_
     10 #define _ESW_TRIDENT2_ALPM_TRIE_V6_H_
     11 
     12 #ifdef ALPM_ENABLE
     13 #ifndef ALPM_IPV6_128_SUPPORT
     14 extern int _trie_v6_search(trie_node_t *trie,
     15 			   unsigned int *key,
     16 			   unsigned int length,
     17 			   trie_node_t **payload,
     18 			   unsigned int *result_key,
     19 			   unsigned int *result_len,
     20                unsigned int dump,
     21                unsigned int find_pivot);
     22 
     23 extern int _trie_v6_find_lpm(trie_node_t *trie,
     24 			     unsigned int *key,
     25 			     unsigned int length,
     26 			     trie_node_t **payload,
     27 			     trie_callback_f cb,
     28 			     void *user_data,
     29 			     unsigned int exclude_self);
     30 
     31 extern int _trie_v6_find_bpm(trie_node_t *trie,
     32 			     unsigned int *key,
     33 			     unsigned int length,
     34 			     int *bpm_length);
     35 
     36 extern int _trie_v6_bpm_mask_get(trie_node_t *trie,
     37                 unsigned int *key,
     38                 unsigned int length,
     39                 unsigned int *bpm_mask);
     40 
     41 extern int _trie_v6_skip_node_free(trie_node_t *trie,
     42                             unsigned int *key,
     43                             unsigned int length);
     44 
     45 extern int _trie_v6_skip_node_alloc(trie_node_t **node,
     46 				    unsigned int *key,
     47 				    /* bpm bit map if bpm management is required, passing null skips bpm management */
     48 				    unsigned int *bpm, 
     49 				    unsigned int msb, /* NOTE: valid msb position 1 based, 0 means skip0/0 node */
     50 				    unsigned int skip_len,
     51 				    trie_node_t *payload,
     52 				    unsigned int count);
     53 
     54 extern int _trie_v6_insert(trie_node_t *trie, 
     55 			   unsigned int *key, 
     56 			   /* bpm bit map if bpm management is required, passing null skips bpm management */
     57 			   unsigned int *bpm, 
     58 			   unsigned int length,
     59 			   trie_node_t *payload, /* payload node */
     60                trie_node_t **child, /* child pointer if the child is modified */
     61                int child_count);
     62 
     63 extern int _trie_v6_delete(trie_node_t *trie, 
     64 			   unsigned int *key,
     65 			   unsigned int length,
     66 			   trie_node_t **payload,
     67 			   trie_node_t **child);
     68 
     69 extern int _trie_v6_split(trie_node_t  *trie,
     70 			  unsigned int *pivot,
     71 			  unsigned int *length,
     72 			  unsigned int *split_count,
     73 			  trie_node_t **split_node,
     74 			  trie_node_t **child,
     75 			  const unsigned int max_count,
     76 			  const unsigned int max_split_len,
     77 			  const int split_to_pair,
     78 			  unsigned int *bpm,
     79 			  trie_split_states_e_t *state,
     80 			  int max_split_count);
     81 
     82 extern int _trie_v6_merge(trie_node_t *parent_trie,
     83                           trie_node_t *child_trie,
     84                           unsigned int *child_pivot,
     85                           unsigned int length,
     86                           trie_node_t **new_parent);
     87 
     88 extern int _trie_v6_split2(trie_node_t *trie,
     89                            unsigned int *key,
     90                            unsigned int key_len,
     91                            unsigned int *pivot,
     92                            unsigned int *pivot_len,
     93                            unsigned int *split_count,
     94                            trie_node_t **split_node,
     95                            trie_node_t **child,
     96                            trie_split2_states_e_t *state,
     97                            const int max_split_count,
     98                            const int exact_same);
     99 
    100 extern int _trie_v6_propagate_prefix(trie_node_t *trie,
    101 				     unsigned int *pfx,
    102 				     unsigned int len,
    103 				     unsigned int add, /* 0-del/1-add */
    104 				     trie_propagate_cb_f cb,
    105 				     trie_bpm_cb_info_t *cb_info);
    106 
    107 extern int trie_v6_pivot_propagate_prefix(trie_node_t *pivot,
    108 					  unsigned int pivot_len,
    109 					  unsigned int *pfx,
    110 					  unsigned int len,
    111 					  unsigned int add, /* 0-del/1-add */
    112 					  trie_propagate_cb_f cb,
    113 					  trie_bpm_cb_info_t *cb_info);
    114 
    115 extern int pvt_trie_v6_propagate_prefix(trie_node_t *pivot,
    116                     unsigned int pivot_len,
    117                     unsigned int *pfx,
    118                     unsigned int len,
    119                     trie_propagate_cb_f cb,
    120                     trie_bpm_cb_info_t *cb_info);
    121 
    122 extern int tmu_trie_v6_split_ut(unsigned int seed);
    123 
    124 extern int tmu_taps_trie_v6_ut(int id, unsigned int seed);
    125 
    126 extern int tmu_taps_bpm_trie_v6_ut(int id, unsigned int seed);
    127 
    128 #endif /* ALPM_IPV6_128_SUPPORT */
    129 #endif /* ALPM_ENABLE */
    130 #endif /* _ESW_TRIDENT2_ALPM_TRIE_V6_H_ */