Fixup code to use correct XMALLOC operators

Ticket: CM-7177
Reviewed-by: CCR-3396
Testing: See bug

This code change does several small things:
(A) Fix a couple detected memory leaks
(B) Fix all malloc operations to use the correct XMALLOC operation in bgpd and parts of lib
(C) Adds a few new memory types to make it easier to detect issues
This commit is contained in:
Donald Sharp 2015-08-26 07:44:57 -07:00
parent 6baf7bb88b
commit 6e9197093c
14 changed files with 227 additions and 190 deletions

View File

@ -211,7 +211,7 @@ bgp_debug_list_free(struct list *list)
prefix_free(filter->p);
if (filter->host)
XFREE (MTYPE_BGP_PEER_HOST, filter->host);
XFREE (MTYPE_BGP_DEBUG_STR, filter->host);
XFREE (MTYPE_BGP_DEBUG_FILTER, filter);
}
@ -296,7 +296,7 @@ bgp_debug_list_add_entry(struct list *list, const char *host, struct prefix *p)
if (host)
{
filter->host = XSTRDUP (MTYPE_BGP_PEER_HOST, host);
filter->host = XSTRDUP (MTYPE_BGP_DEBUG_STR, host);
filter->p = NULL;
}
else if (p)
@ -319,7 +319,7 @@ bgp_debug_list_remove_entry(struct list *list, const char *host, struct prefix *
if (host && strcmp (filter->host, host) == 0)
{
listnode_delete (list, filter);
XFREE (MTYPE_BGP_PEER_HOST, filter->host);
XFREE (MTYPE_BGP_DEBUG_STR, filter->host);
XFREE (MTYPE_BGP_DEBUG_FILTER, filter);
return 1;
}

View File

@ -28,6 +28,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "thread.h"
#include "linklist.h"
#include "queue.h"
#include "memory.h"
#include "bgpd/bgp_table.h"
@ -614,8 +615,8 @@ bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump,
/* Set interval. */
bgp_dump->interval = interval;
if (bgp_dump->interval_str)
free (bgp_dump->interval_str);
bgp_dump->interval_str = strdup (interval_str);
XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->interval_str);
bgp_dump->interval_str = XSTRDUP(MTYPE_BGP_DUMP_STR, interval_str);
}
else
@ -631,8 +632,8 @@ bgp_dump_set (struct vty *vty, struct bgp_dump *bgp_dump,
/* Set file name. */
if (bgp_dump->filename)
free (bgp_dump->filename);
bgp_dump->filename = strdup (path);
XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->filename);
bgp_dump->filename = XSTRDUP(MTYPE_BGP_DUMP_STR, path);
/* This should be called when interval is expired. */
bgp_dump_open_file (bgp_dump);
@ -646,7 +647,7 @@ bgp_dump_unset (struct vty *vty, struct bgp_dump *bgp_dump)
/* Set file name. */
if (bgp_dump->filename)
{
free (bgp_dump->filename);
XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->filename);
bgp_dump->filename = NULL;
}
@ -668,7 +669,7 @@ bgp_dump_unset (struct vty *vty, struct bgp_dump *bgp_dump)
if (bgp_dump->interval_str)
{
free (bgp_dump->interval_str);
XFREE(MTYPE_BGP_DUMP_STR, bgp_dump->interval_str);
bgp_dump->interval_str = NULL;
}

View File

@ -189,7 +189,7 @@ as_list_free (struct as_list *aslist)
{
if (aslist->name)
{
free (aslist->name);
XFREE(MTYPE_AS_STR, aslist->name);
aslist->name = NULL;
}
XFREE (MTYPE_AS_LIST, aslist);
@ -208,7 +208,7 @@ as_list_insert (const char *name)
/* Allocate new access_list and copy given name. */
aslist = as_list_new ();
aslist->name = strdup (name);
aslist->name = XSTRDUP(MTYPE_AS_STR, name);
assert (aslist->name);
/* If name is made by all digit character. We treat it as
@ -350,7 +350,7 @@ as_list_empty (struct as_list *aslist)
static void
as_list_filter_delete (struct as_list *aslist, struct as_filter *asfilter)
{
char *name = strdup (aslist->name);
char *name = XSTRDUP(MTYPE_AS_STR, aslist->name);
if (asfilter->next)
asfilter->next->prev = asfilter->prev;
@ -372,7 +372,7 @@ as_list_filter_delete (struct as_list *aslist, struct as_filter *asfilter)
if (as_list_master.delete_hook)
(*as_list_master.delete_hook) (name);
if (name)
free(name);
XFREE(MTYPE_AS_STR, name);
}
static int

View File

@ -243,6 +243,7 @@ str2prefix_rd (const char *str, struct prefix_rd *prd)
}
memcpy (prd->val, s->data, 8);
XFREE(MTYPE_TMP, half);
return 1;
}

View File

@ -36,6 +36,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "thread.h"
#include "workqueue.h"
#include "queue.h"
#include "memory.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
@ -3919,7 +3920,7 @@ static void
bgp_static_free (struct bgp_static *bgp_static)
{
if (bgp_static->rmap.name)
free (bgp_static->rmap.name);
XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name);
XFREE (MTYPE_BGP_STATIC, bgp_static);
}
@ -4498,14 +4499,14 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
if (rmap)
{
if (bgp_static->rmap.name)
free (bgp_static->rmap.name);
bgp_static->rmap.name = strdup (rmap);
XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name);
bgp_static->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
bgp_static->rmap.map = route_map_lookup_by_name (rmap);
}
else
{
if (bgp_static->rmap.name)
free (bgp_static->rmap.name);
XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name);
bgp_static->rmap.name = NULL;
bgp_static->rmap.map = NULL;
bgp_static->valid = 0;
@ -4524,8 +4525,8 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
if (rmap)
{
if (bgp_static->rmap.name)
free (bgp_static->rmap.name);
bgp_static->rmap.name = strdup (rmap);
XFREE(MTYPE_ROUTE_MAP_NAME, bgp_static->rmap.name);
bgp_static->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
bgp_static->rmap.map = route_map_lookup_by_name (rmap);
}
rn->info = bgp_static;
@ -4800,14 +4801,14 @@ bgp_table_map_set (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
if (rmap_name)
{
if (rmap->name)
free (rmap->name);
rmap->name = strdup (rmap_name);
XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name);
rmap->name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_name);
rmap->map = route_map_lookup_by_name (rmap_name);
}
else
{
if (rmap->name)
free (rmap->name);
XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name);
rmap->name = NULL;
rmap->map = NULL;
}
@ -4825,7 +4826,7 @@ bgp_table_map_unset (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
rmap = &bgp->table_map[afi][safi];
if (rmap->name)
free (rmap->name);
XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name);
rmap->name = NULL;
rmap->map = NULL;
@ -14587,11 +14588,11 @@ bgp_distance_set (struct vty *vty, const char *distance_str,
/* Reset access-list configuration. */
if (bdistance->access_list)
{
free (bdistance->access_list);
XFREE(MTYPE_AS_LIST, bdistance->access_list);
bdistance->access_list = NULL;
}
if (access_list_str)
bdistance->access_list = strdup (access_list_str);
bdistance->access_list = XSTRDUP(MTYPE_AS_LIST, access_list_str);
return CMD_SUCCESS;
}
@ -14622,7 +14623,7 @@ bgp_distance_unset (struct vty *vty, const char *distance_str,
bdistance = rn->info;
if (bdistance->access_list)
free (bdistance->access_list);
XFREE(MTYPE_AS_LIST, bdistance->access_list);
bgp_distance_free (bdistance);
rn->info = NULL;

View File

@ -144,7 +144,10 @@ conf_copy (struct peer *dst, struct peer *src, afi_t afi, safi_t safi)
dst->v_routeadv = src->v_routeadv;
dst->flags = src->flags;
dst->af_flags[afi][safi] = src->af_flags[afi][safi];
dst->host = XSTRDUP (MTYPE_BGP_PEER_HOST, src->host);
if (dst->host)
XFREE(MTYPE_BGP_PEER_HOST, dst->host);
dst->host = XSTRDUP(MTYPE_BGP_PEER_HOST, src->host);
dst->cap = src->cap;
dst->af_cap[afi][safi] = src->af_cap[afi][safi];
dst->afc_nego[afi][safi] = src->afc_nego[afi][safi];
@ -158,43 +161,43 @@ conf_copy (struct peer *dst, struct peer *src, afi_t afi, safi_t safi)
if (src->default_rmap[afi][safi].name)
{
dst->default_rmap[afi][safi].name =
strdup (src->default_rmap[afi][safi].name);
XSTRDUP(MTYPE_ROUTE_MAP_NAME, src->default_rmap[afi][safi].name);
dst->default_rmap[afi][safi].map = src->default_rmap[afi][safi].map;
}
if (DISTRIBUTE_OUT_NAME(srcfilter))
{
DISTRIBUTE_OUT_NAME(dstfilter) = strdup(DISTRIBUTE_OUT_NAME(srcfilter));
DISTRIBUTE_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, DISTRIBUTE_OUT_NAME(srcfilter));
DISTRIBUTE_OUT(dstfilter) = DISTRIBUTE_OUT(srcfilter);
}
if (PREFIX_LIST_OUT_NAME(srcfilter))
{
PREFIX_LIST_OUT_NAME(dstfilter) = strdup(PREFIX_LIST_OUT_NAME(srcfilter));
PREFIX_LIST_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, PREFIX_LIST_OUT_NAME(srcfilter));
PREFIX_LIST_OUT(dstfilter) = PREFIX_LIST_OUT(srcfilter);
}
if (FILTER_LIST_OUT_NAME(srcfilter))
{
FILTER_LIST_OUT_NAME(dstfilter) = strdup(FILTER_LIST_OUT_NAME(srcfilter));
FILTER_LIST_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, FILTER_LIST_OUT_NAME(srcfilter));
FILTER_LIST_OUT(dstfilter) = FILTER_LIST_OUT(srcfilter);
}
if (ROUTE_MAP_OUT_NAME(srcfilter))
{
ROUTE_MAP_OUT_NAME(dstfilter) = strdup(ROUTE_MAP_OUT_NAME(srcfilter));
ROUTE_MAP_OUT_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, ROUTE_MAP_OUT_NAME(srcfilter));
ROUTE_MAP_OUT(dstfilter) = ROUTE_MAP_OUT(srcfilter);
}
if (UNSUPPRESS_MAP_NAME(srcfilter))
{
UNSUPPRESS_MAP_NAME(dstfilter) = strdup(UNSUPPRESS_MAP_NAME(srcfilter));
UNSUPPRESS_MAP_NAME(dstfilter) = XSTRDUP(MTYPE_BGP_FILTER_NAME, UNSUPPRESS_MAP_NAME(srcfilter));
UNSUPPRESS_MAP(dstfilter) = UNSUPPRESS_MAP(srcfilter);
}
}
/**
* since we did a bunch of strdup's in conf_copy, time to free them up
* since we did a bunch of XSTRDUP's in conf_copy, time to free them up
*/
static void
conf_release (struct peer *src, afi_t afi, safi_t safi)
@ -204,22 +207,22 @@ conf_release (struct peer *src, afi_t afi, safi_t safi)
srcfilter = &src->filter[afi][safi];
if (src->default_rmap[afi][safi].name)
free (src->default_rmap[afi][safi].name);
XFREE(MTYPE_ROUTE_MAP_NAME, src->default_rmap[afi][safi].name);
if (srcfilter->dlist[FILTER_OUT].name)
free (srcfilter->dlist[FILTER_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->dlist[FILTER_OUT].name);
if (srcfilter->plist[FILTER_OUT].name)
free (srcfilter->plist[FILTER_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->plist[FILTER_OUT].name);
if (srcfilter->aslist[FILTER_OUT].name)
free (srcfilter->aslist[FILTER_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->aslist[FILTER_OUT].name);
if (srcfilter->map[RMAP_OUT].name)
free (srcfilter->map[RMAP_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->map[RMAP_OUT].name);
if (srcfilter->usmap.name)
free (srcfilter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, srcfilter->usmap.name);
}
static void
@ -728,7 +731,13 @@ update_group_delete (struct update_group *updgrp)
hash_release (updgrp->bgp->update_groups[updgrp->afid], updgrp);
conf_release (updgrp->conf, updgrp->afi, updgrp->safi);
XFREE (MTYPE_BGP_PEER_HOST, updgrp->conf->host);
if (updgrp->conf->host)
XFREE(MTYPE_BGP_PEER_HOST, updgrp->conf->host);
updgrp->conf->host = NULL;
if (updgrp->conf->ifname)
XFREE(MTYPE_BGP_PEER_IFNAME, updgrp->conf->ifname);
XFREE (MTYPE_BGP_PEER, updgrp->conf);
XFREE (MTYPE_BGP_UPDGRP, updgrp);
}

View File

@ -3751,22 +3751,24 @@ peer_rsclient_set_vty (struct vty *vty, const char *peer_str,
/* Import policy. */
if (pfilter->map[RMAP_IMPORT].name)
free (pfilter->map[RMAP_IMPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name);
if (gfilter->map[RMAP_IMPORT].name)
{
pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME,
gfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map;
}
else
{
pfilter->map[RMAP_IMPORT].name = NULL;
pfilter->map[RMAP_IMPORT].map =NULL;
pfilter->map[RMAP_IMPORT].map = NULL;
}
/* Export policy. */
if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name)
{
pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME,
gfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map;
}
}
@ -8325,7 +8327,7 @@ DEFUN (show_bgp_memory,
count * sizeof (struct peer)),
VTY_NEWLINE);
if ((count = mtype_stats_alloc (MTYPE_PEER_GROUP)))
if ((count = mtype_stats_alloc (MTYPE_BGP_PEER_GROUP)))
vty_out (vty, "%ld peer groups, using %s of memory%s", count,
mtype_memstr (memstrbuf, sizeof (memstrbuf),
count * sizeof (struct peer_group)),

View File

@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA. */
#include "routemap.h"
#include "thread.h"
#include "queue.h"
#include "memory.h"
#include "lib/json.h"
#include "bgpd/bgpd.h"
@ -1516,7 +1517,7 @@ bgp_redist_add (struct bgp *bgp, afi_t afi, u_char type, u_short instance)
bgp->redist[afi][type] = list_new();
red_list = bgp->redist[afi][type];
red = (struct bgp_redist *)calloc (1, sizeof(struct bgp_redist));
red = (struct bgp_redist *)XCALLOC(MTYPE_BGP_REDIST, sizeof(struct bgp_redist));
red->instance = instance;
listnode_add(red_list, red);
@ -1594,8 +1595,8 @@ bgp_redistribute_rmap_set (struct bgp_redist *red, const char *name)
return 0;
if (red->rmap.name)
free (red->rmap.name);
red->rmap.name = strdup (name);
XFREE(MTYPE_ROUTE_MAP_NAME, red->rmap.name);
red->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, name);
red->rmap.map = route_map_lookup_by_name (name);
return 1;
@ -1641,7 +1642,7 @@ bgp_redistribute_unset (struct bgp *bgp, afi_t afi, int type, u_short instance)
/* Unset route-map. */
if (red->rmap.name)
free (red->rmap.name);
XFREE(MTYPE_ROUTE_MAP_NAME, red->rmap.name);
red->rmap.name = NULL;
red->rmap.map = NULL;

View File

@ -719,17 +719,17 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi)
{
if (filter->dlist[i].name)
{
free (filter->dlist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[i].name);
filter->dlist[i].name = NULL;
}
if (filter->plist[i].name)
{
free (filter->plist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[i].name);
filter->plist[i].name = NULL;
}
if (filter->aslist[i].name)
{
free (filter->aslist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[i].name);
filter->aslist[i].name = NULL;
}
}
@ -737,14 +737,14 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi)
{
if (filter->map[i].name)
{
free (filter->map[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[i].name);
filter->map[i].name = NULL;
}
}
/* Clear unsuppress map. */
if (filter->usmap.name)
free (filter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = NULL;
filter->usmap.map = NULL;
@ -771,7 +771,7 @@ peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi)
/* Clear neighbor default_originate_rmap */
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = NULL;
peer->default_rmap[afi][safi].map = NULL;
@ -939,17 +939,22 @@ peer_free (struct peer *peer)
/* Free allocated host character. */
if (peer->host)
XFREE (MTYPE_BGP_PEER_HOST, peer->host);
peer->host = NULL;
if (peer->ifname)
XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname);
peer->ifname = NULL;
/* Update source configuration. */
if (peer->update_source)
sockunion_free (peer->update_source);
if (peer->update_if)
XFREE (MTYPE_PEER_UPDATE_SOURCE, peer->update_if);
if (peer->clear_node_queue)
work_queue_free (peer->clear_node_queue);
if (peer->notify.data)
XFREE(MTYPE_TMP, peer->notify.data);
bgp_sync_delete (peer);
if (peer->conf_if)
@ -1157,9 +1162,9 @@ peer_xfer_config (struct peer *peer_dst, struct peer *peer_src)
if (peer_src->ifname)
{
if (peer_dst->ifname)
free(peer_dst->ifname);
XFREE(MTYPE_BGP_PEER_IFNAME, peer_dst->ifname);
peer_dst->ifname = strdup(peer_src->ifname);
peer_dst->ifname = XSTRDUP(MTYPE_BGP_PEER_IFNAME, peer_src->ifname);
}
}
@ -1256,12 +1261,16 @@ peer_create (union sockunion *su, const char *conf_if, struct bgp *bgp,
{
peer->conf_if = XSTRDUP (MTYPE_PEER_CONF_IF, conf_if);
bgp_peer_conf_if_to_su_update(peer);
if (peer->host)
XFREE(MTYPE_BGP_PEER_HOST, peer->host);
peer->host = XSTRDUP (MTYPE_BGP_PEER_HOST, conf_if);
}
else if (su)
{
peer->su = *su;
sockunion2str (su, buf, SU_ADDRSTRLEN);
if (peer->host)
XFREE(MTYPE_BGP_PEER_HOST, peer->host);
peer->host = XSTRDUP (MTYPE_BGP_PEER_HOST, buf);
}
peer->local_as = local_as;
@ -1802,11 +1811,11 @@ peer_delete (struct peer *peer)
for (i = FILTER_IN; i < FILTER_MAX; i++)
{
if (filter->dlist[i].name)
free (filter->dlist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[i].name);
if (filter->plist[i].name)
free (filter->plist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[i].name);
if (filter->aslist[i].name)
free (filter->aslist[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[i].name);
filter->dlist[i].name = NULL;
filter->plist[i].name = NULL;
@ -1815,15 +1824,15 @@ peer_delete (struct peer *peer)
for (i = RMAP_IN; i < RMAP_MAX; i++)
{
if (filter->map[i].name)
free (filter->map[i].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[i].name);
filter->map[i].name = NULL;
}
if (filter->usmap.name)
free (filter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
filter->usmap.name = NULL;
peer->default_rmap[afi][safi].name = NULL;
@ -1846,14 +1855,14 @@ peer_group_cmp (struct peer_group *g1, struct peer_group *g2)
static struct peer_group *
peer_group_new (void)
{
return (struct peer_group *) XCALLOC (MTYPE_PEER_GROUP,
return (struct peer_group *) XCALLOC (MTYPE_BGP_PEER_GROUP,
sizeof (struct peer_group));
}
static void
peer_group_free (struct peer_group *group)
{
XFREE (MTYPE_PEER_GROUP, group);
XFREE (MTYPE_BGP_PEER_GROUP, group);
}
struct peer_group *
@ -1882,13 +1891,17 @@ peer_group_get (struct bgp *bgp, const char *name)
group = peer_group_new ();
group->bgp = bgp;
group->name = strdup (name);
if (group->name)
XFREE(MTYPE_BGP_PEER_GROUP_HOST, group->name);
group->name = XSTRDUP(MTYPE_BGP_PEER_GROUP_HOST, name);
group->peer = list_new ();
for (afi = AFI_IP; afi < AFI_MAX; afi++)
group->listen_range[afi] = list_new ();
group->conf = peer_new (bgp);
if (! bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4))
group->conf->afc[AFI_IP][SAFI_UNICAST] = 1;
if (group->conf->host)
XFREE(MTYPE_BGP_PEER_HOST, group->conf->host);
group->conf->host = XSTRDUP (MTYPE_BGP_PEER_HOST, name);
group->conf->group = group;
group->conf->as = 0;
@ -1992,10 +2005,10 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
/* Import policy. */
if (pfilter->map[RMAP_IMPORT].name)
free (pfilter->map[RMAP_IMPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name);
if (gfilter->map[RMAP_IMPORT].name)
{
pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map;
}
else
@ -2007,7 +2020,7 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
/* Export policy. */
if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name)
{
pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map;
}
}
@ -2016,8 +2029,8 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
if (conf->default_rmap[afi][safi].name)
{
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = strdup (conf->default_rmap[afi][safi].name);
XFREE(MTYPE_BGP_FILTER_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, conf->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].map = conf->default_rmap[afi][safi].map;
}
@ -2036,7 +2049,7 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
else if (conf->update_if)
{
if (peer->update_if)
XFREE (MTYPE_PEER_UPDATE_SOURCE, peer->update_if);
XFREE(MTYPE_PEER_UPDATE_SOURCE, peer->update_if);
if (peer->update_source)
{
sockunion_free (peer->update_source);
@ -2049,29 +2062,29 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
if (gfilter->dlist[in].name && ! pfilter->dlist[in].name)
{
if (pfilter->dlist[in].name)
free (pfilter->dlist[in].name);
pfilter->dlist[in].name = strdup (gfilter->dlist[in].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[in].name);
pfilter->dlist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[in].name);
pfilter->dlist[in].alist = gfilter->dlist[in].alist;
}
if (gfilter->plist[in].name && ! pfilter->plist[in].name)
{
if (pfilter->plist[in].name)
free (pfilter->plist[in].name);
pfilter->plist[in].name = strdup (gfilter->plist[in].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[in].name);
pfilter->plist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[in].name);
pfilter->plist[in].plist = gfilter->plist[in].plist;
}
if (gfilter->aslist[in].name && ! pfilter->aslist[in].name)
{
if (pfilter->aslist[in].name)
free (pfilter->aslist[in].name);
pfilter->aslist[in].name = strdup (gfilter->aslist[in].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[in].name);
pfilter->aslist[in].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[in].name);
pfilter->aslist[in].aslist = gfilter->aslist[in].aslist;
}
if (gfilter->map[RMAP_IN].name && ! pfilter->map[RMAP_IN].name)
{
if (pfilter->map[RMAP_IN].name)
free (pfilter->map[RMAP_IN].name);
pfilter->map[RMAP_IN].name = strdup (gfilter->map[RMAP_IN].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IN].name);
pfilter->map[RMAP_IN].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IN].name);
pfilter->map[RMAP_IN].map = gfilter->map[RMAP_IN].map;
}
@ -2079,56 +2092,56 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
if (gfilter->dlist[out].name)
{
if (pfilter->dlist[out].name)
free (pfilter->dlist[out].name);
pfilter->dlist[out].name = strdup (gfilter->dlist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[out].name);
pfilter->dlist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[out].name);
pfilter->dlist[out].alist = gfilter->dlist[out].alist;
}
else
{
if (pfilter->dlist[out].name)
free (pfilter->dlist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->dlist[out].name);
pfilter->dlist[out].name = NULL;
pfilter->dlist[out].alist = NULL;
}
if (gfilter->plist[out].name)
{
if (pfilter->plist[out].name)
free (pfilter->plist[out].name);
pfilter->plist[out].name = strdup (gfilter->plist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[out].name);
pfilter->plist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[out].name);
pfilter->plist[out].plist = gfilter->plist[out].plist;
}
else
{
if (pfilter->plist[out].name)
free (pfilter->plist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->plist[out].name);
pfilter->plist[out].name = NULL;
pfilter->plist[out].plist = NULL;
}
if (gfilter->aslist[out].name)
{
if (pfilter->aslist[out].name)
free (pfilter->aslist[out].name);
pfilter->aslist[out].name = strdup (gfilter->aslist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[out].name);
pfilter->aslist[out].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[out].name);
pfilter->aslist[out].aslist = gfilter->aslist[out].aslist;
}
else
{
if (pfilter->aslist[out].name)
free (pfilter->aslist[out].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->aslist[out].name);
pfilter->aslist[out].name = NULL;
pfilter->aslist[out].aslist = NULL;
}
if (gfilter->map[RMAP_OUT].name)
{
if (pfilter->map[RMAP_OUT].name)
free (pfilter->map[RMAP_OUT].name);
pfilter->map[RMAP_OUT].name = strdup (gfilter->map[RMAP_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_OUT].name);
pfilter->map[RMAP_OUT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_OUT].name);
pfilter->map[RMAP_OUT].map = gfilter->map[RMAP_OUT].map;
}
else
{
if (pfilter->map[RMAP_OUT].name)
free (pfilter->map[RMAP_OUT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_OUT].name);
pfilter->map[RMAP_OUT].name = NULL;
pfilter->map[RMAP_OUT].map = NULL;
}
@ -2137,36 +2150,36 @@ peer_group2peer_config_copy (struct peer_group *group, struct peer *peer,
if (gfilter->map[RMAP_IMPORT].name)
{
if (pfilter->map[RMAP_IMPORT].name)
free (pfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].name = strdup (gfilter->map[RMAP_IMPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].map = gfilter->map[RMAP_IMPORT].map;
}
else
{
if (pfilter->map[RMAP_IMPORT].name)
free (pfilter->map[RMAP_IMPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_IMPORT].name);
pfilter->map[RMAP_IMPORT].name = NULL;
pfilter->map[RMAP_IMPORT].map = NULL;
}
if (gfilter->map[RMAP_EXPORT].name && ! pfilter->map[RMAP_EXPORT].name)
{
if (pfilter->map[RMAP_EXPORT].name)
free (pfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].name = strdup (gfilter->map[RMAP_EXPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[RMAP_EXPORT].name);
pfilter->map[RMAP_EXPORT].map = gfilter->map[RMAP_EXPORT].map;
}
if (gfilter->usmap.name)
{
if (pfilter->usmap.name)
free (pfilter->usmap.name);
pfilter->usmap.name = strdup (gfilter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->usmap.name);
pfilter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->usmap.name);
pfilter->usmap.map = gfilter->usmap.map;
}
else
{
if (pfilter->usmap.name)
free (pfilter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, pfilter->usmap.name);
pfilter->usmap.name = NULL;
pfilter->usmap.map = NULL;
}
@ -2237,7 +2250,7 @@ peer_group_delete (struct peer_group *group)
list_delete (group->listen_range[afi]);
}
free (group->name);
XFREE(MTYPE_BGP_PEER_HOST, group->name);
group->name = NULL;
group->conf->group = NULL;
@ -2486,7 +2499,7 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer,
/* Import policy. */
if (peer->filter[afi][safi].map[RMAP_IMPORT].name)
{
free (peer->filter[afi][safi].map[RMAP_IMPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, peer->filter[afi][safi].map[RMAP_IMPORT].name);
peer->filter[afi][safi].map[RMAP_IMPORT].name = NULL;
peer->filter[afi][safi].map[RMAP_IMPORT].map = NULL;
}
@ -2495,7 +2508,7 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer,
if (! CHECK_FLAG(group->conf->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT)
&& peer->filter[afi][safi].map[RMAP_EXPORT].name)
{
free (peer->filter[afi][safi].map[RMAP_EXPORT].name);
XFREE(MTYPE_BGP_FILTER_NAME, peer->filter[afi][safi].map[RMAP_EXPORT].name);
peer->filter[afi][safi].map[RMAP_EXPORT].name = NULL;
peer->filter[afi][safi].map[RMAP_EXPORT].map = NULL;
}
@ -2602,8 +2615,9 @@ bgp_create (as_t *as, const char *name)
bgp_lock (bgp);
bgp->peer_self = peer_new (bgp);
bgp->peer_self->host = XSTRDUP (MTYPE_BGP_PEER_HOST, "Static announcement");
if (bgp->peer_self->host)
XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->host);
bgp->peer_self->host = XSTRDUP(MTYPE_BGP_PEER_HOST, "Static announcement");
bgp->peer = list_new ();
bgp->peer->cmp = (int (*)(void *, void *)) peer_cmp;
@ -2636,7 +2650,7 @@ bgp_create (as_t *as, const char *name)
bgp->as = *as;
if (name)
bgp->name = strdup (name);
bgp->name = XSTRDUP(MTYPE_BGP, name);
bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX;
bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME;
@ -2867,7 +2881,7 @@ bgp_free (struct bgp *bgp)
list_delete (bgp->rsclient);
if (bgp->name)
free (bgp->name);
XFREE(MTYPE_BGP, bgp->name);
for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
@ -3981,8 +3995,8 @@ peer_default_originate_set (struct peer *peer, afi_t afi, safi_t safi,
if (rmap)
{
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = strdup (rmap);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
peer->default_rmap[afi][safi].map = route_map_lookup_by_name (rmap);
}
}
@ -4006,8 +4020,8 @@ peer_default_originate_set (struct peer *peer, afi_t afi, safi_t safi,
if (rmap)
{
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = strdup (rmap);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
peer->default_rmap[afi][safi].map = route_map_lookup_by_name (rmap);
}
@ -4039,7 +4053,7 @@ peer_default_originate_unset (struct peer *peer, afi_t afi, safi_t safi)
UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE);
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = NULL;
peer->default_rmap[afi][safi].map = NULL;
}
@ -4061,7 +4075,7 @@ peer_default_originate_unset (struct peer *peer, afi_t afi, safi_t safi)
UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE);
if (peer->default_rmap[afi][safi].name)
free (peer->default_rmap[afi][safi].name);
XFREE(MTYPE_ROUTE_MAP_NAME, peer->default_rmap[afi][safi].name);
peer->default_rmap[afi][safi].name = NULL;
peer->default_rmap[afi][safi].map = NULL;
@ -4355,15 +4369,15 @@ void
peer_interface_set (struct peer *peer, const char *str)
{
if (peer->ifname)
free (peer->ifname);
peer->ifname = strdup (str);
XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname);
peer->ifname = XSTRDUP(MTYPE_BGP_PEER_IFNAME, str);
}
void
peer_interface_unset (struct peer *peer)
{
if (peer->ifname)
free (peer->ifname);
XFREE(MTYPE_BGP_PEER_IFNAME, peer->ifname);
peer->ifname = NULL;
}
@ -4712,8 +4726,8 @@ peer_distribute_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
return BGP_ERR_PEER_FILTER_CONFLICT;
if (filter->dlist[direct].name)
free (filter->dlist[direct].name);
filter->dlist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name);
filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->dlist[direct].alist = access_list_lookup (afi, name);
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
@ -4732,8 +4746,8 @@ peer_distribute_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
continue;
if (filter->dlist[direct].name)
free (filter->dlist[direct].name);
filter->dlist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name);
filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->dlist[direct].alist = access_list_lookup (afi, name);
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -4769,8 +4783,8 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
if (gfilter->dlist[direct].name)
{
if (filter->dlist[direct].name)
free (filter->dlist[direct].name);
filter->dlist[direct].name = strdup (gfilter->dlist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name);
filter->dlist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->dlist[direct].name);
filter->dlist[direct].alist = gfilter->dlist[direct].alist;
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -4779,7 +4793,7 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
}
if (filter->dlist[direct].name)
free (filter->dlist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name);
filter->dlist[direct].name = NULL;
filter->dlist[direct].alist = NULL;
@ -4799,7 +4813,7 @@ peer_distribute_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
continue;
if (filter->dlist[direct].name)
free (filter->dlist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->dlist[direct].name);
filter->dlist[direct].name = NULL;
filter->dlist[direct].alist = NULL;
peer_on_policy_change(peer, afi, safi,
@ -4889,8 +4903,8 @@ peer_prefix_list_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
return BGP_ERR_PEER_FILTER_CONFLICT;
if (filter->plist[direct].name)
free (filter->plist[direct].name);
filter->plist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name);
filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->plist[direct].plist = prefix_list_lookup (afi, name);
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
@ -4909,8 +4923,8 @@ peer_prefix_list_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
continue;
if (filter->plist[direct].name)
free (filter->plist[direct].name);
filter->plist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name);
filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->plist[direct].plist = prefix_list_lookup (afi, name);
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -4945,8 +4959,8 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
if (gfilter->plist[direct].name)
{
if (filter->plist[direct].name)
free (filter->plist[direct].name);
filter->plist[direct].name = strdup (gfilter->plist[direct].name);
XSTRDUP(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name);
filter->plist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->plist[direct].name);
filter->plist[direct].plist = gfilter->plist[direct].plist;
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -4955,7 +4969,7 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
}
if (filter->plist[direct].name)
free (filter->plist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name);
filter->plist[direct].name = NULL;
filter->plist[direct].plist = NULL;
@ -4975,7 +4989,7 @@ peer_prefix_list_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
continue;
if (filter->plist[direct].name)
free (filter->plist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->plist[direct].name);
filter->plist[direct].name = NULL;
filter->plist[direct].plist = NULL;
peer_on_policy_change(peer, afi, safi,
@ -5065,8 +5079,8 @@ peer_aslist_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
filter = &peer->filter[afi][safi];
if (filter->aslist[direct].name)
free (filter->aslist[direct].name);
filter->aslist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name);
filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->aslist[direct].aslist = as_list_lookup (name);
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
@ -5085,8 +5099,8 @@ peer_aslist_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
continue;
if (filter->aslist[direct].name)
free (filter->aslist[direct].name);
filter->aslist[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name);
filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->aslist[direct].aslist = as_list_lookup (name);
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -5121,8 +5135,8 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct)
if (gfilter->aslist[direct].name)
{
if (filter->aslist[direct].name)
free (filter->aslist[direct].name);
filter->aslist[direct].name = strdup (gfilter->aslist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name);
filter->aslist[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->aslist[direct].name);
filter->aslist[direct].aslist = gfilter->aslist[direct].aslist;
peer_on_policy_change(peer, afi, safi,
(direct == FILTER_OUT) ? 1 : 0);
@ -5131,7 +5145,7 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct)
}
if (filter->aslist[direct].name)
free (filter->aslist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name);
filter->aslist[direct].name = NULL;
filter->aslist[direct].aslist = NULL;
@ -5151,7 +5165,7 @@ peer_aslist_unset (struct peer *peer,afi_t afi, safi_t safi, int direct)
continue;
if (filter->aslist[direct].name)
free (filter->aslist[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->aslist[direct].name);
filter->aslist[direct].name = NULL;
filter->aslist[direct].aslist = NULL;
peer_on_policy_change(peer, afi, safi,
@ -5253,9 +5267,9 @@ peer_route_map_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
filter = &peer->filter[afi][safi];
if (filter->map[direct].name)
free (filter->map[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = strdup (name);
filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->map[direct].map = route_map_lookup_by_name (name);
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
@ -5274,8 +5288,8 @@ peer_route_map_set (struct peer *peer, afi_t afi, safi_t safi, int direct,
continue;
if (filter->map[direct].name)
free (filter->map[direct].name);
filter->map[direct].name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->map[direct].map = route_map_lookup_by_name (name);
peer_on_policy_change(peer, afi, safi,
(direct == RMAP_OUT) ? 1 : 0);
@ -5313,8 +5327,8 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
if (gfilter->map[direct].name)
{
if (filter->map[direct].name)
free (filter->map[direct].name);
filter->map[direct].name = strdup (gfilter->map[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, gfilter->map[direct].name);
filter->map[direct].map = gfilter->map[direct].map;
peer_on_policy_change(peer, afi, safi,
(direct == RMAP_OUT) ? 1 : 0);
@ -5323,7 +5337,7 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
}
if (filter->map[direct].name)
free (filter->map[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = NULL;
filter->map[direct].map = NULL;
@ -5343,7 +5357,7 @@ peer_route_map_unset (struct peer *peer, afi_t afi, safi_t safi, int direct)
continue;
if (filter->map[direct].name)
free (filter->map[direct].name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = NULL;
filter->map[direct].map = NULL;
peer_on_policy_change(peer, afi, safi,
@ -5370,9 +5384,9 @@ peer_unsuppress_map_set (struct peer *peer, afi_t afi, safi_t safi,
filter = &peer->filter[afi][safi];
if (filter->usmap.name)
free (filter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = strdup (name);
filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->usmap.map = route_map_lookup_by_name (name);
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
@ -5390,8 +5404,8 @@ peer_unsuppress_map_set (struct peer *peer, afi_t afi, safi_t safi,
continue;
if (filter->usmap.name)
free (filter->usmap.name);
filter->usmap.name = strdup (name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
filter->usmap.map = route_map_lookup_by_name (name);
peer_on_policy_change(peer, afi, safi, 1);
}
@ -5415,7 +5429,7 @@ peer_unsuppress_map_unset (struct peer *peer, afi_t afi, safi_t safi)
filter = &peer->filter[afi][safi];
if (filter->usmap.name)
free (filter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = NULL;
filter->usmap.map = NULL;
@ -5434,7 +5448,7 @@ peer_unsuppress_map_unset (struct peer *peer, afi_t afi, safi_t safi)
continue;
if (filter->usmap.name)
free (filter->usmap.name);
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = NULL;
filter->usmap.map = NULL;
peer_on_policy_change(peer, afi, safi, 1);

View File

@ -43,7 +43,7 @@ agentx_log_callback(int major, int minor,
void *serverarg, void *clientarg)
{
struct snmp_log_message *slm = (struct snmp_log_message *)serverarg;
char *msg = strdup (slm->msg);
char *msg = XSTRDUP(MTYPE_TMP, slm->msg);
if (msg) msg[strlen(msg)-1] = '\0';
switch (slm->priority)
{
@ -56,7 +56,7 @@ agentx_log_callback(int major, int minor,
case LOG_INFO: zlog_info ("snmp[info]: %s", msg?msg:slm->msg); break;
case LOG_DEBUG: zlog_debug ("snmp[debug]: %s", msg?msg:slm->msg); break;
}
free(msg);
XFREE(MTYPE_TMP, msg);
return SNMP_ERR_NOERROR;
}

View File

@ -49,14 +49,14 @@ distribute_free (struct distribute *dist)
XFREE (MTYPE_DISTRIBUTE_IFNAME, dist->ifname);
if (dist->list[DISTRIBUTE_IN])
free (dist->list[DISTRIBUTE_IN]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]);
if (dist->list[DISTRIBUTE_OUT])
free (dist->list[DISTRIBUTE_OUT]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]);
if (dist->prefix[DISTRIBUTE_IN])
free (dist->prefix[DISTRIBUTE_IN]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]);
if (dist->prefix[DISTRIBUTE_OUT])
free (dist->prefix[DISTRIBUTE_OUT]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]);
XFREE (MTYPE_DISTRIBUTE, dist);
}
@ -151,14 +151,14 @@ distribute_list_set (const char *ifname, enum distribute_type type,
if (type == DISTRIBUTE_IN)
{
if (dist->list[DISTRIBUTE_IN])
free (dist->list[DISTRIBUTE_IN]);
dist->list[DISTRIBUTE_IN] = strdup (alist_name);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]);
dist->list[DISTRIBUTE_IN] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, alist_name);
}
if (type == DISTRIBUTE_OUT)
{
if (dist->list[DISTRIBUTE_OUT])
free (dist->list[DISTRIBUTE_OUT]);
dist->list[DISTRIBUTE_OUT] = strdup (alist_name);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]);
dist->list[DISTRIBUTE_OUT] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, alist_name);
}
/* Apply this distribute-list to the interface. */
@ -186,7 +186,7 @@ distribute_list_unset (const char *ifname, enum distribute_type type,
if (strcmp (dist->list[DISTRIBUTE_IN], alist_name) != 0)
return 0;
free (dist->list[DISTRIBUTE_IN]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_IN]);
dist->list[DISTRIBUTE_IN] = NULL;
}
@ -197,7 +197,7 @@ distribute_list_unset (const char *ifname, enum distribute_type type,
if (strcmp (dist->list[DISTRIBUTE_OUT], alist_name) != 0)
return 0;
free (dist->list[DISTRIBUTE_OUT]);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->list[DISTRIBUTE_OUT]);
dist->list[DISTRIBUTE_OUT] = NULL;
}
@ -229,14 +229,14 @@ distribute_list_prefix_set (const char *ifname, enum distribute_type type,
if (type == DISTRIBUTE_IN)
{
if (dist->prefix[DISTRIBUTE_IN])
free (dist->prefix[DISTRIBUTE_IN]);
dist->prefix[DISTRIBUTE_IN] = strdup (plist_name);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]);
dist->prefix[DISTRIBUTE_IN] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, plist_name);
}
if (type == DISTRIBUTE_OUT)
{
if (dist->prefix[DISTRIBUTE_OUT])
free (dist->prefix[DISTRIBUTE_OUT]);
dist->prefix[DISTRIBUTE_OUT] = strdup (plist_name);
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]);
dist->prefix[DISTRIBUTE_OUT] = XSTRDUP(MTYPE_DISTRIBUTE_NAME, plist_name);
}
/* Apply this distribute-list to the interface. */
@ -264,8 +264,8 @@ distribute_list_prefix_unset (const char *ifname, enum distribute_type type,
if (strcmp (dist->prefix[DISTRIBUTE_IN], plist_name) != 0)
return 0;
free (dist->prefix[DISTRIBUTE_IN]);
dist->prefix[DISTRIBUTE_IN] = NULL;
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_IN]);
dist->prefix[DISTRIBUTE_IN] = NULL;
}
if (type == DISTRIBUTE_OUT)
@ -275,8 +275,8 @@ distribute_list_prefix_unset (const char *ifname, enum distribute_type type,
if (strcmp (dist->prefix[DISTRIBUTE_OUT], plist_name) != 0)
return 0;
free (dist->prefix[DISTRIBUTE_OUT]);
dist->prefix[DISTRIBUTE_OUT] = NULL;
XFREE(MTYPE_DISTRIBUTE_NAME, dist->prefix[DISTRIBUTE_OUT]);
dist->prefix[DISTRIBUTE_OUT] = NULL;
}
/* Apply this distribute-list to the interface. */

View File

@ -101,7 +101,7 @@ keychain_get (const char *name)
return keychain;
keychain = keychain_new ();
keychain->name = strdup (name);
keychain->name = XSTRDUP(MTYPE_KEYCHAIN, name);
keychain->key = list_new ();
keychain->key->cmp = (int (*)(void *, void *)) key_cmp_func;
keychain->key->del = (void (*)(void *)) key_delete_func;
@ -114,7 +114,7 @@ static void
keychain_delete (struct keychain *keychain)
{
if (keychain->name)
free (keychain->name);
XFREE(MTYPE_KEYCHAIN, keychain->name);
list_delete (keychain->key);
listnode_delete (keychain_list, keychain);
@ -223,7 +223,7 @@ key_delete (struct keychain *keychain, struct key *key)
listnode_delete (keychain->key, key);
if (key->string)
free (key->string);
XFREE(MTYPE_KEY, key->string);
key_free (key);
}
@ -325,8 +325,8 @@ DEFUN (key_string,
key = vty->index_sub;
if (key->string)
free (key->string);
key->string = strdup (argv[0]);
XFREE(MTYPE_KEY, key->string);
key->string = XSTRDUP(MTYPE_KEY, argv[0]);
return CMD_SUCCESS;
}
@ -344,7 +344,7 @@ DEFUN (no_key_string,
if (key->string)
{
free (key->string);
XFREE(MTYPE_KEY, key->string);
key->string = NULL;
}

View File

@ -640,7 +640,7 @@ closezlog (struct zlog *zl)
fclose (zl->fp);
if (zl->filename != NULL)
free (zl->filename);
XFREE(MTYPE_ZLOG, zl->filename);
XFREE (MTYPE_ZLOG, zl);
}
@ -676,7 +676,7 @@ zlog_set_file (struct zlog *zl, const char *filename, int log_level)
return 0;
/* Set flags. */
zl->filename = strdup (filename);
zl->filename = XSTRDUP(MTYPE_ZLOG, filename);
zl->maxlvl[ZLOG_DEST_FILE] = log_level;
zl->fp = fp;
logfile_fd = fileno(fp);
@ -698,7 +698,7 @@ zlog_reset_file (struct zlog *zl)
zl->maxlvl[ZLOG_DEST_FILE] = ZLOG_DISABLED;
if (zl->filename)
free (zl->filename);
XFREE(MTYPE_ZLOG, zl->filename);
zl->filename = NULL;
return 1;

View File

@ -43,6 +43,7 @@ struct memory_list memory_list_lib[] =
{ MTYPE_ROUTE_NODE, "Route node" },
{ MTYPE_DISTRIBUTE, "Distribute list" },
{ MTYPE_DISTRIBUTE_IFNAME, "Dist-list ifname" },
{ MTYPE_DISTRIBUTE_NAME, "Dist-list name" },
{ MTYPE_ACCESS_LIST, "Access List" },
{ MTYPE_ACCESS_LIST_STR, "Access List Str" },
{ MTYPE_ACCESS_FILTER, "Access Filter" },
@ -97,7 +98,9 @@ struct memory_list memory_list_bgp[] =
{ MTYPE_BGP_LISTENER, "BGP listen socket details" },
{ MTYPE_BGP_PEER, "BGP peer" },
{ MTYPE_BGP_PEER_HOST, "BGP peer hostname" },
{ MTYPE_PEER_GROUP, "Peer group" },
{ MTYPE_BGP_PEER_IFNAME, "BGP peer ifname" },
{ MTYPE_BGP_PEER_GROUP, "BGP Peer group" },
{ MTYPE_BGP_PEER_GROUP_HOST, "BGP Peer group hostname" },
{ MTYPE_PEER_DESC, "Peer description" },
{ MTYPE_PEER_PASSWORD, "Peer password string" },
{ MTYPE_BGP_PEER_AF, "BGP peer af" },
@ -152,6 +155,7 @@ struct memory_list memory_list_bgp[] =
{ MTYPE_TRANSIT_VAL, "BGP transit val" },
{ 0, NULL },
{ MTYPE_BGP_DEBUG_FILTER, "BGP debug filter" },
{ MTYPE_BGP_DEBUG_STR, "BGP debug filter string" },
{ 0, NULL },
{ MTYPE_BGP_DISTANCE, "BGP distance" },
{ MTYPE_BGP_NEXTHOP_CACHE, "BGP nexthop" },
@ -163,6 +167,10 @@ struct memory_list memory_list_bgp[] =
{ MTYPE_BGP_REGEXP, "BGP regexp" },
{ MTYPE_BGP_AGGREGATE, "BGP aggregate" },
{ MTYPE_BGP_ADDR, "BGP own address" },
{ 0 , NULL},
{ MTYPE_BGP_REDIST, "BGP redistribution" },
{ MTYPE_BGP_FILTER_NAME, "BGP Filter Information" },
{ MTYPE_BGP_DUMP_STR, "BGP Dump String Information" },
{ -1, NULL }
};