]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: Don't remove summary route if it is a range
authorXiaodong Xu <stid.smth@gmail.com>
Sat, 20 Aug 2022 00:25:41 +0000 (17:25 -0700)
committerXiaodong Xu <stid.smth@gmail.com>
Sat, 20 Aug 2022 06:26:06 +0000 (23:26 -0700)
Fix issue #11839.

When the user defines a range in an area other than the backbone area, the
summary route will be announced to the backbone area as an inter-area LSA.
However, if the prefix defined in the range is the same prefix as a connected
route in that area, the LSA won't be announced to the backbone area.

This is because when ospf6d is originating the summary route for the
intra-area route, it finds the range configured by the user and tries to
suppress the route by deleting the existing summary route, which happens to be
the one created by the range.

Although the range definition is not necessary in this case, it should not
fail this use case. So let's just keep the summary route there if it is
created from the user defined range.

Signed-off-by: Xiaodong Xu <stid.smth@gmail.com>
ospf6d/ospf6_abr.c

index 5af1139d9b484fb56b243e2873c2c8778e700282..e9c42bb80c736f11586b545b8952a919d28fc755 100644 (file)
@@ -488,7 +488,12 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
                                zlog_debug(
                                        "Suppressed by range %pFX of area %s",
                                        &range->prefix, route_area->name);
-                       ospf6_abr_delete_route(summary, summary_table, old);
+                       /* The existing summary route could be a range, don't
+                        * remove it in this case
+                        */
+                       if (summary && summary->type != OSPF6_DEST_TYPE_RANGE)
+                               ospf6_abr_delete_route(summary, summary_table,
+                                                      old);
                        return 0;
                }
        }