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