162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#ifndef __NETCNT_COMMON_H
362306a36Sopenharmony_ci#define __NETCNT_COMMON_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/types.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#define MAX_PERCPU_PACKETS 32
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/* sizeof(struct bpf_local_storage_elem):
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci * It is about 128 bytes on x86_64 and 512 bytes on s390x, but allocate more to
1262306a36Sopenharmony_ci * account for possible layout changes, different architectures, etc.
1362306a36Sopenharmony_ci * The kernel will wrap up to PAGE_SIZE internally anyway.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci#define SIZEOF_BPF_LOCAL_STORAGE_ELEM		768
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/* Try to estimate kernel's BPF_LOCAL_STORAGE_MAX_VALUE_SIZE: */
1862306a36Sopenharmony_ci#define BPF_LOCAL_STORAGE_MAX_VALUE_SIZE	(0xFFFF - \
1962306a36Sopenharmony_ci						 SIZEOF_BPF_LOCAL_STORAGE_ELEM)
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define PCPU_MIN_UNIT_SIZE			32768
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciunion percpu_net_cnt {
2462306a36Sopenharmony_ci	struct {
2562306a36Sopenharmony_ci		__u64 packets;
2662306a36Sopenharmony_ci		__u64 bytes;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci		__u64 prev_ts;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci		__u64 prev_packets;
3162306a36Sopenharmony_ci		__u64 prev_bytes;
3262306a36Sopenharmony_ci	};
3362306a36Sopenharmony_ci	__u8 data[PCPU_MIN_UNIT_SIZE];
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciunion net_cnt {
3762306a36Sopenharmony_ci	struct {
3862306a36Sopenharmony_ci		__u64 packets;
3962306a36Sopenharmony_ci		__u64 bytes;
4062306a36Sopenharmony_ci	};
4162306a36Sopenharmony_ci	__u8 data[BPF_LOCAL_STORAGE_MAX_VALUE_SIZE];
4262306a36Sopenharmony_ci};
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#endif
45