EvaluateUtility(j)
utility = 0
for each member m not equal to i
CL = current latency to node m along route through mesh
NL = new latency to node m along mesh if edge (i, j) is added
if (NL < CL) then
utility += (CL - NL)/CL
return utility
Deciding to remove an edge is similar, except each node i computes the
cost of each link to current neighbor j as follows:
EvaluateCost(j)
Costij = number of members for which i uses j as next hop
Costji = number of members for which j uses i as next hop
return max(Costij , Costji)
It then picks the neighbor with the lowest cost, and drops it if the cost falls
below a certain threshold.
Finally, since the mesh is maintained using what is essentially a distance
vector protocol, it is trivial to run DVMRP to find an appropriate
multicast tree in the mesh. Note that, although it is not possible to prove
that the protocol just described results in the optimum mesh network,
thereby allowing DVMRP to select the best possible multicast tree, both
simulation and extensive practical experience suggests that it does a
good job.