XDP 卸载模式标志集不适用于 bcc

2024-01-10

我正在尝试运行密件抄送中提供的本教程 XDP 代码。

我使用的代码是这个脚本:密件抄送/示例/网络/xdp/xdp_drop_count.py https://github.com/iovisor/bcc/blob/master/examples/networking/xdp/xdp_drop_count.py.

据我了解,XDP 标志的工作原理如下(来自那个问题 https://stackoverflow.com/questions/57171394/with-attach-xdp-does-flags-control-the-mode):

#define XDP_FLAGS_SKB_MODE (1U << 1)
#define XDP_FLAGS_DRV_MODE (1U << 2)
#define XDP_FLAGS_HW_MODE (1U << 3)

那么,这是否意味着如果我将标志位更改为

flags |= 1 << 3

我应该能够在硬件加速模式(卸载)下运行此代码?

我有一张支持 XDP 硬件加速模式的网卡,当我只需附加一个仅包含一行代码的简单程序时,它就可以正常工作:

return XDP_PASS;

并通过使用将其附加到卸载模式ip link set dev interface xdpoffload etc.

所以我已经确认我的 NIC 能够加载卸载的 XDP 程序,但是当我尝试上述操作时,它给了我一个错误:

bpf: Attaching prog to enp4s0np1: Invalid argumentTraceback (most recent call last) :
File "xdp_drop_count.py", line 132, in <module>
b. attach_xdp(device, fn, flags)
File "usr/lib/python2.7/dist-packages/bcc/__init__.py", line 723, in attach_xdp % (dev, errstr))
Exception : Failed to attach BPF to device enp4s0np1: No such file or directory

另外,当我将标志设置为:

flags |= 1 << 2

我不确定这是否实际上是在驱动程序模式下运行 XDP 程序。

我错过了什么吗?

先感谢您。


如果您从源代码构建密件抄送

自提交以来d147588 https://github.com/iovisor/bcc/commit/d147588ebe35b7cd2b4d253a7da18bef253ea78d、bcc 具有硬件卸载支持。要使用密件抄送卸载程序,您需要三件事:

  • The XDP_FLAGS_HW_MODE bit (1U << 3)应该在传递给的标志中设置attach_xdp().
  • 您要将程序卸载到的接口的名称应指定为BPF()device=范围。它将允许密件抄送将地图卸载到适当的设备。如果没有地图就没有必要。
  • 接口的名称也应该给出load_func,再次带参数device=,这样 bcc 就会告诉内核在哪里卸载程序。

请注意,对于最新的密件抄送源,xdp_drop_count.py脚本已更新,可以在您通过时为您执行所有这些操作-H option:

sudo ./xdp_drop_count.py -H $ETHNAME

对于旧版本的密件抄送

旧版本的密件抄送不支持硬件卸载。您可以使用bpftool or ip(>v4.16) 相反,例如:

sudo ip link set dev $ETHNAME xdpoffload obj prog.o sec .text
sudo bpftool prog load prog.o /sys/fs/bpf/prog type xdp dev $ETHNAME
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XDP 卸载模式标志集不适用于 bcc 的相关文章

  • eBPF入门

    BPF和eBPF是什么 简单来说 BPF提供了一种在和各种内核和应用程序事件发生时运行一段小程序的机制 BPF是一项灵活而高效的技术 由指令集 存储对象和辅助函数等几部分组成 由于它采用了虚拟指令集规范 因此也可将它视作一种虚拟机的实现 这
  • 使用 eBPF 技术跟踪 Netfilter 数据流

    1 网络层数据流向与 Netfilter 体系 图 1 1 为网络层内核收发核心流程图 xff0c 在函数流程图中我们可以看到 Netfliter 在其中的位置 xff08 图中深色底纹圆角矩形 xff09 图中对应的 hook 点有 5
  • elfutils-0.178 configure 报错

    系统 Ubuntu 20 04 4 LTS 错误信息 checking for libmicrohttpd no checking for libcurl no checking for sqlite3 no checking for li
  • ubuntu 18.04 中 eBPF samples/bpf 编译

    1 history 信息 一次成功编译 bpf 后执行 history 得到的信息 yingzhi yingzhi Host ex ex kernel linux 5 4 history 1 ls 2 mkdir ex 3 cd ex 4
  • 瞳孔特征值提取,blink frequency,fixation frequency,saccad extent, pupil diameter等

    进行的分析有 滤波分析 fft psd database py 下面展示一些 内联代码片 import pandas as pd import numpy as np def read file raw path data pd DataF
  • 从瞳孔的扩张收缩提取大脑EEG的delta,theta,alpha,beta,gamma等信号信息

    展示得到的结果图 直接上代码 import pandas as pd from scipy signal import find peaks from scipy fftpack import fft fftshift ifft impor
  • ubuntu21.10搭建ebpf环境,BCC和bpftrace

    1 安装虚拟机 虽说centos是生产环境中的标准系统 但是从个人学习角度还是推荐ubuntu 各种软件安装包都能方便地找到 操作界面时也很漂亮 之前一直在centos7 6上折腾 自己升级内核版本 自己安装各种高版本依赖 有一段时间被折磨
  • Kernel lockdown is enabled and set to ‘confidentiality‘.

    执行bpftrace时遇到的问题 度娘了好久没有适合我的 后来看到一篇 bpftrace 执行失败 Operation not permitted 不是因为 kernel lockdown By李佶澳 他是参考官网的操作 bpftrace
  • 如何从内核树构建 BPF 程序

    内核提供了许多示例samples bpf 我有兴趣在树之外构建一个示例 就像我们构建一个内核模块一样 其中Makefile可以很简单 是否可以对 bpf 执行相同的操作 我尝试从中删除不必要的部分samples bpf Makefile并保
  • 搭建 ebpf 开发测试环境

    0 内容说明 这部分主要讲述了如何通过官网学习ebpf 以及如何搭建自己的ebpf开发测试环境 主要是需要安装哪些工具链 1 ebpf在线学习 ebpf官网中提供了一个快速在线学习ebpf的路径 在这个学习平台中一共有两项学习内容 一个是学
  • ebpf简述

    0 什么是ebpf Ebpf可以简单的理解成在linux内核 当然windows也已经支持 里添加了一个虚拟机 开发者编写的代码可以安全地在内核虚拟机中运行 这样可以更高效地 安全地实现内核级程序的编写 ebpf 的map机制可以实现内核态
  • 为什么“anchor build”和“Cargo build-bpf”显示错误的 rustc 版本?

    我正在尝试构建 https github com betterclever solend anchor https github com betterclever solend anchor 包使用anchor build 但是我收到以下错
  • XDP 卸载模式标志集不适用于 bcc

    我正在尝试运行密件抄送中提供的本教程 XDP 代码 我使用的代码是这个脚本 密件抄送 示例 网络 xdp xdp drop count py https github com iovisor bcc blob master examples
  • 无法使用 bcc 工具将 eBPF `kretprobes` 附加到 `napi_poll()`

    想法是使用argdist测量延迟时间napi poll 它返回已处理的数据包数量 称为工作 执行延迟比率napi poll 处理的数据包数量将以直方图的形式给出处理每个数据包所需的平均时间 我正在使用以下命令 argdist H r c n
  • BPF:程序上下文的翻译

    我正在研究不同类型的BPF程序 并注意到对于不同的程序类型 上下文的传递方式不同 Example 对于节目类型BPF PROG TYPE SOCK OPS 类型的对象struct bpf sock ops kern https elixir
  • 谁在 BPF 中创建地图

    看完之后man bpf以及其他一些文档来源 我的印象是map只能由用户进程创建 然而下面这个小程序似乎神奇地 create bpf map struct bpf map def SEC maps my map type BPF MAP TY
  • 仅捕获 arp-reply 数据包的 BPF 表达式

    有没有BPF http biot com capstats bpf html只捕获 arp reply 数据包的表达式 目前 我正在使用 Pcap4J 和以下 BPF 表达式 arp 和 dst 主机host和乙醚 dstmac where
  • 如何在内核程序(内核上下文)中访问用户程序创建的bpf映射?

    假设有两个程序 用户程序和内核程序 用户程序通过api制作bpf图bpf create map name 返回 fd 有了这个 fd 我可以通过系统调用访问地图 例如 bpf map update FD 但我只能在用户空间程序中执行此操作
  • ebpf - 根据内核版本使用ringbuf和perfbuf

    我正在使用 ebpf 来捕获进程创建 我对内核 5 8 及更高版本使用ringbuf 并希望在同一 ebpf 内核文件中对旧内核使用 perfbuf 有一个关于它的很棒的博客https nakryiko com posts bpf core
  • 如何刷新原始 AF_PACKET 套接字以获得正确的过滤数据包

    sock socket AF PACKET SOCK RAW htons ETH P ALL setsockopt sock SOL SOCKET SO ATTACH FILTER f sizeof f 使用这个简单的 BPF LPF 附加

随机推荐

  • C++链接器会自动内联函数(没有“inline”关键字,没有在标头中实现)吗?

    C 链接器是否会自动内联 传递 函数 这些函数未在标头中定义 并且未明确请求通过inline关键词 例如 发生以下情况so often 并且应该always受益于 内联 似乎每个编译器供应商都应该通过链接器通过 内联 自动 处理它 在可能的
  • Blazor 客户端应用程序级别异常处理

    如何全局处理客户端 Blazor 应用程序的应用程序级别异常 您可以创建一个处理 WriteLine 事件的单例服务 这只会在错误时被触发 这要归功于Console SetError this public class ExceptionN
  • liquibase - 变更集的执行顺序

    据我了解 Liquibase 根据更改日志中写入的顺序执行更改集 我希望变更集以另一个顺序运行 有没有办法改变变更集的执行顺序 如果能及时回复我的问题 我将不胜感激 Liquibase 中变更日志的顺序是根据需要部署 执行 更改的顺序 Li
  • 在 django-rest-framework-jwt 中存储超过默认信息

    我正在使用 Django 版本 1 8 并使用 django rest framework jwt 进行身份验证 身份验证后 我们的应用程序将返回前端信息 from rest framework jwt settings import ap
  • 如何将 uuid 添加到 log4j 以登录文件?

    我有这个 log4j2 xml 文件
  • 如何将本地文件上传到Carrierwave模型?

    我使用 Carrierwave 来处理图像上传 但我没有使用表单 而是使用服务器中的本地文件 我怎样才能做到这一点 user User first image path tmp pic s7b28 jpg user image image
  • chrono::month 和 chrono::months 之间有什么区别

    C 20 chrono 类型 值之间有什么区别month 7 and months 7 有两个如此相似的名字是不是很混乱 是的 两者兼而有之可能会令人困惑month and months当第一次遇到这个库时 然而 该库中有一致的命名约定 有
  • python中while循环的多个条件

    我遇到了问题 包括多个语句while在Python中循环 它在单个条件下工作得很好 但是当我包含多个条件时 循环不会终止 我在这里做错了什么吗 name raw input Please enter a word in the senten
  • 使用 mongodb java 驱动程序运行本机 mongodb 查询

    我想用java执行CRUD操作updateOne updateMany or deleteMany 等等 但是当我想与像这样的运算符一起运行时 set unset我必须导入新课程 例如Updates或创建嵌套Document对象 我想插入原
  • JAXB xjc:如果值为空,如何生成返回空的字符串代码?

    给出以下示例 xsd 片段 lt xs attribute name SEGMENT default use optional type xs string gt 当 xjc 生成包含以下内容的类时SEGMENTbean 属性 以下 get
  • 静态字符串中的非固定宽度文本 - Jasper Reports

    正如我从这篇文章以来了解到的那样 如何在 Jasper Reports 中相对于数据宽度拉伸文本字段 https stackoverflow com questions 8979134 how to stretch field horizo
  • 如何通过java打开现有文件,如.docx、.txt、.pptx?

    我想知道如何通过java打开文件 我可以像这样打开 Office 本身 try Runtime runTime Runtime getRuntime Process process runTime exec C Program Files
  • Material-UI Menu 组件仅触发最后一个 MenuItem onClick 操作

    最近我尝试使用 MaterialUI 4 3 3 的 Menu 和 MenuItem 组件实现一个简单的下拉菜单 MenuItem 上的 onclick 事件行为不正确 什么时候console log id 被调用时 每个组件都会回显示例数
  • 在 HIghcharts 中设置自定义图例项目符号(或图标)

    我正在尝试将默认的 highcharts 图例符号更改为我自己的自定义符号 我希望图例标签旁边有一个字体很棒的图标 为此 我考虑了 labelformatter labelFormatter function var on
  • std::shared_ptrs 的自定义删除器

    创建后是否可以使用自定义删除器std shared ptr不使用new 我的问题是对象创建是由工厂类处理的 并且它的构造函数和析构函数受到保护 这会产生编译错误 我不想使用new因为它的缺点 详细说明 我更喜欢创建这样的共享指针 它不允许您
  • FluentValidation 一个属性出现多个错误消息

    我正在使用 FluentValidation 验证输入值 我正在使用一种方法来验证数据库中的值 该方法根据值返回不同错误消息的整数值 1 2 和 3 如何根据方法的返回值显示错误消息 我在类作用域中创建了一个变量并设置了返回值 在下一条语句
  • 基于目录的环境变量范围-如何实现?

    我有一组工具 需要根据我正在处理的项目传递参数 我希望能够根据当前目录自动设置几个环境变量 因此 当我在目录之间切换时 我常用的环境变量也会改变 例子 让我们当前目录是 foo 因此如果我这样做 foo myscript var1 VAR1
  • Java SE 可以减少 CDI 吗?

    JSR 330 依赖注入可以应用于 Java SE 和 Java EE 环境 而 JSR 299 的标题是 Java EE 平台的上下文和依赖注入 除了严格面向 Java EE 的功能之外 哪些 CDI 功能对 Java SE 也有意义 有
  • 如何使用 Mongoose 将 json 导入 MongoDB

    我对此有一些问题 这使得它变得棘手 所以 我正在使用 Mongoose 和 MongoLab 我可以很好地存储和检索数据 但我想要一个允许我做数据库基础种子的系统 我为集合创建了模式 但没有运行 因为没有数据 所以我似乎无法运行正常的 mo
  • XDP 卸载模式标志集不适用于 bcc

    我正在尝试运行密件抄送中提供的本教程 XDP 代码 我使用的代码是这个脚本 密件抄送 示例 网络 xdp xdp drop count py https github com iovisor bcc blob master examples