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 *);
>>>>> 
>>>>> 
>>>> 
>>> 
>> 

Reply via email to