diff options
author | Florian Westphal <fw@strlen.de> | 2018-11-07 13:57:16 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2018-11-12 14:53:24 +0100 |
commit | d9a518ee22cf90ddeb56a9df687aef953fda0fa0 (patch) | |
tree | 347e814c29aee4e36fc0943c646ccfd7abee8f87 /iptables/nft-arp.c | |
parent | 5a52e6a9cffd8e2a5d16af0fa08902ca8332190b (diff) |
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 <fw@strlen.de>
Diffstat (limited to 'iptables/nft-arp.c')
-rw-r--r-- | iptables/nft-arp.c | 33 |
1 files changed, 24 insertions, 9 deletions
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)) { @@ -596,12 +599,6 @@ __nft_arp_save_rule(const void *data, unsigned int format) } 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) { struct iptables_command_state cs = {}; @@ -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, |