@@ -795,11 +795,19 @@ static int nftnl_chain_snprintf_default(char *buf, size_t size,
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
if (c->flags & (1 << NFTNL_CHAIN_HOOKNUM)) {
- ret = snprintf(buf+offset, len,
- " type %s hook %s prio %d policy %s "
- "packets %"PRIu64" bytes %"PRIu64"",
+ ret = snprintf(buf+offset, len, " type %s hook %s prio %d",
c->type, nftnl_hooknum2str(c->family, c->hooknum),
- c->prio, nftnl_verdict2str(c->policy),
+ c->prio);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ if (c->flags & (1 << NFTNL_CHAIN_POLICY)) {
+ ret = snprintf(buf+offset, len, " policy %s",
+ nftnl_verdict2str(c->policy));
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+
+ ret = snprintf(buf+offset, len,
+ " packets %"PRIu64" bytes %"PRIu64"",
c->packets, c->bytes);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
The policy field was printed unconditionally, but if it wasn't set the default value 0 was printed as 'policy drop' which is not correct. Signed-off-by: Phil Sutter <phil@nwl.cc> --- src/chain.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)