1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  #ifndef _NET_HOTDATA_H
3  #define _NET_HOTDATA_H
4  
5  #include <linux/types.h>
6  #include <linux/netdevice.h>
7  #include <net/protocol.h>
8  
9  /* Read mostly data used in network fast paths. */
10  struct net_hotdata {
11  #if IS_ENABLED(CONFIG_INET)
12  	struct packet_offload	ip_packet_offload;
13  	struct net_offload	tcpv4_offload;
14  	struct net_protocol	tcp_protocol;
15  	struct net_offload 	udpv4_offload;
16  	struct net_protocol	udp_protocol;
17  	struct packet_offload	ipv6_packet_offload;
18  	struct net_offload	tcpv6_offload;
19  #if IS_ENABLED(CONFIG_IPV6)
20  	struct inet6_protocol	tcpv6_protocol;
21  	struct inet6_protocol	udpv6_protocol;
22  #endif
23  	struct net_offload	udpv6_offload;
24  #endif
25  	struct list_head	offload_base;
26  	struct list_head	ptype_all;
27  	struct kmem_cache	*skbuff_cache;
28  	struct kmem_cache	*skbuff_fclone_cache;
29  	struct kmem_cache	*skb_small_head_cache;
30  #ifdef CONFIG_RPS
31  	struct rps_sock_flow_table __rcu *rps_sock_flow_table;
32  	u32			rps_cpu_mask;
33  #endif
34  	int			gro_normal_batch;
35  	int			netdev_budget;
36  	int			netdev_budget_usecs;
37  	int			tstamp_prequeue;
38  	int			max_backlog;
39  	int			dev_tx_weight;
40  	int			dev_rx_weight;
41  	int			sysctl_max_skb_frags;
42  	int			sysctl_skb_defer_max;
43  	int			sysctl_mem_pcpu_rsv;
44  };
45  
46  #define inet_ehash_secret	net_hotdata.tcp_protocol.secret
47  #define udp_ehash_secret	net_hotdata.udp_protocol.secret
48  #define inet6_ehash_secret	net_hotdata.tcpv6_protocol.secret
49  #define tcp_ipv6_hash_secret	net_hotdata.tcpv6_offload.secret
50  #define udp6_ehash_secret	net_hotdata.udpv6_protocol.secret
51  #define udp_ipv6_hash_secret	net_hotdata.udpv6_offload.secret
52  
53  extern struct net_hotdata net_hotdata;
54  
55  #endif /* _NET_HOTDATA_H */
56