【问题标题】:How libpcap receive a packet from the driver?libpcap 如何从驱动程序接收数据包?
【发布时间】:2014-06-05 00:38:26
【问题描述】:

有人能指点我一个好的起点来了解 libpcap 如何从网络驱动程序获取其数据包吗?我的意图是用快速实现替换接收功能。

【问题讨论】:

  • 哪个平台?基本思想是将自己的驱动程序插入协议栈。详细信息因平台而异。如果你能从根本上提高一直在做的事情的速度,那将是令人惊讶的。
  • 这将在 Linux 中。基本上,我想用 Intel DPDK 驱动替换 ixgbe。

标签: linux networking libpcap


【解决方案1】:

“接收函数”是:

  • 标准驱动程序接收功能,与用于接收数据包并将其交给常规网络堆栈的功能没有什么不同;
  • 常规网络堆栈的“数据包套接字”部分。

Some Intel slides on DPDK 似乎表明 DPDK 让用户空间代码更直接地与网络适配器对话。这意味着将它与 libpcap 一起使用的正确方法是编写一个使用 DPDK 的 libpcap“模块”。

Libpcap 有一段时间支持拥有多个“模块”来捕获流量的能力。这些不是可以在运行时加载的插件模块(这可能有一天会发生,但是由于 libpcap 可能需要额外的权限才能捕获流量,因此必须支持第三方插件模块非常小心,以防止不受信任的代码以这些权限运行!);它们被编译成 libpcap。

除了用于各种操作系统的“默认”模块之外,libpcap 源中的一些模块示例是用于 Myricom NIC 的 pcap-snf.c 和用于 Endace DAG 卡的 pcap-dag.c

如果您想进一步了解这一点,最好订阅tcpdump-workers mailing list 并在那里继续讨论。 (这不是一个非常高流量的列表,尽管它的名字,它同时适用于 libpcap 和 tcpdump 的用户和开发人员;作为编写捕获模块的人,您将属于“libpcap 开发人员”类别。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2021-10-10
    • 2018-07-16
    • 2012-02-18
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多