summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_mplsvpn.c10
-rw-r--r--bgpd/bgp_vty.c22
-rw-r--r--bgpd/bgp_zebra.c27
-rw-r--r--lib/srv6.c4
-rw-r--r--lib/srv6.h2
5 files changed, 27 insertions, 38 deletions
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index a68167977d..97c040e2ee 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -779,7 +779,7 @@ void ensure_vrf_tovpn_sid_per_af(struct bgp *bgp_vpn, struct bgp *bgp_vrf,
zlog_debug(
"%s: not allocated new sid for vrf %s: afi %s",
__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);
return;
}
@@ -844,7 +844,7 @@ void ensure_vrf_tovpn_sid_per_vrf(struct bgp *bgp_vpn, struct bgp *bgp_vrf)
if (debug)
zlog_debug("%s: not allocated new sid for vrf %s",
__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);
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)
return;
- srv6_locator_chunk_free(bgp_vrf->vpn_policy[afi].tovpn_sid_locator);
- bgp_vrf->vpn_policy[afi].tovpn_sid_locator = NULL;
+ srv6_locator_chunk_free(&bgp_vrf->vpn_policy[afi].tovpn_sid_locator);
if (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)
return;
- srv6_locator_chunk_free(bgp_vrf->tovpn_sid_locator);
- bgp_vrf->tovpn_sid_locator = NULL;
+ srv6_locator_chunk_free(&bgp_vrf->tovpn_sid_locator);
if (bgp_vrf->tovpn_sid) {
sid_unregister(bgp_vrf, bgp_vrf->tovpn_sid);
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index e856529fc6..c27b1c4bb8 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -297,7 +297,7 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
{
int ret;
struct listnode *node, *nnode;
- struct srv6_locator_chunk *chunk, *tovpn_sid_locator;
+ struct srv6_locator_chunk *chunk;
struct bgp_srv6_function *func;
struct bgp *bgp_vrf;
@@ -310,7 +310,7 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
/* refresh chunks */
for (ALL_LIST_ELEMENTS(bgp->srv6_locator_chunks, node, nnode, chunk)) {
listnode_delete(bgp->srv6_locator_chunks, chunk);
- srv6_locator_chunk_free(chunk);
+ srv6_locator_chunk_free(&chunk);
}
/* refresh functions */
@@ -345,23 +345,15 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
continue;
/* refresh vpnv4 tovpn_sid_locator */
- 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;
- }
+ srv6_locator_chunk_free(
+ &bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator);
/* refresh vpnv6 tovpn_sid_locator */
- 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;
- }
+ srv6_locator_chunk_free(
+ &bgp_vrf->vpn_policy[AFI_IP6].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 */
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index f7dda74cce..efdc81a145 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -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) {
zlog_err("%s: Locator name unmatch %s:%s", __func__,
bgp->srv6_locator_name, chunk->locator_name);
- srv6_locator_chunk_free(chunk);
+ srv6_locator_chunk_free(&chunk);
return 0;
}
for (ALL_LIST_ELEMENTS_RO(bgp->srv6_locator_chunks, node, c)) {
if (!prefix_cmp(&c->prefix, &chunk->prefix)) {
- srv6_locator_chunk_free(chunk);
+ srv6_locator_chunk_free(&chunk);
return 0;
}
}
@@ -3272,7 +3272,7 @@ static int bgp_zebra_process_srv6_locator_delete(ZAPI_CALLBACK_ARGS)
if (prefix_match((struct prefix *)&loc.prefix,
(struct prefix *)&chunk->prefix)) {
listnode_delete(bgp->srv6_locator_chunks, chunk);
- srv6_locator_chunk_free(chunk);
+ srv6_locator_chunk_free(&chunk);
}
// 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.prefix = tovpn_sid_locator->prefix.prefix;
if (prefix_match((struct prefix *)&loc.prefix,
- (struct prefix *)&tmp_prefi)) {
- srv6_locator_chunk_free(tovpn_sid_locator);
- bgp_vrf->vpn_policy[AFI_IP].tovpn_sid_locator =
- NULL;
- }
+ (struct prefix *)&tmp_prefi))
+ srv6_locator_chunk_free(
+ &bgp_vrf->vpn_policy[AFI_IP]
+ .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.prefix = tovpn_sid_locator->prefix.prefix;
if (prefix_match((struct prefix *)&loc.prefix,
- (struct prefix *)&tmp_prefi)) {
- srv6_locator_chunk_free(tovpn_sid_locator);
- bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid_locator =
- NULL;
- }
+ (struct prefix *)&tmp_prefi))
+ srv6_locator_chunk_free(
+ &bgp_vrf->vpn_policy[AFI_IP6]
+ .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;
if (prefix_match((struct prefix *)&loc.prefix,
(struct prefix *)&tmp_prefi))
- srv6_locator_chunk_free(tovpn_sid_locator);
+ srv6_locator_chunk_free(
+ &bgp_vrf->tovpn_sid_locator);
}
}
diff --git a/lib/srv6.c b/lib/srv6.c
index 306d92ae30..a8ec6f2b71 100644
--- a/lib/srv6.c
+++ b/lib/srv6.c
@@ -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)
diff --git a/lib/srv6.h b/lib/srv6.h
index 6e0c3ce99d..18d5bdebc2 100644
--- a/lib/srv6.h
+++ b/lib/srv6.h
@@ -187,7 +187,7 @@ int snprintf_seg6_segs(char *str,
extern struct srv6_locator *srv6_locator_alloc(const char *name);
extern struct srv6_locator_chunk *srv6_locator_chunk_alloc(void);
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_json(const struct srv6_locator *loc);
json_object *srv6_locator_detailed_json(const struct srv6_locator *loc);