使用attach_xdp,标志是否控制模式?



当我将xdp与eBPF一起使用时,我想我可以使用ip链接来设置模式。

例如

ip link set dev eno1 xdpoffload obj xdp.o sec .text

我想知道 xdpoffload 或通用或本机模式是如何在代码中实现的。

所以我在查看其他代码,发现类似:

attach_xdp(device, fn, flags)

我假设标志是设置模式标志进入的地方?

如果有人能告诉我它是否属实,如果是,我可以使用哪些数字来选择选项,那就太好了。

提前非常感谢你。

ip link获取XDP模式并设置标志。您可以在ip/iplink_xdp.c中看到:

if (!force)
xdp.flags |= XDP_FLAGS_UPDATE_IF_NOEXIST;
if (generic)
xdp.flags |= XDP_FLAGS_SKB_MODE;
if (drv)
xdp.flags |= XDP_FLAGS_DRV_MODE;
if (offload)
xdp.flags |= XDP_FLAGS_HW_MODE;

没有那么多可用的值,它们位于来自 Linux UAPI 的标头中,if_link.h

#define XDP_FLAGS_UPDATE_IF_NOEXIST (1U << 0)
#define XDP_FLAGS_SKB_MODE      (1U << 1)
#define XDP_FLAGS_DRV_MODE      (1U << 2)
#define XDP_FLAGS_HW_MODE       (1U << 3)
#define XDP_FLAGS_MODES         (XDP_FLAGS_SKB_MODE | 
XDP_FLAGS_DRV_MODE | 
XDP_FLAGS_HW_MODE)
#define XDP_FLAGS_MASK          (XDP_FLAGS_UPDATE_IF_NOEXIST | 
XDP_FLAGS_MODES)

所以基本上,三种模式:通用/SKB(xdpgeneric),本机/驱动程序(xdp)和硬件卸载(xdpoffload)。这将通过ip-link(8)手册页确认:

xdp object | pinned | off

设置(或取消设置)XDP("eXpress数据路径")BPF程序以在每个 驱动程序级别的数据包。ip link输出将xdp指示 网络设备。如果驱动程序没有本机 XDP 支持,则 内核将回退到较慢的、独立于驱动程序的"通用"XDP 变体。在这种情况下,ip link输出将指示xdpgenericxdp。如果驱动程序确实具有本机 XDP 支持,但程序是 在xdpgeneric object | pinned下加载,然后内核将使用 通用 XDP 变体而不是本机变体。xdpdrv有相反的情况 请求自动回退到通用 XDP 的效果 变体被禁用,如果驱动程序不支持XDP,则错误应该是 返回。xdpdrv还会禁用硬件卸载。xdpoffloadIP 链接 输出指示程序已卸载到硬件,并且可以 也用于请求"卸载"模式,就像xdpgeneric它强制一样 程序专门安装在 apater 的硬件/固件中。

解析命令行参数后,xdp对象将发送到内核,并通过 netlink 消息附加到选定的 XDP 挂钩。然后在内核中,根据从用户空间传递的标志处理程序。

(您可以使用交叉引用器或git grepgit log -S等来跟踪标志,例如,在源存储库中。

相关内容

  • 没有找到相关文章

最新更新