forked from mirrors/linux
		
	On x86_64, each notification results in one skbuff allocation which consumes at least 768 bytes due to the skbuff overhead. This patch coalesces several notifications into one single skbuff, so each notification consumes at least ~211 bytes, that ~3.5 times less memory consumption. As a result, this is reducing the chances to exhaust the netlink socket receive buffer. Rule of thumb is that each notification batch only contains netlink messages whose report flag is the same, nfnetlink_send() requires this to do appropriate delivery to userspace, either via unicast (echo mode) or multicast (monitor mode). The skbuff control buffer is used to annotate the report flag for later handling at the new coalescing routine. The batch skbuff notification size is NLMSG_GOODSIZE, using a larger skbuff would allow for more socket receiver buffer savings (to amortize the cost of the skbuff even more), however, going over that size might break userspace applications, so let's be conservative and stick to NLMSG_GOODSIZE. Reported-by: Phil Sutter <phil@nwl.cc> Acked-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
		
			
				
	
	
		
			18 lines
		
	
	
	
		
			366 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
	
		
			366 B
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef _NETNS_NFTABLES_H_
 | 
						|
#define _NETNS_NFTABLES_H_
 | 
						|
 | 
						|
#include <linux/list.h>
 | 
						|
 | 
						|
struct netns_nftables {
 | 
						|
	struct list_head	tables;
 | 
						|
	struct list_head	commit_list;
 | 
						|
	struct list_head	module_list;
 | 
						|
	struct list_head	notify_list;
 | 
						|
	struct mutex		commit_mutex;
 | 
						|
	unsigned int		base_seq;
 | 
						|
	u8			gencursor;
 | 
						|
	u8			validate_state;
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |