]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
intervals: do not empty cache for maps
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 16 Jun 2022 08:53:56 +0000 (10:53 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 18 Jun 2022 22:55:20 +0000 (00:55 +0200)
Translate set element to range and sort in maps for the NFT_SET_MAP
case, which does not support for automerge yet.

Fixes: 81e36530fcac ("src: replace interval segment tree overlap and automerge")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/intervals.c

index 89f5c33d7a6ec4c9b3c17993342b659e55b29773..e20341320da2ff8117ddaa9327b59bb0d82de842 100644 (file)
@@ -216,6 +216,12 @@ int set_automerge(struct list_head *msgs, struct cmd *cmd, struct set *set,
        struct cmd *purge_cmd;
        struct handle h = {};
 
+       if (set->flags & NFT_SET_MAP) {
+               set_to_range(init);
+               list_expr_sort(&init->expressions);
+               return 0;
+       }
+
        if (existing_set) {
                if (existing_set->init) {
                        list_splice_init(&existing_set->init->expressions,
@@ -229,9 +235,6 @@ int set_automerge(struct list_head *msgs, struct cmd *cmd, struct set *set,
        set_to_range(init);
        list_expr_sort(&init->expressions);
 
-       if (set->flags & NFT_SET_MAP)
-               return 0;
-
        ctx.purge = set_expr_alloc(&internal_location, set);
 
        setelem_automerge(&ctx);