eBPF编程:从系统调用到跨内核移植性
1. eBPF系统调用与数据读取
1.1 系统调用与映射查找
在将映射(map)加载到内核时,会有一组三个系统调用与之对应。当使用 BPF_MAP_GET_NEXT_ID 系统调用时,若没有更多映射可供查找,它将返回 ENOENT ,示例如下:
bpf(BPF_MAP_GET_NEXT_ID, {start_id=133,...}, 12) = -1 ENOENT (No such file or directory)
若找到匹配的映射, bpftool 会持有其文件描述符,以便读取该映射中的元素。
1.2 读取映射元素
bpftool 获取到要读取的映射的文件描述符后,通过以下系统调用序列读取信息:
bpf(BPF_MAP_GET_NEXT_KEY, {map_fd=3, key=NULL, next_key=0xaaaaf7a63960}, 24) = 0
bpf(BPF_MAP_LOOKUP_ELEM, {map_fd=3, key=0xaaaaf7a63960, value=0xaaaaf7a63980, flags=BPF_ANY}, 32) = 0
[{
"key": 0,
"value": {
"message":
超级会员免费看
订阅专栏 解锁全文

1441

被折叠的 条评论
为什么被折叠?



