Roman Gushchin | 371e4fc | 2018-09-28 14:46:00 +0000 | [diff] [blame] | 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | #ifndef __NETCNT_COMMON_H |
| 3 | #define __NETCNT_COMMON_H |
| 4 | |
| 5 | #include <linux/types.h> |
| 6 | |
| 7 | #define MAX_PERCPU_PACKETS 32 |
| 8 | |
Stanislav Fomichev | 33b57e0c | 2021-07-27 15:23:35 -0700 | [diff] [blame] | 9 | /* sizeof(struct bpf_local_storage_elem): |
| 10 | * |
| 11 | * It really is about 128 bytes on x86_64, but allocate more to account for |
| 12 | * possible layout changes, different architectures, etc. |
| 13 | * The kernel will wrap up to PAGE_SIZE internally anyway. |
| 14 | */ |
| 15 | #define SIZEOF_BPF_LOCAL_STORAGE_ELEM 256 |
Roman Gushchin | 371e4fc | 2018-09-28 14:46:00 +0000 | [diff] [blame] | 16 | |
Stanislav Fomichev | 33b57e0c | 2021-07-27 15:23:35 -0700 | [diff] [blame] | 17 | /* Try to estimate kernel's BPF_LOCAL_STORAGE_MAX_VALUE_SIZE: */ |
| 18 | #define BPF_LOCAL_STORAGE_MAX_VALUE_SIZE (0xFFFF - \ |
| 19 | SIZEOF_BPF_LOCAL_STORAGE_ELEM) |
Roman Gushchin | 371e4fc | 2018-09-28 14:46:00 +0000 | [diff] [blame] | 20 | |
Stanislav Fomichev | 33b57e0c | 2021-07-27 15:23:35 -0700 | [diff] [blame] | 21 | #define PCPU_MIN_UNIT_SIZE 32768 |
| 22 | |
| 23 | union percpu_net_cnt { |
| 24 | struct { |
| 25 | __u64 packets; |
| 26 | __u64 bytes; |
| 27 | |
| 28 | __u64 prev_ts; |
| 29 | |
| 30 | __u64 prev_packets; |
| 31 | __u64 prev_bytes; |
| 32 | }; |
| 33 | __u8 data[PCPU_MIN_UNIT_SIZE]; |
Roman Gushchin | 371e4fc | 2018-09-28 14:46:00 +0000 | [diff] [blame] | 34 | }; |
| 35 | |
Stanislav Fomichev | 33b57e0c | 2021-07-27 15:23:35 -0700 | [diff] [blame] | 36 | union net_cnt { |
| 37 | struct { |
| 38 | __u64 packets; |
| 39 | __u64 bytes; |
| 40 | }; |
| 41 | __u8 data[BPF_LOCAL_STORAGE_MAX_VALUE_SIZE]; |
Roman Gushchin | 371e4fc | 2018-09-28 14:46:00 +0000 | [diff] [blame] | 42 | }; |
| 43 | |
| 44 | #endif |