From 763c124ef8132696e765a4be07e5b40024cd6148 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Wed, 14 Aug 2019 11:50:11 +0200 Subject: [PATCH] Filter/Trie: jump over branches that are never true in first iteration --- filter/trie.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/filter/trie.c b/filter/trie.c index adcfcdf3f..3fe388fbf 100644 --- a/filter/trie.c +++ b/filter/trie.c @@ -163,6 +163,8 @@ trie_add_prefix(struct f_trie *t, const net_addr *net, uint l, uint h) struct f_trie_node *o = NULL; struct f_trie_node *n = t->root; + switch (0) + { while (n) { ip_addr cmask = ipa_and(n->mask, pmask); @@ -197,6 +199,9 @@ trie_add_prefix(struct f_trie *t, const net_addr *net, uint l, uint h) return a; } + /* The two conditions until here are always false if n == t->root */ + case 0: + if (plen == n->plen) { /* We already found added node in trie. Just update accept mask */ @@ -211,6 +216,7 @@ trie_add_prefix(struct f_trie *t, const net_addr *net, uint l, uint h) o = n; n = n->c[ipa_getbit(paddr, n->plen) ? 1 : 0]; } + } /* We add new tail node 'a' after node 'o' */ struct f_trie_node *a = new_node(t, plen, paddr, pmask, amask); -- 2.47.2