上一篇文章讲过bpf_prog_run_xdp是XDP 程序的最终调用函数,想要跟踪Generic XDP的代码可以从该函数入手。很显然你不应该从driver/,而是已改在net/目录下检索。

jensonqiu@Bing$ grep -rn "bpf_prog_run_xdp" net
net/core/dev.c:4349:    act = bpf_prog_run_xdp(xdp_prog, xdp);

稍微过滤一下真相就呼之欲出了,函数的调用关系如下:

bpf_prog_run_xdp
netif_receive_generic_xdp
do_xdp_generic
netif_rx_internal/netif_receive_skb_internal/netif_receive_skb_list_internal
netif_receive_skb
ixgb_clean_rx_irq //Send received data up the network stack

从调用关系上很容易推导出 Generic XDP的Hook点是在网卡中断的下半部。也即是在网卡软中断的收包流程中,软中断收到报文后直接传递给网络协议栈。

网卡的两种工作模式

网卡有两种工作模式:

1) 软中断收包模式,该机制的特点是直接在软中断函数将报文传递到网络协议栈。

2)软中断唤醒触发轮询模式(NAPI),该机制的特点是在软中断函数中唤醒网卡驱动注册的poll函数,通过poll函数轮询收包。

API 是一种新技术,目前不是所有网卡驱动都支持这种能力,你如果想确定网卡是不是支持NAPI,有很多方式,其中一种就是查一下网卡驱动是否有实现xxxx_poll函数,比如ixgbe的驱动实现了ixgbe_poll函数。

这两种模式分别对应了XDP的 Generic XDP 和 Native XDP模式。

两种模式的代码汇总点其实都在软中断函数中,Generic XDP是在网卡不支持Native XDP模式时候,通过在ixgb_clean_rx_irq函数中调用netif_receive_skb实现,如果支持Native XDP模式则是通过调用网卡实现的xxxx_poll函数实现。

讲到这里,你肯定已经清楚Generic XDP、Native XDP的挂载点差异性了,如果还有不懂的地方可以连续我,我们单独交流。

Generic XDP Hook相关推荐

  1. Native xdp hook 点

    XDP 支持三种操作模式: Native XDP(XDP_FLAGS_DRV_MODE) 默认的工作模式,Native工作在网卡驱动的RX队列上. Offloaded XDP(XDP_FLAGS_HW ...

  2. [译] Cilium:BPF 和 XDP 参考指南(2021)

    Cilium:BPF和XDP参考指南_RToax-CSDN博客Table of ContentsBPF体系结构指令系统辅助功能地图对象固定尾叫BPF到BPF呼叫准时制硬化减负工具链开发环境虚拟机本文档 ...

  3. 万字长文|深入理解XDP全景指南

    译者序 本文翻译自 2018 年 ACM CoNEXT 大会上的一篇文章: The eXpress Data Path: Fast Programmable Packet Processing in ...

  4. linux xdp简介

    XDP是利用ebpf提供的全新内核网络性能提升方案,主要优势包括: 它不需要任何专门的硬件 它不需要内核绕过 它不会取代 TCP/IP 堆栈 它与 TCP/IP 堆栈以及 BPF 的所有优点协同工作 ...

  5. 同主机容器基于XDP的连通性实验

    XDP原理介绍 受到Bastion论文的启发,我们尝试基于XDP来实现同主机上两个容器之间的端到端转发.XDP全称为eXpress Data Path, 是一种内核网卡上的Rx-hook,支持在网卡驱 ...

  6. XDP/eBPF — Overview

    目录 文章目录 目录 XDP XDP 设计原则 XDP技术优势 XDP 的工作模式 XDP 的适用场景 XDP v.s. DPDK XDP XDP(eXpress Data Path,快速数据面)是 ...

  7. Linux网络新技术基石 |​eBPF and XDP

    hi,大家好,欢迎来到极客重生的世界,今天给大家分享的是Linux 网络新技术,当前正流行网络技是什么?那就是eBPF和XDP技术,Cilium+eBPF超级火热,Google GCP也刚刚全面转过来 ...

  8. linux网卡驱动对XDP支持情况

    各个网卡厂商对应的Linux内核驱动如下 Mellanox: mlx4 (4.8) and mlx5 (4.9) QLogic/Cavium: qede (4.10) Virtio_net: (4.1 ...

  9. 简析XDP的重定向机制

    一. XDP Socket示例解析 源码参见:https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP 该示例 ...

最新文章

  1. Vim 相关插件整理
  2. 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
  3. 我自己写的3D图形数学库。。。有点乱!
  4. 优秀的中文分词第三方库——jieba
  5. 移动硬盘磁盘结构损坏且无法读取要怎样办啊
  6. mysql的c接口_mysql C接口大全
  7. 【Visio】Visio图片在Word中显示不全?如何确定Visio作图大小?
  8. python入门学习—字典(FishC)
  9. 微信小程序flex布局讲解
  10. vue实现 可拖拽的div
  11. 单片机/开发板连接配置的三种方式
  12. 时序数据库介绍和使用
  13. 互联网巨头开放给创业者的新机会!
  14. 开发者投稿—百度大脑新品体验之肤色检测
  15. 剑指 Offer 42. 连续子数组的最大和java
  16. 【Python数据处理篇——DataFrame数据准备】DataFrame的创建、增删改查、数据导入等
  17. 俄罗斯方块的设计思路
  18. 揭秘 typedef四用途与两陷阱
  19. 赞!敢闯会创的国赛新青年们!
  20. configure配置脚本的使用

热门文章

  1. 触动的话语,为自己而活
  2. 《工程伦理与学术道德》之《导论》
  3. FPGA VerilogHDL语言 数字钟 按键消抖
  4. 红与黑(DFS与BFS解法)
  5. 基于python实现的双月模型
  6. java文档打印_java 如何读取文档中的内容 并打印
  7. 西安电子科技大学通院811电院821考研上岸经验分享(一)
  8. 安利自己读CS博士的鸡汤
  9. 易语言选单选框分组框API全选取消
  10. 挂载光盘linux内核升级,华为服务器通过mgmt口挂载光盘装系统及Linux系统rescue模式下修复内核...