LSA ID collision issue is seen with OSPF stub-networks configured and BIRD is acting as ABR

naveen chowdary Yerramneni naveenchowdary.581 at gmail.com
Wed Nov 30 06:05:45 CET 2016


Hi,

*Issue Description*: LSA ID collision issue is seen with OSPF
*stub-networks* configured and BIRD is acting as ABR

*BIRD OSPF configuration*:
·         Part of 2 areas (say, area-0 and area-100)
·         Stub-networks are configured in area-0

*Code Flow*:
1.       Stubnets are advertised to area-0 by generating router LSA (
LSA_T_RT).
o   ospf_disp() -> ospf_update_topology() -> ospf_originate_rt_lsa()->ospf_
originate_lsa()
2.       Now, stubnets are added to top graph table (p->gr) with LSA type
LSA_T_RT
3.       When creating routing table, these stubnets are added to FIB (
p->rtf).
o   ospf_disp() -> ospf_rt_spf() -> ospf_rt_spfa() -> spfa_process_rt() ->
add_network() -> ri_install_net()
4.       When BIRD is acting as ABR then, walk through FIB(p->rtf)  and
send summary LSA (LSA_T_SUM_NET) with LSA mode as LSA_M_RTCALC. Also, nf
pointer is set (stores fib node address) in top_hash_entry.
o    ospf_disp() -> ospf_rt_abr2() -> check_sum_net_lsa() ->
ospf_originate_sum_net_lsa() ->ospf_originate_lsa()
5.       Now, stubnets are added to top graph table (p->gr) with LSA type
LSA_T_SUM_NET
6.       Stubnets are removed from FIB(p->rtf)
o   ospf_disp() -> rt_sync() -> fib_delete()
7.       Now, stubnets entries are still present in top graph table (Note:
fib_delte() doesn't free the node, it just moves the fib node to free pool,
fib_node pointer is still valid)
8.       With any change in network, ospf_rt_spf()is called. In
ospf_rt_reset(), LSA mode is updated fromLSA_M_RTCALC to LSA_M_STALE.
9.       Again, steps 3-6 are repeated. In step-3, fib node pointer is
changed and in step-4, fib node pointer comparison fails in
ospf_originate_lsa()which is leading to LSA id collision.

*Issue is resolved with below code change. *Please review the change and
provide your comments. Also, please let me know if any other information is
required.

diff -rupN bird/proto/ospf/topology.c bird_modified/proto/ospf/topology.c
--- bird/proto/ospf/topology.c    2016-11-28 05:14:19.582761752 -0800
+++ bird_modified/proto/ospf/topology.c     2016-11-28 05:14:01.270761752
-0800
@@ -278,7 +278,7 @@ ospf_originate_lsa(struct ospf_proto *p,
   if (!SNODE_VALID(en))
     s_add_tail(&p->lsal, SNODE en);

-  if (!en->nf || !en->lsa_body)
+  if (!en->nf || !en->lsa_body || en->mode == LSA_M_STALE)
     en->nf = lsa->nf;


Thanks,
Naveen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20161130/03079e2b/attachment.html>


More information about the Bird-users mailing list