1*387f9dfdSAndroid Build Coastguard Worker /*
2*387f9dfdSAndroid Build Coastguard Worker * Copyright (c) 2015 PLUMgrid, Inc.
3*387f9dfdSAndroid Build Coastguard Worker *
4*387f9dfdSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*387f9dfdSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*387f9dfdSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*387f9dfdSAndroid Build Coastguard Worker *
8*387f9dfdSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*387f9dfdSAndroid Build Coastguard Worker *
10*387f9dfdSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*387f9dfdSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*387f9dfdSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*387f9dfdSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*387f9dfdSAndroid Build Coastguard Worker * limitations under the License.
15*387f9dfdSAndroid Build Coastguard Worker */
16*387f9dfdSAndroid Build Coastguard Worker #include "bcc_common.h"
17*387f9dfdSAndroid Build Coastguard Worker #include "bpf_module.h"
18*387f9dfdSAndroid Build Coastguard Worker
19*387f9dfdSAndroid Build Coastguard Worker extern "C" {
bpf_module_create_c(const char * filename,unsigned flags,const char * cflags[],int ncflags,bool allow_rlimit,const char * dev_name)20*387f9dfdSAndroid Build Coastguard Worker void * bpf_module_create_c(const char *filename, unsigned flags, const char *cflags[],
21*387f9dfdSAndroid Build Coastguard Worker int ncflags, bool allow_rlimit, const char *dev_name) {
22*387f9dfdSAndroid Build Coastguard Worker auto mod = new ebpf::BPFModule(flags, nullptr, true, "", allow_rlimit, dev_name);
23*387f9dfdSAndroid Build Coastguard Worker if (mod->load_c(filename, cflags, ncflags) != 0) {
24*387f9dfdSAndroid Build Coastguard Worker delete mod;
25*387f9dfdSAndroid Build Coastguard Worker return nullptr;
26*387f9dfdSAndroid Build Coastguard Worker }
27*387f9dfdSAndroid Build Coastguard Worker return mod;
28*387f9dfdSAndroid Build Coastguard Worker }
29*387f9dfdSAndroid Build Coastguard Worker
bpf_module_create_c_from_string(const char * text,unsigned flags,const char * cflags[],int ncflags,bool allow_rlimit,const char * dev_name)30*387f9dfdSAndroid Build Coastguard Worker void * bpf_module_create_c_from_string(const char *text, unsigned flags, const char *cflags[],
31*387f9dfdSAndroid Build Coastguard Worker int ncflags, bool allow_rlimit, const char *dev_name) {
32*387f9dfdSAndroid Build Coastguard Worker auto mod = new ebpf::BPFModule(flags, nullptr, true, "", allow_rlimit, dev_name);
33*387f9dfdSAndroid Build Coastguard Worker if (mod->load_string(text, cflags, ncflags) != 0) {
34*387f9dfdSAndroid Build Coastguard Worker delete mod;
35*387f9dfdSAndroid Build Coastguard Worker return nullptr;
36*387f9dfdSAndroid Build Coastguard Worker }
37*387f9dfdSAndroid Build Coastguard Worker return mod;
38*387f9dfdSAndroid Build Coastguard Worker }
39*387f9dfdSAndroid Build Coastguard Worker
bpf_module_rw_engine_enabled()40*387f9dfdSAndroid Build Coastguard Worker bool bpf_module_rw_engine_enabled() {
41*387f9dfdSAndroid Build Coastguard Worker return ebpf::bpf_module_rw_engine_enabled();
42*387f9dfdSAndroid Build Coastguard Worker }
43*387f9dfdSAndroid Build Coastguard Worker
bpf_module_destroy(void * program)44*387f9dfdSAndroid Build Coastguard Worker void bpf_module_destroy(void *program) {
45*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
46*387f9dfdSAndroid Build Coastguard Worker if (!mod) return;
47*387f9dfdSAndroid Build Coastguard Worker delete mod;
48*387f9dfdSAndroid Build Coastguard Worker }
49*387f9dfdSAndroid Build Coastguard Worker
bpf_num_functions(void * program)50*387f9dfdSAndroid Build Coastguard Worker size_t bpf_num_functions(void *program) {
51*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
52*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
53*387f9dfdSAndroid Build Coastguard Worker return mod->num_functions();
54*387f9dfdSAndroid Build Coastguard Worker }
55*387f9dfdSAndroid Build Coastguard Worker
bpf_function_name(void * program,size_t id)56*387f9dfdSAndroid Build Coastguard Worker const char * bpf_function_name(void *program, size_t id) {
57*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
58*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
59*387f9dfdSAndroid Build Coastguard Worker return mod->function_name(id);
60*387f9dfdSAndroid Build Coastguard Worker }
61*387f9dfdSAndroid Build Coastguard Worker
bpf_function_start(void * program,const char * name)62*387f9dfdSAndroid Build Coastguard Worker void * bpf_function_start(void *program, const char *name) {
63*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
64*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
65*387f9dfdSAndroid Build Coastguard Worker return mod->function_start(name);
66*387f9dfdSAndroid Build Coastguard Worker }
67*387f9dfdSAndroid Build Coastguard Worker
bpf_function_start_id(void * program,size_t id)68*387f9dfdSAndroid Build Coastguard Worker void * bpf_function_start_id(void *program, size_t id) {
69*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
70*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
71*387f9dfdSAndroid Build Coastguard Worker return mod->function_start(id);
72*387f9dfdSAndroid Build Coastguard Worker }
73*387f9dfdSAndroid Build Coastguard Worker
bpf_function_size(void * program,const char * name)74*387f9dfdSAndroid Build Coastguard Worker size_t bpf_function_size(void *program, const char *name) {
75*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
76*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
77*387f9dfdSAndroid Build Coastguard Worker return mod->function_size(name);
78*387f9dfdSAndroid Build Coastguard Worker }
79*387f9dfdSAndroid Build Coastguard Worker
bpf_function_size_id(void * program,size_t id)80*387f9dfdSAndroid Build Coastguard Worker size_t bpf_function_size_id(void *program, size_t id) {
81*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
82*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
83*387f9dfdSAndroid Build Coastguard Worker return mod->function_size(id);
84*387f9dfdSAndroid Build Coastguard Worker }
85*387f9dfdSAndroid Build Coastguard Worker
bpf_module_license(void * program)86*387f9dfdSAndroid Build Coastguard Worker char * bpf_module_license(void *program) {
87*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
88*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
89*387f9dfdSAndroid Build Coastguard Worker return mod->license();
90*387f9dfdSAndroid Build Coastguard Worker }
91*387f9dfdSAndroid Build Coastguard Worker
bpf_module_kern_version(void * program)92*387f9dfdSAndroid Build Coastguard Worker unsigned bpf_module_kern_version(void *program) {
93*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
94*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
95*387f9dfdSAndroid Build Coastguard Worker return mod->kern_version();
96*387f9dfdSAndroid Build Coastguard Worker }
97*387f9dfdSAndroid Build Coastguard Worker
bpf_num_tables(void * program)98*387f9dfdSAndroid Build Coastguard Worker size_t bpf_num_tables(void *program) {
99*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
100*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
101*387f9dfdSAndroid Build Coastguard Worker return mod->num_tables();
102*387f9dfdSAndroid Build Coastguard Worker }
103*387f9dfdSAndroid Build Coastguard Worker
bpf_table_id(void * program,const char * table_name)104*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_id(void *program, const char *table_name) {
105*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
106*387f9dfdSAndroid Build Coastguard Worker if (!mod) return ~0ull;
107*387f9dfdSAndroid Build Coastguard Worker return mod->table_id(table_name);
108*387f9dfdSAndroid Build Coastguard Worker }
109*387f9dfdSAndroid Build Coastguard Worker
bpf_table_fd(void * program,const char * table_name)110*387f9dfdSAndroid Build Coastguard Worker int bpf_table_fd(void *program, const char *table_name) {
111*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
112*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
113*387f9dfdSAndroid Build Coastguard Worker return mod->table_fd(table_name);
114*387f9dfdSAndroid Build Coastguard Worker }
115*387f9dfdSAndroid Build Coastguard Worker
bpf_table_fd_id(void * program,size_t id)116*387f9dfdSAndroid Build Coastguard Worker int bpf_table_fd_id(void *program, size_t id) {
117*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
118*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
119*387f9dfdSAndroid Build Coastguard Worker return mod->table_fd(id);
120*387f9dfdSAndroid Build Coastguard Worker }
121*387f9dfdSAndroid Build Coastguard Worker
bpf_table_type(void * program,const char * table_name)122*387f9dfdSAndroid Build Coastguard Worker int bpf_table_type(void *program, const char *table_name) {
123*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
124*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
125*387f9dfdSAndroid Build Coastguard Worker return mod->table_type(table_name);
126*387f9dfdSAndroid Build Coastguard Worker }
127*387f9dfdSAndroid Build Coastguard Worker
bpf_table_type_id(void * program,size_t id)128*387f9dfdSAndroid Build Coastguard Worker int bpf_table_type_id(void *program, size_t id) {
129*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
130*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
131*387f9dfdSAndroid Build Coastguard Worker return mod->table_type(id);
132*387f9dfdSAndroid Build Coastguard Worker }
133*387f9dfdSAndroid Build Coastguard Worker
bpf_table_max_entries(void * program,const char * table_name)134*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_max_entries(void *program, const char *table_name) {
135*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
136*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
137*387f9dfdSAndroid Build Coastguard Worker return mod->table_max_entries(table_name);
138*387f9dfdSAndroid Build Coastguard Worker }
139*387f9dfdSAndroid Build Coastguard Worker
bpf_table_max_entries_id(void * program,size_t id)140*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_max_entries_id(void *program, size_t id) {
141*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
142*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
143*387f9dfdSAndroid Build Coastguard Worker return mod->table_max_entries(id);
144*387f9dfdSAndroid Build Coastguard Worker }
145*387f9dfdSAndroid Build Coastguard Worker
bpf_table_flags(void * program,const char * table_name)146*387f9dfdSAndroid Build Coastguard Worker int bpf_table_flags(void *program, const char *table_name) {
147*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
148*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
149*387f9dfdSAndroid Build Coastguard Worker return mod->table_flags(table_name);
150*387f9dfdSAndroid Build Coastguard Worker }
151*387f9dfdSAndroid Build Coastguard Worker
bpf_table_flags_id(void * program,size_t id)152*387f9dfdSAndroid Build Coastguard Worker int bpf_table_flags_id(void *program, size_t id) {
153*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
154*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
155*387f9dfdSAndroid Build Coastguard Worker return mod->table_flags(id);
156*387f9dfdSAndroid Build Coastguard Worker }
157*387f9dfdSAndroid Build Coastguard Worker
bpf_table_name(void * program,size_t id)158*387f9dfdSAndroid Build Coastguard Worker const char * bpf_table_name(void *program, size_t id) {
159*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
160*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
161*387f9dfdSAndroid Build Coastguard Worker return mod->table_name(id);
162*387f9dfdSAndroid Build Coastguard Worker }
163*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_desc(void * program,const char * table_name)164*387f9dfdSAndroid Build Coastguard Worker const char * bpf_table_key_desc(void *program, const char *table_name) {
165*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
166*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
167*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_desc(table_name);
168*387f9dfdSAndroid Build Coastguard Worker }
169*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_desc_id(void * program,size_t id)170*387f9dfdSAndroid Build Coastguard Worker const char * bpf_table_key_desc_id(void *program, size_t id) {
171*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
172*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
173*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_desc(id);
174*387f9dfdSAndroid Build Coastguard Worker }
175*387f9dfdSAndroid Build Coastguard Worker
bpf_table_leaf_desc(void * program,const char * table_name)176*387f9dfdSAndroid Build Coastguard Worker const char * bpf_table_leaf_desc(void *program, const char *table_name) {
177*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
178*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
179*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_desc(table_name);
180*387f9dfdSAndroid Build Coastguard Worker }
181*387f9dfdSAndroid Build Coastguard Worker
bpf_table_leaf_desc_id(void * program,size_t id)182*387f9dfdSAndroid Build Coastguard Worker const char * bpf_table_leaf_desc_id(void *program, size_t id) {
183*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
184*387f9dfdSAndroid Build Coastguard Worker if (!mod) return nullptr;
185*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_desc(id);
186*387f9dfdSAndroid Build Coastguard Worker }
187*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_size(void * program,const char * table_name)188*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_key_size(void *program, const char *table_name) {
189*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
190*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
191*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_size(table_name);
192*387f9dfdSAndroid Build Coastguard Worker }
193*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_size_id(void * program,size_t id)194*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_key_size_id(void *program, size_t id) {
195*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
196*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
197*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_size(id);
198*387f9dfdSAndroid Build Coastguard Worker }
199*387f9dfdSAndroid Build Coastguard Worker
bpf_table_leaf_size(void * program,const char * table_name)200*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_leaf_size(void *program, const char *table_name) {
201*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
202*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
203*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_size(table_name);
204*387f9dfdSAndroid Build Coastguard Worker }
205*387f9dfdSAndroid Build Coastguard Worker
bpf_table_leaf_size_id(void * program,size_t id)206*387f9dfdSAndroid Build Coastguard Worker size_t bpf_table_leaf_size_id(void *program, size_t id) {
207*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
208*387f9dfdSAndroid Build Coastguard Worker if (!mod) return 0;
209*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_size(id);
210*387f9dfdSAndroid Build Coastguard Worker }
211*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_snprintf(void * program,size_t id,char * buf,size_t buflen,const void * key)212*387f9dfdSAndroid Build Coastguard Worker int bpf_table_key_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *key) {
213*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
214*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
215*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_printf(id, buf, buflen, key);
216*387f9dfdSAndroid Build Coastguard Worker }
bpf_table_leaf_snprintf(void * program,size_t id,char * buf,size_t buflen,const void * leaf)217*387f9dfdSAndroid Build Coastguard Worker int bpf_table_leaf_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *leaf) {
218*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
219*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
220*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_printf(id, buf, buflen, leaf);
221*387f9dfdSAndroid Build Coastguard Worker }
222*387f9dfdSAndroid Build Coastguard Worker
bpf_table_key_sscanf(void * program,size_t id,const char * buf,void * key)223*387f9dfdSAndroid Build Coastguard Worker int bpf_table_key_sscanf(void *program, size_t id, const char *buf, void *key) {
224*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
225*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
226*387f9dfdSAndroid Build Coastguard Worker return mod->table_key_scanf(id, buf, key);
227*387f9dfdSAndroid Build Coastguard Worker }
228*387f9dfdSAndroid Build Coastguard Worker
bpf_table_leaf_sscanf(void * program,size_t id,const char * buf,void * leaf)229*387f9dfdSAndroid Build Coastguard Worker int bpf_table_leaf_sscanf(void *program, size_t id, const char *buf, void *leaf) {
230*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
231*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
232*387f9dfdSAndroid Build Coastguard Worker return mod->table_leaf_scanf(id, buf, leaf);
233*387f9dfdSAndroid Build Coastguard Worker }
234*387f9dfdSAndroid Build Coastguard Worker
bcc_func_load(void * program,int prog_type,const char * name,const struct bpf_insn * insns,int prog_len,const char * license,unsigned kern_version,int log_level,char * log_buf,unsigned log_buf_size,const char * dev_name,int attach_type)235*387f9dfdSAndroid Build Coastguard Worker int bcc_func_load(void *program, int prog_type, const char *name,
236*387f9dfdSAndroid Build Coastguard Worker const struct bpf_insn *insns, int prog_len,
237*387f9dfdSAndroid Build Coastguard Worker const char *license, unsigned kern_version,
238*387f9dfdSAndroid Build Coastguard Worker int log_level, char *log_buf, unsigned log_buf_size,
239*387f9dfdSAndroid Build Coastguard Worker const char *dev_name, int attach_type) {
240*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
241*387f9dfdSAndroid Build Coastguard Worker if (!mod) return -1;
242*387f9dfdSAndroid Build Coastguard Worker return mod->bcc_func_load(prog_type, name, insns, prog_len,
243*387f9dfdSAndroid Build Coastguard Worker license, kern_version, log_level,
244*387f9dfdSAndroid Build Coastguard Worker log_buf, log_buf_size, dev_name, 0, attach_type);
245*387f9dfdSAndroid Build Coastguard Worker
246*387f9dfdSAndroid Build Coastguard Worker }
247*387f9dfdSAndroid Build Coastguard Worker
bpf_perf_event_fields(void * program,const char * event)248*387f9dfdSAndroid Build Coastguard Worker size_t bpf_perf_event_fields(void *program, const char *event) {
249*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
250*387f9dfdSAndroid Build Coastguard Worker if (!mod)
251*387f9dfdSAndroid Build Coastguard Worker return 0;
252*387f9dfdSAndroid Build Coastguard Worker return mod->perf_event_fields(event);
253*387f9dfdSAndroid Build Coastguard Worker }
254*387f9dfdSAndroid Build Coastguard Worker
bpf_perf_event_field(void * program,const char * event,size_t i)255*387f9dfdSAndroid Build Coastguard Worker const char * bpf_perf_event_field(void *program, const char *event, size_t i) {
256*387f9dfdSAndroid Build Coastguard Worker auto mod = static_cast<ebpf::BPFModule *>(program);
257*387f9dfdSAndroid Build Coastguard Worker if (!mod)
258*387f9dfdSAndroid Build Coastguard Worker return nullptr;
259*387f9dfdSAndroid Build Coastguard Worker return mod->perf_event_field(event, i);
260*387f9dfdSAndroid Build Coastguard Worker }
261*387f9dfdSAndroid Build Coastguard Worker
262*387f9dfdSAndroid Build Coastguard Worker }
263