diff options
Diffstat (limited to 'proto/wireguard/wireguard.c')
-rw-r--r-- | proto/wireguard/wireguard.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/proto/wireguard/wireguard.c b/proto/wireguard/wireguard.c index f45796d5..92310def 100644 --- a/proto/wireguard/wireguard.c +++ b/proto/wireguard/wireguard.c @@ -1,6 +1,10 @@ // Based on proto/rip/rip.c #include <stdio.h> + +#include "lib/lists.h" +#include "lib/resource.h" +#include "filter/filter.h" #include "nest/protocol.h" #include "nest/iface.h" #include "sysdep/linux/wireguard.h" @@ -14,6 +18,50 @@ wg_init_entry(void *e_) // debug("wg_init_entry\n"); } + +/* struct symbol { */ +/* struct symbol *next; */ +/* struct sym_scope *scope; */ +/* int class; */ +/* int aux; */ +/* void *aux2; */ +/* void *def; */ +/* char name[1]; */ +/* }; */ + +static struct symbol *wg_arg; + +static struct f_val +wg_foobar(void) +{ + struct f_val *var = wg_arg->def; + debug("**********************foobar**************************%x %x %s %x %x\n", wg_arg->class, var->type, var->val.s, f_rte, f_eattrs); + struct f_val res; + res.type = T_RETURN | T_VOID; + return res; +} + +static void +wg_preconfig(struct protocol *P, struct config *C) +{ + P, C; + debug("preconfig\n"); + struct symbol *sym = cf_get_symbol("foobar"); + struct symbol *res = cf_define_symbol(sym, SYM_FUNCTION_NATIVE, NULL); + cf_push_scope(res); + res->def = wg_foobar; /* body */ + + wg_arg = cf_get_symbol("value"); + struct f_val *val = cfg_alloc(sizeof(struct f_val)); + val->type = T_VOID; + wg_arg = cf_define_symbol(wg_arg, SYM_VARIABLE | T_STRING, val); + wg_arg->aux2 = NULL; + + res->aux2 = wg_arg; /* params */ + + cf_pop_scope(); +} + static void wg_postconfig(struct proto_config *C) { @@ -208,6 +256,7 @@ struct protocol proto_wireguard = { .channel_mask = NB_ANY, .proto_size = sizeof(struct wg_proto), .config_size = sizeof(struct wg_config), + .preconfig = wg_preconfig, .postconfig = wg_postconfig, .init = wg_init, .start = wg_start, |