* ospf_lsdb.c: Fix sum of checksums calculation.

	[backport candidate]
diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c
index 4c6ed64..94d839f 100644
--- a/ospfd/ospf_lsdb.c
+++ b/ospfd/ospf_lsdb.c
@@ -88,6 +88,7 @@
   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 @@
       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 @@
       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 @@
   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);
 }