1371e4fccSRoman Gushchin // SPDX-License-Identifier: GPL-2.0
2371e4fccSRoman Gushchin #ifndef __NETCNT_COMMON_H
3371e4fccSRoman Gushchin #define __NETCNT_COMMON_H
4371e4fccSRoman Gushchin 
5371e4fccSRoman Gushchin #include <linux/types.h>
6371e4fccSRoman Gushchin 
7371e4fccSRoman Gushchin #define MAX_PERCPU_PACKETS 32
8371e4fccSRoman Gushchin 
9*33b57e0cSStanislav Fomichev /* sizeof(struct bpf_local_storage_elem):
10*33b57e0cSStanislav Fomichev  *
11*33b57e0cSStanislav Fomichev  * It really is about 128 bytes on x86_64, but allocate more to account for
12*33b57e0cSStanislav Fomichev  * possible layout changes, different architectures, etc.
13*33b57e0cSStanislav Fomichev  * The kernel will wrap up to PAGE_SIZE internally anyway.
14*33b57e0cSStanislav Fomichev  */
15*33b57e0cSStanislav Fomichev #define SIZEOF_BPF_LOCAL_STORAGE_ELEM		256
16*33b57e0cSStanislav Fomichev 
17*33b57e0cSStanislav Fomichev /* Try to estimate kernel's BPF_LOCAL_STORAGE_MAX_VALUE_SIZE: */
18*33b57e0cSStanislav Fomichev #define BPF_LOCAL_STORAGE_MAX_VALUE_SIZE	(0xFFFF - \
19*33b57e0cSStanislav Fomichev 						 SIZEOF_BPF_LOCAL_STORAGE_ELEM)
20*33b57e0cSStanislav Fomichev 
21*33b57e0cSStanislav Fomichev #define PCPU_MIN_UNIT_SIZE			32768
22*33b57e0cSStanislav Fomichev 
23*33b57e0cSStanislav Fomichev union percpu_net_cnt {
24*33b57e0cSStanislav Fomichev 	struct {
25371e4fccSRoman Gushchin 		__u64 packets;
26371e4fccSRoman Gushchin 		__u64 bytes;
27371e4fccSRoman Gushchin 
28371e4fccSRoman Gushchin 		__u64 prev_ts;
29371e4fccSRoman Gushchin 
30371e4fccSRoman Gushchin 		__u64 prev_packets;
31371e4fccSRoman Gushchin 		__u64 prev_bytes;
32371e4fccSRoman Gushchin 	};
33*33b57e0cSStanislav Fomichev 	__u8 data[PCPU_MIN_UNIT_SIZE];
34*33b57e0cSStanislav Fomichev };
35371e4fccSRoman Gushchin 
36*33b57e0cSStanislav Fomichev union net_cnt {
37*33b57e0cSStanislav Fomichev 	struct {
38371e4fccSRoman Gushchin 		__u64 packets;
39371e4fccSRoman Gushchin 		__u64 bytes;
40371e4fccSRoman Gushchin 	};
41*33b57e0cSStanislav Fomichev 	__u8 data[BPF_LOCAL_STORAGE_MAX_VALUE_SIZE];
42*33b57e0cSStanislav Fomichev };
43371e4fccSRoman Gushchin 
44371e4fccSRoman Gushchin #endif
45