Is it just me, or does the mpath code do strange stuff, at least under asp-ath relaxed? E.g. if I run a set of bgpds in a ring, with each connected to the previous and next 2 bgpd instances in the ring (using a tweaked version of tools/multiple-bgpd.sh), current master without mpath gives:

# sh ip bg 10.7.0.0/24
BGP routing table entry for 10.7.0.0/24
Paths: (4 available, best #4, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  192.168.145.2 192.168.145.3 192.168.145.5
  64563 64561 64567
    192.168.145.3 from 192.168.145.3 (192.168.145.3)
      Origin IGP, localpref 100, valid, external
      Community: 64563:1
      Extended Community: RT:64561:1 RT:64563:1 RT:64567:1 SoO:64561:2 
SoO:64563:2 SoO:64567:2
      Last update: Wed Dec  2 09:47:14 2015

  64562 64568 64567
    192.168.145.2 from 192.168.145.2 (192.168.145.2)
      Origin IGP, localpref 100, valid, external
      Community: 64562:1
      Extended Community: RT:64562:1 RT:64567:1 RT:64568:1 SoO:64562:2 
SoO:64567:2 SoO:64568:2
      Last update: Wed Dec  2 09:46:45 2015

  64565 64567
    192.168.145.5 from 192.168.145.5 (192.168.145.5)
      Origin IGP, localpref 100, valid, external
      Community: 64565:1
      Extended Community: RT:64565:1 RT:64567:1 SoO:64565:2 SoO:64567:2
      Last update: Wed Dec  2 09:46:44 2015

  64566 64567
    192.168.145.6 from 192.168.145.6 (192.168.145.6)
      Origin IGP, localpref 100, valid, external, best
      Community: 64566:1
      Extended Community: RT:64566:1 RT:64567:1 SoO:64566:2 SoO:64567:2
      Last update: Wed Dec  2 09:46:15 2015

The ASNs are 64560+x and each advertises 10.x.0.0/24 (amongst other things). There are 8 in total in the ring, and the above is x == 4 / AS64564. So the peerings are:

peers x peers
  7 8 1 2 3
  8 1 2 3 4
  1 2 3 4 5
  2 3 4 5 6
  3 4 5 6 7
  4 5 6 7 8
  5 6 7 8 1
  6 7 8 1 2


4 has paths 453, 423 and 43 to 3; and paths 457, 467, 4287 and 4317 to 7.

Look what happens if I set:

  maximum-paths 32
  bgp bestpath as-path multipath-relax

on all the bgpds. This is the view from 4:

# sh ip bg 10.7.0.0/24
BGP routing table entry for 10.7.0.0/24
Paths: (4 available, best #4, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  192.168.145.2 192.168.145.3 192.168.145.6
  64563 {64561,64562,64565,64567,64568}
    192.168.145.3 from 192.168.145.3 (192.168.145.3)
      Origin IGP, localpref 100, valid, external, multipath
      Community: 64563:1
      Extended Community: RT:64561:1 RT:64562:1 RT:64563:1 RT:64565:1 
RT:64567:1 RT:64568:1 SoO:64561:2 SoO:64562:2 SoO:64563:2 SoO:64565:2 
SoO:64567:2 SoO:64568:2
      Last update: Wed Dec  2 09:55:33 2015

  64562 {64561,64567,64568}
    192.168.145.2 from 192.168.145.2 (192.168.145.2)
      Origin IGP, localpref 100, valid, external, multipath
      Community: 64562:1
      Extended Community: RT:64561:1 RT:64562:1 RT:64567:1 RT:64568:1 
SoO:64561:2 SoO:64562:2 SoO:64567:2 SoO:64568:2
      Last update: Wed Dec  2 09:55:32 2015

  64566 64567
    192.168.145.6 from 192.168.145.6 (192.168.145.6)
      Origin IGP, localpref 100, valid, external, multipath
      Community: 64566:1
      Extended Community: RT:64566:1 RT:64567:1 SoO:64566:2 SoO:64567:2
      Last update: Wed Dec  2 09:53:32 2015

  64565 64567
    192.168.145.5 from 192.168.145.5 (192.168.145.5)
      Origin IGP, localpref 100, valid, external, multipath, best
      Community: 64565:1
      Extended Community: RT:64565:1 RT:64567:1 SoO:64565:2 SoO:64567:2
      Last update: Wed Dec  2 09:53:03 2015

That looks like it's multipathing over /all/ the paths to 7, including the longer 3-hop paths. Also, the aggregates don't really make sense, do they?

It is advertising this aggregate back to the neighbours from whose routes the aggregate was constructed:

# sh ip bgp neighbors 192.168.145.2 advertised-routes *> 10.7.0.0/24 192.168.145.4 0
{64561,64562,64563,64565,64566,64567,64568} i
# sh ip bgp neighbors 192.168.145.3 advertised-routes
*> 10.7.0.0/24 192.168.145.4 0 {64561,64562,64563,64565,64566,64567,64568} i
# sh ip bgp neighbors 192.168.145.5 advertised-routes
# sh ip bgp neighbors 192.168.145.6 advertised-routes
*> 10.7.0.0/24 192.168.145.4 0 {64561,64562,64565,64566,64567,64568} i

So, in terms of the advertised routes and deciding who to advertise a route onto, it is taking only the 'best' path via 6 into consideration.

Does this make sense to anyone? It seems seriously borken to me...

Also, the mpath code probably should have been implemented using the existing aggregation code...

regards,
--
Paul Jakma      [email protected]  @pjakma Key ID: 64A2FF6A
Fortune:
I have discovered the art of deceiving diplomats. I tell them the truth
and they never believe me.
                -- Camillo Di Cavour

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

Reply via email to