我正在寻找一种在Linux中将数据从用户空间发送到bpf程序的方法。我在用户空间中使用libbpf,在内核中的bpf程序中使用bpf_helpers。我现在可以通过ringbuf和其他方式将数据从内核发送给用户。但我想使用堆栈和队列。我在用户空间中找不到处理队列或堆栈的函数,我仍然感到困惑。我的问题是:如何使用堆栈或队列将数据从用户空间发送到bpf程序,并在我的bpf程序中获取数据,就像我们在bcc中使用用户空间中的bpf['queue'].push
和bpf程序的queue.peek(&val);
所做的那样。
谢谢你的帮助!
对于BPF_MAP_TYPE_QUEUE
和BPF_MAP_TYPE_STACK
映射,您应该使用常见的bpf_map_update_elem
和bpf_map_lookup_elem
函数。
您可以在内核源代码中找到几个示例:
- 使用push和peek堆栈示例
- 使用推送和偷看的队列示例
- 处理堆栈和队列映射的示例