Mailing List Archive

[PATCH v1 07/10] *: declare and init mgroup and mtype for all lib/daemons
This commit centralises the memory group and memory types declarations
into one single place for each daemon/library. In this case, files
affected are <daemon_or_lib>/<daemon_or_lib>_memory.[ch].
In order to be used, the memory groups and memory types have to be
manually initialised. This is why the daemons are initialising their
own memory types and groups. In addition to this, as all daemons require
usage of lib library, then the daemons also initialise the lib memory
types and group entries.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
---
bgpd/bgp_main.c | 2 +
bgpd/bgp_memory.c | 71 ++++++++++++++++++++++++
bgpd/bgp_memory.h | 3 +
isisd/isis_main.c | 2 +
isisd/isis_memory.c | 25 +++++++++
isisd/isis_memory.h | 3 +
lib/Makefile.am | 10 +---
lib/buffer.c | 2 +-
lib/command.c | 2 +-
lib/distribute.c | 2 +-
lib/filter.c | 2 +-
lib/hash.c | 2 +-
lib/if.c | 2 +-
lib/if_rmap.c | 2 +-
lib/keychain.c | 2 +-
lib/lib_memory.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++
lib/lib_memory.h | 96 ++++++++++++++++++++++++++++++++
lib/linklist.c | 2 +-
lib/log.c | 2 +-
lib/memory.h | 2 -
lib/memtypes.c | 80 ---------------------------
lib/plist.c | 2 +-
lib/pqueue.c | 2 +-
lib/prefix.c | 2 +-
lib/privs.c | 2 +-
lib/routemap.c | 2 +-
lib/sockunion.c | 2 +-
lib/stream.c | 2 +-
lib/table.c | 2 +-
lib/thread.c | 2 +-
lib/vector.c | 2 +-
lib/vrf.c | 2 +-
lib/vty.c | 2 +-
lib/workqueue.c | 2 +-
lib/zclient.c | 2 +-
ospf6d/ospf6_main.c | 2 +
ospf6d/ospf6_memory.c | 23 ++++++++
ospf6d/ospf6_memory.h | 3 +
ospfd/ospf_main.c | 2 +
ospfd/ospf_memory.c | 34 ++++++++++++
ospfd/ospf_memory.h | 2 +
pimd/pim_main.c | 2 +
pimd/pim_memory.c | 18 ++++++
pimd/pim_memory.h | 3 +
ripd/rip_main.c | 2 +
ripd/rip_memory.c | 13 +++++
ripd/rip_memory.h | 3 +
ripngd/ripng_main.c | 2 +
ripngd/ripng_memory.c | 13 +++++
ripngd/ripng_memory.h | 3 +
vtysh/vtysh.c | 1 +
vtysh/vtysh_main.c | 1 +
vtysh/vtysh_user.c | 1 +
zebra/main.c | 2 +
zebra/zebra_memory.c | 16 ++++++
zebra/zebra_memory.h | 3 +
56 files changed, 527 insertions(+), 113 deletions(-)
create mode 100644 lib/lib_memory.c
create mode 100644 lib/lib_memory.h
delete mode 100644 lib/memtypes.c

diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 25669a0cb08f..e1bc4c6151d2 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -354,6 +354,8 @@ main (int argc, char **argv)
/* Preserve name of myself. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ bgp_memory_init();
+
zlog_default = openzlog (progname, ZLOG_BGP,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);

diff --git a/bgpd/bgp_memory.c b/bgpd/bgp_memory.c
index 3c2b08796713..1c0ec1e6b360 100644
--- a/bgpd/bgp_memory.c
+++ b/bgpd/bgp_memory.c
@@ -95,3 +95,74 @@ DEFINE_MTYPE(BGPD, BGP_AGGREGATE, "BGP aggregate")
DEFINE_MTYPE(BGPD, BGP_ADDR, "BGP own address")
DEFINE_MTYPE(BGPD, ENCAP_TLV, "ENCAP TLV")

+void bgp_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(BGPD);
+ INIT_MTYPE(BGP);
+ INIT_MTYPE(BGP_LISTENER);
+ INIT_MTYPE(BGP_PEER);
+ INIT_MTYPE(BGP_PEER_HOST);
+ INIT_MTYPE(PEER_GROUP);
+ INIT_MTYPE(PEER_DESC);
+ INIT_MTYPE(PEER_PASSWORD);
+ INIT_MTYPE(ATTR);
+ INIT_MTYPE(ATTR_EXTRA);
+ INIT_MTYPE(AS_PATH);
+ INIT_MTYPE(AS_SEG);
+ INIT_MTYPE(AS_SEG_DATA);
+ INIT_MTYPE(AS_STR);
+
+ INIT_MTYPE(BGP_TABLE);
+ INIT_MTYPE(BGP_NODE);
+ INIT_MTYPE(BGP_ROUTE);
+ INIT_MTYPE(BGP_ROUTE_EXTRA);
+ INIT_MTYPE(BGP_CONN);
+ INIT_MTYPE(BGP_STATIC);
+ INIT_MTYPE(BGP_ADVERTISE_ATTR);
+ INIT_MTYPE(BGP_ADVERTISE);
+ INIT_MTYPE(BGP_SYNCHRONISE);
+ INIT_MTYPE(BGP_ADJ_IN);
+ INIT_MTYPE(BGP_ADJ_OUT);
+ INIT_MTYPE(BGP_MPATH_INFO);
+
+ INIT_MTYPE(AS_LIST);
+ INIT_MTYPE(AS_FILTER);
+ INIT_MTYPE(AS_FILTER_STR);
+
+ INIT_MTYPE(COMMUNITY);
+ INIT_MTYPE(COMMUNITY_VAL);
+ INIT_MTYPE(COMMUNITY_STR);
+
+ INIT_MTYPE(ECOMMUNITY);
+ INIT_MTYPE(ECOMMUNITY_VAL);
+ INIT_MTYPE(ECOMMUNITY_STR);
+
+ INIT_MTYPE(COMMUNITY_LIST);
+ INIT_MTYPE(COMMUNITY_LIST_NAME);
+ INIT_MTYPE(COMMUNITY_LIST_ENTRY);
+ INIT_MTYPE(COMMUNITY_LIST_CONFIG);
+ INIT_MTYPE(COMMUNITY_LIST_HANDLER);
+
+ INIT_MTYPE(CLUSTER);
+ INIT_MTYPE(CLUSTER_VAL);
+
+ INIT_MTYPE(BGP_PROCESS_QUEUE);
+ INIT_MTYPE(BGP_CLEAR_NODE_QUEUE);
+
+ INIT_MTYPE(TRANSIT);
+ INIT_MTYPE(TRANSIT_VAL);
+
+ INIT_MTYPE(BGP_DISTANCE);
+ INIT_MTYPE(BGP_NEXTHOP_CACHE);
+ INIT_MTYPE(BGP_CONFED_LIST);
+ INIT_MTYPE(PEER_UPDATE_SOURCE);
+ INIT_MTYPE(BGP_DAMP_INFO);
+ INIT_MTYPE(BGP_DAMP_ARRAY);
+ INIT_MTYPE(BGP_REGEXP);
+ INIT_MTYPE(BGP_AGGREGATE);
+ INIT_MTYPE(BGP_ADDR);
+ INIT_MTYPE(ENCAP_TLV);
+
+}
diff --git a/bgpd/bgp_memory.h b/bgpd/bgp_memory.h
index 61ab310f0d55..a17f40f3b2af 100644
--- a/bgpd/bgp_memory.h
+++ b/bgpd/bgp_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_BGP_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(BGPD)
DECLARE_MTYPE(BGP)
@@ -91,4 +92,6 @@ DECLARE_MTYPE(BGP_AGGREGATE)
DECLARE_MTYPE(BGP_ADDR)
DECLARE_MTYPE(ENCAP_TLV)

+extern void bgp_memory_init(void);
+
#endif /* _QUAGGA_BGP_MEMORY_H */
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index 1c3323ebc4d7..edd3bcf8c33f 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -243,6 +243,8 @@ main (int argc, char **argv, char **envp)
/* Get the programname without the preceding path. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ isis_memory_init();
+
zlog_default = openzlog (progname, ZLOG_ISIS,
LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON);

diff --git a/isisd/isis_memory.c b/isisd/isis_memory.c
index 5c5fee76bb6c..2cfff24b9831 100644
--- a/isisd/isis_memory.c
+++ b/isisd/isis_memory.c
@@ -45,3 +45,28 @@ DEFINE_MTYPE(ISISD, ISIS_DICT, "ISIS dictionary")
DEFINE_MTYPE(ISISD, ISIS_DICT_NODE, "ISIS dictionary node")
DEFINE_MTYPE(ISISD, ISIS_EXT_ROUTE, "ISIS redistributed route")
DEFINE_MTYPE(ISISD, ISIS_EXT_INFO, "ISIS redistributed route info")
+
+void isis_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(ISISD);
+ INIT_MTYPE(ISIS);
+ INIT_MTYPE(ISIS_TMP);
+ INIT_MTYPE(ISIS_CIRCUIT);
+ INIT_MTYPE(ISIS_LSP);
+ INIT_MTYPE(ISIS_ADJACENCY);
+ INIT_MTYPE(ISIS_AREA);
+ INIT_MTYPE(ISIS_AREA_ADDR);
+ INIT_MTYPE(ISIS_TLV);
+ INIT_MTYPE(ISIS_DYNHN);
+ INIT_MTYPE(ISIS_SPFTREE);
+ INIT_MTYPE(ISIS_VERTEX);
+ INIT_MTYPE(ISIS_ROUTE_INFO);
+ INIT_MTYPE(ISIS_NEXTHOP);
+ INIT_MTYPE(ISIS_NEXTHOP6);
+ INIT_MTYPE(ISIS_DICT);
+ INIT_MTYPE(ISIS_DICT_NODE);
+ INIT_MTYPE(ISIS_EXT_ROUTE);
+ INIT_MTYPE(ISIS_EXT_INFO);
+}
diff --git a/isisd/isis_memory.h b/isisd/isis_memory.h
index 6ebce1fc614a..90c3ab174687 100644
--- a/isisd/isis_memory.h
+++ b/isisd/isis_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_ISIS_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(ISISD)
DECLARE_MTYPE(ISIS)
@@ -45,4 +46,6 @@ DECLARE_MTYPE(ISIS_DICT_NODE)
DECLARE_MTYPE(ISIS_EXT_ROUTE)
DECLARE_MTYPE(ISIS_EXT_INFO)

+extern void isis_memory_init(void);
+
#endif /* _QUAGGA_ISIS_MEMORY_H */
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 9b52931a8074..365fc1cf42c8 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -13,11 +13,11 @@ libzebra_la_SOURCES = \
sockunion.c prefix.c thread.c if.c buffer.c table.c hash.c \
filter.c routemap.c distribute.c stream.c str.c log.c plist.c \
zclient.c sockopt.c smux.c agentx.c snmp.c md5.c if_rmap.c keychain.c privs.c \
- sigevent.c pqueue.c jhash.c memtypes.c workqueue.c vrf.c \
+ sigevent.c pqueue.c jhash.c lib_memory.c workqueue.c vrf.c \
memory.c \
memory_vty.c

-BUILT_SOURCES = memtypes.h route_types.h gitversion.h
+BUILT_SOURCES = route_types.h gitversion.h

libzebra_la_DEPENDENCIES = @LIB_REGEX@

@@ -29,7 +29,7 @@ pkginclude_HEADERS = \
memory.h network.h prefix.h routemap.h distribute.h sockunion.h \
str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \
plist.h zclient.h sockopt.h smux.h md5.h if_rmap.h keychain.h \
- privs.h sigevent.h pqueue.h jhash.h zassert.h memtypes.h \
+ privs.h sigevent.h pqueue.h jhash.h zassert.h lib_memory.h \
workqueue.h route_types.h libospf.h vrf.h fifo.h \
memory_vty.h

@@ -39,13 +39,9 @@ noinst_HEADERS = \
EXTRA_DIST = \
regex.c regex-gnu.h \
queue.h \
- memtypes.pl \
route_types.pl route_types.txt \
gitversion.pl

-memtypes.h: $(srcdir)/memtypes.c $(srcdir)/memtypes.pl
- @PERL@ $(srcdir)/memtypes.pl < $(srcdir)/memtypes.c > $@
-
route_types.h: $(srcdir)/route_types.txt $(srcdir)/route_types.pl
@PERL@ $(srcdir)/route_types.pl < $(srcdir)/route_types.txt > $@

diff --git a/lib/buffer.c b/lib/buffer.c
index ee9310100e48..906355eca277 100644
--- a/lib/buffer.c
+++ b/lib/buffer.c
@@ -22,7 +22,7 @@

#include <zebra.h>

-#include "memory.h"
+#include "lib_memory.h"
#include "buffer.h"
#include "log.h"
#include "network.h"
diff --git a/lib/command.c b/lib/command.c
index 80893602da17..d8d6b9a5d4fa 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */
#include <zebra.h>


-#include "memory.h"
+#include "lib_memory.h"
#include "log.h"
#include <lib/version.h>
#include "thread.h"
diff --git a/lib/distribute.c b/lib/distribute.c
index ba8043cf9e08..1351254cb318 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -26,7 +26,7 @@
#include "filter.h"
#include "command.h"
#include "distribute.h"
-#include "memory.h"
+#include "lib_memory.h"

/* Hash of distribute list. */
struct hash *disthash;
diff --git a/lib/filter.c b/lib/filter.c
index a472941406f7..b919b5dfba08 100644
--- a/lib/filter.c
+++ b/lib/filter.c
@@ -23,7 +23,7 @@

#include "prefix.h"
#include "filter.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "command.h"
#include "sockunion.h"
#include "buffer.h"
diff --git a/lib/hash.c b/lib/hash.c
index 56e41fa82605..d3c08996ce0e 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -22,7 +22,7 @@
#include <zebra.h>

#include "hash.h"
-#include "memory.h"
+#include "lib_memory.h"

/* Allocate a new hash. */
struct hash *
diff --git a/lib/if.c b/lib/if.c
index 44b8586e47e5..9b42a02e4dc6 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -31,7 +31,7 @@
#include "if.h"
#include "sockunion.h"
#include "prefix.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "table.h"
#include "buffer.h"
#include "str.h"
diff --git a/lib/if_rmap.c b/lib/if_rmap.c
index e4a83de8bb85..c2e762a8ce01 100644
--- a/lib/if_rmap.c
+++ b/lib/if_rmap.c
@@ -23,7 +23,7 @@

#include "hash.h"
#include "command.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "if.h"
#include "if_rmap.h"

diff --git a/lib/keychain.c b/lib/keychain.c
index 8a2fdd2ed9fb..525b6797568f 100644
--- a/lib/keychain.c
+++ b/lib/keychain.c
@@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA. */
#include <zebra.h>

#include "command.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "linklist.h"
#include "keychain.h"

diff --git a/lib/lib_memory.c b/lib/lib_memory.c
new file mode 100644
index 000000000000..117f52f65643
--- /dev/null
+++ b/lib/lib_memory.c
@@ -0,0 +1,149 @@
+/*
+ * Memory type definitions. This file is parsed by memtypes.awk to extract
+ * MTYPE_ and memory_list_.. information in order to autogenerate
+ * memtypes.h.
+ *
+ * The script is sensitive to the format (though not whitespace), see
+ * the top of memtypes.awk for more details.
+ */
+
+#include "zebra.h"
+#include "lib_memory.h"
+
+DEFINE_MGROUP(LIB, "libzebra")
+DEFINE_MTYPE(LIB, TMP, "Temporary memory")
+DEFINE_MTYPE(LIB, STRVEC, "String vector")
+DEFINE_MTYPE(LIB, VECTOR, "Vector")
+DEFINE_MTYPE(LIB, VECTOR_INDEX, "Vector index")
+DEFINE_MTYPE(LIB, LINK_LIST, "Link List")
+DEFINE_MTYPE(LIB, LINK_NODE, "Link Node")
+DEFINE_MTYPE(LIB, THREAD, "Thread")
+DEFINE_MTYPE(LIB, THREAD_MASTER, "Thread master")
+DEFINE_MTYPE(LIB, THREAD_STATS, "Thread stats")
+DEFINE_MTYPE(LIB, VTY, "VTY")
+DEFINE_MTYPE(LIB, VTY_OUT_BUF, "VTY output buffer")
+DEFINE_MTYPE(LIB, VTY_HIST, "VTY history")
+DEFINE_MTYPE(LIB, IF, "Interface")
+DEFINE_MTYPE(LIB, CONNECTED, "Connected")
+DEFINE_MTYPE(LIB, CONNECTED_LABEL, "Connected interface label")
+DEFINE_MTYPE(LIB, BUFFER, "Buffer")
+DEFINE_MTYPE(LIB, BUFFER_DATA, "Buffer data")
+DEFINE_MTYPE(LIB, STREAM, "Stream")
+DEFINE_MTYPE(LIB, STREAM_DATA, "Stream data")
+DEFINE_MTYPE(LIB, STREAM_FIFO, "Stream FIFO")
+DEFINE_MTYPE(LIB, PREFIX, "Prefix")
+DEFINE_MTYPE(LIB, PREFIX_IPV4, "Prefix IPv4")
+DEFINE_MTYPE(LIB, PREFIX_IPV6, "Prefix IPv6")
+DEFINE_MTYPE(LIB, HASH, "Hash")
+DEFINE_MTYPE(LIB, HASH_BACKET, "Hash Bucket")
+DEFINE_MTYPE(LIB, HASH_INDEX, "Hash Index")
+DEFINE_MTYPE(LIB, ROUTE_TABLE, "Route table")
+DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node")
+DEFINE_MTYPE(LIB, DISTRIBUTE, "Distribute list")
+DEFINE_MTYPE(LIB, DISTRIBUTE_IFNAME, "Dist-list ifname")
+DEFINE_MTYPE(LIB, ACCESS_LIST, "Access List")
+DEFINE_MTYPE(LIB, ACCESS_LIST_STR, "Access List Str")
+DEFINE_MTYPE(LIB, ACCESS_FILTER, "Access Filter")
+DEFINE_MTYPE(LIB, PREFIX_LIST, "Prefix List")
+DEFINE_MTYPE(LIB, PREFIX_LIST_ENTRY, "Prefix List Entry")
+DEFINE_MTYPE(LIB, PREFIX_LIST_STR, "Prefix List Str")
+DEFINE_MTYPE(LIB, ROUTE_MAP, "Route map")
+DEFINE_MTYPE(LIB, ROUTE_MAP_NAME, "Route map name")
+DEFINE_MTYPE(LIB, ROUTE_MAP_INDEX, "Route map index")
+DEFINE_MTYPE(LIB, ROUTE_MAP_RULE, "Route map rule")
+DEFINE_MTYPE(LIB, ROUTE_MAP_RULE_STR, "Route map rule str")
+DEFINE_MTYPE(LIB, ROUTE_MAP_COMPILED, "Route map compiled")
+DEFINE_MTYPE(LIB, CMD_TOKENS, "Command desc")
+DEFINE_MTYPE(LIB, KEY, "Key")
+DEFINE_MTYPE(LIB, KEYCHAIN, "Key chain")
+DEFINE_MTYPE(LIB, IF_RMAP, "Interface route map")
+DEFINE_MTYPE(LIB, IF_RMAP_NAME, "I.f. route map name")
+DEFINE_MTYPE(LIB, SOCKUNION, "Socket union")
+DEFINE_MTYPE(LIB, PRIVS, "Privilege information")
+DEFINE_MTYPE(LIB, ZLOG, "Logging")
+DEFINE_MTYPE(LIB, ZCLIENT, "Zclient")
+DEFINE_MTYPE(LIB, WORK_QUEUE, "Work queue")
+DEFINE_MTYPE(LIB, WORK_QUEUE_ITEM, "Work queue item")
+DEFINE_MTYPE(LIB, WORK_QUEUE_NAME, "Work queue name string")
+DEFINE_MTYPE(LIB, PQUEUE, "Priority queue")
+DEFINE_MTYPE(LIB, PQUEUE_DATA, "Priority queue data")
+DEFINE_MTYPE(LIB, HOST, "host configuration")
+DEFINE_MTYPE(LIB, VRF, "VRF")
+DEFINE_MTYPE(LIB, VRF_NAME, "VRF name")
+DEFINE_MTYPE(LIB, VRF_BITMAP, "VRF bit-map")
+
+
+
+DEFINE_MGROUP(BABELD, "babeld")
+DEFINE_MTYPE(BABELD, BABEL, "Babel structure")
+DEFINE_MTYPE(BABELD, BABEL_IF, "Babel interface")
+
+void lib_memory_init(void)
+{
+ INIT_MGROUP(LIB);
+ INIT_MTYPE( TMP);
+ INIT_MTYPE( STRVEC);
+ INIT_MTYPE( VECTOR);
+ INIT_MTYPE( VECTOR_INDEX);
+ INIT_MTYPE( LINK_LIST);
+ INIT_MTYPE( LINK_NODE);
+ INIT_MTYPE( THREAD);
+ INIT_MTYPE( THREAD_MASTER);
+ INIT_MTYPE( THREAD_STATS);
+ INIT_MTYPE( VTY);
+ INIT_MTYPE( VTY_OUT_BUF);
+ INIT_MTYPE( VTY_HIST);
+ INIT_MTYPE( IF);
+ INIT_MTYPE( CONNECTED);
+ INIT_MTYPE( CONNECTED_LABEL);
+ INIT_MTYPE( BUFFER);
+ INIT_MTYPE( BUFFER_DATA);
+ INIT_MTYPE( STREAM);
+ INIT_MTYPE( STREAM_DATA);
+ INIT_MTYPE( STREAM_FIFO);
+ INIT_MTYPE( PREFIX);
+ INIT_MTYPE( PREFIX_IPV4);
+ INIT_MTYPE( PREFIX_IPV6);
+ INIT_MTYPE( HASH);
+ INIT_MTYPE( HASH_BACKET);
+ INIT_MTYPE( HASH_INDEX);
+ INIT_MTYPE( ROUTE_TABLE);
+ INIT_MTYPE( ROUTE_NODE);
+ INIT_MTYPE( DISTRIBUTE);
+ INIT_MTYPE( DISTRIBUTE_IFNAME);
+ INIT_MTYPE( ACCESS_LIST);
+ INIT_MTYPE( ACCESS_LIST_STR);
+ INIT_MTYPE( ACCESS_FILTER);
+ INIT_MTYPE( PREFIX_LIST);
+ INIT_MTYPE( PREFIX_LIST_ENTRY);
+ INIT_MTYPE( PREFIX_LIST_STR);
+ INIT_MTYPE( ROUTE_MAP);
+ INIT_MTYPE( ROUTE_MAP_NAME);
+ INIT_MTYPE( ROUTE_MAP_INDEX);
+ INIT_MTYPE( ROUTE_MAP_RULE);
+ INIT_MTYPE( ROUTE_MAP_RULE_STR);
+ INIT_MTYPE( ROUTE_MAP_COMPILED);
+ INIT_MTYPE( CMD_TOKENS);
+ INIT_MTYPE( KEY);
+ INIT_MTYPE( KEYCHAIN);
+ INIT_MTYPE( IF_RMAP);
+ INIT_MTYPE( IF_RMAP_NAME);
+ INIT_MTYPE( SOCKUNION);
+ INIT_MTYPE( PRIVS);
+ INIT_MTYPE( ZLOG);
+ INIT_MTYPE( ZCLIENT);
+ INIT_MTYPE( WORK_QUEUE);
+ INIT_MTYPE( WORK_QUEUE_ITEM);
+ INIT_MTYPE( WORK_QUEUE_NAME);
+ INIT_MTYPE( PQUEUE);
+ INIT_MTYPE( PQUEUE_DATA);
+ INIT_MTYPE( HOST);
+ INIT_MTYPE( VRF);
+ INIT_MTYPE( VRF_NAME);
+ INIT_MTYPE( VRF_BITMAP);
+
+ INIT_MGROUP(BABELD);
+ INIT_MTYPE(BABEL);
+ INIT_MTYPE(BABEL_IF);
+
+}
diff --git a/lib/lib_memory.h b/lib/lib_memory.h
new file mode 100644
index 000000000000..ea35598aa582
--- /dev/null
+++ b/lib/lib_memory.h
@@ -0,0 +1,96 @@
+/* lib memory type declarations
+ *
+ * Copyright (C) 2016 6WIND
+ *
+ * This file is part of Quagga.
+ *
+ * Quagga 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.
+ *
+ * Quagga 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 Quagga; see the file COPYING. If not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef _QUAGGA_LIB_MEMORY_H
+#define _QUAGGA_LIB_MEMORY_H
+
+#include "memory.h"
+
+DECLARE_MGROUP(LIB)
+DECLARE_MTYPE(TMP)
+DECLARE_MTYPE(STRVEC)
+DECLARE_MTYPE(VECTOR)
+DECLARE_MTYPE(VECTOR_INDEX)
+DECLARE_MTYPE(LINK_LIST)
+DECLARE_MTYPE(LINK_NODE)
+DECLARE_MTYPE(THREAD)
+DECLARE_MTYPE(THREAD_MASTER)
+DECLARE_MTYPE(THREAD_STATS)
+DECLARE_MTYPE(VTY)
+DECLARE_MTYPE(VTY_OUT_BUF)
+DECLARE_MTYPE(VTY_HIST)
+DECLARE_MTYPE(IF)
+DECLARE_MTYPE(CONNECTED)
+DECLARE_MTYPE(CONNECTED_LABEL)
+DECLARE_MTYPE(BUFFER)
+DECLARE_MTYPE(BUFFER_DATA)
+DECLARE_MTYPE(STREAM)
+DECLARE_MTYPE(STREAM_DATA)
+DECLARE_MTYPE(STREAM_FIFO)
+DECLARE_MTYPE(PREFIX)
+DECLARE_MTYPE(PREFIX_IPV4)
+DECLARE_MTYPE(PREFIX_IPV6)
+DECLARE_MTYPE(HASH)
+DECLARE_MTYPE(HASH_BACKET)
+DECLARE_MTYPE(HASH_INDEX)
+DECLARE_MTYPE(ROUTE_TABLE)
+DECLARE_MTYPE(ROUTE_NODE)
+DECLARE_MTYPE(DISTRIBUTE)
+DECLARE_MTYPE(DISTRIBUTE_IFNAME)
+DECLARE_MTYPE(ACCESS_LIST)
+DECLARE_MTYPE(ACCESS_LIST_STR)
+DECLARE_MTYPE(ACCESS_FILTER)
+DECLARE_MTYPE(PREFIX_LIST)
+DECLARE_MTYPE(PREFIX_LIST_ENTRY)
+DECLARE_MTYPE(PREFIX_LIST_STR)
+DECLARE_MTYPE(ROUTE_MAP)
+DECLARE_MTYPE(ROUTE_MAP_NAME)
+DECLARE_MTYPE(ROUTE_MAP_INDEX)
+DECLARE_MTYPE(ROUTE_MAP_RULE)
+DECLARE_MTYPE(ROUTE_MAP_RULE_STR)
+DECLARE_MTYPE(ROUTE_MAP_COMPILED)
+DECLARE_MTYPE(CMD_TOKENS)
+DECLARE_MTYPE(KEY)
+DECLARE_MTYPE(KEYCHAIN)
+DECLARE_MTYPE(IF_RMAP)
+DECLARE_MTYPE(IF_RMAP_NAME)
+DECLARE_MTYPE(SOCKUNION)
+DECLARE_MTYPE(PRIVS)
+DECLARE_MTYPE(ZLOG)
+DECLARE_MTYPE(ZCLIENT)
+DECLARE_MTYPE(WORK_QUEUE)
+DECLARE_MTYPE(WORK_QUEUE_ITEM)
+DECLARE_MTYPE(WORK_QUEUE_NAME)
+DECLARE_MTYPE(PQUEUE)
+DECLARE_MTYPE(PQUEUE_DATA)
+DECLARE_MTYPE(HOST)
+DECLARE_MTYPE(VRF)
+DECLARE_MTYPE(VRF_NAME)
+DECLARE_MTYPE(VRF_BITMAP)
+
+DECLARE_MGROUP(BABELD)
+DECLARE_MTYPE(BABEL)
+DECLARE_MTYPE(BABEL_IF)
+
+extern void lib_memory_init(void);
+
+#endif /* _QUAGGA_LIB_MEMORY_H */
diff --git a/lib/linklist.c b/lib/linklist.c
index 4b16f07dd1c3..fc37ab8a7a76 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -22,7 +22,7 @@
#include <zebra.h>

#include "linklist.h"
-#include "memory.h"
+#include "lib_memory.h"

/* Allocate new list. */
struct list *
diff --git a/lib/log.c b/lib/log.c
index 41de03a8e3ed..fddcd4093b28 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -25,7 +25,7 @@
#include <zebra.h>

#include "log.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "command.h"
#ifndef SUNOS_5
#include <sys/un.h>
diff --git a/lib/memory.h b/lib/memory.h
index d4acaac089dc..602afff2e2c4 100644
--- a/lib/memory.h
+++ b/lib/memory.h
@@ -144,7 +144,5 @@ extern int qmem_walk (qmem_walk_fn *func, void *arg);

extern void memory_oom (size_t size, const char *name);

-#include "memtypes.h"
-
#endif /* _QUAGGA_MEMORY_H */

diff --git a/lib/memtypes.c b/lib/memtypes.c
deleted file mode 100644
index 38d2811745d3..000000000000
--- a/lib/memtypes.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Memory type definitions. This file is parsed by memtypes.awk to extract
- * MTYPE_ and memory_list_.. information in order to autogenerate
- * memtypes.h.
- *
- * The script is sensitive to the format (though not whitespace), see
- * the top of memtypes.awk for more details.
- */
-
-#include "zebra.h"
-#include "memory.h"
-
-DEFINE_MGROUP(LIB, "libzebra")
-DEFINE_MTYPE(LIB, TMP, "Temporary memory")
-DEFINE_MTYPE(LIB, STRVEC, "String vector")
-DEFINE_MTYPE(LIB, VECTOR, "Vector")
-DEFINE_MTYPE(LIB, VECTOR_INDEX, "Vector index")
-DEFINE_MTYPE(LIB, LINK_LIST, "Link List")
-DEFINE_MTYPE(LIB, LINK_NODE, "Link Node")
-DEFINE_MTYPE(LIB, THREAD, "Thread")
-DEFINE_MTYPE(LIB, THREAD_MASTER, "Thread master")
-DEFINE_MTYPE(LIB, THREAD_STATS, "Thread stats")
-DEFINE_MTYPE(LIB, VTY, "VTY")
-DEFINE_MTYPE(LIB, VTY_OUT_BUF, "VTY output buffer")
-DEFINE_MTYPE(LIB, VTY_HIST, "VTY history")
-DEFINE_MTYPE(LIB, IF, "Interface")
-DEFINE_MTYPE(LIB, CONNECTED, "Connected")
-DEFINE_MTYPE(LIB, CONNECTED_LABEL, "Connected interface label")
-DEFINE_MTYPE(LIB, BUFFER, "Buffer")
-DEFINE_MTYPE(LIB, BUFFER_DATA, "Buffer data")
-DEFINE_MTYPE(LIB, STREAM, "Stream")
-DEFINE_MTYPE(LIB, STREAM_DATA, "Stream data")
-DEFINE_MTYPE(LIB, STREAM_FIFO, "Stream FIFO")
-DEFINE_MTYPE(LIB, PREFIX, "Prefix")
-DEFINE_MTYPE(LIB, PREFIX_IPV4, "Prefix IPv4")
-DEFINE_MTYPE(LIB, PREFIX_IPV6, "Prefix IPv6")
-DEFINE_MTYPE(LIB, HASH, "Hash")
-DEFINE_MTYPE(LIB, HASH_BACKET, "Hash Bucket")
-DEFINE_MTYPE(LIB, HASH_INDEX, "Hash Index")
-DEFINE_MTYPE(LIB, ROUTE_TABLE, "Route table")
-DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node")
-DEFINE_MTYPE(LIB, DISTRIBUTE, "Distribute list")
-DEFINE_MTYPE(LIB, DISTRIBUTE_IFNAME, "Dist-list ifname")
-DEFINE_MTYPE(LIB, ACCESS_LIST, "Access List")
-DEFINE_MTYPE(LIB, ACCESS_LIST_STR, "Access List Str")
-DEFINE_MTYPE(LIB, ACCESS_FILTER, "Access Filter")
-DEFINE_MTYPE(LIB, PREFIX_LIST, "Prefix List")
-DEFINE_MTYPE(LIB, PREFIX_LIST_ENTRY, "Prefix List Entry")
-DEFINE_MTYPE(LIB, PREFIX_LIST_STR, "Prefix List Str")
-DEFINE_MTYPE(LIB, ROUTE_MAP, "Route map")
-DEFINE_MTYPE(LIB, ROUTE_MAP_NAME, "Route map name")
-DEFINE_MTYPE(LIB, ROUTE_MAP_INDEX, "Route map index")
-DEFINE_MTYPE(LIB, ROUTE_MAP_RULE, "Route map rule")
-DEFINE_MTYPE(LIB, ROUTE_MAP_RULE_STR, "Route map rule str")
-DEFINE_MTYPE(LIB, ROUTE_MAP_COMPILED, "Route map compiled")
-DEFINE_MTYPE(LIB, CMD_TOKENS, "Command desc")
-DEFINE_MTYPE(LIB, KEY, "Key")
-DEFINE_MTYPE(LIB, KEYCHAIN, "Key chain")
-DEFINE_MTYPE(LIB, IF_RMAP, "Interface route map")
-DEFINE_MTYPE(LIB, IF_RMAP_NAME, "I.f. route map name")
-DEFINE_MTYPE(LIB, SOCKUNION, "Socket union")
-DEFINE_MTYPE(LIB, PRIVS, "Privilege information")
-DEFINE_MTYPE(LIB, ZLOG, "Logging")
-DEFINE_MTYPE(LIB, ZCLIENT, "Zclient")
-DEFINE_MTYPE(LIB, WORK_QUEUE, "Work queue")
-DEFINE_MTYPE(LIB, WORK_QUEUE_ITEM, "Work queue item")
-DEFINE_MTYPE(LIB, WORK_QUEUE_NAME, "Work queue name string")
-DEFINE_MTYPE(LIB, PQUEUE, "Priority queue")
-DEFINE_MTYPE(LIB, PQUEUE_DATA, "Priority queue data")
-DEFINE_MTYPE(LIB, HOST, "host configuration")
-DEFINE_MTYPE(LIB, VRF, "VRF")
-DEFINE_MTYPE(LIB, VRF_NAME, "VRF name")
-DEFINE_MTYPE(LIB, VRF_BITMAP, "VRF bit-map")
-
-
-
-DEFINE_MGROUP(BABELD, "babeld")
-DEFINE_MTYPE(BABELD, BABEL, "Babel structure")
-DEFINE_MTYPE(BABELD, BABEL_IF, "Babel interface")
-
diff --git a/lib/plist.c b/lib/plist.c
index 699c9b131d6c..07fc58201e41 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -23,7 +23,7 @@

#include "prefix.h"
#include "command.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "plist.h"
#include "sockunion.h"
#include "buffer.h"
diff --git a/lib/pqueue.c b/lib/pqueue.c
index 69ab8e65d6c2..2cace45da88b 100644
--- a/lib/pqueue.c
+++ b/lib/pqueue.c
@@ -20,7 +20,7 @@ Boston, MA 02111-1307, USA. */

#include <zebra.h>

-#include "memory.h"
+#include "lib_memory.h"
#include "pqueue.h"

/* priority queue using heap sort */
diff --git a/lib/prefix.c b/lib/prefix.c
index aeb627bd0e68..3d8b42c64a50 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -25,7 +25,7 @@
#include "prefix.h"
#include "vty.h"
#include "sockunion.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "log.h"

/* Maskbit. */
diff --git a/lib/privs.c b/lib/privs.c
index e6d76b600b0d..dbfab0c4b70f 100644
--- a/lib/privs.c
+++ b/lib/privs.c
@@ -24,7 +24,7 @@
#include <zebra.h>
#include "log.h"
#include "privs.h"
-#include "memory.h"
+#include "lib_memory.h"

#ifdef HAVE_CAPABILITIES
/* sort out some generic internal types for:
diff --git a/lib/routemap.c b/lib/routemap.c
index 7302e2311843..c2f5812da752 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -21,7 +21,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include <zebra.h>

#include "linklist.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "vector.h"
#include "prefix.h"
#include "routemap.h"
diff --git a/lib/sockunion.c b/lib/sockunion.c
index 4a22c6386c79..845790458fbf 100644
--- a/lib/sockunion.c
+++ b/lib/sockunion.c
@@ -24,7 +24,7 @@
#include "prefix.h"
#include "vty.h"
#include "sockunion.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "str.h"
#include "log.h"
#include "jhash.h"
diff --git a/lib/stream.c b/lib/stream.c
index ca1a40f16898..62b1834afc21 100644
--- a/lib/stream.c
+++ b/lib/stream.c
@@ -24,7 +24,7 @@
#include <stddef.h>

#include "stream.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "network.h"
#include "prefix.h"
#include "log.h"
diff --git a/lib/table.c b/lib/table.c
index da213616849b..af18e919abdd 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -24,7 +24,7 @@

#include "prefix.h"
#include "table.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "sockunion.h"

static void route_node_delete (struct route_node *);
diff --git a/lib/thread.c b/lib/thread.c
index 5e40261e6a7e..7c3284ea9f2a 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -24,7 +24,7 @@
#include <zebra.h>

#include "thread.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "log.h"
#include "hash.h"
#include "pqueue.h"
diff --git a/lib/vector.c b/lib/vector.c
index 7c1486285f38..16b389305adf 100644
--- a/lib/vector.c
+++ b/lib/vector.c
@@ -22,7 +22,7 @@
#include <zebra.h>

#include "vector.h"
-#include "memory.h"
+#include "lib_memory.h"

/* Initialize vector : allocate memory and return vector. */
vector
diff --git a/lib/vrf.c b/lib/vrf.c
index 29be02a05387..51c71359f61b 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -34,7 +34,7 @@
#include "prefix.h"
#include "table.h"
#include "log.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "command.h"
#include "vty.h"

diff --git a/lib/vty.c b/lib/vty.c
index e4510f850513..ccd3740df0f9 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -28,7 +28,7 @@
#include <lib/version.h>
#include "command.h"
#include "sockunion.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "str.h"
#include "log.h"
#include "prefix.h"
diff --git a/lib/workqueue.c b/lib/workqueue.c
index b1a5d5bfe53e..ddf0f852eb63 100644
--- a/lib/workqueue.c
+++ b/lib/workqueue.c
@@ -23,7 +23,7 @@

#include <zebra.h>
#include "thread.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "workqueue.h"
#include "linklist.h"
#include "command.h"
diff --git a/lib/zclient.c b/lib/zclient.c
index 9d50ebc043f5..cf9778e7efe4 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -30,7 +30,7 @@
#include "log.h"
#include "thread.h"
#include "zclient.h"
-#include "memory.h"
+#include "lib_memory.h"
#include "table.h"

/* Zebra client events. */
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index adc1c5c581a2..23dcf7b88512 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -239,6 +239,8 @@ main (int argc, char *argv[], char *envp[])
/* Preserve name of myself. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ ospf6_memory_init();
+
/* Command line argument treatment. */
while (1)
{
diff --git a/ospf6d/ospf6_memory.c b/ospf6d/ospf6_memory.c
index 7f2fbbf0b75b..3d8aec455d61 100644
--- a/ospf6d/ospf6_memory.c
+++ b/ospf6d/ospf6_memory.c
@@ -42,3 +42,26 @@ DEFINE_MTYPE(OSPF6D, OSPF6_SPFTREE, "OSPF6 SPF tree")
DEFINE_MTYPE(OSPF6D, OSPF6_NEXTHOP, "OSPF6 nexthop")
DEFINE_MTYPE(OSPF6D, OSPF6_EXTERNAL_INFO,"OSPF6 ext. info")
DEFINE_MTYPE(OSPF6D, OSPF6_OTHER, "OSPF6 other")
+
+void ospf6_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(OSPF6D);
+ INIT_MTYPE(OSPF6_TOP);
+ INIT_MTYPE(OSPF6_AREA);
+ INIT_MTYPE(OSPF6_IF);
+ INIT_MTYPE(OSPF6_NEIGHBOR);
+ INIT_MTYPE(OSPF6_ROUTE);
+ INIT_MTYPE(OSPF6_PREFIX);
+ INIT_MTYPE(OSPF6_MESSAGE);
+ INIT_MTYPE(OSPF6_LSA);
+ INIT_MTYPE(OSPF6_LSA_SUMMARY);
+ INIT_MTYPE(OSPF6_LSDB);
+ INIT_MTYPE(OSPF6_VERTEX);
+ INIT_MTYPE(OSPF6_SPFTREE);
+ INIT_MTYPE(OSPF6_NEXTHOP);
+ INIT_MTYPE(OSPF6_EXTERNAL_INFO);
+ INIT_MTYPE(OSPF6_OTHER);
+
+}
diff --git a/ospf6d/ospf6_memory.h b/ospf6d/ospf6_memory.h
index 3ff5de4c31b3..01aa5e74ba37 100644
--- a/ospf6d/ospf6_memory.h
+++ b/ospf6d/ospf6_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_OSPF6_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(OSPF6D)
DECLARE_MTYPE(OSPF6_TOP)
@@ -42,4 +43,6 @@ DECLARE_MTYPE(OSPF6_NEXTHOP)
DECLARE_MTYPE(OSPF6_EXTERNAL_INFO)
DECLARE_MTYPE(OSPF6_OTHER)

+extern void ospf6_memory_init(void);
+
#endif /* _QUAGGA_OSPF6_MEMORY_H */
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index d4f2b377f854..1186f0c99f75 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -201,6 +201,8 @@ main (int argc, char **argv)
/* get program name */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ ospf_memory_init();
+
while (1)
{
int opt;
diff --git a/ospfd/ospf_memory.c b/ospfd/ospf_memory.c
index ab7e41e56d5e..69340d91cbf6 100644
--- a/ospfd/ospf_memory.c
+++ b/ospfd/ospf_memory.c
@@ -52,3 +52,37 @@ DEFINE_MTYPE(OSPFD, OSPF_DISTANCE, "OSPF distance")
DEFINE_MTYPE(OSPFD, OSPF_IF_INFO, "OSPF if info")
DEFINE_MTYPE(OSPFD, OSPF_IF_PARAMS, "OSPF if params")
DEFINE_MTYPE(OSPFD, OSPF_MESSAGE, "OSPF message")
+
+
+void ospf_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(OSPFD);
+ INIT_MTYPE(OSPF_TOP);
+ INIT_MTYPE(OSPF_AREA);
+ INIT_MTYPE(OSPF_AREA_RANGE);
+ INIT_MTYPE(OSPF_NETWORK);
+ INIT_MTYPE(OSPF_NEIGHBOR_STATIC);
+ INIT_MTYPE(OSPF_IF);
+ INIT_MTYPE(OSPF_NEIGHBOR);
+ INIT_MTYPE(OSPF_ROUTE);
+ INIT_MTYPE(OSPF_TMP);
+ INIT_MTYPE(OSPF_LSA);
+ INIT_MTYPE(OSPF_LSA_DATA);
+ INIT_MTYPE(OSPF_LSDB);
+ INIT_MTYPE(OSPF_PACKET);
+ INIT_MTYPE(OSPF_FIFO);
+ INIT_MTYPE(OSPF_VERTEX);
+ INIT_MTYPE(OSPF_VERTEX_PARENT);
+ INIT_MTYPE(OSPF_NEXTHOP);
+ INIT_MTYPE(OSPF_PATH);
+ INIT_MTYPE(OSPF_VL_DATA);
+ INIT_MTYPE(OSPF_CRYPT_KEY);
+ INIT_MTYPE(OSPF_EXTERNAL_INFO);
+ INIT_MTYPE(OSPF_DISTANCE);
+ INIT_MTYPE(OSPF_IF_INFO);
+ INIT_MTYPE(OSPF_IF_PARAMS);
+ INIT_MTYPE(OSPF_MESSAGE);
+
+}
diff --git a/ospfd/ospf_memory.h b/ospfd/ospf_memory.h
index 1b775efe9c08..d398b4ceee48 100644
--- a/ospfd/ospf_memory.h
+++ b/ospfd/ospf_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_OSPF_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(OSPFD)
DECLARE_MTYPE(OSPF_TOP)
@@ -52,4 +53,5 @@ DECLARE_MTYPE(OSPF_IF_INFO)
DECLARE_MTYPE(OSPF_IF_PARAMS)
DECLARE_MTYPE(OSPF_MESSAGE)

+extern void ospf_memory_init(void);
#endif /* _QUAGGA_OSPF_MEMORY_H */
diff --git a/pimd/pim_main.c b/pimd/pim_main.c
index 68fbe9f76e21..cda163d23a0e 100644
--- a/pimd/pim_main.c
+++ b/pimd/pim_main.c
@@ -134,6 +134,8 @@ int main(int argc, char** argv, char** envp) {

progname = ((p = strrchr(argv[0], '/')) ? ++p : argv[0]);

+ pim_memory_init();
+
zlog_default = openzlog(progname, ZLOG_PIM,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);

diff --git a/pimd/pim_memory.c b/pimd/pim_memory.c
index e955033fadd1..e84f5df19c97 100644
--- a/pimd/pim_memory.c
+++ b/pimd/pim_memory.c
@@ -38,3 +38,21 @@ DEFINE_MTYPE(PIMD, PIM_IFCHANNEL, "PIM interface (S,G) state")
DEFINE_MTYPE(PIMD, PIM_UPSTREAM, "PIM upstream (S,G) state")
DEFINE_MTYPE(PIMD, PIM_SSMPINGD, "PIM sspimgd socket")
DEFINE_MTYPE(PIMD, PIM_STATIC_ROUTE, "PIM Static Route")
+
+void pim_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(PIMD);
+ INIT_MTYPE(PIM_CHANNEL_OIL);
+ INIT_MTYPE(PIM_INTERFACE);
+ INIT_MTYPE(PIM_IGMP_JOIN);
+ INIT_MTYPE(PIM_IGMP_SOCKET);
+ INIT_MTYPE(PIM_IGMP_GROUP);
+ INIT_MTYPE(PIM_IGMP_GROUP_SOURCE);
+ INIT_MTYPE(PIM_NEIGHBOR);
+ INIT_MTYPE(PIM_IFCHANNEL);
+ INIT_MTYPE(PIM_UPSTREAM);
+ INIT_MTYPE(PIM_SSMPINGD);
+ INIT_MTYPE(PIM_STATIC_ROUTE);
+}
diff --git a/pimd/pim_memory.h b/pimd/pim_memory.h
index eb09375dc6d6..53591b0900ae 100644
--- a/pimd/pim_memory.h
+++ b/pimd/pim_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_PIM_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(PIMD)
DECLARE_MTYPE(PIM_CHANNEL_OIL)
@@ -38,4 +39,6 @@ DECLARE_MTYPE(PIM_UPSTREAM)
DECLARE_MTYPE(PIM_SSMPINGD)
DECLARE_MTYPE(PIM_STATIC_ROUTE)

+extern void pim_memory_init(void);
+
#endif /* _QUAGGA_PIM_MEMORY_H */
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index 42363c5214d0..2808abfdf331 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -202,6 +202,8 @@ main (int argc, char **argv)
/* Get program name. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ rip_memory_init();
+
/* First of all we need logging init. */
zlog_default = openzlog (progname, ZLOG_RIP,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
diff --git a/ripd/rip_memory.c b/ripd/rip_memory.c
index d2a958064ff4..259a85ae4f27 100644
--- a/ripd/rip_memory.c
+++ b/ripd/rip_memory.c
@@ -33,3 +33,16 @@ DEFINE_MTYPE(RIPD, RIP_INTERFACE, "RIP interface")
DEFINE_MTYPE(RIPD, RIP_PEER, "RIP peer")
DEFINE_MTYPE(RIPD, RIP_OFFSET_LIST, "RIP offset list")
DEFINE_MTYPE(RIPD, RIP_DISTANCE, "RIP distance")
+
+void rip_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(RIPD);
+ INIT_MTYPE(RIP);
+ INIT_MTYPE(RIP_INFO);
+ INIT_MTYPE(RIP_INTERFACE);
+ INIT_MTYPE(RIP_PEER);
+ INIT_MTYPE(RIP_OFFSET_LIST);
+ INIT_MTYPE(RIP_DISTANCE);
+}
diff --git a/ripd/rip_memory.h b/ripd/rip_memory.h
index 7aec2193059c..9544602bbadb 100644
--- a/ripd/rip_memory.h
+++ b/ripd/rip_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_RIP_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(RIPD)
DECLARE_MTYPE(RIP)
@@ -33,4 +34,6 @@ DECLARE_MTYPE(RIP_PEER)
DECLARE_MTYPE(RIP_OFFSET_LIST)
DECLARE_MTYPE(RIP_DISTANCE)

+extern void rip_memory_init(void);
+
#endif /* _QUAGGA_RIP_MEMORY_H */
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index ee7beec93ca9..7a74ea6bd9e3 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -202,6 +202,8 @@ main (int argc, char **argv)
/* get program name */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ ripng_memory_init();
+
zlog_default = openzlog(progname, ZLOG_RIPNG,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);

diff --git a/ripngd/ripng_memory.c b/ripngd/ripng_memory.c
index 1d2320ee2606..e1e60c748a01 100644
--- a/ripngd/ripng_memory.c
+++ b/ripngd/ripng_memory.c
@@ -33,3 +33,16 @@ DEFINE_MTYPE(RIPNGD, RIPNG_AGGREGATE, "RIPng aggregate")
DEFINE_MTYPE(RIPNGD, RIPNG_PEER, "RIPng peer")
DEFINE_MTYPE(RIPNGD, RIPNG_OFFSET_LIST, "RIPng offset lst")
DEFINE_MTYPE(RIPNGD, RIPNG_RTE_DATA, "RIPng rte data")
+
+void ripng_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(RIPNGD);
+ INIT_MTYPE(RIPNG);
+ INIT_MTYPE(RIPNG_ROUTE);
+ INIT_MTYPE(RIPNG_AGGREGATE);
+ INIT_MTYPE(RIPNG_PEER);
+ INIT_MTYPE(RIPNG_OFFSET_LIST);
+ INIT_MTYPE(RIPNG_RTE_DATA);
+}
diff --git a/ripngd/ripng_memory.h b/ripngd/ripng_memory.h
index 76b830afb4f9..448125753f8a 100644
--- a/ripngd/ripng_memory.h
+++ b/ripngd/ripng_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_RIPNG_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(RIPNGD)
DECLARE_MTYPE(RIPNG)
@@ -33,4 +34,6 @@ DECLARE_MTYPE(RIPNG_PEER)
DECLARE_MTYPE(RIPNG_OFFSET_LIST)
DECLARE_MTYPE(RIPNG_RTE_DATA)

+extern void ripng_memory_init(void);
+
#endif /* _QUAGGA_RIPNG_MEMORY_H */
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 63b596a580b7..bf4947a6adb0 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -32,6 +32,7 @@

#include "command.h"
#include "memory.h"
+#include "lib_memory.h"
#include "vtysh/vtysh.h"
#include "log.h"
#include "bgpd/bgp_vty.h"
diff --git a/vtysh/vtysh_main.c b/vtysh/vtysh_main.c
index 2f76e89f9208..339cc1432125 100644
--- a/vtysh/vtysh_main.c
+++ b/vtysh/vtysh_main.c
@@ -33,6 +33,7 @@
#include "getopt.h"
#include "command.h"
#include "memory.h"
+#include "lib_memory.h"
#include "memory_vty.h"

#include "vtysh/vtysh.h"
diff --git a/vtysh/vtysh_user.c b/vtysh/vtysh_user.c
index 248b181205dd..bfb7234cf22e 100644
--- a/vtysh/vtysh_user.c
+++ b/vtysh/vtysh_user.c
@@ -35,6 +35,7 @@
#endif /* USE_PAM */

#include "memory.h"
+#include "lib_memory.h"
#include "linklist.h"
#include "command.h"
#include "vtysh_user.h"
diff --git a/zebra/main.c b/zebra/main.c
index ee80283c4e1d..9c0488169aa3 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -304,6 +304,8 @@ main (int argc, char **argv)
/* preserve my name */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);

+ zebra_memory_init();
+
zlog_default = openzlog (progname, ZLOG_ZEBRA,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);

diff --git a/zebra/zebra_memory.c b/zebra/zebra_memory.c
index 557a5cfab95b..c712686bcb82 100644
--- a/zebra/zebra_memory.c
+++ b/zebra/zebra_memory.c
@@ -36,3 +36,19 @@ DEFINE_MTYPE(ZEBRA, STATIC_ROUTE, "Static route")
DEFINE_MTYPE(ZEBRA, RIB_DEST, "RIB destination")
DEFINE_MTYPE(ZEBRA, RIB_TABLE_INFO, "RIB table info")
DEFINE_MTYPE(ZEBRA, NETLINK_NAME, "Netlink name")
+
+void zebra_memory_init(void)
+{
+ lib_memory_init();
+
+ INIT_MGROUP(ZEBRA);
+ INIT_MTYPE(RTADV_PREFIX);
+ INIT_MTYPE(ZEBRA_VRF);
+ INIT_MTYPE(NEXTHOP);
+ INIT_MTYPE(RIB);
+ INIT_MTYPE(RIB_QUEUE);
+ INIT_MTYPE(STATIC_ROUTE);
+ INIT_MTYPE(RIB_DEST);
+ INIT_MTYPE(RIB_TABLE_INFO);
+ INIT_MTYPE(NETLINK_NAME);
+}
diff --git a/zebra/zebra_memory.h b/zebra/zebra_memory.h
index a86311ad087b..ff1e5de91ac9 100644
--- a/zebra/zebra_memory.h
+++ b/zebra/zebra_memory.h
@@ -24,6 +24,7 @@
#define _QUAGGA_ZEBRA_MEMORY_H

#include "memory.h"
+#include "lib_memory.h"

DECLARE_MGROUP(ZEBRA)
DECLARE_MTYPE(RTADV_PREFIX)
@@ -36,4 +37,6 @@ DECLARE_MTYPE(RIB_DEST)
DECLARE_MTYPE(RIB_TABLE_INFO)
DECLARE_MTYPE(NETLINK_NAME)

+extern void zebra_memory_init(void);
+
#endif /* _QUAGGA_ZEBRA_MEMORY_H */
--
2.1.4


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev