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_ */