diff options
-rw-r--r-- | ospf6d/ChangeLog | 11 | ||||
-rw-r--r-- | ospf6d/ospf6_abr.c | 2 | ||||
-rw-r--r-- | ospf6d/ospf6_intra.c | 3 | ||||
-rw-r--r-- | ospf6d/ospf6_route.c | 16 | ||||
-rw-r--r-- | ospf6d/ospf6_route.h | 1 | ||||
-rw-r--r-- | ospf6d/ospf6d.h | 2 |
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; |