diff options
author | Phil Sutter <phil@nwl.cc> | 2021-11-05 18:27:53 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2021-11-23 15:01:23 +0100 |
commit | 22f2e1fca127b014dccf1006544e3179c9dc9764 (patch) | |
tree | 9b0051ca24e7faa33daca6bf0de6c3e4acd27ba6 /iptables/xshared.c | |
parent | 766e4872e10bccc12fa37dcf5380d3c99fcf1d75 (diff) |
xshared: Share save_rule_details() with legacy
The function combines printing of input and output interfaces and
protocol parameter, all being IP family independent. Extend the function
to print fragment option ('-f'), too if requested. While being at it,
drop unused iptables_command_state parameter and reorder the remaining
ones a bit.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'iptables/xshared.c')
-rw-r--r-- | iptables/xshared.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/iptables/xshared.c b/iptables/xshared.c index db03aaaa..db701ead 100644 --- a/iptables/xshared.c +++ b/iptables/xshared.c @@ -941,3 +941,35 @@ void parse_chain(const char *chainname) xtables_error(PARAMETER_PROBLEM, "Invalid chain name `%s'", chainname); } + +void save_rule_details(const char *iniface, unsigned const char *iniface_mask, + const char *outiface, unsigned const char *outiface_mask, + uint16_t proto, int frag, uint8_t invflags) +{ + if (iniface != NULL) { + save_iface('i', iniface, iniface_mask, + invflags & IPT_INV_VIA_IN); + } + if (outiface != NULL) { + save_iface('o', outiface, outiface_mask, + invflags & IPT_INV_VIA_OUT); + } + + if (proto > 0) { + const char *pname = proto_to_name(proto, 0); + + if (invflags & XT_INV_PROTO) + printf(" !"); + + if (pname) + printf(" -p %s", pname); + else + printf(" -p %u", proto); + } + + if (frag) { + if (invflags & IPT_INV_FRAG) + printf(" !"); + printf(" -f"); + } +} |