static void nft_arp_print_header(unsigned int format, const char *chain,
const char *pol,
const struct xt_counters *counters,
- bool basechain, uint32_t refs)
+ bool basechain, uint32_t refs,
+ uint32_t entries)
{
printf("Chain %s", chain);
if (basechain && pol) {
static void nft_bridge_print_header(unsigned int format, const char *chain,
const char *pol,
const struct xt_counters *counters,
- bool basechain, uint32_t refs)
+ bool basechain, uint32_t refs, uint32_t entries)
{
printf("Bridge chain: %s, entries: %u, policy: %s\n",
- chain, refs, basechain ? pol : "RETURN");
+ chain, entries, basechain ? pol : "RETURN");
}
static void print_matches_and_watchers(const struct iptables_command_state *cs,
void print_header(unsigned int format, const char *chain, const char *pol,
const struct xt_counters *counters, bool basechain,
- uint32_t refs)
+ uint32_t refs, uint32_t entries)
{
printf("Chain %s", chain);
if (basechain) {
void (*print_header)(unsigned int format, const char *chain,
const char *pol,
const struct xt_counters *counters, bool basechain,
- uint32_t refs);
+ uint32_t refs, uint32_t entries);
void (*print_rule)(struct nftnl_rule *r, unsigned int num,
unsigned int format);
void (*save_rule)(const void *data, unsigned int format);
void nft_clear_iptables_command_state(struct iptables_command_state *cs);
void print_header(unsigned int format, const char *chain, const char *pol,
const struct xt_counters *counters, bool basechain,
- uint32_t refs);
+ uint32_t refs, uint32_t entries);
void print_rule_details(const struct iptables_command_state *cs,
const char *targname, uint8_t flags,
uint8_t invflags, uint8_t proto,
.bcnt = nftnl_chain_get_u64(c, NFTNL_CHAIN_BYTES),
};
bool basechain = false;
+ uint32_t entries;
if (nftnl_chain_get(c, NFTNL_CHAIN_HOOKNUM))
basechain = true;
ops->print_table_header(table);
}
- refs -= nft_rule_count(h, chain_name, table);
-
if (found)
printf("\n");
+ entries = nft_rule_count(h, chain_name, table);
ops->print_header(format, chain_name, policy_name[policy],
- &ctrs, basechain, refs);
+ &ctrs, basechain, refs - entries, entries);
__nft_rule_list(h, chain_name, table,
rulenum, format, ops->print_rule);
exit 1
fi
+ $XT_MULTI ebtables -L FOO | grep -q 'entries: 0'
+ if [ $? -ne 0 ]; then
+ echo "Unexpected entries count in empty unreferenced chain"
+ $XT_MULTI ebtables -L
+ exit 1
+ fi
+
+ $XT_MULTI ebtables -A FORWARD -j FOO
+ $XT_MULTI ebtables -L FORWARD | grep -q 'entries: 1'
+ if [ $? -ne 0 ]; then
+ echo "Unexpected entries count in FORWARD chain"
+ $XT_MULTI ebtables -L
+ exit 1
+ fi
+
+ $XT_MULTI ebtables -L FOO | grep -q 'entries: 0'
+ if [ $? -ne 0 ]; then
+ echo "Unexpected entries count in empty referenced chain"
+ $XT_MULTI ebtables -L
+ exit 1
+ fi
+
+ $XT_MULTI ebtables -A FOO -j ACCEPT
+ $XT_MULTI ebtables -L FOO | grep -q 'entries: 1'
+ if [ $? -ne 0 ]; then
+ echo "Unexpected entries count in non-empty referenced chain"
+ $XT_MULTI ebtables -L
+ exit 1
+ fi
+
$XT_MULTI ebtables -t filter -N BAR || exit 1
$XT_MULTI ebtables -t filter -N BAZ || exit 1