在dpdk中使用eBPF

  • 本文关键字:eBPF dpdk dpdk ebpf
  • 更新时间 :
  • 英文 :


对一些基本问题感到抱歉。我了解内核上下文中的eBPF和bpf()系统调用或助手库的使用。如何在dpdk中创建钩子?如何将eBPF代码加载到已经运行的dpdk应用程序中?我想有dpdk进程暴露钩子在多个地方,并希望加载bpf转储数据包或打印统计。我找不到所有的答案或这样的现实世界场景的例子。

我已经完成了dpdk示例和代码实现,但无法获得实际编写应用程序的细节

DPDK API为其eBPF模块提供了以下通用函数:

struct rte_bpf *rte_bpf_load(const struct rte_bpf_prm *prm);
struct rte_bpf *rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname, const char *sname);
void            rte_bpf_destroy(struct rte_bpf *bpf);
uint64_t        rte_bpf_exec(const struct rte_bpf *bpf, void *ctx);
uint32_t        rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[], uint32_t num);

它们允许您在DPDK代码中加载和执行BPF程序。

除此之外,DPDK库还提供了4个函数来将BPF程序附加到特定的端口&队列。然后,当数据包在这些队列上接收和发送时,它们将执行。

void rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue);
void rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue);
int  rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue, const struct rte_bpf_prm *prm, const char *fname, const char *sname, uint32_t flags);
int  rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue, const struct rte_bpf_prm *prm, const char *fname, const char *sname, uint32_t flags);

你可以在这个演示中找到更多的信息。

相关内容

  • 没有找到相关文章

最新更新