diff options
| -rw-r--r-- | bgpd/bgp_ecommunity.c | 5 | ||||
| -rw-r--r-- | bgpd/bgp_ecommunity.h | 1 | ||||
| -rw-r--r-- | bgpd/bgp_flowspec.c | 3 | 
3 files changed, 9 insertions, 0 deletions
diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c index 85b9ffd8ca..99fe80f055 100644 --- a/bgpd/bgp_ecommunity.c +++ b/bgpd/bgp_ecommunity.c @@ -52,6 +52,11 @@ struct ecommunity *ecommunity_new(void)  					    sizeof(struct ecommunity));  } +void ecommunity_strfree(char **s) +{ +	XFREE(MTYPE_ECOMMUNITY_STR, *s); +} +  /* Allocate ecommunities.  */  void ecommunity_free(struct ecommunity **ecom)  { diff --git a/bgpd/bgp_ecommunity.h b/bgpd/bgp_ecommunity.h index 88bdb5e2ae..2f59308d65 100644 --- a/bgpd/bgp_ecommunity.h +++ b/bgpd/bgp_ecommunity.h @@ -156,6 +156,7 @@ extern void ecommunity_unintern(struct ecommunity **);  extern unsigned int ecommunity_hash_make(void *);  extern struct ecommunity *ecommunity_str2com(const char *, int, int);  extern char *ecommunity_ecom2str(struct ecommunity *, int, int); +extern void ecommunity_strfree(char **s);  extern int ecommunity_match(const struct ecommunity *,  			    const struct ecommunity *);  extern char *ecommunity_str(struct ecommunity *); diff --git a/bgpd/bgp_flowspec.c b/bgpd/bgp_flowspec.c index 5db7e37089..6eb1e39884 100644 --- a/bgpd/bgp_flowspec.c +++ b/bgpd/bgp_flowspec.c @@ -166,6 +166,9 @@ int bgp_nlri_parse_flowspec(struct peer *peer, struct attr *attr,  					 BGP_FLOWSPEC_NLRI_STRING_MAX,  					 "EC{%s}",  					s == NULL ? "none" : s); + +				if (s) +					ecommunity_strfree(&s);  			}  			snprintf(local_string, BGP_FLOWSPEC_NLRI_STRING_MAX,  				 "FS Rx %s %s %s %s", withdraw ?  | 
