Hello Juliusz,
thanks for your comments. As already pointed out, some of the problems have already been adressed in further development and are already solved in batman-0.3 which implements BATMAN IV. I'll discuss only one thing that was not pointed out yet.
I'm forwarding this mail to olsr and babel because you did so too, but would like to invite everyone who reads this to join the discussion on b.a.t.m.a.n@open-mesh.net (there is no need to scatter the discussion on various mailinglists).
@marek, @elektra: please also forward your answers to the batman-ml.
On Tue, Aug 05, 2008 at 05:02:19PM +0200, Juliusz Chroboczek wrote:
- Persistent loops
BATMAN does not contain any loop avoidance mechanisms, nor any for loop detection. Because of that, BATMAN will cause routing loops in some cases which will last up to PURGE_TIMEOUT seconds (256 seconds by default).
Indeed, consider the following topology:
A l1/| / | S |l3 \ | l2\| B
Suppose also that l2 is a very lossy link, so that B has selected A as its next hop for S.
S crashes, and A switches to B as its next hop for S. At this point, B is still using A as its next hop, so we have a temporary routing loop.
That is wrong. Why should A switch its route to B? S is dead, so it won't emit OGMs. Without receiving OGMs from S, A will not reconsider it's routes to S. Routes are only updated when an OGM from S is received. So the routes will be frozen with the last received OGM of S, and the routing loop you describe will not occur.
This is different from protocols like RIP, where information B would probably send information about S after S' death. This will not happen in BATMAN.
After one window time, both A and B are performing opportunistic routing (Section 6.3.1 of the draft) and hence form a routing loop. I may be missing something, but as far as I can tell, the loop will only be eliminated after a PURGE_TIMEOUT.
Due to the convergence issues outlined in point (1) above, BATMAN needs the opportunistic routing mechanism. However, even in the absence of opportunistic routing, transient loop will arise for up to one window time.
Could you construct an example for a transient loop?
best regards, Simon