]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: remove previous labels before fast-reroute
authorLouis Scalbert <louis.scalbert@6wind.com>
Wed, 6 Apr 2022 16:40:32 +0000 (18:40 +0200)
committerLouis Scalbert <louis.scalbert@6wind.com>
Mon, 23 May 2022 08:44:25 +0000 (10:44 +0200)
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
isisd/isis_route.c

index b04e8e455373e14b46390ce5269f10e82c12a2db..a91ce7eeac2c135828f7047a59df2ddf8c9787ef 100644 (file)
@@ -459,6 +459,21 @@ void isis_route_delete(struct isis_area *area, struct route_node *rode,
        route_unlock_node(rode);
 }
 
+static void isis_route_remove_previous_sid(struct isis_area *area,
+                                          struct prefix *prefix,
+                                          struct isis_route_info *route_info)
+{
+       /*
+        * Explicitly uninstall previous Prefix-SID label if it has
+        * changed or was removed.
+        */
+       if (route_info->sr_previous.present &&
+           (!route_info->sr.present ||
+            route_info->sr_previous.label != route_info->sr.label))
+               isis_zebra_prefix_sid_uninstall(area, prefix, route_info,
+                                               &route_info->sr_previous);
+}
+
 static void isis_route_update(struct isis_area *area, struct prefix *prefix,
                              struct prefix_ipv6 *src_p,
                              struct isis_route_info *route_info)
@@ -467,17 +482,7 @@ static void isis_route_update(struct isis_area *area, struct prefix *prefix,
                if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
                        return;
 
-               /*
-                * Explicitly uninstall previous Prefix-SID label if it has
-                * changed or was removed.
-                */
-               if (route_info->sr_previous.present
-                   && (!route_info->sr.present
-                       || route_info->sr_previous.label
-                                  != route_info->sr.label))
-                       isis_zebra_prefix_sid_uninstall(
-                               area, prefix, route_info,
-                               &route_info->sr_previous);
+               isis_route_remove_previous_sid(area, prefix, route_info);
 
                /* Install route. */
                isis_zebra_route_add_route(area->isis, prefix, src_p,
@@ -765,6 +770,7 @@ void isis_route_switchover_nexthop(struct isis_area *area,
                                       (const struct prefix **)&src_p);
 
                /* Switchover route. */
+               isis_route_remove_previous_sid(area, prefix, rinfo);
                UNSET_FLAG(rinfo->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
                isis_route_update(area, prefix, src_p, rinfo->backup);