Mar*_*ark 4 c macros linux-kernel bpf ebpf
我正在查看ebpf验证器代码,但无法理解以下宏:
#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
#define offsetofend(TYPE, MEMBER) \
(offsetof(TYPE, MEMBER) + sizeof(((TYPE *)0)->MEMBER))
<...>
#define bpf_ctx_range(TYPE, MEMBER) \
offsetof(TYPE, MEMBER) ... offsetofend(TYPE, MEMBER) - 1
#define bpf_ctx_range_till(TYPE, MEMBER1, MEMBER2) \
offsetof(TYPE, MEMBER1) ... offsetofend(TYPE, MEMBER2) - 1
Run Code Online (Sandbox Code Playgroud)
我理解offsetof宏offsetofend,但是什么...意思呢?
谢谢。
看看它是如何使用的filter.c:
case bpf_ctx_range(struct __sk_buff, data):
Run Code Online (Sandbox Code Playgroud)
这是 GCC 的case range扩展(clang 也支持)。有了它,单个 case 语句可以匹配一系列值,例如case 0 ... 5:. 这里有更多信息:
https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |