From: Pablo Neira Ayuso <pablo@netfilter.org>
To: netfilter-devel@vger.kernel.org
Subject: [PATCH nft 05/18] optimize: fix reject statement
Date: Mon, 20 Jun 2022 10:32:02 +0200 [thread overview]
Message-ID: <20220620083215.1021238-6-pablo@netfilter.org> (raw)
In-Reply-To: <20220620083215.1021238-1-pablo@netfilter.org>
Add missing code to the statement collection routine. Compare reject
expressions when available. Add tests/shell.
Fixes: fb298877ece2 ("src: add ruleset optimization infrastructure")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
src/optimize.c | 19 ++++++++++++++++---
.../optimizations/dumps/merge_reject.nft | 7 +++++++
.../testcases/optimizations/merge_reject | 15 +++++++++++++++
3 files changed, 38 insertions(+), 3 deletions(-)
create mode 100644 tests/shell/testcases/optimizations/dumps/merge_reject.nft
create mode 100755 tests/shell/testcases/optimizations/merge_reject
diff --git a/src/optimize.c b/src/optimize.c
index 94242ee5f490..427625846484 100644
--- a/src/optimize.c
+++ b/src/optimize.c
@@ -178,13 +178,19 @@ static bool __stmt_type_eq(const struct stmt *stmt_a, const struct stmt *stmt_b,
return false;
break;
case STMT_REJECT:
- if (stmt_a->reject.expr || stmt_b->reject.expr)
- return false;
-
if (stmt_a->reject.family != stmt_b->reject.family ||
stmt_a->reject.type != stmt_b->reject.type ||
stmt_a->reject.icmp_code != stmt_b->reject.icmp_code)
return false;
+
+ if (!!stmt_a->reject.expr ^ !!stmt_b->reject.expr)
+ return false;
+
+ if (!stmt_a->reject.expr)
+ return true;
+
+ if (__expr_cmp(stmt_a->reject.expr, stmt_b->reject.expr))
+ return false;
break;
case STMT_NAT:
if (stmt_a->nat.type != stmt_b->nat.type ||
@@ -304,6 +310,13 @@ static int rule_collect_stmts(struct optimize_ctx *ctx, struct rule *rule)
clone->nat.flags = stmt->nat.flags;
clone->nat.type_flags = stmt->nat.type_flags;
break;
+ case STMT_REJECT:
+ if (stmt->reject.expr)
+ clone->reject.expr = expr_get(stmt->reject.expr);
+ clone->reject.type = stmt->reject.type;
+ clone->reject.icmp_code = stmt->reject.icmp_code;
+ clone->reject.family = stmt->reject.family;
+ break;
default:
xfree(clone);
continue;
diff --git a/tests/shell/testcases/optimizations/dumps/merge_reject.nft b/tests/shell/testcases/optimizations/dumps/merge_reject.nft
new file mode 100644
index 000000000000..9a13e2b96faa
--- /dev/null
+++ b/tests/shell/testcases/optimizations/dumps/merge_reject.nft
@@ -0,0 +1,7 @@
+table ip x {
+ chain y {
+ ip daddr 172.30.33.70 tcp dport 3306 counter packets 0 bytes 0 drop
+ meta l4proto . ip daddr . tcp dport { tcp . 172.30.238.117 . 8080, tcp . 172.30.33.71 . 3306, tcp . 172.30.254.251 . 3306 } counter packets 0 bytes 0 reject
+ ip daddr 172.30.254.252 tcp dport 3306 counter packets 0 bytes 0 reject with tcp reset
+ }
+}
diff --git a/tests/shell/testcases/optimizations/merge_reject b/tests/shell/testcases/optimizations/merge_reject
new file mode 100755
index 000000000000..497e8f64dc5d
--- /dev/null
+++ b/tests/shell/testcases/optimizations/merge_reject
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+set -e
+
+RULESET="table ip x {
+ chain y {
+ meta l4proto tcp ip daddr 172.30.33.70 tcp dport 3306 counter packets 0 bytes 0 drop
+ meta l4proto tcp ip daddr 172.30.33.71 tcp dport 3306 counter packets 0 bytes 0 reject
+ meta l4proto tcp ip daddr 172.30.238.117 tcp dport 8080 counter packets 0 bytes 0 reject
+ meta l4proto tcp ip daddr 172.30.254.251 tcp dport 3306 counter packets 0 bytes 0 reject
+ meta l4proto tcp ip daddr 172.30.254.252 tcp dport 3306 counter packets 0 bytes 0 reject with tcp reset
+ }
+}"
+
+$NFT -o -f - <<< $RULESET
--
2.30.2
next prev parent reply other threads:[~2022-06-20 8:32 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-20 8:31 [PATCH nft 00/18] fixes and improvements for -o/--optimize Pablo Neira Ayuso
2022-06-20 8:31 ` [PATCH nft 01/18] optimize: do not compare relational expression rhs when collecting statements Pablo Neira Ayuso
2022-06-20 8:31 ` [PATCH nft 02/18] optimize: do not merge rules with set reference in rhs Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 03/18] optimize: do not print stateful information Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 04/18] optimize: remove comment after merging Pablo Neira Ayuso
2022-06-20 8:32 ` Pablo Neira Ayuso [this message]
2022-06-20 8:32 ` [PATCH nft 06/18] optimize: fix verdict map merging Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 07/18] optimize: add osf expression support Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 08/18] optimize: add xfrm " Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 09/18] optimize: add fib " Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 10/18] optimize: add binop " Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 11/18] optimize: add numgen " Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 12/18] optimize: add hash " Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 13/18] optimize: add unsupported statement Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 14/18] tests: shell: run -c -o on ruleset Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 15/18] optimize: only merge OP_IMPLICIT and OP_EQ relational Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 16/18] optimize: assume verdict is same when rules have no verdict Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 17/18] optimize: limit statement is not supported yet Pablo Neira Ayuso
2022-06-20 8:32 ` [PATCH nft 18/18] libnftables: release top level scope Pablo Neira Ayuso
2022-06-23 17:17 ` [PATCH nft 00/18] fixes and improvements for -o/--optimize Pablo Neira Ayuso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220620083215.1021238-6-pablo@netfilter.org \
--to=pablo@netfilter.org \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).