The basic issue is that the BGP speaker configured with
"multipath-relax" gets into a control plane <-> data plane
inconsistency; i.e. it advertises only the best path, but installs
multiple paths in the forwarding that have different ASPATHs than the
best. This breaks the basic tool BGP has to detect loops - ASPATH loop
check.
A (distorted) scenario below. I am sure you can come up with
a better example with a bit more time at hand.
...............
: R4 AS1 (10/8)
/:..............
..../......
: R5 AS2
:....\.....
/ \ ...............
/ --:--R1
R6 AS4 : \ AS3
\--------:--- R2
: /
: R3 (10/8)
:..............
In this example,
- R3 in AS3 and R4 in AS1 announce a prefix 10/8. R5 in AS2 receives
the prefix from R1(AS3) and R4(AS1).
- AS2 is configured with 'multipath-relax' and chooses both paths
for multipath forwarding, though it selects AS1's path as best.
- R5 advertises the prefix with AS_PATH "2 1" to R6, and R6 in turn
to R2.
- Because of some specific policy, it is possible that R2(AS3)
chooses R6's path as best. If it happens, there is a loop.
Note that R1-R2-R3 represents the physical connectivity of
the routers in AS3.