memory.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:6k
源码类别:

网络

开发平台:

Unix_Linux

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