diff options
-rw-r--r-- | usr.sbin/ldpd/parse.y | 68 |
1 files changed, 26 insertions, 42 deletions
diff --git a/usr.sbin/ldpd/parse.y b/usr.sbin/ldpd/parse.y index 4128ba94af8..1d56b8980ae 100644 --- a/usr.sbin/ldpd/parse.y +++ b/usr.sbin/ldpd/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.68 2019/01/23 02:02:04 dlg Exp $ */ +/* $OpenBSD: parse.y,v 1.69 2019/01/23 03:35:14 dlg Exp $ */ /* * Copyright (c) 2013, 2015, 2016 Renato Westphal <renato@openbsd.org> @@ -80,6 +80,7 @@ typedef struct { union { int64_t number; char *string; + struct in_addr routerid; struct ldp_auth *auth; } v; int lineno; @@ -156,6 +157,7 @@ static struct config_defaults *defs; %token <v.number> NUMBER %type <v.number> yesno ldp_af l2vpn_type pw_type %type <v.string> string +%type <v.routerid> routerid %type <v.auth> auth tcpmd5 optnbrprefix %% @@ -200,6 +202,23 @@ string : string STRING { | STRING ; +routerid : STRING { + if (!inet_aton($1, &$$)) { + yyerror("%s: error parsing router id", $1); + free($1); + YYERROR; + } + if (bad_addr_v4($$)) { + yyerror("%s: invalid router id", $1); + free($1); + YYERROR; + } + free($1); + + break; + } + ; + yesno : YES { $$ = 1; } | NO { $$ = 0; } ; @@ -235,17 +254,8 @@ varset : STRING '=' string { } ; -conf_main : ROUTERID STRING { - if (!inet_aton($2, &conf->rtr_id)) { - yyerror("error parsing router-id"); - free($2); - YYERROR; - } - free($2); - if (bad_addr_v4(conf->rtr_id)) { - yyerror("invalid router-id"); - YYERROR; - } +conf_main : ROUTERID routerid { + conf->rtr_id = $2; } | FIBUPDATE yesno { if ($2 == 0) @@ -565,21 +575,8 @@ pwopts : PWID NUMBER { pw->pwid = $2; } - | NEIGHBORID STRING { - struct in_addr addr; - - if (!inet_aton($2, &addr)) { - yyerror("error parsing neighbor-id"); - free($2); - YYERROR; - } - free($2); - if (bad_addr_v4(addr)) { - yyerror("invalid neighbor-id"); - YYERROR; - } - - pw->lsr_id = addr; + | NEIGHBORID routerid { + pw->lsr_id = $2; } | NEIGHBORADDR STRING { int family; @@ -841,21 +838,8 @@ tneighboropts_l : tneighboropts_l tnbr_defaults nl | tnbr_defaults optnl ; -neighbor : NEIGHBOR STRING { - struct in_addr addr; - - if (inet_aton($2, &addr) == 0) { - yyerror("error parsing neighbor-id"); - free($2); - YYERROR; - } - free($2); - if (bad_addr_v4(addr)) { - yyerror("invalid neighbor-id"); - YYERROR; - } - - nbrp = conf_get_nbrp(addr); +neighbor : NEIGHBOR routerid { + nbrp = conf_get_nbrp($2); if (nbrp == NULL) YYERROR; } neighbor_block { |