Merge pull request #12147 from pguibert6WIND/srte_flush

zebra: upon srte leave, flush sr policies
This commit is contained in:
Donatas Abraitis 2022-11-17 15:26:55 +02:00 committed by GitHub
commit 1e5e7934ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

View File

@ -2606,8 +2606,10 @@ static void zread_sr_policy_set(ZAPI_HANDLER_ARGS)
return;
policy = zebra_sr_policy_find(zp.color, &zp.endpoint);
if (!policy)
if (!policy) {
policy = zebra_sr_policy_add(zp.color, &zp.endpoint, zp.name);
policy->sock = client->sock;
}
/* TODO: per-VRF list of SR-TE policies. */
policy->zvrf = zvrf;

View File

@ -384,6 +384,23 @@ int zebra_sr_policy_label_update(mpls_label_t label,
return 0;
}
static int zebra_srte_client_close_cleanup(struct zserv *client)
{
int sock = client->sock;
struct zebra_sr_policy *policy;
if (!sock)
return 0;
RB_FOREACH (policy, zebra_sr_policy_instance_head,
&zebra_sr_policy_instances) {
if (policy->sock == sock)
zebra_sr_policy_del(policy);
}
return 1;
}
void zebra_srte_init(void)
{
hook_register(zserv_client_close, zebra_srte_client_close_cleanup);
}

View File

@ -45,6 +45,7 @@ struct zebra_sr_policy {
struct zapi_srte_tunnel segment_list;
struct zebra_lsp *lsp;
struct zebra_vrf *zvrf;
int sock;
};
RB_HEAD(zebra_sr_policy_instance_head, zebra_sr_policy);
RB_PROTOTYPE(zebra_sr_policy_instance_head, zebra_sr_policy, entry,