mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
103 lines
4.0 KiB
C
103 lines
4.0 KiB
C
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
|
|
|
/*
|
|
* XDP management utility functions
|
|
*
|
|
* Copyright (C) 2020 Toke Høiland-Jørgensen <toke@redhat.com>
|
|
*/
|
|
|
|
#ifndef __LIBXDP_LIBXDP_H
|
|
#define __LIBXDP_LIBXDP_H
|
|
|
|
#include <stdio.h>
|
|
#include <linux/bpf.h>
|
|
#include <bpf/bpf.h>
|
|
#include "xdp_helpers.h"
|
|
|
|
#define XDP_BPFFS_ENVVAR "LIBXDP_BPFFS"
|
|
#define XDP_OBJECT_ENVVAR "LIBXDP_OBJECT_PATH"
|
|
|
|
enum xdp_attach_mode {
|
|
XDP_MODE_UNSPEC = 0,
|
|
XDP_MODE_NATIVE,
|
|
XDP_MODE_SKB,
|
|
XDP_MODE_HW
|
|
};
|
|
|
|
/* This is compatible with libbpf logging levels */
|
|
enum libxdp_print_level {
|
|
LIBXDP_WARN,
|
|
LIBXDP_INFO,
|
|
LIBXDP_DEBUG,
|
|
};
|
|
typedef int (*libxdp_print_fn_t)(enum libxdp_print_level level,
|
|
const char *, va_list ap);
|
|
|
|
libxdp_print_fn_t libxdp_set_print(libxdp_print_fn_t fn);
|
|
|
|
|
|
struct xdp_program;
|
|
struct xdp_multiprog;
|
|
|
|
long libxdp_get_error(const void *ptr);
|
|
int libxdp_strerror(int err, char *buf, size_t size);
|
|
|
|
|
|
struct xdp_program *xdp_program__from_bpf_obj(struct bpf_object *obj,
|
|
const char *section_name);
|
|
struct xdp_program *xdp_program__find_file(const char *filename,
|
|
const char *section_name,
|
|
struct bpf_object_open_opts *opts);
|
|
struct xdp_program *xdp_program__open_file(const char *filename,
|
|
const char *section_name,
|
|
struct bpf_object_open_opts *opts);
|
|
struct xdp_program *xdp_program__from_fd(int fd);
|
|
struct xdp_program *xdp_program__from_id(__u32 prog_id);
|
|
struct xdp_program *xdp_program__from_pin(const char *pin_path);
|
|
|
|
void xdp_program__close(struct xdp_program *xdp_prog);
|
|
|
|
enum xdp_attach_mode xdp_program__is_attached(const struct xdp_program *xdp_prog,
|
|
int ifindex);
|
|
const char *xdp_program__name(const struct xdp_program *xdp_prog);
|
|
const unsigned char *xdp_program__tag(const struct xdp_program *xdp_prog);
|
|
struct bpf_object *xdp_program__bpf_obj(struct xdp_program *xdp_prog);
|
|
const struct btf *xdp_program__btf(struct xdp_program *xdp_prog);
|
|
uint32_t xdp_program__id(const struct xdp_program *xdp_prog);
|
|
int xdp_program__fd(const struct xdp_program *xdp_prog);
|
|
unsigned int xdp_program__run_prio(const struct xdp_program *xdp_prog);
|
|
int xdp_program__set_run_prio(struct xdp_program *xdp_prog,
|
|
unsigned int run_prio);
|
|
bool xdp_program__chain_call_enabled(const struct xdp_program *xdp_prog,
|
|
enum xdp_action action);
|
|
int xdp_program__set_chain_call_enabled(struct xdp_program *prog,
|
|
unsigned int action,
|
|
bool enabled);
|
|
int xdp_program__print_chain_call_actions(const struct xdp_program *prog,
|
|
char *buf,
|
|
size_t buf_len);
|
|
int xdp_program__pin(struct xdp_program *xdp_prog, const char *pin_path);
|
|
int xdp_program__attach(struct xdp_program *xdp_prog,
|
|
int ifindex, enum xdp_attach_mode mode,
|
|
unsigned int flags);
|
|
int xdp_program__attach_multi(struct xdp_program **progs, size_t num_progs,
|
|
int ifindex, enum xdp_attach_mode mode,
|
|
unsigned int flags);
|
|
int xdp_program__detach(struct xdp_program *xdp_prog,
|
|
int ifindex, enum xdp_attach_mode mode,
|
|
unsigned int flags);
|
|
int xdp_program__detach_multi(struct xdp_program **progs, size_t num_progs,
|
|
int ifindex, enum xdp_attach_mode mode,
|
|
unsigned int flags);
|
|
|
|
struct xdp_multiprog *xdp_multiprog__get_from_ifindex(int ifindex);
|
|
struct xdp_program *xdp_multiprog__next_prog(const struct xdp_program *prog,
|
|
const struct xdp_multiprog *mp);
|
|
void xdp_multiprog__close(struct xdp_multiprog *mp);
|
|
int xdp_multiprog__detach(struct xdp_multiprog *mp);
|
|
enum xdp_attach_mode xdp_multiprog__attach_mode(const struct xdp_multiprog *mp);
|
|
struct xdp_program *xdp_multiprog__main_prog(const struct xdp_multiprog *mp);
|
|
bool xdp_multiprog__is_legacy(const struct xdp_multiprog *mp);
|
|
|
|
#endif
|