Upon srte leave, flush SR policies.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
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;
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);
}
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,