Subject: [Idr] [draft-ietf-idr-rfc7752bis] Question on explicit withdrawal of BGP-LS NLRI

From: Nandan Saha <[email-masked]>
Date: Fri, 15 Nov 2019 14:24:45 +0530

Hi folks,

 I'm trying to understand what the following text is actually mandating:
 When adding, removing or modifying a TLV/sub-TLV from a Link-State
 NLRI, the BGP-LS Producer MUST withdraw the old NLRI by including it
in the MP_UNREACH_NLRI.  Not doing so can result in duplicate and in-
consistent link-state objects hanging around in the BGP-LS table
<<<<

Is it simply about ensuring that the previous incarnation of the NLRI
is withdrawn
  (or)
is it also mandating some ordering requirements between when the old
incarnation is withdrawn and the new one advertised.

For example, if there's a link nlri say NLRI1 = {
 local node descriptor {
   asn = 100
   igp router ID = 1111.1111.1111
 }
 remote node descriptor {
   asn = 100
   igp router ID = 2222.2222.2222
 }
 link descriptor {
   ipv4 Intf address = 1.1.1.1
   ipv4 neighbor address = 1.1.1.2
}
}

Which say subsequently changes such that NLR12 = {
 local node descriptor {
   asn = 100
   igp router ID = 1111.1111.1111
 }
 remote node descriptor {
   asn = 100
   igp router ID = 2222.2222.2222
 }
 link descriptor {
   ipv4 Intf address = 4.4.4.4
   ipv4 neighbor address = 4.4.4.5
 }
}

Note that the interface address changed above in NLRI2

In this case, is it sufficient to ensure that a MP_REACH_NLRI is sent
with NLRI1 and an MP_UNREACH_NLRI is sent with NLRI1 in _any_ order or
is that text mandating something stricter?
Do both MP_REACH_NLRI=NLRI2 and MP_UNREACH_NLRI=NLRI1 need to be sent
in the same UPDATE message or the MP_UNREACH_NLRI has to be sent
before the MP_REACH_NLRI if sent in different UPDATE messages?

Thanks,
Nandan

---

From: "Ketan Talaulikar (ketant)" <[email-masked]>
Date: Fri, 15 Nov 2019 09:27:44 +0000

Hi Nandan,

Please check inline below.

-----Original Message-----
From: Nandan Saha <[email-masked]> 
Sent: 15 November 2019 14:25
To: [email-masked]; [email-masked]
Cc: Prakash Badrinarayanan <[email-masked]>; Ketan Talaulikar (ketant) <[email-masked]>
Subject: [draft-ietf-idr-rfc7752bis] Question on explicit withdrawal of BGP-LS NLRI

Hi folks,

 I'm trying to understand what the following text is actually mandating:
 When adding, removing or modifying a TLV/sub-TLV from a Link-State  NLRI, the BGP-LS Producer MUST withdraw the old NLRI by including it in the MP_UNREACH_NLRI.  Not doing so can result in duplicate and in- consistent link-state objects hanging around in the BGP-LS table <<<<

Is it simply about ensuring that the previous incarnation of the NLRI is withdrawn
[KT] Yes
  (or)
is it also mandating some ordering requirements between when the old incarnation is withdrawn and the new one advertised.
[KT] No

For example, if there's a link nlri say NLRI1 = {  local node descriptor {
   asn = 100

Which say subsequently changes such that NLR12 = {  local node descriptor {
   asn = 100

In this case, is it sufficient to ensure that a MP_REACH_NLRI is sent with NLRI1 and an MP_UNREACH_NLRI is sent with NLRI1 in _any_ order or is that text mandating something stricter?
[KT] The text does not talk about order - just about sending MP_UNREACH_NLRI for the old incarnation.

Do both MP_REACH_NLRI=NLRI2 and MP_UNREACH_NLRI=NLRI1 need to be sent in the same UPDATE message or the MP_UNREACH_NLRI has to be sent before the MP_REACH_NLRI if sent in different UPDATE messages?
[KT] They are separate NLRIs and how to send is implementation aspect. Regardless of how one sends, the receiver would need to handle updates in any order. Note that there may be an RR in the propagation path and so one cannot assume whether the two NLRIs are packed in the same or different update msg.

Thanks,
Ketan

Thanks,
Nandan

---

From: Nandan Saha <[email-masked]>
Date: Fri, 15 Nov 2019 14:59:53 +0530

Thanks for prompt response Ketan! Makes sense.