]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: upon srte leave, flush sr policies
authorPhilippe Guibert <philippe.guibert@6wind.com>
Mon, 17 Oct 2022 16:23:16 +0000 (18:23 +0200)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Wed, 19 Oct 2022 06:40:01 +0000 (08:40 +0200)
Upon srte leave, flush SR policies.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
zebra/zapi_msg.c
zebra/zebra_srte.c
zebra/zebra_srte.h

index 761ba789b87afb1ab3193956ec67432477444a6a..3461391e9b478abdc2350bc34d1de18aebf9d831 100644 (file)
@@ -2605,8 +2605,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;
 
index c0f18dd09160085ddbeced7a34a8e17d46d14c5c..7d95607fcf3ba1f57950561aeae4e60c17ce2364 100644 (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);
 }
index fe77809446d095c81e864c34e1e18f543c32922b..dff2f595fd3a822c3723bcded5964e09998dbbd7 100644 (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,