From 32ebc39f71e8107d6069a9f6fba8338a2823889d Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Mon, 21 Jan 2019 17:43:34 +0100 Subject: 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 Signed-off-by: Florian Westphal --- iptables/nft-bridge.c | 11 ++++++----- 1 file 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); } -- cgit v1.2.3