summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Franke <chris@opensourcerouting.org>2013-02-20 10:00:54 +0000
committerDavid Lamparter <equinox@diac24.net>2013-04-20 06:14:27 +0200
commit4c14b7f684510592f2eb46fd84859d8bca57def9 (patch)
treef42890045f6d1cd37cdd61106b6524e6c476f445
parent4de8bf001189d40e086764fd804e59657d2e21e6 (diff)
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>
-rw-r--r--ospfd/ospf_lsa.c2
-rw-r--r--ospfd/ospf_lsa.h1
-rw-r--r--ospfd/ospf_packet.c3
3 files changed, 3 insertions, 3 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index e0e05ab8..109a120b 100644
--- a/ospfd/ospf_lsa.c
+++ b/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;
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index 9ff2d920..c71877da 100644
--- a/ospfd/ospf_lsa.h
+++ b/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);
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index d3f1b563..37223fbb 100644
--- a/ospfd/ospf_packet.c
+++ b/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);