Hi David, are you going to commit this?
Remi On Thu, May 16, 2019 at 11:14:55PM +0200, Remi Locherer wrote: > On Thu, May 16, 2019 at 09:39:37AM +0200, Sebastian Benoit wrote: > > > > > > > > Remi Locherer(remi.loche...@relo.ch) on 2019.05.15 23:15:03 +0200: > > > On Tue, Apr 30, 2019 at 11:10:37PM +0200, Remi Locherer wrote: > > > > On Mon, Apr 29, 2019 at 11:10:31AM +0100, Stuart Henderson wrote: > > > > > On 2019/04/29 11:58, Sebastian Benoit wrote: > > > > > > David Gwynne(da...@gwynne.id.au) on 2019.04.29 19:36:51 +1000: > > > > > > > > > > > > > > > > > > > > > > On 29 Apr 2019, at 4:59 pm, Remi Locherer > > > > > > > > <remi.loche...@relo.ch> wrote: > > > > > > > > > > > > > > > > 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. > > > > > > > > > > > > > > Are you sure it doesn't look... awesome? > > > > > > > > > > > > I like it! > > > > > > > > > > I don't really, but if we change this it needs to be displayed somehow > > > > > and I don't have an idea to make it look nicer than this (cisco's > > > > > method > > > > > seems pretty horrible and wouldn't work for us anyway - looks like > > > > > they > > > > > remember which format was used to configure an area and use that as > > > > > the output format...) > > > > > > > > > > > > > Maybe it's better when we just allow both input formats but don't change > > > > any output. > > > > > > Any opinions or comments on this? I think this would be a valuable > > > addition > > > to ospfd. > > > > Yes, and diff is ok benno@ > > > > David: ok remi@ for your diff without the printconf part. > > > What about ospf6d? > > I'll handle that. > > > > > > > > > > > Below diff changes ospfctl to accept the address and number format for > > > > "ospfct show database area XXX". > > > > > > > > > > > > Index: parser.c > > > > =================================================================== > > > > RCS file: /cvs/src/usr.sbin/ospfctl/parser.c,v > > > > retrieving revision 1.20 > > > > diff -u -p -r1.20 parser.c > > > > --- parser.c 9 May 2011 12:25:35 -0000 1.20 > > > > +++ parser.c 30 Apr 2019 20:28:18 -0000 > > > > @@ -39,7 +39,8 @@ enum token_type { > > > > ADDRESS, > > > > FLAG, > > > > PREFIX, > > > > - IFNAME > > > > + IFNAME, > > > > + AREA > > > > }; > > > > > > > > struct token { > > > > @@ -107,7 +108,7 @@ static const struct token t_show_db[] = > > > > }; > > > > > > > > static const struct token t_show_area[] = { > > > > - {ADDRESS, "", NONE, NULL}, > > > > + {AREA, "", NONE, NULL}, > > > > {ENDTOKEN, "", NONE, NULL} > > > > }; > > > > > > > > @@ -218,6 +219,14 @@ match_token(const char *word, const stru > > > > res->action = t->value; > > > > } > > > > break; > > > > + case AREA: > > > > + if (parse_area(word, &res->addr)) { > > > > + match++; > > > > + t = &table[i]; > > > > + if (t->value) > > > > + res->action = t->value; > > > > + } > > > > + break; > > > > case PREFIX: > > > > if (parse_prefix(word, &res->addr, > > > > &res->prefixlen)) { > > > > match++; > > > > @@ -274,6 +283,9 @@ show_valid_args(const struct token *tabl > > > > case ADDRESS: > > > > fprintf(stderr, " <address>\n"); > > > > break; > > > > + case AREA: > > > > + fprintf(stderr, " <area>\n"); > > > > + break; > > > > case PREFIX: > > > > fprintf(stderr, " <address>[/<len>]\n"); > > > > break; > > > > @@ -298,6 +310,32 @@ parse_addr(const char *word, struct in_a > > > > bzero(&ina, sizeof(ina)); > > > > > > > > if (inet_pton(AF_INET, word, &ina)) { > > > > + addr->s_addr = ina.s_addr; > > > > + return (1); > > > > + } > > > > + > > > > + return (0); > > > > +} > > > > + > > > > +int > > > > +parse_area(const char *word, struct in_addr *addr) > > > > +{ > > > > + struct in_addr ina; > > > > + const char *errstr; > > > > + > > > > + if (word == NULL) > > > > + return (0); > > > > + > > > > + bzero(addr, sizeof(struct in_addr)); > > > > + bzero(&ina, sizeof(ina)); > > > > + > > > > + if (inet_pton(AF_INET, word, &ina)) { > > > > + addr->s_addr = ina.s_addr; > > > > + return (1); > > > > + } > > > > + > > > > + ina.s_addr = htonl(strtonum(word, 0, 0xffffffff, &errstr)); > > > > + if (errstr == NULL) { > > > > addr->s_addr = ina.s_addr; > > > > return (1); > > > > } > > > > Index: parser.h > > > > =================================================================== > > > > RCS file: /cvs/src/usr.sbin/ospfctl/parser.h,v > > > > retrieving revision 1.13 > > > > diff -u -p -r1.13 parser.h > > > > --- parser.h 9 May 2011 12:25:35 -0000 1.13 > > > > +++ parser.h 30 Apr 2019 20:28:52 -0000 > > > > @@ -64,6 +64,7 @@ struct parse_result { > > > > > > > > struct parse_result *parse(int, char *[]); > > > > int parse_addr(const char *, struct in_addr *); > > > > +int parse_area(const char *, struct in_addr *); > > > > int parse_prefix(const char *, struct in_addr *, > > > > u_int8_t *); > > > > > > > > > > > > > >