mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 12:49:18 +00:00
Merge pull request #1991 from chiragshah6/ospfv3_dev
ospf6d: fix loop in ABRs
This commit is contained in:
commit
9e1d8e8067
@ -695,6 +695,7 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
|
|||||||
int is_debug = 0;
|
int is_debug = 0;
|
||||||
struct ospf6_inter_prefix_lsa *prefix_lsa = NULL;
|
struct ospf6_inter_prefix_lsa *prefix_lsa = NULL;
|
||||||
struct ospf6_inter_router_lsa *router_lsa = NULL;
|
struct ospf6_inter_router_lsa *router_lsa = NULL;
|
||||||
|
struct ospf6_path *path;
|
||||||
|
|
||||||
memset(&prefix, 0, sizeof(prefix));
|
memset(&prefix, 0, sizeof(prefix));
|
||||||
|
|
||||||
@ -900,6 +901,9 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
|
|||||||
|
|
||||||
ospf6_route_copy_nexthops(route, abr_entry);
|
ospf6_route_copy_nexthops(route, abr_entry);
|
||||||
|
|
||||||
|
path = ospf6_path_dup(&route->path);
|
||||||
|
ospf6_copy_nexthops(path->nh_list, abr_entry->nh_list);
|
||||||
|
listnode_add_sort(route->paths, path);
|
||||||
|
|
||||||
/* (7) If the routes are identical, copy the next hops over to existing
|
/* (7) If the routes are identical, copy the next hops over to existing
|
||||||
route. ospf6's route table implementation will otherwise string both
|
route. ospf6's route table implementation will otherwise string both
|
||||||
|
@ -1326,6 +1326,7 @@ void ospf6_intra_prefix_lsa_add(struct ospf6_lsa *lsa)
|
|||||||
char buf[PREFIX2STR_BUFFER];
|
char buf[PREFIX2STR_BUFFER];
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
int direct_connect = 0;
|
int direct_connect = 0;
|
||||||
|
struct ospf6_path *path;
|
||||||
|
|
||||||
if (OSPF6_LSA_IS_MAXAGE(lsa))
|
if (OSPF6_LSA_IS_MAXAGE(lsa))
|
||||||
return;
|
return;
|
||||||
@ -1417,9 +1418,14 @@ void ospf6_intra_prefix_lsa_add(struct ospf6_lsa *lsa)
|
|||||||
ospf6_route_copy_nexthops(route, ls_entry);
|
ospf6_route_copy_nexthops(route, ls_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
path = ospf6_path_dup(&route->path);
|
||||||
|
ospf6_copy_nexthops(path->nh_list, route->path.nh_list);
|
||||||
|
listnode_add_sort(route->paths, path);
|
||||||
|
|
||||||
if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX)) {
|
if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX)) {
|
||||||
prefix2str(&route->prefix, buf, sizeof(buf));
|
prefix2str(&route->prefix, buf, sizeof(buf));
|
||||||
zlog_debug(" route %s add with nh count %u", buf,
|
zlog_debug(" route %s add with cost %u nh count %u",
|
||||||
|
buf, route->path.cost,
|
||||||
listcount(route->nh_list));
|
listcount(route->nh_list));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1735,9 +1741,6 @@ void ospf6_intra_brouter_calculation(struct ospf6_area *oa)
|
|||||||
&& 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)) {
|
||||||
|
@ -460,9 +460,6 @@ int ospf6_route_cmp(struct ospf6_route *ra, struct ospf6_route *rb)
|
|||||||
if (ra->type != rb->type)
|
if (ra->type != rb->type)
|
||||||
return (ra->type - rb->type);
|
return (ra->type - rb->type);
|
||||||
|
|
||||||
if (ra->path.area_id != rb->path.area_id)
|
|
||||||
return (ntohl(ra->path.area_id) - ntohl(rb->path.area_id));
|
|
||||||
|
|
||||||
if (ra->path.type != rb->path.type)
|
if (ra->path.type != rb->path.type)
|
||||||
return (ra->path.type - rb->path.type);
|
return (ra->path.type - rb->path.type);
|
||||||
|
|
||||||
@ -476,6 +473,9 @@ int ospf6_route_cmp(struct ospf6_route *ra, struct ospf6_route *rb)
|
|||||||
return (ra->path.cost - rb->path.cost);
|
return (ra->path.cost - rb->path.cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ra->path.area_id != rb->path.area_id)
|
||||||
|
return (ntohl(ra->path.area_id) - ntohl(rb->path.area_id));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user