From d9a518ee22cf90ddeb56a9df687aef953fda0fa0 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Wed, 7 Nov 2018 13:57:16 +0100 Subject: arptables: use ->save for arptables-save, like xtables arptables-save will show -A OUTPUT --h-length 6 --h-type 1 -j MARK --set-xmark 0x1/0xffffffff as --h-length 6 --h-type Ethernet -j MARK MARK set 0x1 Because it uses ->print() instead of ->save(). Switch it to use ->save, we can then also drop special handling of CLASSIFY target. Signed-off-by: Florian Westphal --- iptables/nft-arp.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'iptables/nft-arp.c') diff --git a/iptables/nft-arp.c b/iptables/nft-arp.c index bd78a866..3d2ae3bf 100644 --- a/iptables/nft-arp.c +++ b/iptables/nft-arp.c @@ -571,17 +571,20 @@ after_devdst: } static void -__nft_arp_save_rule(const void *data, unsigned int format) +nft_arp_save_rule(const void *data, unsigned int format) { const struct iptables_command_state *cs = data; + format |= FMT_NUMERIC; + nft_arp_print_rule_details(&cs->arp, format); if (cs->jumpto != NULL && strcmp(cs->jumpto, "") != 0) { printf("-j %s", cs->jumpto); } else if (cs->target) { printf("-j %s", cs->target->name); - cs->target->print(&cs->arp, cs->target->t, format & FMT_NUMERIC); + if (cs->target->save != NULL) + cs->target->save(&cs->arp, cs->target->t); } if (!(format & FMT_NOCOUNTS)) { @@ -595,12 +598,6 @@ __nft_arp_save_rule(const void *data, unsigned int format) fputc('\n', stdout); } -static void -nft_arp_save_rule(const void *data, unsigned int format) -{ - __nft_arp_save_rule(data, format | FMT_NUMERIC); -} - static void nft_arp_print_rule(struct nftnl_rule *r, unsigned int num, unsigned int format) { @@ -610,7 +607,25 @@ nft_arp_print_rule(struct nftnl_rule *r, unsigned int num, unsigned int format) printf("%u ", num); nft_arp_rule_to_cs(r, &cs); - __nft_arp_save_rule(&cs, format); + + nft_arp_print_rule_details(&cs.arp, format); + + if (cs.jumpto != NULL && strcmp(cs.jumpto, "") != 0) { + printf("-j %s", cs.jumpto); + } else if (cs.target) { + printf("-j %s", cs.target->name); + cs.target->print(&cs.arp, cs.target->t, format & FMT_NUMERIC); + } + + if (!(format & FMT_NOCOUNTS)) { + printf(", pcnt="); + xtables_print_num(cs.arp.counters.pcnt, format); + printf("-- bcnt="); + xtables_print_num(cs.arp.counters.bcnt, format); + } + + if (!(format & FMT_NONEWLINE)) + fputc('\n', stdout); } static bool nft_arp_is_same(const void *data_a, -- cgit v1.2.3