MCPcopy Create free account
hub / github.com/F-Stack/f-stack / build_trie

Function build_trie

dpdk/lib/acl/acl_bld.c:944–1070  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

942}
943
944static struct rte_acl_node *
945build_trie(struct acl_build_context *context, struct rte_acl_build_rule *head,
946 struct rte_acl_build_rule **last, uint32_t *count)
947{
948 uint32_t n, m;
949 int field_index, node_count;
950 struct rte_acl_node *trie;
951 struct rte_acl_build_rule *prev, *rule;
952 struct rte_acl_node *end, *merge, *root, *end_prev;
953 const struct rte_acl_field *fld;
954
955 prev = head;
956 rule = head;
957 *last = prev;
958
959 trie = acl_alloc_node(context, 0);
960
961 while (rule != NULL) {
962
963 root = acl_alloc_node(context, 0);
964
965 root->ref_count = 1;
966 end = root;
967
968 for (n = 0; n < rule->config->num_fields; n++) {
969
970 field_index = rule->config->defs[n].field_index;
971 fld = rule->f->field + field_index;
972 end_prev = end;
973
974 /* build a mini-trie for this field */
975 switch (rule->config->defs[n].type) {
976
977 case RTE_ACL_FIELD_TYPE_BITMASK:
978 merge = acl_gen_mask_trie(context,
979 &fld->value,
980 &fld->mask_range,
981 rule->config->defs[n].size,
982 end->level + 1,
983 &end);
984 break;
985
986 case RTE_ACL_FIELD_TYPE_MASK:
987 {
988 /*
989 * set msb for the size of the field and
990 * all higher bits.
991 */
992 uint64_t mask;
993 mask = RTE_ACL_MASKLEN_TO_BITMASK(
994 fld->mask_range.u64,
995 rule->config->defs[n].size);
996
997 /* gen a mini-trie for this field */
998 merge = acl_gen_mask_trie(context,
999 &fld->value,
1000 (char *)&mask,
1001 rule->config->defs[n].size,

Callers 1

build_one_trieFunction · 0.85

Calls 5

acl_alloc_nodeFunction · 0.85
acl_gen_mask_trieFunction · 0.85
acl_gen_range_trieFunction · 0.85
acl_merge_trieFunction · 0.85
acl_build_allocFunction · 0.85

Tested by

no test coverage detected