From 89c82c261bb53bfb0b671437a1323830dd7e4019 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Wed, 29 May 2019 20:23:23 +0200 Subject: mnl: estimate receiver buffer size Set a receiver buffer size based on the number of commands and the average message size, this is useful for the --echo option in order to avoid ENOBUFS errors. On the kernel side, each skbuff consumes truesize from the socket queue (although it uses NLMSG_GOODSIZE to allocate it), which is approximately four times the estimated size per message that we get in turn for each echo message to ensure enough receiver buffer space. We could also explore increasing the buffer and retry if mnl_nft_socket_sendmsg() hits ENOBUFS if we ever hit this problem again. Reported-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- include/mnl.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/mnl.h b/include/mnl.h index c63a7e7f..9f50c3da 100644 --- a/include/mnl.h +++ b/include/mnl.h @@ -25,7 +25,8 @@ bool mnl_batch_ready(struct nftnl_batch *batch); void mnl_batch_reset(struct nftnl_batch *batch); uint32_t mnl_batch_begin(struct nftnl_batch *batch, uint32_t seqnum); void mnl_batch_end(struct nftnl_batch *batch, uint32_t seqnum); -int mnl_batch_talk(struct netlink_ctx *ctx, struct list_head *err_list); +int mnl_batch_talk(struct netlink_ctx *ctx, struct list_head *err_list, + uint32_t num_cmds); int mnl_nft_rule_add(struct netlink_ctx *ctx, const struct cmd *cmd, unsigned int flags); -- cgit v1.2.3