diff options
Diffstat (limited to 'ospf6d/ospf6_abr.c')
| -rw-r--r-- | ospf6d/ospf6_abr.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index 4def3c7386..f4202a4a29 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -12,7 +12,7 @@ #include "vty.h" #include "linklist.h" #include "command.h" -#include "thread.h" +#include "frrevent.h" #include "plist.h" #include "filter.h" @@ -515,11 +515,21 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, summary->path.origin.id = ADV_ROUTER_IN_PREFIX(&route->prefix); } else { + struct ospf6_lsa *old; + summary->path.origin.type = htons(OSPF6_LSTYPE_INTER_PREFIX); - summary->path.origin.id = ospf6_new_ls_id( - summary->path.origin.type, - summary->path.origin.adv_router, area->lsdb); + + /* Try to reuse LS-ID from previous running instance. */ + old = ospf6_find_inter_prefix_lsa(area->ospf6, area, + &route->prefix); + if (old) + summary->path.origin.id = old->header->id; + else + summary->path.origin.id = ospf6_new_ls_id( + summary->path.origin.type, + summary->path.origin.adv_router, + area->lsdb); } summary = ospf6_route_add(summary, summary_table); } else { |
