C eBPF:了解验证器代码中的两个宏

C eBPF:了解验证器代码中的两个宏,c,linux-kernel,macros,bpf,ebpf,C,Linux Kernel,Macros,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)

我正在查看
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
#定义(类型、成员)((大小)和((类型*)0)->成员的偏移量
#定义offsetofend(类型、成员)\
(类型、成员的偏移量)+sizeof(((类型*)0)->成员)
#定义bpf_ctx_范围(类型、成员)\
偏移量(类型、成员)。。。偏置挡泥板(类型、构件)-1
#定义bpf_ctx_range_till(类型、成员1、成员2)\
偏移量(类型,成员1)。。。偏置挡板(类型,成员2)-1
我理解
offsetof
offsetofend
宏,但是
..
是什么意思


谢谢。

查看它在
filter.c
中的用法:

    case bpf_ctx_range(struct __sk_buff, data):
这是GCC的大小写范围扩展(它也受clang支持)。使用它,单个case语句可以匹配一系列值,如
case 0。。。5:
。这里有更多信息:


非常感谢您的澄清。