lib: make ipvrf able to use libbpf and fix function name conflicts
There are directly calls in libbpf for bpf program load/attach. So we could just use two wrapper functions for ipvrf and convert them with libbpf support. Function bpf_prog_load() is removed as it's conflict with libbpf function name. bpf.c is moved to bpf_legacy.c for later main libbpf support in iproute2. Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Hangbin Liu <haliu@redhat.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
503e9229b0
commit
dc800a4ed4
|
|
@ -274,12 +274,16 @@ int bpf_trace_pipe(void);
|
|||
|
||||
void bpf_print_ops(struct rtattr *bpf_ops, __u16 len);
|
||||
|
||||
int bpf_prog_load(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, char *log,
|
||||
size_t size_log);
|
||||
int bpf_prog_load_dev(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, __u32 ifindex,
|
||||
char *log, size_t size_log);
|
||||
int bpf_program_load(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, char *log,
|
||||
size_t size_log);
|
||||
|
||||
int bpf_prog_attach_fd(int prog_fd, int target_fd, enum bpf_attach_type type);
|
||||
int bpf_prog_detach_fd(int target_fd, enum bpf_attach_type type);
|
||||
int bpf_program_attach(int prog_fd, int target_fd, enum bpf_attach_type type);
|
||||
|
||||
int bpf_dump_prog_info(FILE *f, uint32_t id);
|
||||
|
||||
|
|
|
|||
|
|
@ -256,8 +256,8 @@ static int prog_load(int idx)
|
|||
BPF_EXIT_INSN(),
|
||||
};
|
||||
|
||||
return bpf_prog_load(BPF_PROG_TYPE_CGROUP_SOCK, prog, sizeof(prog),
|
||||
"GPL", bpf_log_buf, sizeof(bpf_log_buf));
|
||||
return bpf_program_load(BPF_PROG_TYPE_CGROUP_SOCK, prog, sizeof(prog),
|
||||
"GPL", bpf_log_buf, sizeof(bpf_log_buf));
|
||||
}
|
||||
|
||||
static int vrf_configure_cgroup(const char *path, int ifindex)
|
||||
|
|
@ -288,7 +288,7 @@ static int vrf_configure_cgroup(const char *path, int ifindex)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (bpf_prog_attach_fd(prog_fd, cg_fd, BPF_CGROUP_INET_SOCK_CREATE)) {
|
||||
if (bpf_program_attach(prog_fd, cg_fd, BPF_CGROUP_INET_SOCK_CREATE)) {
|
||||
fprintf(stderr, "Failed to attach prog to cgroup: '%s'\n",
|
||||
strerror(errno));
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ CFLAGS += -fPIC
|
|||
|
||||
UTILOBJ = utils.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
|
||||
inet_proto.o namespace.o json_writer.o json_print.o \
|
||||
names.o color.o bpf.o bpf_glue.o exec.o fs.o cg_map.o
|
||||
names.o color.o bpf_legacy.o bpf_glue.o exec.o fs.o cg_map.o
|
||||
|
||||
NLOBJ=libgenl.o libnetlink.o mnl_utils.o
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,29 @@
|
|||
*
|
||||
*/
|
||||
#include "bpf_util.h"
|
||||
#ifdef HAVE_LIBBPF
|
||||
#include <bpf/bpf.h>
|
||||
#endif
|
||||
|
||||
int bpf_program_load(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, char *log,
|
||||
size_t size_log)
|
||||
{
|
||||
#ifdef HAVE_LIBBPF
|
||||
return bpf_load_program(type, insns, size_insns, license, 0, log, size_log);
|
||||
#else
|
||||
return bpf_prog_load_dev(type, insns, size_insns, license, 0, log, size_log);
|
||||
#endif
|
||||
}
|
||||
|
||||
int bpf_program_attach(int prog_fd, int target_fd, enum bpf_attach_type type)
|
||||
{
|
||||
#ifdef HAVE_LIBBPF
|
||||
return bpf_prog_attach(prog_fd, target_fd, type, 0);
|
||||
#else
|
||||
return bpf_prog_attach_fd(prog_fd, target_fd, type);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBBPF
|
||||
static const char *_libbpf_compile_version = LIBBPF_VERSION;
|
||||
|
|
|
|||
|
|
@ -1087,10 +1087,9 @@ int bpf_prog_detach_fd(int target_fd, enum bpf_attach_type type)
|
|||
return bpf(BPF_PROG_DETACH, &attr, sizeof(attr));
|
||||
}
|
||||
|
||||
static int bpf_prog_load_dev(enum bpf_prog_type type,
|
||||
const struct bpf_insn *insns, size_t size_insns,
|
||||
const char *license, __u32 ifindex,
|
||||
char *log, size_t size_log)
|
||||
int bpf_prog_load_dev(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, __u32 ifindex,
|
||||
char *log, size_t size_log)
|
||||
{
|
||||
union bpf_attr attr = {};
|
||||
|
||||
|
|
@ -1109,14 +1108,6 @@ static int bpf_prog_load_dev(enum bpf_prog_type type,
|
|||
return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
|
||||
}
|
||||
|
||||
int bpf_prog_load(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||
size_t size_insns, const char *license, char *log,
|
||||
size_t size_log)
|
||||
{
|
||||
return bpf_prog_load_dev(type, insns, size_insns, license, 0,
|
||||
log, size_log);
|
||||
}
|
||||
|
||||
#ifdef HAVE_ELF
|
||||
struct bpf_elf_prog {
|
||||
enum bpf_prog_type type;
|
||||
Loading…
Reference in New Issue