summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ospf6d/ChangeLog11
-rw-r--r--ospf6d/ospf6_abr.c2
-rw-r--r--ospf6d/ospf6_intra.c3
-rw-r--r--ospf6d/ospf6_route.c16
-rw-r--r--ospf6d/ospf6_route.h1
-rw-r--r--ospf6d/ospf6d.h2
6 files changed, 27 insertions, 8 deletions
diff --git a/ospf6d/ChangeLog b/ospf6d/ChangeLog
index cdfd207ad..4f64cbc25 100644
--- a/ospf6d/ChangeLog
+++ b/ospf6d/ChangeLog
@@ -1,3 +1,14 @@
+2004-09-13 Yasuhiro Ohara <yasu@sfc.wide.ad.jp>
+
+ * ospf6_intra.c, ospf6_route.[ch]: try to fix assertion failure
+ in brouter's route_remove
+ * ospf6d.h: version 0.9.7o
+
+2004-09-12 Yasuhiro Ohara <yasu@sfc.wide.ad.jp>
+
+ * ospf6_route.c: route_count_assert bug fix
+ * ospf6d.h: version 0.9.7n
+
2004-09-03 Yasuhiro Ohara <yasu@sfc.wide.ad.jp>
* ospf6_area.c, ospf6_route.c, ospf6_top.c, ospf6d.c:
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 81992b261..503c13f23 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -362,7 +362,7 @@ ospf6_abr_originate_summary_to_area (struct ospf6_route *route,
summary->path.origin.id =
ospf6_new_ls_id (summary->path.origin.type,
summary->path.origin.adv_router, area->lsdb);
- ospf6_route_add (summary, summary_table);
+ summary = ospf6_route_add (summary, summary_table);
}
else
{
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index d707ee724..4452e624b 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -1302,6 +1302,9 @@ ospf6_intra_brouter_calculation (struct ospf6_area *oa)
if (lsentry->path.area_id != oa->area_id)
continue;
+ if (CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_WAS_REMOVED))
+ continue;
+
if (CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_REMOVE) &&
CHECK_FLAG (lsentry->flag, OSPF6_ROUTE_ADD))
{
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index b054c7b4d..7a5a39413 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -288,6 +288,7 @@ ospf6_route_add (struct ospf6_route *route,
ospf6_route_delete (route);
SET_FLAG (old->flag, OSPF6_ROUTE_ADD);
ospf6_route_count_assert (table);
+
return old;
}
@@ -315,10 +316,11 @@ ospf6_route_add (struct ospf6_route *route,
ospf6_route_lock (route);
SET_FLAG (route->flag, OSPF6_ROUTE_CHANGE);
+ ospf6_route_count_assert (table);
+
if (table->hook_add)
(*table->hook_add) (route);
- ospf6_route_count_assert (table);
return route;
}
@@ -353,12 +355,12 @@ ospf6_route_add (struct ospf6_route *route,
ospf6_route_lock (route);
table->count++;
+ ospf6_route_count_assert (table);
SET_FLAG (route->flag, OSPF6_ROUTE_ADD);
if (table->hook_add)
(*table->hook_add) (route);
- ospf6_route_count_assert (table);
return route;
}
@@ -414,12 +416,12 @@ ospf6_route_add (struct ospf6_route *route,
}
table->count++;
+ ospf6_route_count_assert (table);
SET_FLAG (route->flag, OSPF6_ROUTE_ADD);
if (table->hook_add)
(*table->hook_add) (route);
- ospf6_route_count_assert (table);
return route;
}
@@ -470,13 +472,15 @@ ospf6_route_remove (struct ospf6_route *route,
node->info = NULL; /* should unlock route_node here ? */
}
+ table->count--;
+ ospf6_route_count_assert (table);
+
+ SET_FLAG (route->flag, OSPF6_ROUTE_WAS_REMOVED);
+
if (table->hook_remove)
(*table->hook_remove) (route);
ospf6_route_unlock (route);
- table->count--;
-
- ospf6_route_count_assert (table);
}
struct ospf6_route *
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
index 5835794ea..d9456a143 100644
--- a/ospf6d/ospf6_route.h
+++ b/ospf6d/ospf6_route.h
@@ -158,6 +158,7 @@ struct ospf6_route
#define OSPF6_ROUTE_BEST 0x08
#define OSPF6_ROUTE_ACTIVE_SUMMARY 0x10
#define OSPF6_ROUTE_DO_NOT_ADVERTISE 0x20
+#define OSPF6_ROUTE_WAS_REMOVED 0x40
struct ospf6_route_table
{
diff --git a/ospf6d/ospf6d.h b/ospf6d/ospf6d.h
index fefdfcc74..6fcf200e2 100644
--- a/ospf6d/ospf6d.h
+++ b/ospf6d/ospf6d.h
@@ -22,7 +22,7 @@
#ifndef OSPF6D_H
#define OSPF6D_H
-#define OSPF6_DAEMON_VERSION "0.9.7m"
+#define OSPF6_DAEMON_VERSION "0.9.7o"
/* global variables */
extern int errno;