Browse Source

ospfd: fix flooding procedure

An ospf router should accept a new maxage LSA into its lsdb if it has any
neighbors in state Exchange or Loading. ospfd would however only account
for neighbors on the same interface which does not seem to be a valid
optimization.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
Signed-off-by: David Lamparter <equinox@diac24.net>
Christian Franke 6 years ago
parent
commit
4c14b7f684
3 changed files with 3 additions and 3 deletions
  1. 1 1
      ospfd/ospf_lsa.c
  2. 1 0
      ospfd/ospf_lsa.h
  3. 1 2
      ospfd/ospf_packet.c

+ 1 - 1
ospfd/ospf_lsa.c

@@ -2794,7 +2794,7 @@ ospf_lsa_install (struct ospf *ospf, struct ospf_interface *oi,
 }
 
 
-static int
+int
 ospf_check_nbr_status (struct ospf *ospf)
 {
   struct listnode *node, *nnode;

+ 1 - 0
ospfd/ospf_lsa.h

@@ -251,6 +251,7 @@ extern u_int32_t lsa_seqnum_increment (struct ospf_lsa *);
 extern void lsa_header_set (struct stream *, u_char, u_char, struct in_addr,
 		     struct in_addr);
 extern struct ospf_neighbor *ospf_nbr_lookup_ptop (struct ospf_interface *);
+extern int ospf_check_nbr_status (struct ospf *);
 
 /* Prototype for LSA primitive. */
 extern struct ospf_lsa *ospf_lsa_new (void);

+ 1 - 2
ospfd/ospf_packet.c

@@ -1833,8 +1833,7 @@ ospf_ls_upd (struct ip *iph, struct ospf_header *ospfh,
 	 then take the following actions: */
 
       if (IS_LSA_MAXAGE (lsa) && !current &&
-	  (ospf_nbr_count (oi, NSM_Exchange) +
-	   ospf_nbr_count (oi, NSM_Loading)) == 0)
+	  ospf_check_nbr_status(oi->ospf))
 	{
 	  /* (4a) Response Link State Acknowledgment. */
 	  ospf_ls_ack_send (nbr, lsa);