From 6089630f54cecada1fcb91e12ad5eb1811010e48 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Wed, 19 Jul 2017 15:05:27 +0200 Subject: segtree: Introduce flag for half-open range elements This flag is required by userspace only, so can live within userdata. It's sole purpose is for 'nft monitor' to detect half-open ranges (which are comprised of a single element only). Signed-off-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- src/segtree.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/segtree.c') diff --git a/src/segtree.c b/src/segtree.c index f5353621..34a00161 100644 --- a/src/segtree.c +++ b/src/segtree.c @@ -37,6 +37,7 @@ struct seg_tree { enum elementary_interval_flags { EI_F_INTERVAL_END = 0x1, + EI_F_INTERVAL_OPEN = 0x2, }; /** @@ -512,6 +513,8 @@ static void segtree_linearize(struct list_head *list, const struct set *set, mpz_bitmask(q, tree->keylen); nei = ei_alloc(p, q, NULL, EI_F_INTERVAL_END); list_add_tail(&nei->list, list); + } else { + prev->flags |= EI_F_INTERVAL_OPEN; } mpz_clear(p); @@ -538,6 +541,8 @@ static void set_insert_interval(struct expr *set, struct seg_tree *tree, if (ei->flags & EI_F_INTERVAL_END) expr->flags |= EXPR_F_INTERVAL_END; + if (ei->flags & EI_F_INTERVAL_OPEN) + expr->elem_flags |= SET_ELEM_F_INTERVAL_OPEN; compound_expr_add(set, expr); } -- cgit v1.2.3