Subject: [Anima] GRASP M_FLOOD captured from Reggie.py -- could it be wrong?

From: Michael Richardson <[email-masked]>
Date: Sun, 13 Dec 2020 14:43:57 -0500

I captured this from Reggie.py (diag output below) a few days ago:

[9, 3591865773, h'2607F0B0000F000200000000000005F7', 120000,
    [
      ["AN_join_registrar", 5, 1, "EST-TLS"],
      [103, h'2607F0B0000F000200000000000005F7', 6, 80]
    ]
]

(formatting is mine)

I'm confused by this.
    Objective-Name: "AN_join_registrar",
    objective-flags: 5,
    loop-count: 1,
    objective-value: "EST-TLS"

and then the locator-option starts with 103...?

I guess I'm still confused by why this is:
  [ [objective1],[locator2-option], [objective2],[locator2-option],...]

and not:
  [ [objective1, locator2-option], [objective2, locator2-option],...]

or maybe:
  [ [[objective1], [locator2-option]], [[objective2], [locator2-option]],...]

given that it says:
flood-message = [M_FLOOD, session-id, initiator, ttl,
                +[objective, (locator-option / [])]]

so I reviewed RFC8610 so under +[], which is section:
section 3.2 (Ocurrence). + => "one or more",
section 3.4 (Array).

I conclude that I think that Reggie.py is wrong.
I think that this is the same mistake that we made in BRSKI.

I am using the code at:
    commit cf716f69e74041081c3eb93131deefe43baea8bb (HEAD -> master, origin/master, origin/HEAD)
    Author: Brian E Carpenter <[email-masked]>
    Date:   Tue Nov 17 12:28:14 2020 +1300

    Dummy AN-overview for redirect

The entire packet is captured as test data at:
  https://github.com/AnimaGUS-minerva/connect/blob/main/src/graspsamples.rs

what I saw:
85                                      # array(5)
   09                                   # unsigned(9)
   1A D61785AD                          # unsigned(3591865773)
   50                                   # bytes(16)
      2607F0B0000F000200000000000005F7  # "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
   1A 0001D4C0                          # unsigned(120000)
   82                                   # array(2)
      84                                # array(4)
         71                             # text(17)
            414E5F6A6F696E5F726567697374726172 # "AN_join_registrar"
         05                             # unsigned(5)
         01                             # unsigned(1)
         67                             # text(7)
            4553542D544C53              # "EST-TLS"
      84                                # array(4)
         18 67                          # unsigned(103)
         50                             # bytes(16)
            2607F0B0000F000200000000000005F7 # "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
         06                             # unsigned(6)
         18 50                          # unsigned(80)

What I think I should have seen:

[9, 3591865773, h'2607F0B0000F000200000000000005F7', 120000, [[["AN_join_registrar", 5, 1, "EST-TLS"], [103, h'2607F0B0000F000200000000000005F7', 6, 80]]]]

85                                      # array(5)
   09                                   # unsigned(9)
   1A D61785AD                          # unsigned(3591865773)
   50                                   # bytes(16)
      2607F0B0000F000200000000000005F7  # "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
   1A 0001D4C0                          # unsigned(120000)
   81                                   # array(1)
      82                                # array(2)
         84                             # array(4)
            71                          # text(17)
               414E5F6A6F696E5F726567697374726172 # "AN_join_registrar"
            05                          # unsigned(5)
            01                          # unsigned(1)
            67                          # text(7)
               4553542D544C53           # "EST-TLS"
         84                             # array(4)
            18 67                       # unsigned(103)
            50                          # bytes(16)
               2607F0B0000F000200000000000005F7 # "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
            06                          # unsigned(6)
            18 50                       # unsigned(80)

--
Michael Richardson <[email-masked]>   . o O ( IPv6 IøT consulting )
           Sandelman Software Works Inc, Ottawa and Worldwide

---

From: Brian E Carpenter <[email-masked]>
Date: Mon, 14 Dec 2020 09:31:49 +1300

Sorry I'm still on vacation and this takes a bit more care to check than
I can do until I'm home. You could well be right, it's a long time since 
I checked that code against the draft so I could have got it wrong or never
updated it. I think we went round the loop on the CDDL more than once.

We're flying back to Auckland tomorrow, I should be able to check
this on Wed NZ time.

Regards
   Brian

---

From: Carsten Bormann <[email-masked]>
Date: Sun, 13 Dec 2020 21:58:58 +0100

I’m looking at this from my phone, but I think Michael is right. 

Says each pair of objective and locator-option/empty should be packed into its own array. 

It could have said

   flood-message = [M_FLOOD, session-id, initiator, ttl,
                     +(objective, (locator-option / []))]

In which case the array elements would be alternating between objective and locator-option/empty. 

But it doesn’t. 

Note that these two-element arrays are the 5th 6th etc elements of the outer array; there is no one-element array. 

Sent from mobile, sorry for terse

> On 13. Dec 2020, at 21:32, Brian E Carpenter <[email-masked]> wrote:
> 
> _______________________________________________
> Anima mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/anima

---

From: Carsten Bormann <[email-masked]>
Date: Sun, 13 Dec 2020 22:08:54 +0100

You forced me to get a bigger screen...

I don’t know what you are trying to say here:

> On 13. Dec 2020, at 20:43, Michael Richardson <[email-masked]> wrote:
> 
>  [ [[objective1], [locator2-option]], [[objective2], [locator2-option]],…]

An objective already is an array, so there is little point in putting array brackets around one.

[foo, bar, baz, bat, [obj1, loc1]]

Is a valid instance as is

[foo, bar, baz, bat, [obj1, loc1], [obj2, loc2]]

So the packet decode you captured is right, and the version with the added one-element array (0x81) does not match the CDDL.

(Both obj1 and loc1 are four-element arrays in your example.)

Grüße, Carsten

---

From: Brian Carpenter <[email-masked]>
Date: Mon, 14 Dec 2020 10:58:33 +1300

Yes, it's intended to be nested. If it isn't, my code is wrong (but
self-consistent, so it must be wrong in 2 places).

Regards
    Brian
    (via tiny screen & keyboard)

On Mon, 14 Dec 2020, 09:58 Carsten Bormann, <[email-masked]> wrote:

>      2607F0B0000F000200000000000005F7  #
> "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
>
>            2607F0B0000F000200000000000005F7 #
> "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
>
>         06                             # unsigned(6)
>
>         18 50                          # unsigned(80)
>
>
>
> [[["AN_join_registrar", 5, 1, "EST-TLS"], [103,
> h'2607F0B0000F000200000000000005F7', 6, 80]]]]
>
>
> 85                                      # array(5)
>
>   09                                   # unsigned(9)
>
>      2607F0B0000F000200000000000005F7  #
> "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
>
>               2607F0B0000F000200000000000005F7 #
> "&\a\xF0\xB0\x00\x0F\x00\x02\x00\x00\x00\x00\x00\x00\x05\xF7"
>
>            06                          # unsigned(6)
>
>            18 50                       # unsigned(80)
>
>
>
>
> --
>

---

From: Brian E Carpenter <[email-masked]>
Date: Mon, 14 Dec 2020 13:47:03 +1300

This isn't yet definitive because I don't have everything I need on vacation
with me, but

> So the packet decode you captured is right

I think I agree with Carsten. In CDDL, +[something] generates
[something1],[something2],[something3], and not
[[something1],[something2],[something3]].

Nesting is hard. That's why a CDDL-driven parser would be a great
thing to have.

Regards
   Brian

On 14-Dec-20 10:08, Carsten Bormann wrote:
>> On 13. Dec 2020, at 20:43, Michael Richardson <[email-masked] <mailto:[email-masked]>> wrote:
>>

---

From: Michael Richardson <[email-masked]>
Date: Sun, 13 Dec 2020 22:11:53 -0500

>> I guess I'm still confused by why this is: [
    >> [objective1],[locator2-option], [objective2],[locator2-option],...]
    >>
    >> and not: [ [objective1, locator2-option], [objective2,
    >> locator2-option],...]
    >>
    >> or maybe: [ [[objective1], [locator2-option]], [[objective2],
    >> [locator2-option]],…]

    > [foo, bar, baz, bat, [obj1, loc1], [obj2, loc2]]

I see.
I thought it was:
  [foo, bar, baz, bat, [[obj1, loc1], [obj2, loc2]]]

but I understand the CDDL better now.

    > So the packet decode you captured is right, and the version with the
    > added one-element array (0x81) does not match the CDDL.

The original capture was, to repeat:

So, if there were two objectives, it would be:

   [9, 3591865773, h'2607F0B0000F000200000000000005F7', 120000,
     [
       ["AN_join_registrar", 5, 1, "EST-TLS"],
       [103, h'2607F0B0000F000200000000000005F7', 6, 80]
     ],
     [
       ["AN_more_funr", 5, 1, "EST-TLS"],
       [104, h'2607F0B0', 6, 80]
     ]
   ]

--
]               Never tell me the odds!                 | ipv6 mesh networks [
]   Michael Richardson, Sandelman Software Works        |    IoT architect   [
]     [email-masked]  http://www.sandelman.ca/        |   ruby on rails    [