]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
OSPF: Minor fix in graceful restart
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 9 Jul 2019 13:57:46 +0000 (15:57 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 9 Jul 2019 13:57:46 +0000 (15:57 +0200)
Most LSA origination is blocked in ospf_update_topology(), this fix
blocks LSA origination from ospf_rt_spf().

proto/ospf/topology.c

index a58757709de1c06cd156747a3ca9e4caed6e5b38..2e9c39655f381481bb2a12fe33ca43277efb12a7 100644 (file)
@@ -281,11 +281,15 @@ ospf_do_originate_lsa(struct ospf_proto *p, struct top_hash_entry *en, void *lsa
 struct top_hash_entry *
 ospf_originate_lsa(struct ospf_proto *p, struct ospf_new_lsa *lsa)
 {
-  struct top_hash_entry *en;
+  struct top_hash_entry *en = NULL;
   void *lsa_body = p->lsab;
   u16 lsa_blen = p->lsab_used;
   u16 lsa_length = sizeof(struct ospf_lsa_header) + lsa_blen;
 
+  /* RFC 3623 2 (1) - do not originate topology LSAs during graceful restart */
+  if (p->gr_recovery && (LSA_FUNCTION(lsa->type) <= LSA_FUNCTION(LSA_T_NSSA)))
+    goto drop;
+
   /* For OSPFv2 Opaque LSAs, LS ID consists of Opaque Type and Opaque ID */
   if (ospf_is_v2(p) && lsa_is_opaque(lsa->type))
     lsa->id |= (u32) lsa_get_opaque_type(lsa->type) << 24;