eBPF/XDP加速报文转发

网络转发

转发的含义是找到报文下一跳,根据路由表查询L3 目的IP的下一跳。
内核转发
引用这张图片目的是为了说明当需要进行IP转发时,依然涉及分配SKB,解析IP报文。SKB是一个复杂的数据结构,是转发性能的重要影响因素。
在这里插入图片描述
引用这张图片的目的是为了说明转发就是为了获取下一跳,即该IP的源MAC和目的MAC。

eBPF/XDP 网络转发

在这里插入图片描述
若采用eBPF程序挂载XDP位置来处理转发报文, 即上图 Forward 部分,理论上将会有大幅提高,因为该位置无SKB分配,没有进入内核栈。

eBPF/XDP 转发思路

通过以上介绍,为了达到转发目的,需要知道转发报文中目的IP源MAC和目的MAC,并将其储存。

eBPF存储功能map:

  • bpf_map_update_elem 更新map内容
  • bpf_map_lookup_elem 查询map内容

查询转发IP的源MAC和目的MAC, 可参考官方示例

  • bpf_fib_lookup 可查询内核中路由表和邻居表,路由表可查出口MAC, 邻居表可查目的MAC
bpf_fib_lookup
       --> bpf_ipv4_fib_lookup
           ...
           ---> nl_fib_lookup
       --> bpf_ipv6_fib_lookup

bpf_fib_lookup 源代码

bpf_fib_lookup 返回值需要关注一下

返回值含义
BPF_FIB_LKUP_RET_SUCCESSsuccess
BPF_FIB_LKUP_RET_BLACKHOLEdest is blackholed; can be dropped
BPF_FIB_LKUP_RET_UNREACHABLEdest is unreachable; can be dropped
BPF_FIB_LKUP_RET_PROHIBITdest not allowed; can be dropped
BPF_FIB_LKUP_RET_NOT_FWDEDpacket is not forwarded 非转发报文
BPF_FIB_LKUP_RET_FWD_DISABLEDfwding is not enabled on ingress. Do sysctl net.ipv{4,6}.conf.all.forwarding = 1
BPF_FIB_LKUP_RET_UNSUPP_LWTfwd requires encapsulation
BPF_FIB_LKUP_RET_NO_NEIGHno neighbor entry for nh
BPF_FIB_LKUP_RET_FRAG_NEEDEDfragmentation required to fwd

eBPF/XDP 转发实现

设计文档和代码实现, 免费答疑,免费送源码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cugriver

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

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

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

打赏作者

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

抵扣说明:

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

余额充值