我正在输入以下命令:
$ sudo bpftool map create /sys/fs/bpf/routes type lpm_trie key 6\
value 1 entries 256 name routes flags 1
$ sudo bpftool map update id 194 key 8 0 0 0 0 10 value 1
$ sudo bpftool map update id 194 key 16 0 0 0 107 10 value 3
$ sudo bpftool map update id 194 key 24 0 0 0 107 10 value 3
Error: update failed: Invalid argument
$
我从自我实验中了解到以下内容:
.. 核心价值 ..
- 是
#
前缀 - 可以
_
是 0-255 之间的任意值
我无法理解的是,为什么前缀24
不起作用?
附言:我找不到任何文档,在
key structure
更新时要使用什么lpm_trie
bpf maps
我找到一个网页,共享以下手册页bpftool
:
该问题的另一次迭代:
答案1
这是一个老问题,但鉴于它是谷歌上对此问题的最佳搜索结果,而且我也遇到过,所以我会给出答案。
为了lpm_trie类型,键的存储方式与prefixlen,data
问题所示一致,但prefixlen
是 32 位值。由于映射是用 创建的key 6
,因此前缀使用了 4 个字节,而数据则使用了 2 个字节,因此最大前缀长度为 16。