More on edges.
This commit is contained in:
parent
3cd238f4e3
commit
cbd03caece
1 changed files with 26 additions and 1 deletions
|
@ -12,7 +12,7 @@ maintain a stable network.
|
||||||
provided that the entire resulting derived work is distributed
|
provided that the entire resulting derived work is distributed
|
||||||
under the terms of a permission notice identical to this one.
|
under the terms of a permission notice identical to this one.
|
||||||
|
|
||||||
$Id: CONNECTIVITY,v 1.1.2.6 2001/07/23 22:06:22 guus Exp $
|
$Id: CONNECTIVITY,v 1.1.2.7 2001/07/24 08:51:36 guus Exp $
|
||||||
|
|
||||||
1. Problem
|
1. Problem
|
||||||
==========
|
==========
|
||||||
|
@ -327,3 +327,28 @@ reactivated, without the need of sending a new ADD_EDGE for it. On the other
|
||||||
hand, we mustn't keep to many inactive edges, because we want to keep the
|
hand, we mustn't keep to many inactive edges, because we want to keep the
|
||||||
number of known edges linear to the number of hosts (otherwise the size of the
|
number of known edges linear to the number of hosts (otherwise the size of the
|
||||||
problem will grow quadratically).
|
problem will grow quadratically).
|
||||||
|
|
||||||
|
So, since B didn't deactivate one of it's own edges, it forwards the
|
||||||
|
ADD_EDGE(C,F) to A, which also does a BFS, and so on, until it reaches F. F of
|
||||||
|
course also does a BFS, notes that is is one of it's own edges. It deactivates
|
||||||
|
the edge (C,F), and consequently will not forward the ADD_EDGE(C,F) to C
|
||||||
|
anymore. In the mean time, C got messages from B which will make C do the same.
|
||||||
|
|
||||||
|
Ok, suppose a DEL_EDGE was sent, and it means an inactive edge has to be
|
||||||
|
reactivated. The vertices connected by that edge must exchange their entire
|
||||||
|
knowledge of edges again, because in the mean time other messages could have
|
||||||
|
been sent, which were not properly forwarded. Take this example:
|
||||||
|
|
||||||
|
X C-----D
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
v | |
|
||||||
|
A-----B- - -E
|
||||||
|
|
||||||
|
The edge (B,E) is inactive. X is trying to make a new connection with A. A
|
||||||
|
sends an ADD_EDGE(A,X) to B, which forwards it to C. At that time, the
|
||||||
|
connection between C and D goes down, so C sends a DEL_EDGE(C,D) to B, and D
|
||||||
|
sends a DEL_EDGE(C,D) to E. If we just allow (B,E) to be reactivated again
|
||||||
|
without anything else, then E and D will never have received the ADD_EDGE(A,X).
|
||||||
|
So, B and E have to exchange edges again, and propagate them to the hosts they
|
||||||
|
already know.
|
||||||
|
|
Loading…
Reference in a new issue