eBPF:理解验证者代码中的两个宏
eBPF: understand two macros in verifier code
我正在查看 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
我理解 offsetof
和 offsetofend
宏,但是 ...
是什么意思?
谢谢。
查看它在 filter.c
中的使用方式:
case bpf_ctx_range(struct __sk_buff, data):
这是 GCC 的 case range 扩展(clang 也支持)。有了它,单个 case 语句可以匹配一系列值,例如 case 0 ... 5:
。这里有更多信息:
我正在查看 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
我理解 offsetof
和 offsetofend
宏,但是 ...
是什么意思?
谢谢。
查看它在 filter.c
中的使用方式:
case bpf_ctx_range(struct __sk_buff, data):
这是 GCC 的 case range 扩展(clang 也支持)。有了它,单个 case 语句可以匹配一系列值,例如 case 0 ... 5:
。这里有更多信息: