]> git.ipfire.org Git - thirdparty/nftables.git/commit
src: collapse set element commands from parser
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 23 Oct 2024 09:43:58 +0000 (11:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 28 Oct 2024 22:18:41 +0000 (23:18 +0100)
commit20f1c60ac8c88be3bdf3096083b24ada06570a77
tree97a2b149822621a3bbec52961b3f6610aceffee3
parent570320ab9a0752c7749a6c9cc85b34a5e7ab91b5
src: collapse set element commands from parser

498a5f0c219d ("rule: collapse set element commands") does not help to
reduce memory consumption in the case of large sets defined by one
element per line:

 add element ip x y { 1.1.1.1 }
 add element ip x y { 1.1.1.2 }
 ...

This patch reduces memory consumption by ~75%, set elements are
collapsed into an existing cmd object wherever possible to reduce the
number of cmd objects.

This patch also adds a special case for variables for sets similar to:

  be055af5c58d ("cmd: skip variable set elements when collapsing commands")

This patch requires this small kernel fix:

 commit b53c116642502b0c85ecef78bff4f826a7dd4145
 Author: Pablo Neira Ayuso <pablo@netfilter.org>
 Date:   Fri May 20 00:02:06 2022 +0200

    netfilter: nf_tables: set element extended ACK reporting support

which is already included in recent -stable kernels:

 # cat ruleset.nft
 add table ip x
 add chain ip x y
 add set ip x y { type ipv4_addr; }
 create element ip x y { 1.1.1.1 }
 create element ip x y { 1.1.1.1 }

 # nft -f ruleset.nft
 ruleset.nft:5:25-31: Error: Could not process rule: File exists
 create element ip x y { 1.1.1.1 }
                         ^^^^^^^

since there is no need to relate commands via sequence number anymore,
this allows also removes the uncollapse step.

Fixes: 498a5f0c219d ("rule: collapse set element commands")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/cmd.h
include/expression.h
include/list.h
include/rule.h
src/cmd.c
src/libnftables.c
src/parser_bison.y
src/rule.c