Hi David On Mon, Apr 29, 2019 at 11:53:27AM +1000, David Gwynne wrote: > it's always bothered me that i config areas on a crisco using a number, > but then have to think hard to convert that number to an address for use > in openbsd. eg, i was given area 700 in one place, which is 0.0.2.188 > as an address. super annoying. > > so this changes the ospfd parser so it accepts both a number or address. > i also changed it so it prints the number by default, which may be > contentious. the manpage is slightly tweaked too. > > thoughts?
I like it to be able to use a number instead of an address! It worked fine in my short test I performed. The output with the comment looks a bit strange to me. typhoon ..sbin/ospfd$ doas obj/ospfd -nv router-id 0.0.0.7 fib-update yes fib-priority 32 rfc1583compat no spf-delay msec 1000 spf-holdtime msec 5000 area 7 { # 0.0.0.7 ^^^^^^^^^ interface pair7:10.77.77.1 { metric 10 retransmit-interval 5 router-dead-time 40 I'd prefer if we settle for one output format and then use only that. The number format is more common but that would be a change for the users. I'm fine with either format for outputs. There is also "ospfctl show database area 0.0.0.0" and ospf6d. ;-) Regards, Remi > > with this diff, i can do the following and things keep > working: > > --- /etc/ospfd.conf Mon Apr 29 11:29:56 2019 > +++ /etc/ospfd.conf.new Mon Apr 29 11:39:45 2019 > @@ -7,5 +7,5 @@ > redistribute rtlabel "backup" set metric 65535 > > -area 0.0.2.188 { > +area 700 { > router-dead-time minimal > fast-hello-interval msec 300 > > Index: ospfd.conf.5 > =================================================================== > RCS file: /cvs/src/usr.sbin/ospfd/ospfd.conf.5,v > retrieving revision 1.55 > diff -u -p -r1.55 ospfd.conf.5 > --- ospfd.conf.5 28 Dec 2018 19:25:10 -0000 1.55 > +++ ospfd.conf.5 29 Apr 2019 01:45:40 -0000 > @@ -68,7 +68,7 @@ Macros are not expanded inside quotes. > For example: > .Bd -literal -offset indent > hi="5" > -area 0.0.0.0 { > +area 0 { > interface em0 { > hello-interval $hi > } > @@ -257,10 +257,10 @@ Areas are used for grouping interfaces. > All interface-specific parameters can > be configured per area, overruling the global settings. > .Bl -tag -width Ds > -.It Ic area Ar address > +.It Ic area Ar id Ns | Ns Ar address > Specify an area section, grouping one or more interfaces. > .Bd -literal -offset indent > -area 0.0.0.0 { > +area 0 { > interface em0 > interface em1 { > metric 10 > Index: parse.y > =================================================================== > RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v > retrieving revision 1.95 > diff -u -p -r1.95 parse.y > --- parse.y 13 Feb 2019 22:57:08 -0000 1.95 > +++ parse.y 29 Apr 2019 01:45:40 -0000 > @@ -120,6 +120,7 @@ typedef struct { > int64_t number; > char *string; > struct redistribute *redist; > + struct in_addr id; > } v; > int lineno; > } YYSTYPE; > @@ -145,6 +146,7 @@ typedef struct { > %type <v.number> deadtime > %type <v.string> string dependon > %type <v.redist> redistribute > +%type <v.id> areaid > > %% > > @@ -588,15 +590,8 @@ comma : ',' > | /*empty*/ > ; > > -area : AREA STRING { > - struct in_addr id; > - if (inet_aton($2, &id) == 0) { > - yyerror("error parsing area"); > - free($2); > - YYERROR; > - } > - free($2); > - area = conf_get_area(id); > +area : AREA areaid { > + area = conf_get_area($2); > > memcpy(&areadefs, defs, sizeof(areadefs)); > md_list_copy(&areadefs.md_list, &defs->md_list); > @@ -610,6 +605,23 @@ area : AREA STRING { > > demotecount : NUMBER { $$ = $1; } > | /*empty*/ { $$ = 1; } > + ; > + > +areaid : NUMBER { > + if ($1 < 0 || $1 > 0xffffffff) { > + yyerror("invalid area id"); > + YYERROR; > + } > + $$.s_addr = htonl($1); > + } > + | STRING { > + if (inet_aton($1, &$$) == 0) { > + yyerror("error parsing area"); > + free($1); > + YYERROR; > + } > + free($1); > + } > ; > > areaopts_l : areaopts_l areaoptsl nl > Index: printconf.c > =================================================================== > RCS file: /cvs/src/usr.sbin/ospfd/printconf.c,v > retrieving revision 1.20 > diff -u -p -r1.20 printconf.c > --- printconf.c 28 Dec 2018 19:25:10 -0000 1.20 > +++ printconf.c 29 Apr 2019 01:45:40 -0000 > @@ -181,7 +181,8 @@ print_config(struct ospfd_conf *conf) > printf("\n"); > > LIST_FOREACH(area, &conf->area_list, entry) { > - printf("area %s {\n", inet_ntoa(area->id)); > + printf("area %u { # %s\n", ntohl(area->id.s_addr), > + inet_ntoa(area->id)); > if (area->stub) { > printf("\tstub"); > if (SIMPLEQ_EMPTY(&area->redist_list)) >