<div dir="ltr"><div dir="ltr">Hi All,<div>Please find the topology attached.</div><div><br></div><div>Whenever the node "uspine02" was rebooted, we ended in an ospf loop intermittently.</div><div> We are seeing one anomaly sequence and we are not able to get the trigger point of it.</div><div>Once we ended up in the promatic state.</div><div>From the debug log,</div><div><div>The rebooted us-spine2 says, the received network-lsa is originated from me, so i should ignore that lsa to flood in broadcast domain and set the max-age that i have already installed.In this case, LS ack will not be sent from us-spine2, so gh-core1 again will add that LSA in re-transmit list and will process next 10s interval. In the mean-time, us-spine2 will broadcast the max-age LSA to ghcore for removing that route. Once that route was removed by us-spine2 max-age network-lsa, us-spine1 will send proper network-lsa immediately to ghcore1 to re-install that route so after that event, re-transmit list will be processed again on gh-core1, will send that network-lsa to us-spine2 and us-spine2 will be seeing that lsa as self-originated LSA and will do the above thing again. ----------> this anomaly sequence led our switches in that state.</div><div><br></div><div>It is a timing problem. That is the reason we are not hitting consistently.</div><div><b>Root cause:</b></div><div>Before uspine2 goes to reboot, it would have been in DR and would have generated one network-lsa to this broadcast domain area 204.</div><div>That LSA would have received on ghcore1. ghcore1 considered that LSA as proper LSA and installed it and ghcore1 flood that LSA again to area 204 at that time uspine2 would have established back with BDR and received the same LSA and considered that LSA as self-originated LSA.</div></div><div><br></div><div><b>Potential fix based on the RFC 2328 section 13:</b></div><div>Before flooding the LSA to broadcast domain.Check whether the received is self-originated.</div><div><br></div><div><div><div>diff -r dc50bb05b29e usr/src/cmd/FRRouting/frr-master/ospfd/ospf_flood.c</div><div>--- a/usr/src/cmd/FRRouting/frr-master/ospfd/ospf_flood.c<span style="white-space:pre-wrap">      </span>Tue Nov 05 05:44:37 2019 -0800</div><div>+++ b/usr/src/cmd/FRRouting/frr-master/ospfd/ospf_flood.c<span style="white-space:pre-wrap">  </span>Tue Nov 05 08:51:51 2019 -0800</div><div>@@ -925,6 +925,26 @@</div><div> <span style="white-space:pre-wrap">                      </span>old->retransmit_counter--;</div><div> <span style="white-space:pre-wrap">                  </span>ospf_lsdb_delete(&nbr->ls_rxmt, old);</div><div> <span style="white-space:pre-wrap">           </span>}</div></div><div><span style="background-color:rgb(255,255,0)">+              /*</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">           </span> * Please refer section 13.1 in RFC 2328</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">            </span> * Flooding procedure is not applicable for self</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">            </span> * originating lsa. Unfortunately we ended up the</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">          </span> * self-originated lsa to be added in retransmit list</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">               </span> * through flood caller.</span></div><div><span style="background-color:rgb(255,255,0)">+               * while adding this lsa to re-transmit list,</span></div><div><span style="background-color:rgb(255,255,0)">+               * need to confirm whether this is self-originated lsa.</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                </span> * If its, it should get remove in lsdb and shouldnt add</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">            </span> * in retransmit list.</span></div><div><span style="background-color:rgb(255,255,0)">+               */</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">           </span>if (ospf_lsa_is_self_originated(nbr->oi->ospf, lsa)) {</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                 </span>if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                                </span>zlog_debug("self originated RXmtL(%lu)++,"</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                         </span>" NBR(%s), LSA[%s]",</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                               </span>ospf_ls_retransmit_count(nbr),</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                               </span>inet_ntoa(nbr->router_id),</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                                </span>dump_lsa_key(lsa));</span></div><div><span style="background-color:rgb(255,255,0)">+<span style="white-space:pre-wrap">                  </span>return;</span></div><div>+<span style="white-space:pre-wrap">            </span>}</div></div><div><br></div><div><br></div><div>Thanks</div><div>Palpandi P</div><div><br></div><div><br></div><div></div></div></div>