diff options
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ChangeLog | 4 | ||||
-rw-r--r-- | ospfd/ospf_lsdb.c | 6 |
2 files changed, 9 insertions, 1 deletions
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 <hasso at quagga.net> + + * ospf_lsdb.c: Fix sum of checksums calculation. + 2005-02-09 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * 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); } |