summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/netlink.h1
-rw-r--r--src/monitor.c13
-rw-r--r--src/rule.c19
3 files changed, 12 insertions, 21 deletions
diff --git a/include/netlink.h b/include/netlink.h
index 279723f3..e6941714 100644
--- a/include/netlink.h
+++ b/include/netlink.h
@@ -171,7 +171,6 @@ struct netlink_mon_handler {
struct netlink_ctx *ctx;
const struct location *loc;
unsigned int debug_mask;
- bool cache_needed;
struct nft_cache *cache;
};
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) {
diff --git a/src/rule.c b/src/rule.c
index 19a06bea..55894cbd 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -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);
}