From aae5265eb5ebe806414f383f99bb765dbdcaee4b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 24 Jul 2013 18:44:43 +0200 Subject: Allow specifying multiple remote entries for a single peer --- src/config.y | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'src/config.y') diff --git a/src/config.y b/src/config.y index 97d2f97..fde2873 100644 --- a/src/config.y +++ b/src/config.y @@ -397,29 +397,39 @@ peer_statement: TOK_REMOTE peer_remote ';' ; peer_remote: TOK_ADDR4 port { - free(conf->peers->hostname); - conf->peers->hostname = NULL; + fastd_remote_config_t **remote = &conf->peers->remotes; + while (*remote) + remote = &(*remote)->next; - conf->peers->address.in.sin_family = AF_INET; - conf->peers->address.in.sin_addr = $1; - conf->peers->address.in.sin_port = htons($2); - fastd_peer_address_simplify(&conf->peers->address); + *remote = calloc(1, sizeof(fastd_remote_config_t)); + + (*remote)->address.in.sin_family = AF_INET; + (*remote)->address.in.sin_addr = $1; + (*remote)->address.in.sin_port = htons($2); + fastd_peer_address_simplify(&(*remote)->address); } | TOK_ADDR6 port { - free(conf->peers->hostname); - conf->peers->hostname = NULL; + fastd_remote_config_t **remote = &conf->peers->remotes; + while (*remote) + remote = &(*remote)->next; + + *remote = calloc(1, sizeof(fastd_remote_config_t)); - conf->peers->address.in6.sin6_family = AF_INET6; - conf->peers->address.in6.sin6_addr = $1; - conf->peers->address.in6.sin6_port = htons($2); - fastd_peer_address_simplify(&conf->peers->address); + (*remote)->address.in6.sin6_family = AF_INET6; + (*remote)->address.in6.sin6_addr = $1; + (*remote)->address.in6.sin6_port = htons($2); + fastd_peer_address_simplify(&(*remote)->address); } | maybe_af TOK_STRING port maybe_float { - free(conf->peers->hostname); + fastd_remote_config_t **remote = &conf->peers->remotes; + while (*remote) + remote = &(*remote)->next; + + *remote = calloc(1, sizeof(fastd_remote_config_t)); - conf->peers->hostname = strdup($2->str); - conf->peers->address.sa.sa_family = $1; - conf->peers->address.in.sin_port = htons($3); + (*remote)->hostname = strdup($2->str); + (*remote)->address.sa.sa_family = $1; + (*remote)->address.in.sin_port = htons($3); conf->peers->floating = conf->peers->dynamic_float_deprecated = $4; } ; -- cgit v1.2.3