summaryrefslogtreecommitdiffstats
path: root/lib/util/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util/util.h')
-rw-r--r--lib/util/util.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/util/util.h b/lib/util/util.h
new file mode 100644
index 0000000..8848e41
--- /dev/null
+++ b/lib/util/util.h
@@ -0,0 +1,97 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __UTIL_H
+#define __UTIL_H
+
+#include <bpf/libbpf.h>
+#include <xdp/libxdp.h>
+#include "params.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+#define STRERR_BUFSIZE 1024
+#define _textify(x) #x
+#define textify(x) _textify(x)
+
+#define __unused __attribute__((unused))
+
+#ifndef BPF_DIR_MNT
+#define BPF_DIR_MNT "/sys/fs/bpf"
+#endif
+
+#ifndef BPF_OBJECT_PATH
+#define BPF_OBJECT_PATH "/usr/lib/bpf"
+#endif
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
+
+#define FOR_EACH_MAP_KEY(_err, _map_fd, _map_key, _prev_key) \
+ for (_err = bpf_map_get_next_key(_map_fd, NULL, &_map_key); \
+ !_err; \
+ _prev_key = _map_key, \
+ _err = bpf_map_get_next_key(_map_fd, &_prev_key, &_map_key))
+
+#define min(x, y) ((x) < (y) ? x : y)
+#define max(x, y) ((x) > (y) ? x : y)
+
+#ifndef offsetof
+#define offsetof(type, member) ((size_t) & ((type *)0)->member)
+#endif
+
+#ifndef container_of
+#define container_of(ptr, type, member) \
+ ({ \
+ const typeof(((type *)0)->member) *__mptr = (ptr); \
+ (type *)((char *)__mptr - offsetof(type, member)); \
+ })
+#endif
+
+#ifndef roundup
+#define roundup(x, y) \
+ ({ \
+ typeof(y) __y = y; \
+ (((x) + (__y - 1)) / __y) * __y; \
+ })
+#endif
+
+int try_snprintf(char *buf, size_t buf_len, const char *format, ...);
+int make_dir_subdir(const char *parent, const char *dir);
+
+int check_bpf_environ(void);
+int double_rlimit(void);
+
+int attach_xdp_program(struct xdp_program *prog, const struct iface *iface,
+ enum xdp_attach_mode mode, const char *pin_root_dir);
+int detach_xdp_program(struct xdp_program *prog, const struct iface *iface,
+ enum xdp_attach_mode mode, const char *pin_root_dir);
+
+int find_bpf_file(char *buf, size_t buf_size, const char *progname);
+struct bpf_object *open_bpf_file(const char *progname,
+ struct bpf_object_open_opts *opts);
+
+typedef int (*program_callback)(const struct iface *iface,
+ struct xdp_program *prog,
+ enum xdp_attach_mode mode, void *arg);
+typedef int (*multiprog_callback)(const struct iface *iface,
+ const struct xdp_multiprog *mp, void *arg);
+int get_pinned_program(const struct iface *iface, const char *pin_root_path,
+ enum xdp_attach_mode *mode, struct xdp_program **prog);
+int iterate_pinned_programs(const char *pin_root_path, program_callback cb,
+ void *arg);
+int iterate_iface_multiprogs(multiprog_callback cb, void *arg);
+
+int get_bpf_root_dir(char *buf, size_t buf_len, const char *subdir, bool fatal);
+int get_pinned_map_fd(const char *bpf_root, const char *map_name,
+ struct bpf_map_info *info);
+int unlink_pinned_map(int dir_fd, const char *map_name);
+
+const char *action2str(__u32 action);
+
+int prog_lock_get(const char *progname);
+void prog_lock_release(int signal);
+
+const char *get_libbpf_version(void);
+int iface_print_status(const struct iface *iface);
+
+#endif