diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/monitor.c | 13 | ||||
-rw-r--r-- | src/rule.c | 19 |
2 files changed, 12 insertions, 20 deletions
diff --git a/src/monitor.c b/src/monitor.c index 20810a5d..ea0393cd 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -609,6 +609,12 @@ static void netlink_events_cache_addset(struct netlink_mon_handler *monh, goto out; } + if (nft_output_echo(&monh->ctx->nft->output) && + !set_is_anonymous(s->flags)) { + set_free(s); + goto out; + } + set_add_hash(s, t); out: nftnl_set_free(nls); @@ -636,6 +642,10 @@ static void netlink_events_cache_addsetelem(struct netlink_mon_handler *monh, goto out; } + if (nft_output_echo(&monh->ctx->nft->output) && + !set_is_anonymous(set->flags)) + goto out; + nlsei = nftnl_set_elems_iter_create(nls); if (nlsei == NULL) memory_allocation_error(); @@ -744,7 +754,8 @@ out: static void netlink_events_cache_update(struct netlink_mon_handler *monh, const struct nlmsghdr *nlh, int type) { - if (!monh->cache_needed) + if (nft_output_echo(&monh->ctx->nft->output) && + type != NFT_MSG_NEWSET && type != NFT_MSG_NEWSETELEM) return; switch (type) { @@ -2502,23 +2502,6 @@ static int do_command_rename(struct netlink_ctx *ctx, struct cmd *cmd) return 0; } -static bool need_cache(const struct cmd *cmd) -{ - /* - * - new rules in default format - * - new elements - */ - if (((cmd->monitor->flags & (1 << NFT_MSG_NEWRULE)) && - (cmd->monitor->format == NFTNL_OUTPUT_DEFAULT)) || - (cmd->monitor->flags & (1 << NFT_MSG_NEWSETELEM))) - return true; - - if (cmd->monitor->flags & (1 << NFT_MSG_TRACE)) - return true; - - return false; -} - static int do_command_monitor(struct netlink_ctx *ctx, struct cmd *cmd) { struct netlink_mon_handler monhandler = { @@ -2533,8 +2516,6 @@ static int do_command_monitor(struct netlink_ctx *ctx, struct cmd *cmd) if (nft_output_json(&ctx->nft->output)) monhandler.format = NFTNL_OUTPUT_JSON; - monhandler.cache_needed = need_cache(cmd); - return netlink_monitor(&monhandler, ctx->nft->nf_sock); } |