X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Faf_xdp%2Fcompat.h;h=bf40c6572e886f9f36e7df468bfd24ad1308d091;hb=e1543baea37db002238a30d120a58472fb6471a7;hp=1d66f5e318fa77ca63f9e211226dfcd5cebdaed0;hpb=ae70cc6e893bdc9e2b3cec290a964ec80a45372a;p=dpdk.git diff --git a/drivers/net/af_xdp/compat.h b/drivers/net/af_xdp/compat.h index 1d66f5e318..bf40c6572e 100644 --- a/drivers/net/af_xdp/compat.h +++ b/drivers/net/af_xdp/compat.h @@ -2,13 +2,16 @@ * Copyright(c) 2020 Intel Corporation. */ -#include +#ifdef RTE_NET_AF_XDP_LIBXDP +#include +#else #include +#endif #include #include #if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \ - defined(RTE_LIBRTE_AF_XDP_PMD_SHARED_UMEM) + defined(RTE_NET_AF_XDP_SHARED_UMEM) #define ETH_AF_XDP_SHARED_UMEM 1 #endif @@ -55,126 +58,3 @@ tx_syscall_needed(struct xsk_ring_prod *q __rte_unused) return 1; } #endif - -#ifdef RTE_LIBRTE_AF_XDP_PMD_BPF_LINK -static int link_lookup(int ifindex, int *link_fd) -{ - struct bpf_link_info link_info; - __u32 link_len; - __u32 id = 0; - int err; - int fd; - - while (true) { - err = bpf_link_get_next_id(id, &id); - if (err) { - if (errno == ENOENT) { - err = 0; - break; - } - break; - } - - fd = bpf_link_get_fd_by_id(id); - if (fd < 0) { - if (errno == ENOENT) - continue; - err = -errno; - break; - } - - link_len = sizeof(struct bpf_link_info); - memset(&link_info, 0, link_len); - err = bpf_obj_get_info_by_fd(fd, &link_info, &link_len); - if (err) { - close(fd); - break; - } - if (link_info.type == BPF_LINK_TYPE_XDP) { - if ((int)link_info.xdp.ifindex == ifindex) { - *link_fd = fd; - break; - } - } - close(fd); - } - - return err; -} - -static bool probe_bpf_link(void) -{ - DECLARE_LIBBPF_OPTS(bpf_link_create_opts, opts, - .flags = XDP_FLAGS_SKB_MODE); - struct bpf_load_program_attr prog_attr; - struct bpf_insn insns[2]; - int prog_fd, link_fd = -1; - int ifindex_lo = 1; - bool ret = false; - int err; - - err = link_lookup(ifindex_lo, &link_fd); - if (err) - return ret; - - if (link_fd >= 0) - return true; - - /* BPF_MOV64_IMM(BPF_REG_0, XDP_PASS), */ - insns[0].code = BPF_ALU64 | BPF_MOV | BPF_K; - insns[0].dst_reg = BPF_REG_0; - insns[0].imm = XDP_PASS; - - /* BPF_EXIT_INSN() */ - insns[1].code = BPF_JMP | BPF_EXIT; - - memset(&prog_attr, 0, sizeof(prog_attr)); - prog_attr.prog_type = BPF_PROG_TYPE_XDP; - prog_attr.insns = insns; - prog_attr.insns_cnt = RTE_DIM(insns); - prog_attr.license = "GPL"; - - prog_fd = bpf_load_program_xattr(&prog_attr, NULL, 0); - if (prog_fd < 0) - return ret; - - link_fd = bpf_link_create(prog_fd, ifindex_lo, BPF_XDP, &opts); - close(prog_fd); - - if (link_fd >= 0) { - ret = true; - close(link_fd); - } - - return ret; -} - -static int link_xdp_program(int if_index, int prog_fd, bool use_bpf_link) -{ - DECLARE_LIBBPF_OPTS(bpf_link_create_opts, opts); - int link_fd, ret = 0; - - if (!use_bpf_link) - return bpf_set_link_xdp_fd(if_index, prog_fd, - XDP_FLAGS_UPDATE_IF_NOEXIST); - - opts.flags = 0; - link_fd = bpf_link_create(prog_fd, if_index, BPF_XDP, &opts); - if (link_fd < 0) - ret = -1; - - return ret; -} -#else -static bool probe_bpf_link(void) -{ - return false; -} - -static int link_xdp_program(int if_index, int prog_fd, - bool use_bpf_link __rte_unused) -{ - return bpf_set_link_xdp_fd(if_index, prog_fd, - XDP_FLAGS_UPDATE_IF_NOEXIST); -} -#endif