]> git.ipfire.org Git - thirdparty/nftables.git/commit
evaluate: translate meter into dynamic set
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 6 Mar 2024 16:48:58 +0000 (17:48 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 12 Mar 2024 22:35:33 +0000 (23:35 +0100)
commitb8f8ddfff7335d3a8bebf5d85085974ae36f4099
treea7308bfb5a5a5de4397ab88de2bbddf9d53c0a14
parente828d933424470b495feb841b67b70ba216e8ecb
evaluate: translate meter into dynamic set

129f9d153279 ("nft: migrate man page examples with `meter` directive to
sets") already replaced meters by dynamic sets.

This patch removes NFT_SET_ANONYMOUS flag from the implicit set that is
instantiated via meter, so the listing shows a dynamic set instead which
is the recommended approach these days.

Therefore, a batch like this:

 add table t
 add chain t c
 add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 1s limit rate 10/second }

gets translated to a dynamic set:

 table ip t {
        set m {
                type ipv4_addr
                size 128
                flags dynamic,timeout
        }

        chain c {
                tcp dport 80 update @m { ip saddr timeout 1s limit rate 10/second burst 5 packets }
        }
 }

Check for NFT_SET_ANONYMOUS flag is also relaxed for list and flush
meter commands:

 # nft list meter ip t m
 table ip t {
        set m {
                type ipv4_addr
                size 128
                flags dynamic,timeout
        }
 }
 # nft flush meter ip t m

As a side effect the legacy 'list meter' and 'flush meter' commands allow
to flush a dynamic set to retain backward compatibility.

This patch updates testcases/sets/0022type_selective_flush_0 and
testcases/sets/0038meter_list_0 as well as the json output which now
uses the dynamic set representation.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/rule.h
src/evaluate.c
src/rule.c
tests/shell/testcases/sets/0022type_selective_flush_0
tests/shell/testcases/sets/0038meter_list_0
tests/shell/testcases/sets/dumps/0022type_selective_flush_0.json-nft
tests/shell/testcases/sets/dumps/0022type_selective_flush_0.nft
tests/shell/testcases/sets/dumps/0038meter_list_0.json-nft
tests/shell/testcases/sets/dumps/0038meter_list_0.nft