本篇我们继续以gpu_mem为例详细拆解eBPF程序组成。
三,DEFINE_BPF_PROG宏
从宏的字面意义上,我们可以看到,该宏定义了处理kernel内核事件被触发后的handler函数。这部分后面照葫芦画瓢写HelloWorld Demo的时候还会介绍。这里我们来先看android的宏定义的设计。
frameworks/libs/net/common/native/bpf_headers/include/bpf/bpf_helpers.h
// programs with no kernel version requirements
#define DEFINE_BPF_PROG(SECTION_NAME, prog_uid, prog_gid, the_prog) \
DEFINE_BPF_PROG_KVER_RANGE_OPT(SECTION_NAME, prog_uid, prog_gid, the_prog, 0, KVER_INF, false)
#define DEFINE_OPTIONAL_BPF_PROG(SECTION_NAME, prog_uid, prog_gid, the_prog) \
DEFINE_BPF_PROG_KVER_RANGE_OPT(SECTION_NAME, prog_uid, prog_gid, the_prog, 0, KVER_INF, true)
#define DEFINE_BPF_PROG_KVER_RANGE_OPT(SECTION_NAME, prog_uid, prog_gid, the_prog, min_kv, max_kv, \
opt) \
//段的定义
const struct bpf_prog_def SECTION("progs") the_prog##_def = {