blob: 7ab0e6c7a2899712e94268a6cb7cb108c5191a33 [file] [log] [blame]
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
/* Copyright (c) 2022 Hengqi Chen */
#ifndef __COMPAT_H
#define __COMPAT_H
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <linux/bpf.h>
#define POLL_TIMEOUT_MS 100
struct bpf_buffer;
struct bpf_map;
typedef int (*bpf_buffer_sample_fn)(void *ctx, void *data, size_t size);
typedef void (*bpf_buffer_lost_fn)(void *ctx, int cpu, __u64 cnt);
struct bpf_buffer *bpf_buffer__new(struct bpf_map *events, struct bpf_map *heap);
int bpf_buffer__open(struct bpf_buffer *buffer, bpf_buffer_sample_fn sample_cb,
bpf_buffer_lost_fn lost_cb, void *ctx);
int bpf_buffer__poll(struct bpf_buffer *, int timeout_ms);
void bpf_buffer__free(struct bpf_buffer *);
/* taken from libbpf */
#ifndef __has_builtin
#define __has_builtin(x) 0
#endif
static inline void *libbpf_reallocarray(void *ptr, size_t nmemb, size_t size)
{
size_t total;
#if __has_builtin(__builtin_mul_overflow)
if (__builtin_mul_overflow(nmemb, size, &total))
return NULL;
#else
if (size == 0 || nmemb > ULONG_MAX / size)
return NULL;
total = nmemb * size;
#endif
return realloc(ptr, total);
}
#endif /* __COMPAT_H */