Chris,
Store_Results should be called after nexthop is updated, The
last node processed and its nexthop is not updated I feel.
I might be wrong, Please correct me if I am wrong.
Base :
SPF_No_Traverse_Block_Root(spf_root, block_root, direction)
Initialize spf_heap to empty
Initialize nodes' spf_metric to infinity and next_hops to empty
spf_root.spf_metric = 0
insert(spf_heap, spf_root)
while (spf_heap is not empty)
min_node = remove_lowest(spf_heap)
Store_Results(min_node, direction)
if ((min_node is spf_root) or (min_node is not block_root))
foreach interface intf of min_node
if ( ( ((direction is FORWARD) and intf.OUTGOING) or
((direction is REVERSE) and intf.INCOMING) )
and In_Common_Block(spf_root, intf.remote_node) )
path_metric = min_node.spf_metric + intf.metric
if path_metric < intf.remote_node.spf_metric
intf.remote_node.spf_metric = path_metric
if min_node is spf_root
intf.remote_node.next_hops = make_list(intf)
else
intf.remote_node.next_hops = min_node.next_hops
insert_or_update(spf_heap, intf.remote_node)
else if path_metric is intf.remote_node.spf_metric
if min_node is spf_root
add_to_list(intf.remote_node.next_hops, intf)
else
add_list_to_list(intf.remote_node.next_hops,
min_node.next_hops)
Modified :
SPF_No_Traverse_Block_Root(spf_root, block_root, direction)
Initialize spf_heap to empty
Initialize nodes' spf_metric to infinity and next_hops to empty
spf_root.spf_metric = 0
insert(spf_heap, spf_root)
while (spf_heap is not empty)
min_node = remove_lowest(spf_heap)
Store_Results(min_node, direction)
if ((min_node is spf_root) or (min_node is not block_root))
foreach interface intf of min_node
if ( ( ((direction is FORWARD) and intf.OUTGOING) or
((direction is REVERSE) and intf.INCOMING) )
and In_Common_Block(spf_root, intf.remote_node) )
path_metric = min_node.spf_metric + intf.metric
if path_metric < intf.remote_node.spf_metric
intf.remote_node.spf_metric = path_metric
if min_node is spf_root
intf.remote_node.next_hops = make_list(intf)
else
intf.remote_node.next_hops = min_node.next_hops
insert_or_update(spf_heap, intf.remote_node)
else if path_metric is intf.remote_node.spf_metric
if min_node is spf_root
add_to_list(intf.remote_node.next_hops, intf)
else
add_list_to_list(intf.remote_node.next_hops,
min_node.next_hops)
Store_Results(min_node, direction)
Thanks & Regards
Anil S N
"Be liberal in what you accept, and conservative in what you send" - Jon Postel
From: Anil Kumar S N (VRP Network BL)
Sent: 23 June 2015 21:29
To: 'Chris Bowers'; Gábor Sándor Enyedi; [email protected]; Alia
Atlas; [email protected]
Cc: [email protected]; [email protected]
Subject: RE: [rtgwg] draft-ietf-rtgwg-mrt-frr-algorithm-03
Chris,
Yes it definitely makes sense, thanks I should have thought
about this.
Thanks & Regards
Anil S N
"Be liberal in what you accept, and conservative in what you send" - Jon Postel
From: Chris Bowers [mailto:[email protected]]
Sent: 23 June 2015 20:19
To: Anil Kumar S N (VRP Network BL); Gábor Sándor Enyedi;
[email protected]<mailto:[email protected]>; Alia Atlas;
[email protected]<mailto:[email protected]>
Cc: [email protected]<mailto:[email protected]>;
[email protected]<mailto:[email protected]>
Subject: RE: [rtgwg] draft-ietf-rtgwg-mrt-frr-algorithm-03
Anil,
Reusing the topology below, R (the gadag_root) will have block_id=0 while
A,B,C,D and E will have block_id=1. so the first OR'd condition in
In_Common_Block(R,y) will always be false when determining if R is in the same
block as A,B,C,D, or E. The third OR'd condition will also be false because
R.localroot = None. However, the second OR'd condition will be true because R
= B.localroot (for example), returning true for In_Common_Block(R,B). Does this
make sense?
Chris
[E]----|
(5,0) |
| |
| |
[R] [D]---[C]
(0,0) (4,0) (3,0)
| |
| |
[A]---------[B]
(1,0) (2,0)
From: Anil Kumar S N (VRP Network BL) [mailto:[email protected]]
Sent: Tuesday, June 23, 2015 6:04 AM
To: Chris Bowers; Gábor Sándor Enyedi;
[email protected]<mailto:[email protected]>; Alia Atlas;
[email protected]<mailto:[email protected]>
Cc: [email protected]<mailto:[email protected]>;
[email protected]<mailto:[email protected]>
Subject: RE: [rtgwg] draft-ietf-rtgwg-mrt-frr-algorithm-03
Hi Chirs,
gadag_root.localroot will remain as None at the end of algorithm and
gadag_root.block_id will be 0 (rest of the nodes in the block will be 1 higher
than gadag_root.block_id)
Below psudocode will return false while comparing a node in a block and
gadag_root.
Please correct me if I am wrong.
In_Common_Block(x, y)
if ( (x.block_id is y.block_id)
or (x is y.localroot) or (y is x.localroot) )
return true
return false
Thanks & Regards
Anil S N
"Be liberal in what you accept, and conservative in what you send" - Jon Postel
_______________________________________________
rtgwg mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/rtgwg