Home | History | Annotate | Download | only in cc
      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 "bpf_common.h"
     17 #include "bpf_module.h"
     18 
     19 extern "C" {
     20 void * bpf_module_create_b(const char *filename, const char *proto_filename, unsigned flags) {
     21   auto mod = new ebpf::BPFModule(flags);
     22   if (mod->load_b(filename, proto_filename) != 0) {
     23     delete mod;
     24     return nullptr;
     25   }
     26   return mod;
     27 }
     28 
     29 void * bpf_module_create_c(const char *filename, unsigned flags, const char *cflags[], int ncflags) {
     30   auto mod = new ebpf::BPFModule(flags);
     31   if (mod->load_c(filename, cflags, ncflags) != 0) {
     32     delete mod;
     33     return nullptr;
     34   }
     35   return mod;
     36 }
     37 
     38 void * bpf_module_create_c_from_string(const char *text, unsigned flags, const char *cflags[], int ncflags) {
     39   auto mod = new ebpf::BPFModule(flags);
     40   if (mod->load_string(text, cflags, ncflags) != 0) {
     41     delete mod;
     42     return nullptr;
     43   }
     44   return mod;
     45 }
     46 
     47 void bpf_module_destroy(void *program) {
     48   auto mod = static_cast<ebpf::BPFModule *>(program);
     49   if (!mod) return;
     50   delete mod;
     51 }
     52 
     53 size_t bpf_num_functions(void *program) {
     54   auto mod = static_cast<ebpf::BPFModule *>(program);
     55   if (!mod) return 0;
     56   return mod->num_functions();
     57 }
     58 
     59 const char * bpf_function_name(void *program, size_t id) {
     60   auto mod = static_cast<ebpf::BPFModule *>(program);
     61   if (!mod) return nullptr;
     62   return mod->function_name(id);
     63 }
     64 
     65 void * bpf_function_start(void *program, const char *name) {
     66   auto mod = static_cast<ebpf::BPFModule *>(program);
     67   if (!mod) return nullptr;
     68   return mod->function_start(name);
     69 }
     70 
     71 void * bpf_function_start_id(void *program, size_t id) {
     72   auto mod = static_cast<ebpf::BPFModule *>(program);
     73   if (!mod) return nullptr;
     74   return mod->function_start(id);
     75 }
     76 
     77 size_t bpf_function_size(void *program, const char *name) {
     78   auto mod = static_cast<ebpf::BPFModule *>(program);
     79   if (!mod) return 0;
     80   return mod->function_size(name);
     81 }
     82 
     83 size_t bpf_function_size_id(void *program, size_t id) {
     84   auto mod = static_cast<ebpf::BPFModule *>(program);
     85   if (!mod) return 0;
     86   return mod->function_size(id);
     87 }
     88 
     89 char * bpf_module_license(void *program) {
     90   auto mod = static_cast<ebpf::BPFModule *>(program);
     91   if (!mod) return nullptr;
     92   return mod->license();
     93 }
     94 
     95 unsigned bpf_module_kern_version(void *program) {
     96   auto mod = static_cast<ebpf::BPFModule *>(program);
     97   if (!mod) return 0;
     98   return mod->kern_version();
     99 }
    100 
    101 size_t bpf_num_tables(void *program) {
    102   auto mod = static_cast<ebpf::BPFModule *>(program);
    103   if (!mod) return -1;
    104   return mod->num_tables();
    105 }
    106 
    107 size_t bpf_table_id(void *program, const char *table_name) {
    108   auto mod = static_cast<ebpf::BPFModule *>(program);
    109   if (!mod) return ~0ull;
    110   return mod->table_id(table_name);
    111 }
    112 
    113 int bpf_table_fd(void *program, const char *table_name) {
    114   auto mod = static_cast<ebpf::BPFModule *>(program);
    115   if (!mod) return -1;
    116   return mod->table_fd(table_name);
    117 }
    118 
    119 int bpf_table_fd_id(void *program, size_t id) {
    120   auto mod = static_cast<ebpf::BPFModule *>(program);
    121   if (!mod) return -1;
    122   return mod->table_fd(id);
    123 }
    124 
    125 int bpf_table_type(void *program, const char *table_name) {
    126   auto mod = static_cast<ebpf::BPFModule *>(program);
    127   if (!mod) return -1;
    128   return mod->table_type(table_name);
    129 }
    130 
    131 int bpf_table_type_id(void *program, size_t id) {
    132   auto mod = static_cast<ebpf::BPFModule *>(program);
    133   if (!mod) return -1;
    134   return mod->table_type(id);
    135 }
    136 
    137 size_t bpf_table_max_entries(void *program, const char *table_name) {
    138   auto mod = static_cast<ebpf::BPFModule *>(program);
    139   if (!mod) return 0;
    140   return mod->table_max_entries(table_name);
    141 }
    142 
    143 size_t bpf_table_max_entries_id(void *program, size_t id) {
    144   auto mod = static_cast<ebpf::BPFModule *>(program);
    145   if (!mod) return 0;
    146   return mod->table_max_entries(id);
    147 }
    148 
    149 int bpf_table_flags(void *program, const char *table_name) {
    150   auto mod = static_cast<ebpf::BPFModule *>(program);
    151   if (!mod) return -1;
    152   return mod->table_flags(table_name);
    153 }
    154 
    155 int bpf_table_flags_id(void *program, size_t id) {
    156   auto mod = static_cast<ebpf::BPFModule *>(program);
    157   if (!mod) return -1;
    158   return mod->table_flags(id);
    159 }
    160 
    161 const char * bpf_table_name(void *program, size_t id) {
    162   auto mod = static_cast<ebpf::BPFModule *>(program);
    163   if (!mod) return nullptr;
    164   return mod->table_name(id);
    165 }
    166 
    167 const char * bpf_table_key_desc(void *program, const char *table_name) {
    168   auto mod = static_cast<ebpf::BPFModule *>(program);
    169   if (!mod) return nullptr;
    170   return mod->table_key_desc(table_name);
    171 }
    172 
    173 const char * bpf_table_key_desc_id(void *program, size_t id) {
    174   auto mod = static_cast<ebpf::BPFModule *>(program);
    175   if (!mod) return nullptr;
    176   return mod->table_key_desc(id);
    177 }
    178 
    179 const char * bpf_table_leaf_desc(void *program, const char *table_name) {
    180   auto mod = static_cast<ebpf::BPFModule *>(program);
    181   if (!mod) return nullptr;
    182   return mod->table_leaf_desc(table_name);
    183 }
    184 
    185 const char * bpf_table_leaf_desc_id(void *program, size_t id) {
    186   auto mod = static_cast<ebpf::BPFModule *>(program);
    187   if (!mod) return nullptr;
    188   return mod->table_leaf_desc(id);
    189 }
    190 
    191 size_t bpf_table_key_size(void *program, const char *table_name) {
    192   auto mod = static_cast<ebpf::BPFModule *>(program);
    193   if (!mod) return 0;
    194   return mod->table_key_size(table_name);
    195 }
    196 
    197 size_t bpf_table_key_size_id(void *program, size_t id) {
    198   auto mod = static_cast<ebpf::BPFModule *>(program);
    199   if (!mod) return 0;
    200   return mod->table_key_size(id);
    201 }
    202 
    203 size_t bpf_table_leaf_size(void *program, const char *table_name) {
    204   auto mod = static_cast<ebpf::BPFModule *>(program);
    205   if (!mod) return 0;
    206   return mod->table_leaf_size(table_name);
    207 }
    208 
    209 size_t bpf_table_leaf_size_id(void *program, size_t id) {
    210   auto mod = static_cast<ebpf::BPFModule *>(program);
    211   if (!mod) return 0;
    212   return mod->table_leaf_size(id);
    213 }
    214 
    215 int bpf_table_key_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *key) {
    216   auto mod = static_cast<ebpf::BPFModule *>(program);
    217   if (!mod) return -1;
    218   return mod->table_key_printf(id, buf, buflen, key);
    219 }
    220 int bpf_table_leaf_snprintf(void *program, size_t id, char *buf, size_t buflen, const void *leaf) {
    221   auto mod = static_cast<ebpf::BPFModule *>(program);
    222   if (!mod) return -1;
    223   return mod->table_leaf_printf(id, buf, buflen, leaf);
    224 }
    225 
    226 int bpf_table_key_sscanf(void *program, size_t id, const char *buf, void *key) {
    227   auto mod = static_cast<ebpf::BPFModule *>(program);
    228   if (!mod) return -1;
    229   return mod->table_key_scanf(id, buf, key);
    230 }
    231 int bpf_table_leaf_sscanf(void *program, size_t id, const char *buf, void *leaf) {
    232   auto mod = static_cast<ebpf::BPFModule *>(program);
    233   if (!mod) return -1;
    234   return mod->table_leaf_scanf(id, buf, leaf);
    235 }
    236 
    237 }
    238