[FROG] Why no ecmp route?

Simon Jones batmanustc at gmail.com
Thu Jun 11 07:28:52 UTC 2020


Hi all,

Now I use quagga-0.99 as BGP stack in testbed, TOPO as bellow:
```
routerA |---
                 |
                 ------- DUT
                 |
routerB |---
```

routerA and routerB is aristaOS, its config is:
```
some static route and route-map

router bgp 64600
   router-id 100.1.0.29
   neighbor 10.0.0.56 remote-as 65100
   neighbor 10.0.0.56 description 65100
   neighbor 10.0.0.56 default-originate route-map DEFAULT_ROUTES
   neighbor 10.0.0.56 maximum-routes 12000
   neighbor fc00::71 remote-as 65100
   neighbor fc00::71 description 65100
   neighbor fc00::71 default-originate route-map DEFAULT_ROUTES
   neighbor fc00::71 maximum-routes 12000
   redistribute static route-map PREPENDAS # this is used for redistribute
local static route into bgp.rib and zebr.rib
   address-family ipv4
      network 100.1.0.29/32
   !
   address-family ipv6
      neighbor fc00::71 activate
      network 2064:100::1d/128
!
```

DUT is out router, use quagga-0.99, its config is:
```
router bgp 65100
 bgp router-id 10.1.0.32
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 bgp bestpath as-path multipath-relax # use this for ECMP
 network 10.1.0.32/32
 network 192.168.0.0/21
 neighbor 10.0.0.57 remote-as 64600
 neighbor 10.0.0.57 description ARISTA01T1
 neighbor 10.0.0.57 timers 3 10
 neighbor 10.0.0.57 activate
 neighbor 10.0.0.59 remote-as 64600
 neighbor 10.0.0.59 description ARISTA02T1
 neighbor 10.0.0.59 timers 3 10
 neighbor 10.0.0.59 activate
 neighbor 10.0.0.61 remote-as 64600
 neighbor 10.0.0.61 description ARISTA03T1
 neighbor 10.0.0.61 timers 3 10
 neighbor 10.0.0.61 activate
 neighbor 10.0.0.63 remote-as 64600
 neighbor 10.0.0.63 description ARISTA04T1
 neighbor 10.0.0.63 timers 3 10
 neighbor 10.0.0.63 activate
 neighbor fc00::72 remote-as 64600
 neighbor fc00::72 description ARISTA01T1
 neighbor fc00::72 timers 3 10
 neighbor fc00::76 remote-as 64600
 neighbor fc00::76 description ARISTA02T1
 neighbor fc00::76 timers 3 10
 neighbor fc00::7a remote-as 64600
 neighbor fc00::7a description ARISTA03T1
 neighbor fc00::7a timers 3 10
 neighbor fc00::7e remote-as 64600
 neighbor fc00::7e description ARISTA04T1
 neighbor fc00::7e timers 3 10
!
 address-family ipv6
 network fc00:1::32/128
 neighbor fc00::72 activate
 neighbor fc00::76 activate
 neighbor fc00::7a activate
 neighbor fc00::7e activate
 exit-address-family
!
ip forwarding
ipv6 forwarding
!
line vty
!
end
```

But when run this testbed, I found there is no ECMP route on DUT, as bellow:
```
test-hostname(config-router)# do show ip bgp 193.7.248.128/25
BGP routing table entry for 193.7.248.128/25
Paths: (4 available, best #4, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  10.0.0.57 10.0.0.61 10.0.0.63
  64600 65534 64791 65115
    10.0.0.57 from 10.0.0.57 (100.1.0.29)
      Origin incomplete, localpref 100, valid, external
      Last update: Wed Jun 10 09:47:27 2020

  64600 65534 64791 65115
    10.0.0.63 from 10.0.0.63 (100.1.0.32)
      Origin incomplete, localpref 100, valid, external
      Last update: Wed Jun 10 06:33:03 2020

  64600 65534 64791 65115
    10.0.0.61 from 10.0.0.61 (100.1.0.31)
      Origin incomplete, localpref 100, valid, external
      Last update: Wed Jun 10 06:32:58 2020

  64600 65534 64791 65115
    10.0.0.59 from 10.0.0.59 (100.1.0.30)
      Origin incomplete, localpref 100, valid, external, best
      Last update: Wed Jun 10 06:32:56 2020

test-hostname(config-router)# do show ip route 193.7.248.128/25
Routing entry for 193.7.248.128/25
  Known via "bgp", distance 20, metric 0, best
  Last update 03:15:00 ago
  * 10.0.0.59, via PortChannel0002
```

Why???

Compare with another environment:
```
BJ-GH-M1F203-B02-TEST-12# show ip bgp 1.1.1.224/32
BGP routing table entry for 1.1.1.224/32
Paths: (2 available, best #1, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  100.0.34.222
  235 224
    100.0.56.223 from 100.0.56.223 (100.0.3.223)
      Origin IGP, localpref 100, valid, external, multipath, best
      Last update: Tue Jun  9 06:08:59 2020

  235 224
    100.0.34.222 from 100.0.34.222 (100.0.55.222)
      Origin IGP, localpref 100, valid, external, multipath
      Last update: Tue Jun  9 06:08:59 2020

BJ-GH-M1F203-B02-TEST-12# show ip route 1.1.1.224/32
Routing entry for 1.1.1.224/32
  Known via "bgp", distance 20, metric 0, best
  Last update 1d02h19m ago
  * 100.0.56.223, via Ethernet53
  * 100.0.34.222, via Ethernet50
```

Why does this have ECMP???

For detail, I found there is only one difference, which is `Origin IGP` and
`Origin imcomplete`.
But I check code, in `bgp_path_info_cmp` function, in step 11, the `paths_eq`
only depends on `BGP_FLAG_ASPATH_MULTIPATH_RELAX` and something, nothing
with `Origin`.

So why there is no ECMP in my testbed???

----
Simon Jones
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.frrouting.org/pipermail/frog/attachments/20200611/efd211e5/attachment.htm>


More information about the frog mailing list