diff options
author | Phil Sutter <phil@nwl.cc> | 2019-01-21 17:43:34 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2019-02-01 15:47:10 +0100 |
commit | 32ebc39f71e8107d6069a9f6fba8338a2823889d (patch) | |
tree | 8d95564a04affe15140bdd53571c9c4010ac9d86 | |
parent | 4c54c892443c20a1d0e1212d541da0e81647058a (diff) |
ebtables: Fix rule listing with counters
This is a partial revert of commit 583b27eabcad6 ("ebtables-save: add -c
option, using xtables-style counters") which broke ruleset listing with
'--Lc' flag turned on:
| # ebtables-nft -L --Lc
| Bridge table: filter
|
| Bridge chain: INPUT, entries: 0, policy: ACCEPT
|
| Bridge chain: FORWARD, entries: 2, policy: ACCEPT
| -j foo
| , pcnt = 0 -- bcnt = 0-j ACCEPT
| , pcnt = 0 -- bcnt = 0
| Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
|
| Bridge chain: foo, entries: 1, policy: RETURN
| -j ACCEPT
| , pcnt = 0 -- bcnt = 0%
(That percentage sign means no newline after last line of output and
doesn't belong to ebtables-nft's output.)
Problem was that nft_bridge_print_rule() printed the counters after
nft_bridge_save_rule() had already printed the newline character.
Note also that there is no need to remove FMT_EBT_SAVE bit from 'format'
variable: It is set only by ebtables-nft-save which doesn't call
nft_bridge_print_rule().
Fixes: 583b27eabcad6 ("ebtables-save: add -c option, using xtables-style counters")
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r-- | iptables/nft-bridge.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/iptables/nft-bridge.c b/iptables/nft-bridge.c index ad583a60..61c82f72 100644 --- a/iptables/nft-bridge.c +++ b/iptables/nft-bridge.c @@ -469,6 +469,11 @@ static void nft_bridge_save_rule(const void *data, unsigned int format) (uint64_t)cs->counters.pcnt, (uint64_t)cs->counters.bcnt); + if (!(format & FMT_NOCOUNTS)) + printf(" , pcnt = %"PRIu64" -- bcnt = %"PRIu64"", + (uint64_t)cs->counters.pcnt, + (uint64_t)cs->counters.bcnt); + if (!(format & FMT_NONEWLINE)) fputc('\n', stdout); } @@ -482,11 +487,7 @@ static void nft_bridge_print_rule(struct nftnl_rule *r, unsigned int num, printf("%d ", num); nft_rule_to_ebtables_command_state(r, &cs); - nft_bridge_save_rule(&cs, format & ~FMT_EBT_SAVE); - if (!(format & FMT_NOCOUNTS)) - printf(" , pcnt = %"PRIu64" -- bcnt = %"PRIu64"", - (uint64_t)cs.counters.pcnt, - (uint64_t)cs.counters.bcnt); + nft_bridge_save_rule(&cs, format); ebt_cs_clean(&cs); } |