XDP入门--eBPF之hello world

本文介绍了XDP在Linux内核网络架构中的位置,它允许在数据包到达L2层时进行高速处理。通过一个示例展示了如何使用XDP程序丢弃报文,详细步骤包括安装clang、编写XDP程序、编译、加载和卸载程序,并通过ping测试验证了其效果。

通过前文XDP, traffic control/tc/qdisc和netfilter在Linux的网络架构(packet flow in Netfilter and General Network)我们已经知道,XDP(eXpress Data Path)是与DPDK对应的一套快速数据处理框架,它是 Linux Kernel 中提供高性能、可编程的网络数据包处理框架。 它使得 Kernel 能够在数据报文到达 L2(网卡驱动层)时就对其进行针对性的高速处理,而无需再 “循规蹈矩” 地进入到 Linux内核的TCP/IP协议栈进行处理。

1、下面这二张图,能非常好的说明XDP在Linux内核里的网络数据处理架构上的位置。

在这里插入图片描述
在这里插入图片描述

2、XDP提供了可编程的灵活处理方式,XDP 程序可以通过 XDP action code来指定驱动程序对报文的后续处理方式:

  1. XDP_ABORTED:
    丢弃报文,与 XDP_DROP不同之处在于XDP_ABORTED会用 trace_xdp_exception 来记录错误行为。
  2. XDP_DROP:
    在网卡驱动层直接将报文丢弃,数据包将不再送到内核TCP/IP协议栈进行处理。
  3. XDP_PASS
    报文继续送往内核TCP/IP协议栈进行处理,此时的处理方式与传统方式一致。
  4. XDP_TX:
    将报文从接收到此报文的同一块网卡发送出去
  5. XDP_REDIRECT:
    将报文重定向到其他的网卡或CPU,结合AF_XDP可以将报文直接送往用户空间,接应用程度直接接管报文,类似DPDK。

3、一个将收到的报文在XDP里直接丢弃的例子

本例子在树莓派系统上验证通过。

3.1、安装clang

sudo apt install clang

3.2、编写XDP程序

每二个报文就丢弃一个报文,剩下的那个报文上送内核协议栈处理。

// file: xdp-helloworld.c

#include <linux/bpf.h>

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值