mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-06-05 07:52:11 +00:00
Merge pull request #1958 from chiragshah6/ospfv3_dev
ospf6d: Retain inter area border router type-4
This commit is contained in:
commit
cdd174e8d2
@ -912,8 +912,9 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
|
|||||||
ospf6_route_merge_nexthops(old, route);
|
ospf6_route_merge_nexthops(old, route);
|
||||||
|
|
||||||
if (is_debug)
|
if (is_debug)
|
||||||
zlog_debug("%s: Update route: %s nh count %u",
|
zlog_debug("%s: Update route: %s old cost %u new cost %u nh count %u",
|
||||||
__PRETTY_FUNCTION__, buf,
|
__PRETTY_FUNCTION__,
|
||||||
|
buf, old->path.cost, route->path.cost,
|
||||||
listcount(route->nh_list));
|
listcount(route->nh_list));
|
||||||
|
|
||||||
/* Update RIB/FIB */
|
/* Update RIB/FIB */
|
||||||
@ -924,7 +925,8 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
|
|||||||
ospf6_route_delete(route);
|
ospf6_route_delete(route);
|
||||||
} else {
|
} else {
|
||||||
if (is_debug)
|
if (is_debug)
|
||||||
zlog_debug("Install route: %s nh count %u", buf,
|
zlog_debug("%s: Install route: %s cost %u nh count %u",
|
||||||
|
__PRETTY_FUNCTION__, buf, route->path.cost,
|
||||||
listcount(route->nh_list));
|
listcount(route->nh_list));
|
||||||
/* ospf6_ia_add_nw_route (table, &prefix, route); */
|
/* ospf6_ia_add_nw_route (table, &prefix, route); */
|
||||||
ospf6_route_add(route, table);
|
ospf6_route_add(route, table);
|
||||||
|
@ -1631,8 +1631,10 @@ void ospf6_intra_brouter_calculation(struct ospf6_area *oa)
|
|||||||
brouter_id = ADV_ROUTER_IN_PREFIX(&brouter->prefix);
|
brouter_id = ADV_ROUTER_IN_PREFIX(&brouter->prefix);
|
||||||
inet_ntop(AF_INET, &brouter_id, brouter_name,
|
inet_ntop(AF_INET, &brouter_id, brouter_name,
|
||||||
sizeof(brouter_name));
|
sizeof(brouter_name));
|
||||||
|
|
||||||
if (brouter->path.area_id != oa->area_id)
|
if (brouter->path.area_id != oa->area_id)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SET_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE);
|
SET_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE);
|
||||||
|
|
||||||
if (IS_OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER_ID(brouter_id)
|
if (IS_OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER_ID(brouter_id)
|
||||||
@ -1651,8 +1653,10 @@ void ospf6_intra_brouter_calculation(struct ospf6_area *oa)
|
|||||||
|
|
||||||
if (brouter->type != OSPF6_DEST_TYPE_LINKSTATE)
|
if (brouter->type != OSPF6_DEST_TYPE_LINKSTATE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ospf6_linkstate_prefix_id(&brouter->prefix) != htonl(0))
|
if (ospf6_linkstate_prefix_id(&brouter->prefix) != htonl(0))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!CHECK_FLAG(brouter->path.router_bits, OSPF6_ROUTER_BIT_E)
|
if (!CHECK_FLAG(brouter->path.router_bits, OSPF6_ROUTER_BIT_E)
|
||||||
&& !CHECK_FLAG(brouter->path.router_bits,
|
&& !CHECK_FLAG(brouter->path.router_bits,
|
||||||
OSPF6_ROUTER_BIT_B))
|
OSPF6_ROUTER_BIT_B))
|
||||||
@ -1704,10 +1708,36 @@ void ospf6_intra_brouter_calculation(struct ospf6_area *oa)
|
|||||||
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_WAS_REMOVED))
|
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_WAS_REMOVED))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* After iterating spf_table for all routers including
|
||||||
|
* intra brouter, clear mark for remove flag for
|
||||||
|
* inter border router if its adv router present in
|
||||||
|
* SPF table.
|
||||||
|
*/
|
||||||
|
if (brouter->path.type == OSPF6_PATH_TYPE_INTER) {
|
||||||
|
struct prefix adv_prefix;
|
||||||
|
|
||||||
|
ospf6_linkstate_prefix(brouter->path.origin.adv_router,
|
||||||
|
htonl(0), &adv_prefix);
|
||||||
|
|
||||||
|
if (ospf6_route_lookup(&adv_prefix, oa->spf_table)) {
|
||||||
|
if (IS_OSPF6_DEBUG_BROUTER) {
|
||||||
|
zlog_debug("%s: keep inter brouter %s as adv router 0x%x found in spf",
|
||||||
|
__PRETTY_FUNCTION__,
|
||||||
|
brouter_name,
|
||||||
|
brouter->path.origin.adv_router);
|
||||||
|
ospf6_brouter_debug_print(brouter);
|
||||||
|
}
|
||||||
|
UNSET_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE)
|
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE)
|
||||||
&& CHECK_FLAG(brouter->flag, OSPF6_ROUTE_ADD)) {
|
&& CHECK_FLAG(brouter->flag, OSPF6_ROUTE_ADD)) {
|
||||||
UNSET_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE);
|
UNSET_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE);
|
||||||
UNSET_FLAG(brouter->flag, OSPF6_ROUTE_ADD);
|
UNSET_FLAG(brouter->flag, OSPF6_ROUTE_ADD);
|
||||||
|
zlog_debug("%s: EVENT unset REOUTE_REMOVE and ROUTE_ADD brouter %s",
|
||||||
|
__PRETTY_FUNCTION__, brouter_name);
|
||||||
|
ospf6_brouter_debug_print(brouter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE)) {
|
if (CHECK_FLAG(brouter->flag, OSPF6_ROUTE_REMOVE)) {
|
||||||
|
@ -719,10 +719,11 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route,
|
|||||||
SET_FLAG(route->flag, OSPF6_ROUTE_BEST);
|
SET_FLAG(route->flag, OSPF6_ROUTE_BEST);
|
||||||
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
|
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
|
||||||
zlog_info(
|
zlog_info(
|
||||||
"%s %p: route add %p: replacing previous best: %p",
|
"%s %p: route add %p cost %u: replacing previous best: %p cost %u",
|
||||||
ospf6_route_table_name(table),
|
ospf6_route_table_name(table),
|
||||||
(void *)table, (void *)route,
|
(void *)table, (void *)route,
|
||||||
(void *)next);
|
route->path.cost,
|
||||||
|
(void *)next, next->path.cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
route->installed = now;
|
route->installed = now;
|
||||||
@ -743,9 +744,9 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route,
|
|||||||
|
|
||||||
/* Else, this is the brand new route regarding to the prefix */
|
/* Else, this is the brand new route regarding to the prefix */
|
||||||
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
|
if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
|
||||||
zlog_debug("%s %p: route add %p %s : brand new route",
|
zlog_debug("%s %p: route add %p %s cost %u: brand new route",
|
||||||
ospf6_route_table_name(table), (void *)table,
|
ospf6_route_table_name(table), (void *)table,
|
||||||
(void *)route, buf);
|
(void *)route, buf, route->path.cost);
|
||||||
else if (IS_OSPF6_DEBUG_ROUTE(TABLE))
|
else if (IS_OSPF6_DEBUG_ROUTE(TABLE))
|
||||||
zlog_debug("%s: route add: brand new route",
|
zlog_debug("%s: route add: brand new route",
|
||||||
ospf6_route_table_name(table));
|
ospf6_route_table_name(table));
|
||||||
|
Loading…
Reference in New Issue
Block a user