mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 22:27:47 +00:00
Merge pull request #12224 from cscarpitta/fix/enhance-srv6-locator-chunk-free-api
bgpd: Enhance the `srv6_locator_chunk_free()` API by automatically setting the pointer to the freed memory to `NULL`
This commit is contained in:
commit
b7128471c6
@ -779,7 +779,7 @@ void ensure_vrf_tovpn_sid_per_af(struct bgp *bgp_vpn, struct bgp *bgp_vrf,
|
|||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: not allocated new sid for vrf %s: afi %s",
|
"%s: not allocated new sid for vrf %s: afi %s",
|
||||||
__func__, bgp_vrf->name_pretty, afi2str(afi));
|
__func__, bgp_vrf->name_pretty, afi2str(afi));
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
srv6_locator_chunk_free(&tovpn_sid_locator);
|
||||||
XFREE(MTYPE_BGP_SRV6_SID, tovpn_sid);
|
XFREE(MTYPE_BGP_SRV6_SID, tovpn_sid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -844,7 +844,7 @@ void ensure_vrf_tovpn_sid_per_vrf(struct bgp *bgp_vpn, struct bgp *bgp_vrf)
|
|||||||
if (debug)
|
if (debug)
|
||||||
zlog_debug("%s: not allocated new sid for vrf %s",
|
zlog_debug("%s: not allocated new sid for vrf %s",
|
||||||
__func__, bgp_vrf->name_pretty);
|
__func__, bgp_vrf->name_pretty);
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
srv6_locator_chunk_free(&tovpn_sid_locator);
|
||||||
XFREE(MTYPE_BGP_SRV6_SID, tovpn_sid);
|
XFREE(MTYPE_BGP_SRV6_SID, tovpn_sid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -891,8 +891,7 @@ void delete_vrf_tovpn_sid_per_af(struct bgp *bgp_vpn, struct bgp *bgp_vrf,
|
|||||||
if (tovpn_sid_index != 0 || tovpn_sid_auto)
|
if (tovpn_sid_index != 0 || tovpn_sid_auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
srv6_locator_chunk_free(bgp_vrf->vpn_policy[afi].tovpn_sid_locator);
|
srv6_locator_chunk_free(&bgp_vrf->vpn_policy[afi].tovpn_sid_locator);
|
||||||
bgp_vrf->vpn_policy[afi].tovpn_sid_locator = NULL;
|
|
||||||
|
|
||||||
if (bgp_vrf->vpn_policy[afi].tovpn_sid) {
|
if (bgp_vrf->vpn_policy[afi].tovpn_sid) {
|
||||||
sid_unregister(bgp_vrf, bgp_vrf->vpn_policy[afi].tovpn_sid);
|
sid_unregister(bgp_vrf, bgp_vrf->vpn_policy[afi].tovpn_sid);
|
||||||
@ -919,8 +918,7 @@ void delete_vrf_tovpn_sid_per_vrf(struct bgp *bgp_vpn, struct bgp *bgp_vrf)
|
|||||||
if (tovpn_sid_index != 0 || tovpn_sid_auto)
|
if (tovpn_sid_index != 0 || tovpn_sid_auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
srv6_locator_chunk_free(bgp_vrf->tovpn_sid_locator);
|
srv6_locator_chunk_free(&bgp_vrf->tovpn_sid_locator);
|
||||||
bgp_vrf->tovpn_sid_locator = NULL;
|
|
||||||
|
|
||||||
if (bgp_vrf->tovpn_sid) {
|
if (bgp_vrf->tovpn_sid) {
|
||||||
sid_unregister(bgp_vrf, bgp_vrf->tovpn_sid);
|
sid_unregister(bgp_vrf, bgp_vrf->tovpn_sid);
|
||||||
|
@ -297,7 +297,7 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct listnode *node, *nnode;
|
struct listnode *node, *nnode;
|
||||||
struct srv6_locator_chunk *chunk, *tovpn_sid_locator;
|
struct srv6_locator_chunk *chunk;
|
||||||
struct bgp_srv6_function *func;
|
struct bgp_srv6_function *func;
|
||||||
struct bgp *bgp_vrf;
|
struct bgp *bgp_vrf;
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
|
|||||||
/* refresh chunks */
|
/* refresh chunks */
|
||||||
for (ALL_LIST_ELEMENTS(bgp->srv6_locator_chunks, node, nnode, chunk)) {
|
for (ALL_LIST_ELEMENTS(bgp->srv6_locator_chunks, node, nnode, chunk)) {
|
||||||
listnode_delete(bgp->srv6_locator_chunks, chunk);
|
listnode_delete(bgp->srv6_locator_chunks, chunk);
|
||||||
srv6_locator_chunk_free(chunk);
|
srv6_locator_chunk_free(&chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* refresh functions */
|
/* refresh functions */
|
||||||
@ -345,23 +345,15 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* refresh vpnv4 tovpn_sid_locator */
|
/* refresh vpnv4 tovpn_sid_locator */
|
||||||
tovpn_sid_locator =
|
srv6_locator_chunk_free(
|
||||||
bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator;
|
&bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator);
|
||||||
if (tovpn_sid_locator) {
|
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
|
||||||
bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* refresh vpnv6 tovpn_sid_locator */
|
/* refresh vpnv6 tovpn_sid_locator */
|
||||||
tovpn_sid_locator =
|
srv6_locator_chunk_free(
|
||||||
bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid_locator;
|
&bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid_locator);
|
||||||
if (tovpn_sid_locator) {
|
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
|
||||||
bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid_locator = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* refresh per-vrf tovpn_sid_locator */
|
/* refresh per-vrf tovpn_sid_locator */
|
||||||
srv6_locator_chunk_free(bgp_vrf->tovpn_sid_locator);
|
srv6_locator_chunk_free(&bgp_vrf->tovpn_sid_locator);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear locator name */
|
/* clear locator name */
|
||||||
|
@ -3219,13 +3219,13 @@ static int bgp_zebra_process_srv6_locator_chunk(ZAPI_CALLBACK_ARGS)
|
|||||||
if (strcmp(bgp->srv6_locator_name, chunk->locator_name) != 0) {
|
if (strcmp(bgp->srv6_locator_name, chunk->locator_name) != 0) {
|
||||||
zlog_err("%s: Locator name unmatch %s:%s", __func__,
|
zlog_err("%s: Locator name unmatch %s:%s", __func__,
|
||||||
bgp->srv6_locator_name, chunk->locator_name);
|
bgp->srv6_locator_name, chunk->locator_name);
|
||||||
srv6_locator_chunk_free(chunk);
|
srv6_locator_chunk_free(&chunk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(bgp->srv6_locator_chunks, node, c)) {
|
for (ALL_LIST_ELEMENTS_RO(bgp->srv6_locator_chunks, node, c)) {
|
||||||
if (!prefix_cmp(&c->prefix, &chunk->prefix)) {
|
if (!prefix_cmp(&c->prefix, &chunk->prefix)) {
|
||||||
srv6_locator_chunk_free(chunk);
|
srv6_locator_chunk_free(&chunk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3272,7 +3272,7 @@ static int bgp_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS)
|
|||||||
if (prefix_match((struct prefix *)&loc.prefix,
|
if (prefix_match((struct prefix *)&loc.prefix,
|
||||||
(struct prefix *)&chunk->prefix)) {
|
(struct prefix *)&chunk->prefix)) {
|
||||||
listnode_delete(bgp->srv6_locator_chunks, chunk);
|
listnode_delete(bgp->srv6_locator_chunks, chunk);
|
||||||
srv6_locator_chunk_free(chunk);
|
srv6_locator_chunk_free(&chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
// refresh functions
|
// refresh functions
|
||||||
@ -3343,11 +3343,10 @@ static int bgp_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS)
|
|||||||
tmp_prefi.prefixlen = IPV6_MAX_BITLEN;
|
tmp_prefi.prefixlen = IPV6_MAX_BITLEN;
|
||||||
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
||||||
if (prefix_match((struct prefix *)&loc.prefix,
|
if (prefix_match((struct prefix *)&loc.prefix,
|
||||||
(struct prefix *)&tmp_prefi)) {
|
(struct prefix *)&tmp_prefi))
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
srv6_locator_chunk_free(
|
||||||
bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator =
|
&bgp_vrf->vpn_policy[AFI_IP]
|
||||||
NULL;
|
.tovpn_sid_locator);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* refresh vpnv6 tovpn_sid_locator */
|
/* refresh vpnv6 tovpn_sid_locator */
|
||||||
@ -3358,11 +3357,10 @@ static int bgp_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS)
|
|||||||
tmp_prefi.prefixlen = IPV6_MAX_BITLEN;
|
tmp_prefi.prefixlen = IPV6_MAX_BITLEN;
|
||||||
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
||||||
if (prefix_match((struct prefix *)&loc.prefix,
|
if (prefix_match((struct prefix *)&loc.prefix,
|
||||||
(struct prefix *)&tmp_prefi)) {
|
(struct prefix *)&tmp_prefi))
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
srv6_locator_chunk_free(
|
||||||
bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid_locator =
|
&bgp_vrf->vpn_policy[AFI_IP6]
|
||||||
NULL;
|
.tovpn_sid_locator);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* refresh per-vrf tovpn_sid_locator */
|
/* refresh per-vrf tovpn_sid_locator */
|
||||||
@ -3373,7 +3371,8 @@ static int bgp_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS)
|
|||||||
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
tmp_prefi.prefix = tovpn_sid_locator->prefix.prefix;
|
||||||
if (prefix_match((struct prefix *)&loc.prefix,
|
if (prefix_match((struct prefix *)&loc.prefix,
|
||||||
(struct prefix *)&tmp_prefi))
|
(struct prefix *)&tmp_prefi))
|
||||||
srv6_locator_chunk_free(tovpn_sid_locator);
|
srv6_locator_chunk_free(
|
||||||
|
&bgp_vrf->tovpn_sid_locator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,9 +157,9 @@ void srv6_locator_free(struct srv6_locator *locator)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void srv6_locator_chunk_free(struct srv6_locator_chunk *chunk)
|
void srv6_locator_chunk_free(struct srv6_locator_chunk **chunk)
|
||||||
{
|
{
|
||||||
XFREE(MTYPE_SRV6_LOCATOR_CHUNK, chunk);
|
XFREE(MTYPE_SRV6_LOCATOR_CHUNK, *chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk)
|
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk)
|
||||||
|
@ -187,7 +187,7 @@ int snprintf_seg6_segs(char *str,
|
|||||||
extern struct srv6_locator *srv6_locator_alloc(const char *name);
|
extern struct srv6_locator *srv6_locator_alloc(const char *name);
|
||||||
extern struct srv6_locator_chunk *srv6_locator_chunk_alloc(void);
|
extern struct srv6_locator_chunk *srv6_locator_chunk_alloc(void);
|
||||||
extern void srv6_locator_free(struct srv6_locator *locator);
|
extern void srv6_locator_free(struct srv6_locator *locator);
|
||||||
extern void srv6_locator_chunk_free(struct srv6_locator_chunk *chunk);
|
extern void srv6_locator_chunk_free(struct srv6_locator_chunk **chunk);
|
||||||
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk);
|
json_object *srv6_locator_chunk_json(const struct srv6_locator_chunk *chunk);
|
||||||
json_object *srv6_locator_json(const struct srv6_locator *loc);
|
json_object *srv6_locator_json(const struct srv6_locator *loc);
|
||||||
json_object *srv6_locator_detailed_json(const struct srv6_locator *loc);
|
json_object *srv6_locator_detailed_json(const struct srv6_locator *loc);
|
||||||
|
Loading…
Reference in New Issue
Block a user