Hi Luuk,

Inline:

On 10/3/23 15:28, Luuk Hendriks wrote:

Sec 4.2
- Do we really want the BGP PDU TLV to be possibly preceded by other
    TLVs?  Are there any examples of when this would be useful, other than
    TLVs containing info needed to correctly parse the BGP PDU (which we
    should not want anyway in my opinion)?
    For use cases where one just wants the BGP PDU, being able to bail out
    as early as possible sounds useful.
    Or another way to think about this: the BGP PDU TLV is a mandatory TLV
    for the RouteMonitoring message. To me it makes sense to first list the
    mandatory TLVs, then the optional ones.

This was the original thinking behind Route Mirroring in RFC7854.
Hence i wanted to get this new proposal to be consistent to something
that had already been (successfully) proposed.

Not sure I follow: what do you mean with 'This' here?

I was referring to the fact that BGP PDU TLV being preceded by other TLVs was proposed in RFC7854 for the Route Mirroring message, 4.7:

"Type = 0: BGP Message.  A BGP PDU.  This PDU may or may not be an
      Update message.  If the BGP Message TLV occurs in the Route
      Mirroring message, it MUST occur last in the list of TLVs."

Another thing is: true now it is all TLV'd but some comments to the previous way of structuring the Route Monitoring message with TLVs, ie. BGP Update first then TLVs, was criticized because TLVs may contain info that may be good to have upfront when parsing the BGP PDU.

Finally, since I was seeing no point for the BGP PDU TLV not to be followed by other TLVs, i proposed "A Route Monitoring message MUST contain one BGP Message TLV which may be preceeded and followed by other optional TLV data.".

    - do the Group TLVs appear before or after the normal TLVs? If we do
      enforce sorting by code points, we could steer this behavior by
      picking a certain code point.

I was not thinking to make Group TLVs somehow special compared to any other
TLVs that we may define later such that ordering would matter.

Group TLVs introduce new indices that other ('normal') TLVs can point
to, so having the Group TLVs come before the other ones feels like a
'define before use' case to me.

I see, let's ponder about this part a bit further (and let's see if anybody else would have input too). On one hand, you do have a point with the 'define before use' part; on the other i wonder how we could enforce 'define before use' with a spec that could be potentially updated by further documents.


    - can multiple TLVs point to a Group TLV index? (I assume yes)

Yes. Do you believe text would be needed for this?

It'd be nice to leave as little room for interpretation as possible.

Currently in sec 3 the text states:

     Multiple TLVs of the same type and with the same index can be repeated
     as part of the same message.

Maybe generalize this to:

     Multiple TLVs of the same type and/or with the same (Group) index
     can be repeated as part of the same message.


(Though at that point the Group TLV is not yet introduced, so maybe this
is more confusing than it is actually helpful.)

I still struggle with this a bit - can i ask you an example? Because a Group TLV with the same Group Index would be like re-defining the Group, wouldn't it? And actually i was now thinking it would be good to add some text to say we don't want that.


    - can Group TLV indices appear in the pointed-to indices in another
      Group TLV, i.e. nested grouping? (I'm not sure this makes things
      easier for anyone in the end, so if there is no convincing use-case
      for it, perhaps it should be explicitly forbidden?)

Good one, i agree we could start with explicitely forbidding this and then
re-visiting if anybody comes with a use-case around it. Added text.

Should we also state the pointed-to-indices can not be 0x0000, simply
because it would not make sense?

Sure, added text. https://github.com/paololucente/draft-ietf-grow-bmp-tlv/commit/9201ef559a1c951f5c26c4330a90aaffbbade2d6


For my own understanding I created this example RouteMonitoring message
(in sort of pseudo-wireformat if you will) comprising:
      - the usual CommonHeader and PerPeerHeader
      - the BGP PDU in the first TLV, containing 10 NLRI
      - two Group TLVs, pointing to four and three actual TLVs, respectively
      - one TLV pointing to a single NLRI (NLRI number 7)
      - one TLV pointing to the first Group TLV
      - one TLV pointing to the second Group TLV

RouteMonitoring
    CommonHeader
    PerPeerHeader
    TLVs
       [type=TBD1, length=x, index=0, value=$BGP_PDU{ NLRI1, .. NLRI10 } ]
       [type=TBD2, length=x, index=0, value={0x0001, 0x0002, 0x0003, 0x000a}]
       [type=TBD2, length=x, index=0, value={0x0004, 0x0005, 0x0006}]
       [type=TBDw, length=x, index=7, value=something_that_applies_to_NLRI7]
       [type=TBDx, length=x, index=0, value=something_that_applies_to_all]
       [type=TBDy, length=x, index=0x000b, value=applies_to_four_nlri]
       [type=TBDz, length=x, index=0x000c, value=applies_to_three_nlri]


If this is correctly interpreted and somehow useful for the draft, I'm
happy to make this into a proper diagram.

Please, that contribution would be very much appreciated!

Please see
https://github.com/paololucente/draft-ietf-grow-bmp-tlv/pull/3
for a first shot at this. Might need some more love but I wanted to
provide something before the cut-off coming Monday.

Absolutely, thank you! In the same commit referenced above in this email i did couple minor edits to it, mainly spelling and review to length calculations.

Paolo

_______________________________________________
GROW mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/grow

Reply via email to