mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 05:58:17 +00:00
Merge pull request #12409 from FRIDM636/master
zebra: delete label chunk upon release
This commit is contained in:
commit
969e3a6ccf
@ -783,6 +783,19 @@ presence of the entry.
|
|||||||
21 Static 10.125.0.2 IPv4 Explicit Null
|
21 Static 10.125.0.2 IPv4 Explicit Null
|
||||||
|
|
||||||
|
|
||||||
|
Allocated label chunks table can be dumped using the command
|
||||||
|
|
||||||
|
.. clicmd:: show debugging label-table
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
zebra# show debugging label-table
|
||||||
|
Proto ospf: [300/350]
|
||||||
|
Proto srte: [500/500]
|
||||||
|
Proto isis: [1200/1300]
|
||||||
|
Proto ospf: [20000/21000]
|
||||||
|
Proto isis: [22000/23000]
|
||||||
|
|
||||||
.. _zebra-srv6:
|
.. _zebra-srv6:
|
||||||
|
|
||||||
Segment-Routing IPv6
|
Segment-Routing IPv6
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#include "zebra/zapi_msg.h"
|
#include "zebra/zapi_msg.h"
|
||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
|
|
||||||
|
#include "zebra/label_manager_clippy.c"
|
||||||
|
|
||||||
#define CONNECTION_DELAY 5
|
#define CONNECTION_DELAY 5
|
||||||
|
|
||||||
struct label_manager lbl_mgr;
|
struct label_manager lbl_mgr;
|
||||||
@ -96,7 +98,7 @@ void delete_label_chunk(void *val)
|
|||||||
*/
|
*/
|
||||||
int release_daemon_label_chunks(struct zserv *client)
|
int release_daemon_label_chunks(struct zserv *client)
|
||||||
{
|
{
|
||||||
struct listnode *node;
|
struct listnode *node, *nnode;
|
||||||
struct label_manager_chunk *lmc;
|
struct label_manager_chunk *lmc;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int ret;
|
int ret;
|
||||||
@ -106,7 +108,7 @@ int release_daemon_label_chunks(struct zserv *client)
|
|||||||
__func__, zebra_route_string(client->proto),
|
__func__, zebra_route_string(client->proto),
|
||||||
client->instance, client->session_id);
|
client->instance, client->session_id);
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(lbl_mgr.lc_list, node, lmc)) {
|
for (ALL_LIST_ELEMENTS(lbl_mgr.lc_list, node, nnode, lmc)) {
|
||||||
if (lmc->proto == client->proto &&
|
if (lmc->proto == client->proto &&
|
||||||
lmc->instance == client->instance &&
|
lmc->instance == client->instance &&
|
||||||
lmc->session_id == client->session_id && lmc->keep == 0) {
|
lmc->session_id == client->session_id && lmc->keep == 0) {
|
||||||
@ -145,6 +147,22 @@ void lm_hooks_unregister(void)
|
|||||||
hook_unregister(lm_release_chunk, label_manager_release_label_chunk);
|
hook_unregister(lm_release_chunk, label_manager_release_label_chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFPY(show_label_table, show_label_table_cmd, "show debugging label-table",
|
||||||
|
SHOW_STR
|
||||||
|
DEBUG_STR
|
||||||
|
"Display allocated label chunks\n")
|
||||||
|
{
|
||||||
|
struct label_manager_chunk *lmc;
|
||||||
|
struct listnode *node;
|
||||||
|
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(lbl_mgr.lc_list, node, lmc)) {
|
||||||
|
vty_out(vty, "Proto %s: [%u/%u]\n",
|
||||||
|
zebra_route_string(lmc->proto), lmc->start, lmc->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init label manager (or proxy to an external one)
|
* Init label manager (or proxy to an external one)
|
||||||
*/
|
*/
|
||||||
@ -159,6 +177,8 @@ void label_manager_init(void)
|
|||||||
|
|
||||||
/* notify any external module that we are done */
|
/* notify any external module that we are done */
|
||||||
hook_call(lm_cbs_inited);
|
hook_call(lm_cbs_inited);
|
||||||
|
|
||||||
|
install_element(VIEW_NODE, &show_label_table_cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* alloc and fill a label chunk */
|
/* alloc and fill a label chunk */
|
||||||
@ -399,13 +419,14 @@ int release_label_chunk(uint8_t proto, unsigned short instance,
|
|||||||
"%s: Daemon mismatch!!", __func__);
|
"%s: Daemon mismatch!!", __func__);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
lmc->proto = NO_PROTO;
|
|
||||||
lmc->instance = 0;
|
|
||||||
lmc->session_id = 0;
|
|
||||||
lmc->keep = 0;
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (lmc) {
|
||||||
|
list_delete_node(lbl_mgr.lc_list, node);
|
||||||
|
delete_label_chunk(lmc);
|
||||||
|
}
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
flog_err(EC_ZEBRA_LM_UNRELEASED_CHUNK,
|
flog_err(EC_ZEBRA_LM_UNRELEASED_CHUNK,
|
||||||
"%s: Label chunk not released!!", __func__);
|
"%s: Label chunk not released!!", __func__);
|
||||||
|
@ -124,6 +124,7 @@ clippy_scan += \
|
|||||||
zebra/zebra_srv6_vty.c \
|
zebra/zebra_srv6_vty.c \
|
||||||
zebra/zebra_vrf.c \
|
zebra/zebra_vrf.c \
|
||||||
zebra/dpdk/zebra_dplane_dpdk_vty.c \
|
zebra/dpdk/zebra_dplane_dpdk_vty.c \
|
||||||
|
zebra/label_manager.c \
|
||||||
# end
|
# end
|
||||||
|
|
||||||
noinst_HEADERS += \
|
noinst_HEADERS += \
|
||||||
|
Loading…
Reference in New Issue
Block a user