yes :D
> On 29 May 2019, at 15:05, Remi Locherer <remi.loche...@relo.ch> wrote:
>
> 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 *);
>>>>>
>>>>>
>>>>
>>>
>>