首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AF_XDP:映射`(SRC-IP,DST-IP,DST-Port)`到`BPF_MAP_TYPE_XSKMAP`索引

AF_XDP:映射`(SRC-IP,DST-IP,DST-Port)`到`BPF_MAP_TYPE_XSKMAP`索引
EN

Stack Overflow用户
提问于 2020-03-09 19:09:55
回答 1查看 130关注 0票数 0

我希望产生多个用户空间进程,每个进程处理来自单个源((SRC-IP, DST-IP, DST-Port)的三倍)的数据包。

由于AF-XDP内核程序要传递大量数据包,而时间又很关键,因此我在内核程序中考虑了一个单独的map,该map预先由一个用户空间程序填充。

该映射定义了从前面提到的三元组到索引的映射,然后在bpf_redirect_map(&xsks_map, index, 0)中使用该索引将数据包发送到用户空间中的特定套接字。

我最初的想法是将src-ip、目标ip和目标端口连接到一个(32 + 32 + 16)-bit值中。

有可能用这么大的key-size来定义map吗?哪个地图最适合这个问题?此外,是否可以从用户空间填充地图?

EN

回答 1

Stack Overflow用户

发布于 2020-03-12 23:53:30

作为键的结构

有几种类型的映射可以与eBPF一起使用。其中一些是通用的(散列映射、数组等)还有一些是非常具体的(重定向映射、套接字映射等)。

您描述的用例听起来像是哈希映射的完美用例。这样的映射以struct为关键字,以另一个struct为值。所以你可能会有类似这样的东西:

代码语言:javascript
复制
struct my_key {
        uint32_t src_ip;
        uint32_t dst_ip;
        uint16_t dst_port;
};

..。并把它当做钥匙。在本例中,该值将是xskmap的索引,即一个简单的整数。散列映射对于从给定的键中检索值是有效的(没有像数组那样的线性搜索),因此您可以获得良好的性能。

散列映射的键大小

对于键或值的大小没有特定的限制,只要大小符合32位整数:) (请注意,在硬件卸载的情况下可能会有大小限制)。

从用户空间更新

从用户空间更新散列映射是完全可行的(尽管一些非常特定的映射类型可能不允许这样做,但像are数组或散列映射这样的通用映射完全可以)。你会这样做:

命令行中的

  • ,C程序中的bpftool
  • ,libbpf中的助手,您自己语言的
  • 。在这三种情况下,更新本身都是通过调用bpf()系统调用来完成的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60599317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档