@@ -487,10 +487,14 @@ print_match(const struct xt_entry_match *m,
xtables_find_match(m->u.user.name, XTF_TRY_LOAD, NULL);
if (match) {
- if (match->print)
+ if (match->print) {
match->print(ip, m, numeric);
- else
+ } else if (match->save != NULL) {
+ printf("-m %s ", match->name);
+ match->save(ip, m);
+ } else {
printf("%s ", match->name);
+ }
} else {
if (m->u.user.name[0])
printf("UNKNOWN match `%s' ", m->u.user.name);
@@ -617,6 +621,10 @@ print_firewall(const struct ip6t_entry *fw,
if (target->print)
/* Print the target information. */
target->print(&fw->ipv6, t, format & FMT_NUMERIC);
+ else if (target->save != NULL) {
+ printf("hi world");
+ target->save(&fw->ipv6, t);
+ }
} else if (t->u.target_size != sizeof(*t))
printf("[%u bytes of unknown target data] ",
(unsigned int)(t->u.target_size - sizeof(*t)));
@@ -472,10 +472,14 @@ print_match(const struct xt_entry_match *m,
xtables_find_match(m->u.user.name, XTF_TRY_LOAD, NULL);
if (match) {
- if (match->print)
+ if (match->print) {
match->print(ip, m, numeric);
- else
+ } else if (match->save != NULL) {
+ printf("-m %s ", match->name);
+ match->save(ip, m);
+ } else {
printf("%s ", match->name);
+ }
} else {
if (m->u.user.name[0])
printf("UNKNOWN match `%s' ", m->u.user.name);
@@ -602,6 +606,8 @@ print_firewall(const struct ipt_entry *fw,
if (target->print)
/* Print the target information. */
target->print(&fw->ip, t, format & FMT_NUMERIC);
+ else if (target->save != NULL)
+ target->save(&fw->ip, t);
} else if (t->u.target_size != sizeof(*t))
printf("[%u bytes of unknown target data] ",
(unsigned int)(t->u.target_size - sizeof(*t)));
This way we can avoid having to provide two dumping function for new plugins. Signed-off-by: Jan Engelhardt <jengelh@inai.de> --- iptables/ip6tables.c | 12 ++++++++++-- iptables/iptables.c | 10 ++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-)