- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我将 xdp 与 eBPF 结合使用时,我想我可以使用 ip link 来设置模式。
例如,
ip link set dev eno1 xdpoffload obj xdp.o sec .text
我想知道 xdpoffload 或通用或 native 模式是如何在代码中实现的。
所以我在查看其他代码,发现了类似的内容:
attach_xdp(device, fn, flags)
我认为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 的 header 中,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
)、 native /驱动程序 (xdp
) 和硬件卸载 (xdpoffload
) )。 ip-link(8)
manual page 可以确认这一点:
xdp object | pinned | off
set (or unset) a XDP ("eXpress Data Path") BPF program to run on every packet at driver level.
ip link
output will indicate axdp
flag for the networking device. If the driver does not have native XDP support, the kernel will fall back to a slower, driver-independent "generic" XDP variant. Theip link
output will in that case indicatexdpgeneric
instead ofxdp
only. If the driver does have native XDP support, but the program is loaded underxdpgeneric object | pinned
then the kernel will use the generic XDP variant instead of the native one.xdpdrv
has the opposite effect of requestsing that the automatic fallback to the generic XDP variant be disabled and in case driver is not XDP-capable error should be returned.xdpdrv
also disables hardware offloads.xdpoffload
in ip link output indicates that the program has been offloaded to hardware and can also be used to request the "offload" mode, much likexdpgeneric
it forces program to be installed specifically in HW/FW of the apater.
解析命令行参数后,xdp
对象将发送到内核并通过 netlink 消息附加到选定的 XDP Hook 。然后in the kernel ,程序根据从用户空间传递过来的标志进行处理。
(您可以使用 cross referencer 或 git grep
、git log -S
等来跟踪标志,例如在源存储库中。)
关于ebpf - 对于attach_xdp,标志是否控制模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171394/
我正在学习 eBPF,并且我知道我可以将我的 eBPF 程序附加到 kprobes、uprobes、tracepoint 等。我看到/sys/kernel/debug/tracing/events/下
bpf 中的每个程序部分都必须具有唯一的名称吗?程序?例如,这个程序用 llvm-5.0 编译得很好。 : ... SEC("sockops") int bpf1(struct bpf_sock_op
当我将 xdp 与 eBPF 结合使用时,我想我可以使用 ip link 来设置模式。 例如, ip link set dev eno1 xdpoffload obj xdp.o sec .text
我发现对于每种类型的 ebpf 程序,该程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序中,指向 struct __sk_buff 的指针作为参数传
我正在查看 ebpf 验证程序代码,但无法理解以下宏: #define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER) #define o
当我将 xdp 与 eBPF 结合使用时,我想我可以使用 ip link 来设置模式。 例如, ip link set dev eno1 xdpoffload obj xdp.o sec .text
我发现对于每种类型的 ebpf 程序,该程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序中,指向 struct __sk_buff 的指针作为参数传
我正在扩展一个程序,它接受跟踪函数的参数并打印它。数字参数和短字符串一切正常。但目前尚不清楚如何处理比 eBPF 中堆栈大小(限制为 512 字节)长的长字符串。 在下面的例子中,字符串的长度限制为8
我正在玩 gobpf,但在计算跟踪用户空间函数的持续时间时遇到了问题。我使用 bpf_ktime_get_ns() 读取时间,然后尝试计算增量,但得到了巨大的数字,尽管跟踪函数只休眠了 1 秒。 这是
为了模拟某些行为,我想将探测器附加到系统调用并在传递某些参数时修改返回值。或者,在函数成为进程之前修改函数的参数也足够了。 这可以用 BPF 实现吗? 最佳答案 在内核探测 (kprobes) 中,e
我正在阅读有关 kprobes BPF 程序类型的信息,我想知道是否有可能不仅拦截函数调用以进行跟踪或收集一些低级信息(寄存器、堆栈等) ,但替换调用并执行而不是实际函数? kprobe 是否提供此功
eBPF 已成为轻松快速监控流程的重要工具。但是,我无法找到如何计算探针本身对性能的影响。我敢肯定,如果我 Hook 每个系统调用并在 map 中推送一些信息,肯定会有一些影响,没有什么是免费的,但是
我想使用 EBPF 并在打开的系统调用上放置一个探测器,因此当用户想要打开某个文件时,我将检查其名称,如果它是目标名称,我将阻止它打开。唯一的问题是我不知道如何真正实现这个目标。 此外,如果您能指定某
我想用堆栈中的地址过滤我的 ebpf,例如,如果堆栈跟踪包含 _do_fork 的地址,则写入映射。 我看到了这个https://www.kernel.org/doc/html/latest/bpf/
所以我有一个简单的eBPF代码: 我的.h: #ifndef __MY_COMMON_H__ #define __MY_COMMON_H__ #include struct foo {
我已经看到了 ebpf 的用户空间版本 (运行时、汇编器、反汇编器)正在开发中( uBPF 、 rbpf )。 为什么用户空间版本的 eBPF 很有趣? 这些替代方案是否与 eBPF 程序类型(网络、
是否可以在不同的程序类型之间共享 ebpf 映射。我需要在 tc-bpf 程序和 cgroup bpf 程序之间共享一个映射。如果映射被固定到充当全局命名空间的文件系统,这应该是可能的。但是,我没有得
所以我正在 eBPF 上开发一些东西。 我需要使用 unistd.h header ,因为我想使用 sleep 函数。 但是,当我输入时,我意识到 #include 这些 header 不会被包含在
我运行最新的 debian 测试(使用内核 4.19)。 在我的系统上找不到助手(但它们存在于标题中,Qt 跳转到它们) #include "bpf/bpf.h" int main (){
我想从 eBPF 程序中的任务结构中检索 sessionid。我的 eBPF 程序中有以下代码: struct task_struct *task; u32 sessionid; task =
我是一名优秀的程序员,十分优秀!