summaryrefslogtreecommitdiff
path: root/ospfd/ospf_nsm.c
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2006-04-03 21:25:32 +0000
committerPaul Jakma <paul.jakma@sun.com>2006-04-03 21:25:32 +0000
commit478aab9812fe06d77fd2f4e0b773a6e1ede18a3a (patch)
treed441d5c41fdb02752c2c24a08a4babbfe63f02e3 /ospfd/ospf_nsm.c
parentab2416a0f3583545f683310adfc7ebce11d79622 (diff)
[ospfd] Fix virtual-link handling in nbrs route-table, exposed by bug#234 fix
2006-04-03 Paul Jakma <paul.jakma@sun.com> * (general) Fix issues with handling of Vlinks and entries in the nbrs route-table which were highlighted by the nsm/nbr_self fixes from bug #234. Many thanks to Juergen Kammer for his help and efforts in testing out debug patches to pinpoint the issue. * ospf_interface.c: (ospf_vl_new) Add nbr_self for Vlink. * ospf_neighbor.c: (ospf_nbr_key) new static function, helper to create key in nbrs table for a given nbr. (ospf_nbr_delete) Use ospf_nbr_key. Add an assert() to document an expected state. (ospf_nbr_add_self) Ditto. (ospf_nbr_lookup_by_addr) Add an assert. * ospf_nsm.c: (nsm_kill_nbr) Can never kill the nbr_self psuedo-neighbour.
Diffstat (limited to 'ospfd/ospf_nsm.c')
-rw-r--r--ospfd/ospf_nsm.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index bfd565ef..8a93f0e6 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -440,6 +440,11 @@ nsm_kill_nbr (struct ospf_neighbor *nbr)
/* call it here because we cannot call it from ospf_nsm_event */
nsm_change_state (nbr, NSM_Down);
+ /* killing nbr_self is invalid */
+ assert (nbr != nbr->oi->nbr_self);
+ if (nbr == nbr->oi->nbr_self)
+ return 1;
+
/* Reset neighbor. */
nsm_reset_nbr (nbr);