* [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups
@ 2024-01-10 22:41 Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 1/3] Revert "xshared: Print protocol numbers if --numeric was given" Phil Sutter
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Phil Sutter @ 2024-01-10 22:41 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
V1 was a tad too simple: The revert is fine, but the (now) third patch
changes iptables-save output and thus potentially breaks test cases. To
avoid that, add patch 2 which enables "dccp" and "ipcomp" protocol names
in output. Apart from that, a single shell test case expected '-p gre'
in the dump. Replace the actually printed '-p 47' using sed in there.
Phil Sutter (3):
Revert "xshared: Print protocol numbers if --numeric was given"
libxtables: Add dccp and ipcomp to xtables_chain_protos
iptables-save: Avoid /etc/protocols lookups
.../shell/testcases/ip6tables/0002-verbose-output_0 | 10 +++++-----
.../testcases/ipt-restore/0011-noflush-empty-line_0 | 2 +-
.../tests/shell/testcases/ipt-save/0001load-dumps_0 | 1 +
.../shell/testcases/iptables/0002-verbose-output_0 | 4 ++--
iptables/xshared.c | 8 ++++----
libxtables/xtables.c | 2 ++
6 files changed, 15 insertions(+), 12 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [iptables PATCH v2 1/3] Revert "xshared: Print protocol numbers if --numeric was given"
2024-01-10 22:41 [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
@ 2024-01-10 22:41 ` Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 2/3] libxtables: Add dccp and ipcomp to xtables_chain_protos Phil Sutter
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Phil Sutter @ 2024-01-10 22:41 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
This reverts commit da8ecc62dd765b15df84c3aa6b83dcb7a81d4ffa.
The patch's original intention is not entirely clear anymore. If it was
to reduce delays involved by calling getprotobynumber() though, commit
b6196c7504d4d ("xshared: Prefer xtables_chain_protos lookup over
getprotoent") avoids those if --numeric flag was given already. Also,
this numeric protocol output did not cover iptables-save which is a more
relevant candidate for such optimizations anyway.
Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1729
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
.../shell/testcases/ip6tables/0002-verbose-output_0 | 10 +++++-----
.../testcases/ipt-restore/0011-noflush-empty-line_0 | 2 +-
.../shell/testcases/iptables/0002-verbose-output_0 | 4 ++--
iptables/xshared.c | 6 +++---
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/iptables/tests/shell/testcases/ip6tables/0002-verbose-output_0 b/iptables/tests/shell/testcases/ip6tables/0002-verbose-output_0
index cc18a94b96986..45fab83026cb6 100755
--- a/iptables/tests/shell/testcases/ip6tables/0002-verbose-output_0
+++ b/iptables/tests/shell/testcases/ip6tables/0002-verbose-output_0
@@ -33,11 +33,11 @@ EXPECT='Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
- 0 0 ACCEPT 0 -- eth2 eth3 feed:babe::1 feed:babe::2
- 0 0 ACCEPT 0 -- eth2 eth3 feed:babe::4 feed:babe::5
- 0 0 58 -- * * ::/0 ::/0 ipv6-icmptype 1 code 0
- 0 0 0 -- * * ::/0 ::/0 dst length:42 rt type:23
- 0 0 LOG 0 -- * * ::/0 ::/0 frag id:1337 LOG flags 0 level 4
+ 0 0 ACCEPT all -- eth2 eth3 feed:babe::1 feed:babe::2
+ 0 0 ACCEPT all -- eth2 eth3 feed:babe::4 feed:babe::5
+ 0 0 ipv6-icmp -- * * ::/0 ::/0 ipv6-icmptype 1 code 0
+ 0 0 all -- * * ::/0 ::/0 dst length:42 rt type:23
+ 0 0 LOG all -- * * ::/0 ::/0 frag id:1337 LOG flags 0 level 4
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination'
diff --git a/iptables/tests/shell/testcases/ipt-restore/0011-noflush-empty-line_0 b/iptables/tests/shell/testcases/ipt-restore/0011-noflush-empty-line_0
index 1a3af46fc4756..bea1a690bb624 100755
--- a/iptables/tests/shell/testcases/ipt-restore/0011-noflush-empty-line_0
+++ b/iptables/tests/shell/testcases/ipt-restore/0011-noflush-empty-line_0
@@ -12,5 +12,5 @@ EOF
EXPECT='Chain FORWARD (policy ACCEPT)
target prot opt source destination
-ACCEPT 0 -- 0.0.0.0/0 0.0.0.0/0 '
+ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 '
diff -u <(echo "$EXPECT") <($XT_MULTI iptables -n -L FORWARD)
diff --git a/iptables/tests/shell/testcases/iptables/0002-verbose-output_0 b/iptables/tests/shell/testcases/iptables/0002-verbose-output_0
index 15c72af309186..5d2af4c8d2ab2 100755
--- a/iptables/tests/shell/testcases/iptables/0002-verbose-output_0
+++ b/iptables/tests/shell/testcases/iptables/0002-verbose-output_0
@@ -21,8 +21,8 @@ EXPECT='Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
- 0 0 ACCEPT 0 -- eth2 eth3 10.0.0.1 10.0.0.2
- 0 0 ACCEPT 0 -- eth2 eth3 10.0.0.4 10.0.0.5
+ 0 0 ACCEPT all -- eth2 eth3 10.0.0.1 10.0.0.2
+ 0 0 ACCEPT all -- eth2 eth3 10.0.0.4 10.0.0.5
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination'
diff --git a/iptables/xshared.c b/iptables/xshared.c
index 43fa929df7676..68f70277388a6 100644
--- a/iptables/xshared.c
+++ b/iptables/xshared.c
@@ -1080,10 +1080,10 @@ void print_rule_details(unsigned int linenum, const struct xt_counters *ctrs,
fputc(invflags & XT_INV_PROTO ? '!' : ' ', stdout);
- if (((format & (FMT_NUMERIC | FMT_NOTABLE)) == FMT_NUMERIC) || !pname)
- printf(FMT("%-4hu ", "%hu "), proto);
- else
+ if (pname)
printf(FMT("%-4s ", "%s "), pname);
+ else
+ printf(FMT("%-4hu ", "%hu "), proto);
}
void save_rule_details(const char *iniface, const char *outiface,
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [iptables PATCH v2 2/3] libxtables: Add dccp and ipcomp to xtables_chain_protos
2024-01-10 22:41 [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 1/3] Revert "xshared: Print protocol numbers if --numeric was given" Phil Sutter
@ 2024-01-10 22:41 ` Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 3/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
2024-02-06 23:25 ` [iptables PATCH v2 0/3] " Phil Sutter
3 siblings, 0 replies; 5+ messages in thread
From: Phil Sutter @ 2024-01-10 22:41 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
There are "protocol extensions" for both just like with TCP or UDP.
Caching their values allows for implicit extension lookup after '-p'
flag, for instance:
| iptables -A FORWARD -p dccp --dport 1
| iptables -A FORWARD -p ipcomp --ipcompspi 18
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
libxtables/xtables.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libxtables/xtables.c b/libxtables/xtables.c
index b4339e8d31275..38b50f7aca93e 100644
--- a/libxtables/xtables.c
+++ b/libxtables/xtables.c
@@ -2201,6 +2201,8 @@ const struct xtables_pprot xtables_chain_protos[] = {
{"mobility-header", IPPROTO_MH},
{"ipv6-mh", IPPROTO_MH},
{"mh", IPPROTO_MH},
+ {"dccp", IPPROTO_DCCP},
+ {"ipcomp", IPPROTO_COMP},
{"all", 0},
{NULL},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [iptables PATCH v2 3/3] iptables-save: Avoid /etc/protocols lookups
2024-01-10 22:41 [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 1/3] Revert "xshared: Print protocol numbers if --numeric was given" Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 2/3] libxtables: Add dccp and ipcomp to xtables_chain_protos Phil Sutter
@ 2024-01-10 22:41 ` Phil Sutter
2024-02-06 23:25 ` [iptables PATCH v2 0/3] " Phil Sutter
3 siblings, 0 replies; 5+ messages in thread
From: Phil Sutter @ 2024-01-10 22:41 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
Instrument proto_to_name() to abort if given protocol number is not
among the well-known ones in xtables_chain_protos. Along with
xtables_parse_protocol() preferring said array for lookups as well, this
ensures reliable dump'n'restore regardless of /etc/protocols contents.
Another benefit is rule dump performance. A simple test-case dumping
100k rules matching on dccp protocol shows an 8s delta (2s vs. 10s for
legacy, 0.5s vs. 8s for nft) with this patch applied. For reference:
| for variant in nft legacy; do
| (
| echo "*filter"
| for ((i = 0; i < 100000; i++)); do
| echo "-A FORWARD -p dccp -j ACCEPT"
| done
| echo "COMMIT"
| ) | iptables-${variant}-restore
| time iptables-${variant}-save | wc -l
| iptables-${variant} -F
| done
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
iptables/tests/shell/testcases/ipt-save/0001load-dumps_0 | 1 +
iptables/xshared.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/iptables/tests/shell/testcases/ipt-save/0001load-dumps_0 b/iptables/tests/shell/testcases/ipt-save/0001load-dumps_0
index 4e0be51c071c8..48f5f7b423379 100755
--- a/iptables/tests/shell/testcases/ipt-save/0001load-dumps_0
+++ b/iptables/tests/shell/testcases/ipt-save/0001load-dumps_0
@@ -39,6 +39,7 @@ do_simple()
$XT_MULTI ${iptables}-restore < "$dumpfile"
$XT_MULTI ${iptables}-save | grep -v "^#" > "$tmpfile"
+ sed -i -e 's/-p 47 /-p gre /' "$tmpfile"
do_diff $dumpfile "$tmpfile"
if [ $? -ne 0 ]; then
# cp "$tmpfile" "$dumpfile.got"
diff --git a/iptables/xshared.c b/iptables/xshared.c
index 68f70277388a6..51283d7afad1e 100644
--- a/iptables/xshared.c
+++ b/iptables/xshared.c
@@ -1097,7 +1097,7 @@ void save_rule_details(const char *iniface, const char *outiface,
}
if (proto > 0) {
- const char *pname = proto_to_name(proto, 0);
+ const char *pname = proto_to_name(proto, true);
if (invflags & XT_INV_PROTO)
printf(" !");
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups
2024-01-10 22:41 [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
` (2 preceding siblings ...)
2024-01-10 22:41 ` [iptables PATCH v2 3/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
@ 2024-02-06 23:25 ` Phil Sutter
3 siblings, 0 replies; 5+ messages in thread
From: Phil Sutter @ 2024-02-06 23:25 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
On Wed, Jan 10, 2024 at 11:41:33PM +0100, Phil Sutter wrote:
> V1 was a tad too simple: The revert is fine, but the (now) third patch
> changes iptables-save output and thus potentially breaks test cases. To
> avoid that, add patch 2 which enables "dccp" and "ipcomp" protocol names
> in output. Apart from that, a single shell test case expected '-p gre'
> in the dump. Replace the actually printed '-p 47' using sed in there.
>
> Phil Sutter (3):
> Revert "xshared: Print protocol numbers if --numeric was given"
> libxtables: Add dccp and ipcomp to xtables_chain_protos
> iptables-save: Avoid /etc/protocols lookups
Series applied.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-02-06 23:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-10 22:41 [iptables PATCH v2 0/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 1/3] Revert "xshared: Print protocol numbers if --numeric was given" Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 2/3] libxtables: Add dccp and ipcomp to xtables_chain_protos Phil Sutter
2024-01-10 22:41 ` [iptables PATCH v2 3/3] iptables-save: Avoid /etc/protocols lookups Phil Sutter
2024-02-06 23:25 ` [iptables PATCH v2 0/3] " Phil Sutter
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).