+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2003 Yasuhiro Ohara
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * GNU Zebra is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; see the file COPYING; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <zebra.h>
#define ospf6_lsdb_count_assert(t) ((void) 0)
#endif /*DEBUG*/
+static inline void ospf6_lsdb_stats_update(struct ospf6_lsa *lsa,
+ struct ospf6_lsdb *lsdb, int count)
+{
+ uint16_t stat = ntohs(lsa->header->type) & OSPF6_LSTYPE_FCODE_MASK;
+
+ if (stat >= OSPF6_LSTYPE_SIZE)
+ stat = OSPF6_LSTYPE_UNKNOWN;
+ lsdb->stats[stat] += count;
+}
+
void ospf6_lsdb_add(struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb)
{
struct prefix_ipv6 key;
if (!old) {
lsdb->count++;
+ ospf6_lsdb_stats_update(lsa, lsdb, 1);
if (OSPF6_LSA_IS_MAXAGE(lsa)) {
if (lsdb->hook_remove)
(*lsdb->hook_add)(lsa);
}
} else {
+ lsa->retrans_count = old->retrans_count;
+
if (OSPF6_LSA_IS_CHANGED(old, lsa)) {
if (OSPF6_LSA_IS_MAXAGE(lsa)) {
if (lsdb->hook_remove) {
node->info = NULL;
lsdb->count--;
+ ospf6_lsdb_stats_update(lsa, lsdb, -1);
if (lsdb->hook_remove)
(*lsdb->hook_remove)(lsa);