ebpf教程(4.1):XDP程序的加载

前言

前置阅读要求:

在阅读完上面的文档后,我们大概知道XDP(eXpress Data Path)允许在数据包进入内核协议栈之前进行处理,这减少了不必要的开销。由于处理发生在内核的早期阶段,XDP 能够显著提高网络处理性能,特别是对于高流量的场景。

本文是XDP的hello world – 加载XDP程序。


环境准备

# 安装依赖
apt install libxdp-dev xdp-tools

# 当前的libxdp版本
pkg-config --modversion libxdp
1.4.2

# 当前的内核版本(ubuntu24的内核)
uname -r
6.8.0-31-generic

我当前的网络拓扑如下图所示。当然本文的示例对网络拓扑没有要求,把程序加载到网卡上即可。

在这里插入图片描述


加载XDP程序


源码

下面的示例代码修改自:

bpf程序的生命周期:open–create–attach–detach。

本文的 BPF ELF 文件中有两个XDP程序,可以选择按照名称加载。

首先是XDP程序。两个程序,分别是放行或者阻止数据包。

// xdp_kernel_prog.c
#include <linux/types.h>

#include <bpf/bpf_helpers.h>
#include <linux/bpf.h>

SEC("xdp")
int xdp_pass_func(struct xdp_md *ctx) {
   
  bpf_printk("%s", "Pkt pass...");
  return XDP_PASS;
}

SEC("xdp")
int xdp_drop_func(struct xdp_md *ctx) {
   
  bpf_printk("%s", "Pkt drop...");
  return XDP_DROP;
}

char _license[] SEC("license") = "GPL";

下面是加载XDP程序的用户层程序。

示例代码中,我使用了argp库,我喜欢用这个库来处理命令行参数。它的使用可见:一步步了解Argp-CSDN博客

#include <argp.h>
#include <net/if.h>
#include <signal.h>
#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

da1234cao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值