From 082253f5d08577e2c7b61ed2302be88295b459eb Mon Sep 17 00:00:00 2001 From: hasso Date: Fri, 11 Feb 2005 08:31:54 +0000 Subject: * ospf_lsdb.c: Fix sum of checksums calculation. [backport candidate] --- ospfd/ChangeLog | 4 ++++ ospfd/ospf_lsdb.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'ospfd') diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index c530a98d..f3becf4a 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,7 @@ +2005-02-11 Hasso Tepper + + * ospf_lsdb.c: Fix sum of checksums calculation. + 2005-02-09 Andrew J. Schorr * ospf_packet.c: (ospf_write) If sendmsg fails, give more info in the diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c index 4c6ed64e..94d839f2 100644 --- a/ospfd/ospf_lsdb.c +++ b/ospfd/ospf_lsdb.c @@ -88,6 +88,7 @@ ospf_lsdb_add (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa) struct route_table *table; struct prefix_ls lp; struct route_node *rn; + struct ospf_lsa *old; table = lsdb->type[lsa->data->type].db; lsdb_prefix_set (&lp, lsa); @@ -97,7 +98,6 @@ ospf_lsdb_add (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa) if (IS_LSA_SELF (lsa)) lsdb->type[lsa->data->type].count_self++; lsdb->type[lsa->data->type].count++; - lsdb->type[lsa->data->type].checksum += ntohs(lsa->data->checksum); lsdb->total++; } else @@ -105,6 +105,9 @@ ospf_lsdb_add (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa) if (rn->info == lsa) return; + old = rn->info; + lsdb->type[old->data->type].checksum -= ntohs(old->data->checksum); + ospf_lsa_unlock (rn->info); route_unlock_node (rn); } @@ -113,6 +116,7 @@ ospf_lsdb_add (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa) if (lsdb->new_lsa_hook != NULL) (* lsdb->new_lsa_hook)(lsa); #endif /* MONITOR_LSDB_CHANGE */ + lsdb->type[lsa->data->type].checksum += ntohs(lsa->data->checksum); rn->info = ospf_lsa_lock (lsa); } -- cgit v1.2.1