On Tue, 10 Nov 2015, Daniel Walton wrote:

Routing loops in BGP are typically caused when you have one node that is
forwarding down a path but is not advertising that path to his peers (ie
multipath scenario and the whole multipath-relax knob).  The proposed
bestpath change does not cause that to happen....

Agreed, those kinds of routing loops won't occur.

I think it is a safe change.

The other issue is where path weights evaluate non-transitively in preference pairwise (or other subset) - even if there is a well-defined prefered route when evaluated collectively. Non-full mesh topologies, i.e. reflection, can lead to non-transitive sub-set preference evaluations and oscillation.

E.g. where you have paths A,B,C. A may be preferred from {A,B,C} and {A,B}, B from {B,C}, but C from {A,C}. Combined with reflectors, where each reflector may have only a partial view, such non-transitive preferences can lead to oscillation.

Raising cluster-list above the ID checks is quite safe if done in concert, as each check has a clear, transitive, partial ordering at all nodes.

(Further, cluster-list is monotonically increasing with path distance, Flavel and Roughan have noted and shown, based on Sobrinho's routing algebra work, that this then guarantees stably converging iBGP, if raised above MED. Including in scenarios where BGP topology and IGP are not aligned).

The question then is, can raising cluster-list above the router-ID cause issues if not done in concert - i.e. introduce any non-transitivities into the preference ordering that weren't there before?

E.g. if it comes down to stage 6 (stage 11 in Quagga's code) then it possible that the originator-ID check prefers C. I'd hesitate to claim that the preferences always remain transitively ordered. Take:

   -A---B-

We just need B to be updated, to eval cluster-list length first, and for there to be clients to the left past A whose cluster-list length is shorter than any clients to the right past B, while A prefers originator-id first and such a client is past B.

E.g. C and E send in an adv for some prefix to reflectors A and D, with B in between:

  E-A---B--X-Y-C

B is updated with the new patch.

1. A chooses E, B chooses XYC - they advertise

2. A chooses XYC from E,XYC based on originator-id C; withdraws E from B
2. B chooses E from E,XYC based on CL length; withdraws DC from A

3. A chooses E, B chooses XYC - they advertise

That one's a bit racy and depends on them advertising and processing going at the same rate. They may well happen to fall into a stable state if there's any mismatch. However, it doesn't seem inherently stable, and could from stability still go back to instability after a routing event.

That's not a good sign.

regards,
--
Paul Jakma      [email protected]  @pjakma Key ID: 64A2FF6A
Fortune:
"It ain't so much the things we don't know that get us in trouble.  It's the
things we know that ain't so."
-- Artemus Ward aka Charles Farrar Brown

_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to