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