added files
[bcm963xx.git] / userapps / opensource / zebra / lib / memory.h
1 /* Memory management routine
2    Copyright (C) 1998 Kunihiro Ishiguro
3
4 This file is part of GNU Zebra.
5
6 GNU Zebra is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
9 later version.
10
11 GNU Zebra is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU Zebra; see the file COPYING.  If not, write to the Free
18 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.  */
20
21 #ifndef _ZEBRA_MEMORY_H
22 #define _ZEBRA_MEMORY_H
23
24 /* #define MEMORY_LOG */
25
26 /* For tagging memory, below is the type of the memory. */
27 enum
28 {
29   MTYPE_TMP = 1,
30   MTYPE_STRVEC,
31   MTYPE_VECTOR,
32   MTYPE_VECTOR_INDEX,
33   MTYPE_LINK_LIST,
34   MTYPE_LINK_NODE,
35   MTYPE_THREAD,
36   MTYPE_THREAD_MASTER,
37   MTYPE_VTY,
38   MTYPE_VTY_HIST,
39   MTYPE_VTY_OUT_BUF,
40   MTYPE_IF,
41   MTYPE_CONNECTED,
42   MTYPE_AS_SEG,
43   MTYPE_AS_STR,
44   MTYPE_AS_PATH,
45   MTYPE_CLUSTER,
46   MTYPE_CLUSTER_VAL,
47   MTYPE_ATTR,
48   MTYPE_TRANSIT,
49   MTYPE_TRANSIT_VAL,
50   MTYPE_BUFFER,
51   MTYPE_BUFFER_DATA,
52   MTYPE_STREAM,
53   MTYPE_STREAM_DATA,
54   MTYPE_STREAM_FIFO,
55   MTYPE_PREFIX,
56   MTYPE_PREFIX_IPV4,
57   MTYPE_PREFIX_IPV6,
58   MTYPE_HASH,
59   MTYPE_HASH_INDEX,
60   MTYPE_HASH_BACKET,
61   MTYPE_RIPNG_ROUTE,
62   MTYPE_RIPNG_AGGREGATE,
63   MTYPE_ROUTE_TABLE,
64   MTYPE_ROUTE_NODE,
65   MTYPE_ACCESS_LIST,
66   MTYPE_ACCESS_LIST_STR,
67   MTYPE_ACCESS_FILTER,
68   MTYPE_PREFIX_LIST,
69   MTYPE_PREFIX_LIST_STR,
70   MTYPE_PREFIX_LIST_ENTRY,
71   MTYPE_ROUTE_MAP,
72   MTYPE_ROUTE_MAP_NAME,
73   MTYPE_ROUTE_MAP_INDEX,
74   MTYPE_ROUTE_MAP_RULE,
75   MTYPE_ROUTE_MAP_RULE_STR,
76   MTYPE_ROUTE_MAP_COMPILED,
77
78   MTYPE_RIB,
79   MTYPE_DISTRIBUTE,
80   MTYPE_ZLOG,
81   MTYPE_ZCLIENT,
82   MTYPE_NEXTHOP,
83   MTYPE_RTADV_PREFIX,
84   MTYPE_IF_RMAP,
85   MTYPE_SOCKUNION,
86   MTYPE_STATIC_IPV4,
87   MTYPE_STATIC_IPV6,
88
89   MTYPE_DESC,
90   MTYPE_OSPF_TOP,
91   MTYPE_OSPF_AREA,
92   MTYPE_OSPF_AREA_RANGE,
93   MTYPE_OSPF_NETWORK,
94   MTYPE_OSPF_NEIGHBOR_STATIC,
95   MTYPE_OSPF_IF,
96   MTYPE_OSPF_NEIGHBOR,
97   MTYPE_OSPF_ROUTE,
98   MTYPE_OSPF_TMP,
99   MTYPE_OSPF_LSA,
100   MTYPE_OSPF_LSA_DATA,
101   MTYPE_OSPF_LSDB,
102   MTYPE_OSPF_PACKET,
103   MTYPE_OSPF_FIFO,
104   MTYPE_OSPF_VERTEX,
105   MTYPE_OSPF_NEXTHOP,
106   MTYPE_OSPF_PATH,
107   MTYPE_OSPF_VL_DATA,
108   MTYPE_OSPF_CRYPT_KEY,
109   MTYPE_OSPF_EXTERNAL_INFO,
110   MTYPE_OSPF_MESSAGE,
111   MTYPE_OSPF_DISTANCE,
112   MTYPE_OSPF_IF_INFO,
113   MTYPE_OSPF_IF_PARAMS,
114
115   MTYPE_OSPF6_TOP,
116   MTYPE_OSPF6_AREA,
117   MTYPE_OSPF6_IF,
118   MTYPE_OSPF6_NEIGHBOR,
119   MTYPE_OSPF6_ROUTE,
120   MTYPE_OSPF6_PREFIX,
121   MTYPE_OSPF6_MESSAGE,
122   MTYPE_OSPF6_LSA,
123   MTYPE_OSPF6_LSA_SUMMARY,
124   MTYPE_OSPF6_LSDB,
125   MTYPE_OSPF6_VERTEX,
126   MTYPE_OSPF6_SPFTREE,
127   MTYPE_OSPF6_NEXTHOP,
128   MTYPE_OSPF6_EXTERNAL_INFO,
129   MTYPE_OSPF6_OTHER,
130
131   MTYPE_BGP,
132   MTYPE_BGP_PEER,
133   MTYPE_PEER_GROUP,
134   MTYPE_PEER_DESC,
135   MTYPE_PEER_UPDATE_SOURCE,
136   MTYPE_BGP_STATIC,
137   MTYPE_BGP_AGGREGATE,
138   MTYPE_BGP_CONFED_LIST,
139   MTYPE_BGP_NEXTHOP_CACHE,
140   MTYPE_BGP_DAMP_INFO,
141   MTYPE_BGP_DAMP_ARRAY,
142   MTYPE_BGP_ANNOUNCE,
143   MTYPE_BGP_ATTR_QUEUE,
144   MTYPE_BGP_ROUTE_QUEUE,
145   MTYPE_BGP_DISTANCE,
146   MTYPE_BGP_ROUTE,
147   MTYPE_BGP_TABLE,
148   MTYPE_BGP_NODE,
149   MTYPE_BGP_ADVERTISE_ATTR,
150   MTYPE_BGP_ADVERTISE,
151   MTYPE_BGP_ADJ_IN,
152   MTYPE_BGP_ADJ_OUT,
153   MTYPE_BGP_REGEXP,
154   MTYPE_AS_FILTER,
155   MTYPE_AS_FILTER_STR,
156   MTYPE_AS_LIST,
157
158   MTYPE_COMMUNITY,
159   MTYPE_COMMUNITY_VAL,
160   MTYPE_COMMUNITY_STR,
161
162   MTYPE_ECOMMUNITY,
163   MTYPE_ECOMMUNITY_VAL,
164   MTYPE_ECOMMUNITY_STR,
165
166   /* community-list and extcommunity-list.  */
167   MTYPE_COMMUNITY_LIST_HANDLER,
168   MTYPE_COMMUNITY_LIST,
169   MTYPE_COMMUNITY_LIST_NAME,
170   MTYPE_COMMUNITY_LIST_ENTRY,
171   MTYPE_COMMUNITY_LIST_CONFIG,
172
173   MTYPE_RIP,
174   MTYPE_RIP_INTERFACE,
175   MTYPE_RIP_DISTANCE,
176   MTYPE_RIP_OFFSET_LIST,
177   MTYPE_RIP_INFO,
178   MTYPE_RIP_PEER,
179   MTYPE_KEYCHAIN,
180   MTYPE_KEY,
181
182   MTYPE_VTYSH_CONFIG,
183   MTYPE_VTYSH_CONFIG_LINE,
184
185   MTYPE_MAX
186 };
187
188 #ifdef MEMORY_LOG
189 #define XMALLOC(mtype, size) \
190   mtype_zmalloc (__FILE__, __LINE__, (mtype), (size))
191 #define XCALLOC(mtype, size) \
192   mtype_zcalloc (__FILE__, __LINE__, (mtype), (size))
193 #define XREALLOC(mtype, ptr, size)  \
194   mtype_zrealloc (__FILE__, __LINE__, (mtype), (ptr), (size))
195 #define XFREE(mtype, ptr) \
196   mtype_zfree (__FILE__, __LINE__, (mtype), (ptr))
197 #define XSTRDUP(mtype, str) \
198   mtype_zstrdup (__FILE__, __LINE__, (mtype), (str))
199 #else
200 #define XMALLOC(mtype, size)       zmalloc ((mtype), (size))
201 #define XCALLOC(mtype, size)       zcalloc ((mtype), (size))
202 #define XREALLOC(mtype, ptr, size) zrealloc ((mtype), (ptr), (size))
203 #define XFREE(mtype, ptr)          zfree ((mtype), (ptr))
204 #define XSTRDUP(mtype, str)        zstrdup ((mtype), (str))
205 #endif /* MEMORY_LOG */
206
207 /* Prototypes of memory function. */
208 void *zmalloc (int type, size_t size);
209 void *zcalloc (int type, size_t size);
210 void *zrealloc (int type, void *ptr, size_t size);
211 void  zfree (int type, void *ptr);
212 char *zstrdup (int type, char *str);
213
214 void *mtype_zmalloc (const char *file,
215                      int line,
216                      int type,
217                      size_t size);
218
219 void *mtype_zcalloc (const char *file,
220                      int line,
221                      int type,
222                      size_t num,
223                      size_t size);
224
225 void *mtype_zrealloc (const char *file,
226                      int line,
227                      int type, 
228                      void *ptr,
229                      size_t size);
230
231 void mtype_zfree (const char *file,
232                   int line,
233                   int type,
234                   void *ptr);
235
236 char *mtype_zstrdup (const char *file,
237                      int line,
238                      int type,
239                      char *str);
240 void memory_init ();
241
242 #endif /* _ZEBRA_MEMORY_H */