From c8ea4868b37f53e138548b7adee756834ad7ea66 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 28 Mar 2012 18:42:24 +0200 Subject: Add single peer config options; also fix string handling in lexer --- src/config.y | 67 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 22 deletions(-) (limited to 'src/config.y') diff --git a/src/config.y b/src/config.y index 6d005ac..da2015b 100644 --- a/src/config.y +++ b/src/config.y @@ -17,27 +17,30 @@ struct in6_addr addr6; } +%token START_CONFIG +%token START_PEER_CONFIG + %token TOK_INTEGER %token TOK_STRING -%token TOK_IDENTIFIER - -%token TOK_INTERFACE -%token TOK_BIND -%token TOK_MTU -%token TOK_MODE -%token TOK_PROTOCOL -%token TOK_PEER -%token TOK_ADDRESS -%token TOK_SECRET -%token TOK_KEY -%token TOK_INCLUDE + +%token TOK_INTERFACE +%token TOK_BIND +%token TOK_MTU +%token TOK_MODE +%token TOK_PROTOCOL +%token TOK_PEER +%token TOK_ADDRESS +%token TOK_SECRET +%token TOK_KEY +%token TOK_INCLUDE +%token TOK_AS +%token TOK_ANY +%token TOK_TAP +%token TOK_TUN %token TOK_ADDR %token TOK_ADDR6 -%token TOK_ANY -%token TOK_TAP -%token TOK_TUN %code { #include @@ -59,8 +62,13 @@ %type port %type maybe_port %type maybe_port_default +%type maybe_as %% +start: START_CONFIG config + | START_PEER_CONFIG peer_conf + ; + config: config statement | ; @@ -75,7 +83,7 @@ statement: TOK_INTERFACE interface ';' | TOK_INCLUDE include ';' ; -interface: TOK_STRING { free(conf->ifname); conf->ifname = strdup($1); } +interface: TOK_STRING { free(conf->ifname); conf->ifname = $1; } ; bind: TOK_ADDR maybe_port { @@ -112,17 +120,17 @@ protocol: TOK_STRING { #endif else exit_error(ctx, "config error: invalid protocol `%s'", $1); + + free($1); } ; -secret: TOK_STRING { free(conf->secret); conf->secret = strdup($1); } +secret: TOK_STRING { free(conf->secret); conf->secret = $1; } ; peer: maybe_string { fastd_peer_config_new(ctx, conf); - - if ($1) - conf->peers->name = strdup($1); + conf->peers->name = $1; } ; @@ -132,6 +140,7 @@ peer_conf: peer_conf peer_statement peer_statement: TOK_ADDRESS peer_address ';' | TOK_KEY peer_key ';' + | TOK_INCLUDE peer_include ';' ; peer_address: TOK_ADDR maybe_port_default { @@ -146,11 +155,21 @@ peer_address: TOK_ADDR maybe_port_default { } ; -peer_key: TOK_STRING { free(conf->peers->key); conf->peers->key = strdup($1); } +peer_key: TOK_STRING { free(conf->peers->key); conf->peers->key = $1; } + ; + +peer_include: TOK_STRING { fastd_read_config(ctx, conf, $1, true, depth); free($1); } ; -include: TOK_STRING { fastd_read_config(ctx, conf, $1, depth); } +include: TOK_PEER TOK_STRING maybe_as { + fastd_peer_config_new(ctx, conf); + conf->peers->name = $3; + + fastd_read_config(ctx, conf, $2, true, depth); + free($2); + } + | TOK_STRING { fastd_read_config(ctx, conf, $1, false, depth); free($1); } ; @@ -166,6 +185,10 @@ maybe_port_default: ':' port { $$ = $2; } | { $$ = htons(1337); } ; +maybe_as: TOK_AS TOK_STRING { $$ = $2; } + | { $$ = NULL; } + ; + port: TOK_INTEGER { if ($1 < 0 || $1 > 65635) exit_error(ctx, "invalid port %i", $1); -- cgit v1.2.3