summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2005-05-18 23:29:57 +0000
committerpaul <paul>2005-05-18 23:29:57 +0000
commita3387a4488c35d322d3c78973c967b2be5967b6e (patch)
tree678da23a64c1bb41c2c6c87b362f62f9db22de03
parent024a7f06979b467299a85e915b78af456a89e3a6 (diff)
2005-05-19 Paul Jakma <paul.jakma@sun.com>
* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug a less serious one. 1: this function is supposed to lookup entries in the oifs ospf_interface route_table and return either an existing oi or NULL to indicate not found, its caller depends on this, yet this function uses route_node_get which /always/ returns a route_node - one is created if none exists. Use route_node_lookup instead. This should fix root cause of the reports of the (ospf_add_to_if) assert being hit. 2: oi's are inserted into this table with prefixlength set to /32 (indeed, it should be a hash table, not a route_table), however prefixlength to lookup was not changed, if no valid entry can be inserted other than /32, then nothng but /32 should be looked up. This possibly only worked by fluke.. Fix confirmed by 2 reporters (one list, one IRC), definitely a backport candidate once it has been incubated in HEAD for a while. Thanks to Patrick Friedel and Ivan Warren for testing.
-rw-r--r--ospfd/ChangeLog20
-rw-r--r--ospfd/ospf_interface.c14
2 files changed, 29 insertions, 5 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 774658ce..ec6608ba 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,23 @@
+2005-05-19 Paul Jakma <paul.jakma@sun.com>
+
+ * ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug
+ a less serious one.
+ 1: this function is supposed to lookup
+ entries in the oifs ospf_interface route_table and return either
+ an existing oi or NULL to indicate not found, its caller depends
+ on this, yet this function uses route_node_get which /always/
+ returns a route_node - one is created if none exists. Use
+ route_node_lookup instead. This should fix root cause of the
+ reports of the (ospf_add_to_if) assert being hit.
+ 2: oi's are inserted into this table with prefixlength set to
+ /32 (indeed, it should be a hash table, not a route_table),
+ however prefixlength to lookup was not changed, if no valid entry
+ can be inserted other than /32, then nothng but /32 should be
+ looked up. This possibly only worked by fluke..
+ Fix confirmed by 2 reporters (one list, one IRC), definitely a
+ backport candidate once it has been incubated in HEAD for a while.
+ Thanks to Patrick Friedel and Ivan Warren for testing.
+
2005-05-11 Paul Jakma <paul.jakma@sun.com>
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 35351b57..45fa0238 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -150,14 +150,18 @@ ospf_if_table_lookup (struct interface *ifp, struct prefix *prefix)
{
struct prefix p;
struct route_node *rn;
- struct ospf_interface *rninfo;
+ struct ospf_interface *rninfo = NULL;
p = *prefix;
-
- rn = route_node_get (IF_OIFS (ifp), &p);
+ p.prefixlen = IPV4_MAX_PREFIXLEN;
+
/* route_node_get implicitely locks */
- rninfo = (struct ospf_interface *) rn->info;
- route_unlock_node (rn);
+ if (rn = route_node_lookup (IF_OIFS (ifp), &p))
+ {
+ rninfo = (struct ospf_interface *) rn->info;
+ route_unlock_node (rn);
+ }
+
return rninfo;
}