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