]> git.ipfire.org Git - thirdparty/nftables.git/log
thirdparty/nftables.git
3 years agorule: Avoid segfault with anonymous chains
Pablo Neira Ayuso [Thu, 17 Mar 2022 20:53:25 +0000 (21:53 +0100)] 
rule: Avoid segfault with anonymous chains

Phil Sutter says:

"When trying to add a rule which contains an anonymous chain to a
non-existent chain, string_misspell_update() is called with a NULL
string because the anonymous chain has no name. Avoid this by making the
function NULL-pointer tolerant."

Fixes: c330152b7f777 ("src: support for implicit chain bindings")
Reported-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoevaluate: init cmd pointer for new on-stack context
Florian Westphal [Fri, 4 Mar 2022 10:30:55 +0000 (11:30 +0100)] 
evaluate: init cmd pointer for new on-stack context

else, this will segfault when trying to print the
"table 'x' doesn't exist" error message.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agooptimize: do not assume log prefix
Pablo Neira Ayuso [Fri, 4 Mar 2022 09:37:48 +0000 (10:37 +0100)] 
optimize: do not assume log prefix

... log prefix might not be present in log statements.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: do not merge unsupported statement expressions
Pablo Neira Ayuso [Thu, 3 Mar 2022 13:56:58 +0000 (14:56 +0100)] 
optimize: do not merge unsupported statement expressions

Only value, range, prefix, set and list are supported at this stage.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: incorrect assert() for unexpected expression type
Pablo Neira Ayuso [Thu, 3 Mar 2022 12:11:29 +0000 (13:11 +0100)] 
optimize: incorrect assert() for unexpected expression type

assert(1) is noop, this should be assert(0) instead.

Fixes: 561aa3cfa8da ("optimize: merge verdict maps with same lookup key")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: more robust statement merge with vmap
Pablo Neira Ayuso [Thu, 3 Mar 2022 12:06:59 +0000 (13:06 +0100)] 
optimize: more robust statement merge with vmap

Check expressions that are expected on the rhs rather than using a
catch-all default case.

Actually, lists and sets need to be their own routine, because this
needs the set element key expression to be merged.

This is a follow up to 99eb46969f3d ("optimize: fix vmap with anonymous
sets").

Fixes: 1542082e259b ("optimize: merge same selector with different verdict into verdict map")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: fix vmap with anonymous sets
Pablo Neira Ayuso [Thu, 3 Mar 2022 11:20:29 +0000 (12:20 +0100)] 
optimize: fix vmap with anonymous sets

The following example ruleset crashes:

 table inet a {
        chain b {
                tcp dport { 1 } accept
                tcp dport 2-3 drop
        }
 }

because handling for EXPR_SET is missing.

Fixes: 1542082e259b ("optimize: merge same selector with different verdict into verdict map")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoscanner: Fix for ipportmap nat statements
Phil Sutter [Wed, 2 Mar 2022 13:45:49 +0000 (14:45 +0100)] 
scanner: Fix for ipportmap nat statements

Due to lookahead, "addr" keyword is still found in IP/IP6 scope, not
STMT_NAT one.

Fixes: a67fce7ffe7e4 ("scanner: nat: Move to own scope")
Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: dup, fwd, tproxy: Move to own scopes
Phil Sutter [Fri, 30 Jul 2021 16:11:51 +0000 (18:11 +0200)] 
scanner: dup, fwd, tproxy: Move to own scopes

With these three scopes in place, keyword 'to' may be isolated.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: meta: Move to own scope
Phil Sutter [Fri, 30 Jul 2021 16:05:19 +0000 (18:05 +0200)] 
scanner: meta: Move to own scope

This allows to isolate 'length' and 'protocol' keywords shared by other
scopes as well.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: at: Move to own scope
Phil Sutter [Fri, 30 Jul 2021 15:43:26 +0000 (17:43 +0200)] 
scanner: at: Move to own scope

Modification of raw TCP option rule is a bit more complicated to avoid
pushing tcp_hdr_option_type into the introduced scope by accident.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: nat: Move to own scope
Phil Sutter [Fri, 30 Jul 2021 15:26:31 +0000 (17:26 +0200)] 
scanner: nat: Move to own scope

Unify nat, masquerade and redirect statements, they widely share their
syntax.

Note the workaround of adding "prefix" to SCANSTATE_IP. This is required
to fix for 'snat ip prefix ...' style expressions.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: policy: move to own scope
Phil Sutter [Fri, 30 Jul 2021 15:20:27 +0000 (17:20 +0200)] 
scanner: policy: move to own scope

Isolate 'performance' and 'memory' keywords.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: flags: move to own scope
Phil Sutter [Fri, 30 Jul 2021 15:13:39 +0000 (17:13 +0200)] 
scanner: flags: move to own scope

This isolates at least 'constant', 'dynamic' and 'all' keywords.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: reject: Move to own scope
Phil Sutter [Tue, 27 Jul 2021 14:38:59 +0000 (16:38 +0200)] 
scanner: reject: Move to own scope

Two more keywords isolated.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: import, export: Move to own scopes
Phil Sutter [Tue, 27 Jul 2021 14:35:14 +0000 (16:35 +0200)] 
scanner: import, export: Move to own scopes

In theory, one could use a common scope for both import and export
commands, their parameters are identical.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: reset: move to own Scope
Phil Sutter [Tue, 27 Jul 2021 16:55:39 +0000 (18:55 +0200)] 
scanner: reset: move to own Scope

Isolate two more keywords shared with list command.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: monitor: Move to own Scope
Phil Sutter [Fri, 23 Jul 2021 16:27:11 +0000 (18:27 +0200)] 
scanner: monitor: Move to own Scope

Some keywords are shared with list command.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: rt: Extend scope over rt0, rt2 and srh
Phil Sutter [Fri, 23 Jul 2021 16:15:42 +0000 (18:15 +0200)] 
scanner: rt: Extend scope over rt0, rt2 and srh

These are technically all just routing headers with different types, so
unify them under the same scope.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: type: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 16:08:47 +0000 (18:08 +0200)] 
scanner: type: Move to own scope

As a side-effect, this fixes for use of 'classid' as set data type.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: dst, frag, hbh, mh: Move to own scopes
Phil Sutter [Fri, 23 Jul 2021 15:39:55 +0000 (17:39 +0200)] 
scanner: dst, frag, hbh, mh: Move to own scopes

These are the remaining IPv6 extension header expressions, only rt
expression was scoped already.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: ah, esp: Move to own scopes
Phil Sutter [Fri, 23 Jul 2021 15:20:00 +0000 (17:20 +0200)] 
scanner: ah, esp: Move to own scopes

They share 'sequence' keyword with icmp and tcp expressions.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: osf: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 15:11:47 +0000 (17:11 +0200)] 
scanner: osf: Move to own scope

It shares two keywords with PARSER_SC_IP.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: dccp, th: Move to own scopes
Phil Sutter [Fri, 23 Jul 2021 15:05:27 +0000 (17:05 +0200)] 
scanner: dccp, th: Move to own scopes

With them in place, heavily shared keywords 'sport' and 'dport' may be
isolated.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: udp{,lite}: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 13:05:41 +0000 (15:05 +0200)] 
scanner: udp{,lite}: Move to own scope

All used keywords are shared with others, so no separation for now apart
from 'csumcov' which was actually missing from scanner.l.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: comp: Move to own scope.
Phil Sutter [Fri, 23 Jul 2021 12:56:02 +0000 (14:56 +0200)] 
scanner: comp: Move to own scope.

Isolates only 'cpi' keyword for now.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: synproxy: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 12:34:34 +0000 (14:34 +0200)] 
scanner: synproxy: Move to own scope

Quite a few keywords are shared with PARSER_SC_TCP.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: tcp: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 12:03:19 +0000 (14:03 +0200)] 
scanner: tcp: Move to own scope

Apart from header fields, this isolates TCP option types and
fields, too.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: igmp: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 11:09:57 +0000 (13:09 +0200)] 
scanner: igmp: Move to own scope

At least isolates 'mrt' and 'group' keywords, the latter is shared with
log statement.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: icmp{,v6}: Move to own scope
Phil Sutter [Fri, 23 Jul 2021 11:00:50 +0000 (13:00 +0200)] 
scanner: icmp{,v6}: Move to own scope

Unify the two, header fields are almost identical.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agosrc: add tcp option reset support
Florian Westphal [Mon, 20 Dec 2021 11:30:18 +0000 (12:30 +0100)] 
src: add tcp option reset support

This allows to replace a tcp option with nops, similar
to the TCPOPTSTRIP feature of iptables.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agobuild: explicitly pass --version-script to linker
Sam James [Thu, 24 Feb 2022 19:45:43 +0000 (19:45 +0000)] 
build: explicitly pass --version-script to linker

--version-script is a linker option, so let's use -Wl, so that
libtool handles it properly. It seems like the previous method gets silently
ignored with GNU libtool in some cases(?) and downstream in Gentoo,
we had to apply this change to make the build work with slibtool anyway.

But it's indeed correct in any case, so let's swap.

Signed-off-by: Sam James <sam@gentoo.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agolibnftables.map: export new nft_ctx_{get,set}_optimize API
Sam James [Thu, 24 Feb 2022 19:45:42 +0000 (19:45 +0000)] 
libnftables.map: export new nft_ctx_{get,set}_optimize API

[ Remove incorrect symbol names were exported via .map file ]

Without this, we're not explicitly saying this is part of the
public API.

This new API was added in 1.0.2 and is used by e.g. the main
nft binary. Noticed when fixing the version-script option
(separate patch) which picked up this problem when .map
was missing symbols (related to when symbol visibility
options get set).

Signed-off-by: Sam James <sam@gentoo.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agotests: add test case for flowtable with owner flag
Florian Westphal [Tue, 22 Feb 2022 12:51:09 +0000 (13:51 +0100)] 
tests: add test case for flowtable with owner flag

BUG: KASAN: use-after-free in nf_hook_entries_grow+0x675/0x980
Read of size 4 at ... nft/19662
 nf_hook_entries_grow+0x675/0x980

This is fixed by kernel commit 6069da443bf
("netfilter: nf_tables: unregister flowtable hooks on netns exit").

The test case here uses owner flag, netlink event handler doesn't
release the flowtable, next attempt to add one then causes uaf because
of dangling ingress hook reference.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoexamples: compile with `make check' and add AM_CPPFLAGS
Pablo Neira Ayuso [Mon, 21 Feb 2022 23:56:36 +0000 (00:56 +0100)] 
examples: compile with `make check' and add AM_CPPFLAGS

Compile examples via `make check' like libnftnl does. Use AM_CPPFLAGS to
specify local headers via -I.

Unfortunately, `make distcheck' did not catch this compile time error in
my system, since it was using the nftables/libnftables.h file of the
previous nftables release.

Fixes: 5b364657a35f ("build: missing SUBIRS update")
Fixes: caf2a6ad2d22 ("examples: add libnftables example program")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: missing SUBIRS update v1.0.2
Pablo Neira Ayuso [Mon, 21 Feb 2022 11:52:28 +0000 (12:52 +0100)] 
build: missing SUBIRS update

Add new examples folder, other `make distcheck' fails.

Fixes: caf2a6ad2d22 ("examples: add libnftables example program")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: Bump version to 1.0.2
Pablo Neira Ayuso [Mon, 21 Feb 2022 11:38:10 +0000 (12:38 +0100)] 
build: Bump version to 1.0.2

Still requires libnftnl 1.2.1

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoscanner: rt: Move seg-left keyword into scope
Phil Sutter [Fri, 23 Jul 2021 16:18:41 +0000 (18:18 +0200)] 
scanner: rt: Move seg-left keyword into scope

It's not used outside of rt_hdr_expr, so move it out of INIT scope.

Fixes: 8861db1b771a6 ("scanner: rt: move to own scope")
Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: Some time units are only used in limit scope
Phil Sutter [Fri, 30 Jul 2021 15:36:58 +0000 (17:36 +0200)] 
scanner: Some time units are only used in limit scope

'hour' and 'day' are allowed as unqualified meta expressions, so leave
them alone.

Fixes: eae2525685252 ("scanner: limit: move to own scope")
Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoscanner: Move 'maps' keyword into list cmd scope
Phil Sutter [Thu, 29 Jul 2021 13:00:20 +0000 (15:00 +0200)] 
scanner: Move 'maps' keyword into list cmd scope

This was missed when introducing SCANSTATE_CMD_LIST, no other command
operates on "maps".

Fixes: 6a24ffb04642e ("scanner: add list cmd parser scope")
Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agotests: py: Test connlimit statement
Phil Sutter [Thu, 17 Feb 2022 11:52:20 +0000 (12:52 +0100)] 
tests: py: Test connlimit statement

This wasn't covered at all.

Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agosegtree: memleak get element command
Pablo Neira Ayuso [Tue, 15 Feb 2022 14:12:20 +0000 (15:12 +0100)] 
segtree: memleak get element command

Release removed interval expressions before get_set_interval_find()
fails. The memleak can be triggered through:

 testcases/sets/0034get_element_0

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agonetlink: check key is EXPR_CONCAT before accessing field
Pablo Neira Ayuso [Thu, 17 Feb 2022 17:08:02 +0000 (18:08 +0100)] 
netlink: check key is EXPR_CONCAT before accessing field

alloc_nftnl_setelem() needs to check for EXPR_CONCAT before accessing
field_count.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoexamples: load ruleset from JSON
Pablo Neira Ayuso [Mon, 14 Feb 2022 12:02:21 +0000 (13:02 +0100)] 
examples: load ruleset from JSON

Add an example to load a ruleset file expressed in JSON.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoexamples: add libnftables example program
Pablo Neira Ayuso [Mon, 14 Feb 2022 11:31:48 +0000 (12:31 +0100)] 
examples: add libnftables example program

Create an example folder to add example source code files to show how to
use libnftables. Add first example program using the buffer API.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoparser_json: permit empty device list
Florian Westphal [Mon, 7 Feb 2022 13:09:28 +0000 (14:09 +0100)] 
parser_json: permit empty device list

Normal input parser allows flowtables without 'devices' token, which
makes the json export part elide 'dev' entirely, this then breaks on
re-import:

$ nft -j -f json.dump
/tmp/json_1:1:14-14: Error: Object item not found: dev

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoparser_json: fix flowtable device datatype
Florian Westphal [Mon, 7 Feb 2022 12:03:20 +0000 (13:03 +0100)] 
parser_json: fix flowtable device datatype

Failed with: BUG: invalid expresion type symbol

Fixes: 78bbe7f7a55be489 ("mnl: do not use expr->identifier to fetch device name")
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agojson: add flow statement json export + parser
Florian Westphal [Mon, 7 Feb 2022 12:03:20 +0000 (13:03 +0100)] 
json: add flow statement json export + parser

flow statement has no export, its shown as:
".. }, "flow add @ft" ] } }"

With this patch:

".. }, {"flow": {"op": "add", "flowtable": "@ft"}}]}}"

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agodoc: add undefine and redefine keywords
Pierre Ducroquet [Mon, 7 Feb 2022 09:48:11 +0000 (10:48 +0100)] 
doc: add undefine and redefine keywords

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoiface: handle EINTR case when creating the cache
Pablo Neira Ayuso [Thu, 27 Jan 2022 18:05:55 +0000 (19:05 +0100)] 
iface: handle EINTR case when creating the cache

If interface netlink dump is interrupted, then retry.

Before this patch, the netlink socket is reopened to drop stale dump
messages, instead empty the netlink queue and retry.

Reviewed-by: Eugene Crosser <crosser@average.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: do not merge raw payload expressions
Pablo Neira Ayuso [Wed, 26 Jan 2022 22:03:45 +0000 (23:03 +0100)] 
optimize: do not merge raw payload expressions

Merging raw expressions results in a valid concatenation which throws:

 Error: can not use variable sized data types (integer) in concat expressions

Disable merging raw expressions until this is supported by skipping raw
expressions.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: check for payload base and offset when searching for mergers
Pablo Neira Ayuso [Wed, 26 Jan 2022 22:10:51 +0000 (23:10 +0100)] 
optimize: check for payload base and offset when searching for mergers

Extend the existing checks to cover the payload base and offset.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: merge verdict maps with same lookup key
Pablo Neira Ayuso [Wed, 26 Jan 2022 21:49:35 +0000 (22:49 +0100)] 
optimize: merge verdict maps with same lookup key

Merge two consecutive verdict maps with the same lookup key.

For instance, merge the following:

 table inet x {
        chain filter_in_tcp {
                tcp dport vmap {
                           80 : accept,
                           81 : accept,
                          443 : accept,
                          931 : accept,
                         5001 : accept,
                         5201 : accept,
                }
                tcp dport vmap {
                         6800-6999  : accept,
                        33434-33499 : accept,
                }
        }
 }

into:

 table inet x {
        chain filter_in_tcp {
                tcp dport vmap {
                           80 : accept,
                           81 : accept,
                          443 : accept,
                          931 : accept,
                         5001 : accept,
                         5201 : accept,
                         6800-6999  : accept,
                        33434-33499 : accept,
                }
}
 }

This patch updates statement comparison routine to inspect the verdict
expression type to detect possible merger.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: add __expr_cmp()
Pablo Neira Ayuso [Wed, 26 Jan 2022 21:49:27 +0000 (22:49 +0100)] 
optimize: add __expr_cmp()

Add helper function to compare expression to allow for reuse.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agonetlink: Use abort() in case of netlink_abi_error
Eugene Crosser [Thu, 9 Dec 2021 18:26:06 +0000 (19:26 +0100)] 
netlink: Use abort() in case of netlink_abi_error

Library functions should not use exit(), application that uses the
library may contain error handling path, that cannot be executed if
library functions calls exit(). For truly fatal errors, using abort() is
more acceptable than exit().

Signed-off-by: Eugene Crosser <crosser@average.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoparser_bison: missing synproxy support in map declarations
Pablo Neira Ayuso [Wed, 19 Jan 2022 21:39:56 +0000 (22:39 +0100)] 
parser_bison: missing synproxy support in map declarations

Update parser to allow for maps with synproxy.

Fixes: f44ab88b1088 ("src: add synproxy stateful object support")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agotests: shell: remove redundant payload expressions
Jeremy Sowden [Sat, 15 Jan 2022 18:27:09 +0000 (18:27 +0000)] 
tests: shell: remove redundant payload expressions

Now that we keep track of more payload dependencies, more redundant
payloads are eliminated.  Remove these from the shell test-cases.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: py: remove redundant payload expressions
Jeremy Sowden [Sat, 15 Jan 2022 18:27:08 +0000 (18:27 +0000)] 
tests: py: remove redundant payload expressions

Now that we keep track of more payload dependencies, more redundant
payloads are eliminated.  Remove these from the Python test-cases.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agosrc: store more than one payload dependency
Jeremy Sowden [Sat, 15 Jan 2022 18:27:07 +0000 (18:27 +0000)] 
src: store more than one payload dependency

Change the payload-dependency context to store a dependency for every
protocol layer.  This allows us to eliminate more redundant protocol
expressions.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agosrc: add a helper that returns a payload dependency for a particular base
Jeremy Sowden [Sat, 15 Jan 2022 18:27:06 +0000 (18:27 +0000)] 
src: add a helper that returns a payload dependency for a particular base

Currently, with only one base and dependency stored this is superfluous,
but it will become more useful when the next commit adds support for
storing a payload for every base.

Remove redundant `ctx->pbase` check.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: py: fix inet/ip.t bridge payload
Jeremy Sowden [Sat, 15 Jan 2022 18:27:05 +0000 (18:27 +0000)] 
tests: py: fix inet/ip.t bridge payload

Correct the statement used to load the protocol in the bridge payload
of one of the ip tests.

A previous commit was supposed, in part, to do this, but the update got
lost.

Fixes: 4b8e51ea5fc8 ("tests: py: fix inet/ip.t payloads")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agosrc: silence compiler warnings
Florian Westphal [Sat, 15 Jan 2022 19:00:49 +0000 (20:00 +0100)] 
src: silence compiler warnings

cache.c:504:22: warning: ‘chain’ may be used uninitialized in this function [-Wmaybe-uninitialized]
cache.c:504:22: warning: ‘table’ may be used uninitialized in this function [-Wmaybe-uninitialized]
erec.c:128:16: warning: ‘line’ may be used uninitialized in this function [-Wmaybe-uninitialized]
optimize.c:524:9: warning: ‘line’ may be used uninitialized in this function [-Wmaybe-uninitialized]

Fixes: 8ad4056e9182 ("erec: expose print_location() and line_location()")
Fixes: afbd102211dc ("src: do not use the nft_cache_filter object from mnl.c")
Fixes: fb298877ece2 ("src: add ruleset optimization infrastructure")
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agolibnftables: use xrealloc()
Pablo Neira Ayuso [Sat, 15 Jan 2022 17:50:21 +0000 (18:50 +0100)] 
libnftables: use xrealloc()

Instead of realloc(), so process stops execution in case memory
allocation fails.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: 'nft list chain' prints anonymous chains correctly
Pablo Neira Ayuso [Wed, 12 Jan 2022 00:34:01 +0000 (01:34 +0100)] 
src: 'nft list chain' prints anonymous chains correctly

If the user is requesting a chain listing, e.g. nft list chain x y
and a rule refers to an anonymous chain that cannot be found in the cache,
then fetch such anonymous chain and its ruleset.

Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1577
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agocache: add helper function to fill up the rule cache
Pablo Neira Ayuso [Wed, 12 Jan 2022 00:34:00 +0000 (01:34 +0100)] 
cache: add helper function to fill up the rule cache

Add a helper function to dump the rules and add them to the
corresponding chain.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agocache: do not set error code twice
Pablo Neira Ayuso [Wed, 12 Jan 2022 00:33:59 +0000 (01:33 +0100)] 
cache: do not set error code twice

The 'ret' variable is already set to a negative value to report an
error, do not set it again to a negative value.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: do not use the nft_cache_filter object from mnl.c
Pablo Neira Ayuso [Wed, 12 Jan 2022 00:33:58 +0000 (01:33 +0100)] 
src: do not use the nft_cache_filter object from mnl.c

Pass the table and chain strings to mnl_nft_rule_dump() instead.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: merge several selectors with different verdict into verdict map
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:54:01 +0000 (21:54 +0100)] 
optimize: merge several selectors with different verdict into verdict map

Transform:

  ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept
  ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop

into:

  ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: merge same selector with different verdict into verdict map
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:53:41 +0000 (21:53 +0100)] 
optimize: merge same selector with different verdict into verdict map

Transform:

  ct state invalid drop
  ct state established,related accept

into:

  ct state vmap { established : accept, related : accept, invalid : drop }

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooptimize: merge rules with same selectors into a concatenation
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:53:26 +0000 (21:53 +0100)] 
optimize: merge rules with same selectors into a concatenation

This patch extends the ruleset optimization infrastructure to collapse
several rules with the same selectors into a concatenation.

Transform:

  meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept
  meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 accept
  meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.6 accept

into:

  meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.6, eth1 . 1.1.1.2 . 2.2.2.5 , eth1 . 1.1.1.3 . 2.2.2.6 } accept

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: add ruleset optimization infrastructure
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:46:21 +0000 (21:46 +0100)] 
src: add ruleset optimization infrastructure

This patch adds a new -o/--optimize option to enable ruleset
optimization.

You can combine this option with the dry run mode (--check) to review
the proposed ruleset updates without actually loading the ruleset, e.g.

 # nft -c -o -f ruleset.test
 Merging:
 ruleset.nft:16:3-37:           ip daddr 192.168.0.1 counter accept
 ruleset.nft:17:3-37:           ip daddr 192.168.0.2 counter accept
 ruleset.nft:18:3-37:           ip daddr 192.168.0.3 counter accept
 into:
        ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept

This infrastructure collects the common statements that are used in
rules, then it builds a matrix of rules vs. statements. Then, it looks
for common statements in consecutive rules which allows to merge rules.

This ruleset optimization always performs an implicit dry run to
validate that the original ruleset is correct. Then, on a second pass,
it performs the ruleset optimization and add the rules into the kernel
(unless --check has been specified by the user).

From libnftables perspective, there is a new API to enable
this feature:

  uint32_t nft_ctx_get_optimize(struct nft_ctx *ctx);
  void nft_ctx_set_optimize(struct nft_ctx *ctx, uint32_t flags);

This patch adds support for the first optimization: Collapse a linear
list of rules matching on a single selector into a set as exposed in the
example above.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: remove '$' in symbol_expr_print
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:46:10 +0000 (21:46 +0100)] 
src: remove '$' in symbol_expr_print

This is used in --debug=eval mode to annotate symbols that have not yet
been evaluated, remove it.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: error reporting with -f and read from stdin
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:39:42 +0000 (21:39 +0100)] 
src: error reporting with -f and read from stdin

Reading from stdin requires to store the ruleset in a buffer so error
reporting works accordingly, eg.

 # cat ruleset.nft | nft -f -
 /dev/stdin:3:13-13: Error: unknown identifier 'x'
                 ip saddr $x
                           ^

The error reporting infrastructure performs a fseek() on the file
descriptor which does not work in this case since the data from the
descriptor has been already consumed.

This patch adds a new stdin input descriptor to perform this special
handling which consists on re-routing this request through the buffer
functions.

Fixes: 935f82e7dd49 ("Support 'nft -f -' to read from stdin")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoerec: expose print_location() and line_location()
Pablo Neira Ayuso [Sun, 2 Jan 2022 20:39:03 +0000 (21:39 +0100)] 
erec: expose print_location() and line_location()

Add a few helper functions to reuse code in the new rule optimization
infrastructure.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agosrc: simplify logic governing storing payload dependencies
Jeremy Sowden [Tue, 21 Dec 2021 19:36:53 +0000 (19:36 +0000)] 
src: simplify logic governing storing payload dependencies

There are several places where we check whether `ctx->pdctx.pbase`
equal to `PROTO_BASE_INVALID` and don't bother trying to free the
dependency if so.  However, these checks are redundant.

In `payload_match_expand` and `trace_gen_stmts`, we skip a call to
`payload_dependency_kill`, but that calls `payload_dependency_exists` to check a
dependency exists before doing anything else.

In `ct_meta_common_postprocess`, we skip an open-coded equivalent to
`payload_dependency_kill` which performs some different checks, but the
first is the same: a call to `payload_dependency_exists`.

Therefore, we can drop the redundant checks and simplify the flow-
control in the functions.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agosrc: reduce indentation
Jeremy Sowden [Tue, 21 Dec 2021 19:36:52 +0000 (19:36 +0000)] 
src: reduce indentation

Re-arrange some switch-cases and conditionals to reduce levels of
indentation.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agosrc: remove arithmetic on booleans
Jeremy Sowden [Tue, 21 Dec 2021 19:36:51 +0000 (19:36 +0000)] 
src: remove arithmetic on booleans

Instead of subtracting a boolean from the protocol base for stacked
payloads, just decrement the base variable itself.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agonetlink_delinearize: fix typo
Jeremy Sowden [Tue, 21 Dec 2021 19:36:50 +0000 (19:36 +0000)] 
netlink_delinearize: fix typo

Correct spelling in comment.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: py: fix inet/ip_tcp.t test
Jeremy Sowden [Tue, 21 Dec 2021 19:36:49 +0000 (19:36 +0000)] 
tests: py: fix inet/ip_tcp.t test

Contrary to the comment and expected output, nft does _not_ eliminate
the redundant `ip protocol` expression from the second test.  Dependency
elimination requires a higher level expression.  `ip saddr` cannot lead
to the elimination of `ip protocol` since they are both L3 expressions.
`tcp dport` cannot because although `ip saddr` and `ip protocol` both
imply that the L3 protocol is `ip`, only protocol matches are stored as
dependencies, so the redundancy is not apparent, and in fact,
`payload_may_dependency_kill` explicitly checks for the combination of
inet, bridge or netdev family, L4 expression and L3 ipv4 or ipv6
dependency and returns false.

Correct the expected output and comment.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: py: fix inet/ip.t payloads
Jeremy Sowden [Tue, 21 Dec 2021 19:36:48 +0000 (19:36 +0000)] 
tests: py: fix inet/ip.t payloads

In one of the bridge payloads, the wrong command is given to load the
protocol.

[ fw@strlen.de: remove the duplicated netdev payload ]

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: py: fix inet/sets.t netdev payload
Jeremy Sowden [Tue, 21 Dec 2021 19:36:47 +0000 (19:36 +0000)] 
tests: py: fix inet/sets.t netdev payload

The netdev payload for one of the inet/sets.t tests was cut-and-pasted
from the inet payload without being properly updated.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoevaluate: attempt to set_eval flag if dynamic updates requested
Florian Westphal [Tue, 11 Jan 2022 11:08:59 +0000 (12:08 +0100)] 
evaluate: attempt to set_eval flag if dynamic updates requested

When passing no upper size limit, the dynset expression forces
an internal 64k upperlimit.

In some cases, this can result in 'nft -f' to restore the ruleset.
Avoid this by always setting the EVAL flag on a set definition when
we encounter packet-path update attempt in the batch.

Reported-by: Yi Chen <yiche@redhat.com>
Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoparser: allow quoted string in flowtable_expr_member
Stijn Tintel [Tue, 21 Dec 2021 10:40:25 +0000 (12:40 +0200)] 
parser: allow quoted string in flowtable_expr_member

Devices with interface names starting with a digit can not be configured
in flowtables. Trying to do so throws the following error:

Error: syntax error, unexpected number, expecting comma or '}'
devices = { eth0, 6in4-wan6 };

This is however a perfectly valid interface name. Solve the issue by
allowing the use of quoted strings.

Suggested-by: Jo-Philipp Wich <jo@mein.io>
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: remove scanner.c and parser_bison.c with `maintainer-clean`
Jeremy Sowden [Thu, 16 Dec 2021 16:37:20 +0000 (16:37 +0000)] 
build: remove scanner.c and parser_bison.c with `maintainer-clean`

automake recommends shipping the output of bison and lex in distribution
tar-balls and runs bison and lex during `make dist` (this has the
advantage that end-users don't need to have bison or lex installed to
compile the software).  Accordingly, automake also recommends removing
these files with `make maintainer-clean` and generates rules to do so.
Therefore, remove scanner.c and parser_bison.c from `CLEANFILES`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoproto: revisit short-circuit loops over upper protocols
Pablo Neira Ayuso [Wed, 15 Dec 2021 23:32:24 +0000 (00:32 +0100)] 
proto: revisit short-circuit loops over upper protocols

Move the check for NULL protocol description away from the loop to avoid
too long line.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agotests: shell: extend catchall tests for maps
Pablo Neira Ayuso [Wed, 15 Dec 2021 22:51:10 +0000 (23:51 +0100)] 
tests: shell: extend catchall tests for maps

Add a few tests for the catchall features and maps.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: fix autoconf warnings
Jeremy Sowden [Wed, 15 Dec 2021 18:44:40 +0000 (18:44 +0000)] 
build: fix autoconf warnings

autoconf complains about three obsolete macros.

`AC_CONFIG_HEADER` has been superseded by `AC_CONFIG_HEADERS`, so
replace it.

`AM_PROG_LEX` calls `AC_PROG_LEX` with no arguments, but this usage is
deprecated.  The only difference between `AM_PROG_LEX` and `AC_PROG_LEX`
is that the former defines `$LEX` as "./build-aux/missing lex" if no lex
is found to ensure a useful error is reported when make is run.  How-
ever, the configure script checks that we have a working lex and exits
with an error if none is available, so `$LEX` will never be called and
we can replace `AM_PROG_LEX` with `AC_PROG_LEX`.

`AM_PROG_LIBTOOL` has been superseded by `LT_INIT`, which is already in
configure.ac, so remove it.

We can also replace `AC_DISABLE_STATIC` with an argument to `LT_INIT`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agotests: shell: remove stray debug flag.
Jeremy Sowden [Wed, 15 Dec 2021 18:43:41 +0000 (18:43 +0000)] 
tests: shell: remove stray debug flag.

0040mark_shift_0 was passing --debug=eval to nft.  Remove it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoevaluate: reject: support ethernet as L2 protocol for inet table
Jeremy Sowden [Sat, 11 Dec 2021 18:55:25 +0000 (18:55 +0000)] 
evaluate: reject: support ethernet as L2 protocol for inet table

When we are evaluating a `reject` statement in the `inet` family, we may
have `ether` and `ip` or `ip6` as the L2 and L3 protocols in the
evaluation context:

  table inet filter {
    chain input {
      type filter hook input priority filter;
      ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject
    }
  }

Since no `reject` option is given, nft attempts to infer one and fails:

  BUG: unsupported familynft: evaluate.c:2766:stmt_evaluate_reject_inet_family: Assertion `0' failed.
  Aborted

The reason it fails is that the ethernet protocol numbers for IPv4 and
IPv6 (`ETH_P_IP` and `ETH_P_IPV6`) do not match `NFPROTO_IPV4` and
`NFPROTO_IPV6`.  Add support for the ethernet protocol numbers.

Replace the current `BUG("unsupported family")` error message with
something more informative that tells the user to provide an explicit
reject option.

Add a Python test case.

Fixes: 5fdd0b6a0600 ("nft: complete reject support")
Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1001360
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoevaluate: correct typo's
Jeremy Sowden [Sat, 11 Dec 2021 18:55:24 +0000 (18:55 +0000)] 
evaluate: correct typo's

There are a couple of mistakes in comments.  Fix them.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoproto: short-circuit loops over upper protocols
Jeremy Sowden [Sat, 11 Dec 2021 18:55:23 +0000 (18:55 +0000)] 
proto: short-circuit loops over upper protocols

Each `struct proto_desc` contains a fixed-size array of higher layer
protocols.  Only the first few are not NULL.  Therefore, we can stop
iterating over the array once we reach a NULL member.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agonetlink_delinearize: zero shift removal
Florian Westphal [Fri, 3 Dec 2021 19:19:10 +0000 (20:19 +0100)] 
netlink_delinearize: zero shift removal

Remove shifts-by-0.  These can occur after binop postprocessing
has adjusted the RHS value to account for a mask operation.

Example: frag frag-off @s4

Is internally represented via:

  [ exthdr load ipv6 2b @ 44 + 2 => reg 1 ]
  [ bitwise reg 1 = ( reg 1 & 0x0000f8ff ) ^ 0x00000000 ]
  [ bitwise reg 1 = ( reg 1 >> 0x00000003 ) ]
  [ lookup reg 1 set s ]

First binop masks out unwanted parts of the 16-bit field.
Second binop needs to left-shift so that lookups in the set will work.

When decoding, the first binop is removed after the exthdr load
has been adjusted accordingly.  Constant propagation adjusts the
shift-value to 0 on removal.  This change then gets rid of the
shift-by-0 entirely.

After this change, 'frag frag-off @s4' input is shown as-is.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agonetlink_delinearize: and/shift postprocessing
Florian Westphal [Fri, 3 Dec 2021 19:04:31 +0000 (20:04 +0100)] 
netlink_delinearize: and/shift postprocessing

Before this patch:
in:  frag frag-off @s4
in:  ip version @s8

out: (@nh,0,8 & 0xf0) >> 4 == @s8
out: (frag unknown & 0xfff8 [invalid type]) >> 3 == @s4

after:
out: frag frag-off >> 0 == @s4
out: ip version >> 0 == @s8

Next patch adds support for zero-shift removal.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agopayload: skip templates with meta key set
Florian Westphal [Tue, 30 Nov 2021 20:11:23 +0000 (21:11 +0100)] 
payload: skip templates with meta key set

meta templates are only there for ease of use (input/parsing).

When listing, they should be ignored:
 set s4 { typeof ip version elements = { 1, } }
 chain c4 { ip version @s4 accept }

gets listed as 'ip l4proto ...' which is nonsensical.

 after this patch we get:
in: ip version @s4
out: (@nh,0,8 & 0xf0) >> 4 == @s4

.. which is (marginally) better.

Next patch adds support for payload decoding.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: add shift+and typeof test cases
Florian Westphal [Fri, 3 Dec 2021 16:12:17 +0000 (17:12 +0100)] 
tests: add shift+and typeof test cases

These tests work, but I omitted a few lines that do not:

in: frag frag-off @s4 accept
in: ip version @s8

out: (frag unknown & 0xfff8 [invalid type]) >> 3 == @s4
out:  (ip l4proto & pfsync) >> 4 == @s8

Next patches resolve this.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agotests: shell: better parameters for the interval stack overflow test
Štěpán Němec [Wed, 1 Dec 2021 11:12:00 +0000 (12:12 +0100)] 
tests: shell: better parameters for the interval stack overflow test

Wider testing has shown that 128 kB stack is too low (e.g. for systems
with 64 kB page size), leading to false failures in some environments.

Based on results from a matrix of RHEL 8 and RHEL 9 systems across
x86_64, aarch64, ppc64le and s390x architectures as well as some
anecdotal testing of other Linux distros on x86_64 machines, 400 kB
seems safe: the normal nft stack (which should stay constant during
this test) on all tested systems doesn't exceed 200 kB (stays around
100 kB on typical systems with 4 kB page size), while always growing
beyond 500 kB in the failing case (nftables before baecd1cf2685) with
the increased set size.

Fixes: d8ccad2a2b73 ("tests: cover baecd1cf2685 ("segtree: Fix segfault when restoring a huge interval set")")
Signed-off-by: Štěpán Němec <snemec@redhat.com>
Signed-off-by: Phil Sutter <phil@nwl.cc>
3 years agoiptopt: fix crash with invalid field/type combo
Florian Westphal [Fri, 3 Dec 2021 16:07:55 +0000 (17:07 +0100)] 
iptopt: fix crash with invalid field/type combo

% nft describe ip option rr value
segmentation fault

after this fix, this exits with 'Error: unknown ip option type/field'.

Problem is that 'rr' doesn't have a value template, so the template struct is
all-zeroes, so we crash when trying to use tmpl->dtype (its NULL).

Furthermore, expr_describe tries to print expr->identifier but expr is
exthdr, not symbol: ->identifier contains garbage.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoexthdr: support ip/tcp options and sctp chunks in typeof expressions
Florian Westphal [Fri, 3 Dec 2021 16:07:54 +0000 (17:07 +0100)] 
exthdr: support ip/tcp options and sctp chunks in typeof expressions

This did not store the 'op' member and listing always treated this as ipv6
extension header.

Add test cases for this.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agoipopt: drop unused 'ptr' argument
Florian Westphal [Fri, 3 Dec 2021 16:07:53 +0000 (17:07 +0100)] 
ipopt: drop unused 'ptr' argument

Its always 0, so remove it.
Looks like this was intended to support variable options that have
array-like members, but so far this isn't implemented, better remove
dead code and implement it properly when such support is needed.

Signed-off-by: Florian Westphal <fw@strlen.de>
3 years agocache: Support filtering for a specific flowtable
Phil Sutter [Tue, 30 Nov 2021 19:06:09 +0000 (20:06 +0100)] 
cache: Support filtering for a specific flowtable

Extend nft_cache_filter to hold a flowtable name so 'list flowtable'
command causes fetching the requested flowtable only.

Dump flowtables just once instead of for each table, merely assign
fetched data to tables inside the loop.

Signed-off-by: Phil Sutter <phil@nwl.cc>