User Tools

Site Tools


documentation:examples:ecmp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
documentation:examples:ecmp [2018/07/13 10:31] – external edit 127.0.0.1documentation:examples:ecmp [2024/03/28 23:19] (current) – [Equal-cost multi-path routing (ECMP)] olivier
Line 1: Line 1:
 ====== Equal-cost multi-path routing (ECMP) ====== ====== Equal-cost multi-path routing (ECMP) ======
- 
-This lab show an ECMP (feature called RADIX_MPATH on FreeBSD) routing example using BSDRP (FreeBSD 11). 
  
 ===== Presentation ===== ===== Presentation =====
  
 +<note warning>Bhyve doesn't support emulating multiqueue NIC, so RSS flow-id could not be tested using a bhyve based lab: Had to use physical lab</note>
 ==== Network diagram ==== ==== Network diagram ====
  
 Here is the logical and physical view: Here is the logical and physical view:
  
-{{:documentation:examples:labs.examples.ecmp.png|}}+{{:documentation:examples:bsdrp-lab-mpath.png|}}
  
 ===== Setting-up the lab ===== ===== Setting-up the lab =====
Line 15: Line 14:
 ==== Downloading BSD Router Project images ==== ==== Downloading BSD Router Project images ====
  
-Download BSDRP serial image (prevent to have to use an X display) on Sourceforge.+Download BSDRP serial image on Sourceforge and upload them to the 2 ECMP routers.
  
-==== Download Lab scripts ===== 
- 
-More information on these BSDRP lab scripts available on [[documentation:examples:How to build a BSDRP router lab]]. 
- 
-Start the lab with 6 routers. 
-With bhyve under FreeBSD: 
-<code> 
-user:~ # BSDRP-lab-bhyve.sh -i BSDRP.amd64/BSDRP-1.71-full-amd64-serial.img.xz -n 6 
-BSD Router Project (http://bsdrp.net) - bhyve full-meshed lab script 
-Setting-up a virtual lab with 6 VM(s): 
-- Working directory: /tmp/BSDRP 
-- Each VM have 1 core(s) and 256M RAM 
-- Switch mode: bridge + tap 
-- 0 LAN(s) between all VM 
-- Full mesh Ethernet links between each VM 
-VM 1 have the following NIC: 
-- vtnet0 connected to VM 2. 
-- vtnet1 connected to VM 3. 
-- vtnet2 connected to VM 4. 
-- vtnet3 connected to VM 5. 
-- vtnet4 connected to VM 6. 
-VM 2 have the following NIC: 
-- vtnet0 connected to VM 1. 
-- vtnet1 connected to VM 3. 
-- vtnet2 connected to VM 4. 
-- vtnet3 connected to VM 5. 
-- vtnet4 connected to VM 6. 
-VM 3 have the following NIC: 
-- vtnet0 connected to VM 1. 
-- vtnet1 connected to VM 2. 
-- vtnet2 connected to VM 4. 
-- vtnet3 connected to VM 5. 
-- vtnet4 connected to VM 6. 
-VM 4 have the following NIC: 
-- vtnet0 connected to VM 1. 
-- vtnet1 connected to VM 2. 
-- vtnet2 connected to VM 3. 
-- vtnet3 connected to VM 5. 
-- vtnet4 connected to VM 6. 
-VM 5 have the following NIC: 
-- vtnet0 connected to VM 1. 
-- vtnet1 connected to VM 2. 
-- vtnet2 connected to VM 3. 
-- vtnet3 connected to VM 4. 
-- vtnet4 connected to VM 6. 
-VM 6 have the following NIC: 
-- vtnet0 connected to VM 1. 
-- vtnet1 connected to VM 2. 
-- vtnet2 connected to VM 3. 
-- vtnet3 connected to VM 4. 
-- vtnet4 connected to VM 5. 
-For connecting to VM'serial console, you can use: 
-- VM 1 : cu -l /dev/nmdm1B 
-- VM 2 : cu -l /dev/nmdm2B 
-- VM 3 : cu -l /dev/nmdm3B 
-- VM 4 : cu -l /dev/nmdm4B 
-- VM 5 : cu -l /dev/nmdm5B 
-- VM 6 : cu -l /dev/nmdm6B 
-</code> 
  
 ===== Static routing setup ===== ===== Static routing setup =====
  
-==== Router 1 (client) ====+==== Client ====
  
-R1 is configured as a simple host with multiples aliases:+simple host with static routes:
  
 <code> <code>
-sysrc hostname=R1 +sysrc hostname=client \ 
-sysrc gateway_enable=NO +  gateway_enable=NO \ 
-sysrc ipv6_gateway_enable=NO +  ipv6_gateway_enable=NO \ 
-sysrc ifconfig_vtnet0="inet 10.0.12.1/24" +  ifconfig_igb1="inet 10.0.12.1/24" \ 
-sysrc ifconfig_vtnet0_alias1="inet 10.0.12.11/32+  ifconfig_igb1_ipv6="inet6 2001:db8:12::3 prefixlen 64\ 
-sysrc ifconfig_vtnet0_alias2="inet 10.0.12.21/32+  static_routes="LAB\ 
-sysrc ifconfig_vtnet0_alias3="inet 10.0.12.31/32" +  route_LAB="-net 10.0.0.0/16 10.0.12.2\ 
-sysrc ifconfig_vtnet0_alias4="inet 10.0.12.41/32" +  ipv6_static_routes="LAB\ 
-sysrc ifconfig_vtnet0_alias5="inet 10.0.12.51/32+  ipv6_route_LAB="2001:db8:: -prefixlen 32 2001:db8:12::2"
-sysrc ifconfig_vtnet0_ipv6="inet6 2001:db8:12::1 prefixlen 64+
-sysrc ifconfig_vtnet0_alias61="inet6 2001:db8:12::11 prefixlen 64" +
-sysrc ifconfig_vtnet0_alias62="inet6 2001:db8:12::21 prefixlen 64" +
-sysrc ifconfig_vtnet0_alias63="inet6 2001:db8:12::31 prefixlen 64" +
-sysrc ifconfig_vtnet0_alias64="inet6 2001:db8:12::41 prefixlen 64" +
-sysrc ifconfig_vtnet0_alias65="inet6 2001:db8:12::51 prefixlen 64" +
-sysrc defaultrouter="10.0.12.2" +
-sysrc ipv6_defaultrouter="2001:db8:12::2"+
 service hostname restart service hostname restart
 service netif restart service netif restart
Line 107: Line 39:
 </code> </code>
  
-==== Router 2 (ECMP router) ====+==== R1 (ECMP router) ====
  
-R2 is a router with ECMP: 2 static routes toward the same destination but using 2 different next-hop.+R1 is a router with ECMP: 2 static routes toward the same destination but using 2 different next-hop.
  
 <code> <code>
-sysrc hostname=R2 + 
-sysrc ifconfig_vtnet0="inet 10.0.12.2/24" +sysrc hostname=R1 \ 
-sysrc ifconfig_vtnet1="inet 10.0.23.2/24+  gateway_enable=YES \ 
-sysrc ifconfig_vtnet2="inet 10.0.24.2/24" +  ipv6_gateway_enable=YES \ 
-sysrc ifconfig_vtnet0_ipv6="inet6 2001:db8:12::2 prefixlen 64" +  ifconfig_igb0="inet 10.0.12.2/24" \ 
-sysrc ifconfig_vtnet1_ipv6="inet6 2001:db8:23::prefixlen 64+  ifconfig_igb0_ipv6="inet6 2001:db8:12::prefixlen 64\ 
-sysrc ifconfig_vtnet2_ipv6="inet6 2001:db8:24::2 prefixlen 64" +  ifconfig_igb1="inet 10.0.231.2/24" \ 
-sysrc static_routes="R3R6 R3R5 R4R6 R4R5+  ifconfig_igb1_ipv6="inet6 2001:db8:231::2 prefixlen 64" \ 
-sysrc route_R3R6="-net 10.0.56.0/24 10.0.23.3" +  ifconfig_igb2="inet 10.0.232.2/24\ 
-sysrc route_R3R5="-net 10.0.35.0/24 10.0.23.3" +  ifconfig_igb2_ipv6="inet6 2001:db8:232::2 prefixlen 64" \ 
-sysrc route_R4R6="-net 10.0.56.0/24 10.0.24.4" +  static_routes="MPATH1 MPATH2\ 
-sysrc route_R4R5="-net 10.0.45.0/24 10.0.24.4+  route_MPATH1="-net 10.0.0.0/16 10.0.231.3" \ 
-sysrc ipv6_static_routes="R3R6 R3R5 R4R6 R4R5+  route_MPATH2="-net 10.0.0.0/16 10.0.232.3\ 
-sysrc ipv6_route_R3R6="2001:db8:56:: -prefixlen 64 2001:db8:23::3" +  ipv6_static_routes="MPATH1 MPATH2\ 
-sysrc ipv6_route_R3R5="2001:db8:35:: -prefixlen 64 2001:db8:23::3+  ipv6_route_MPATH1="2001:db8:: -prefixlen 32 2001:db8:231::3" \ 
-sysrc ipv6_route_R4R6="2001:db8:56:: -prefixlen 64 2001:db8:24::4" +  ipv6_route_MPATH2="2001:db8:: -prefixlen 32 2001:db8:232::3"
-sysrc ipv6_route_R4R5="2001:db8:45:: -prefixlen 64 2001:db8:24::4"+
 service hostname restart service hostname restart
 service netif restart service netif restart
Line 135: Line 66:
 </code> </code>
  
-==== Router 3 (simple router) ====+Checking static route with multiple next-hop:
  
-R3 is a simple router.+<code> 
 +root@R1:~ # netstat -rn4 | grep 10.0.0.0/16 
 +10.0.0.0/16        10.0.231.3         UGS        igb1 
 +10.0.0.0/16        10.0.232.3         UGS        igb2 
 + 
 +root@R1:~ # netstat -4onW 
 +Nexthop data 
 + 
 +Internet: 
 +Idx   Type         IFA                Gateway             Flags      Use Mtu         Netif     Addrif Refcnt Prepend 
 +1       v4/resolve 127.0.0.1          lo0/resolve        H              16384        lo0               2 
 +2       v4/resolve 10.0.12.2          igb0/resolve                       1500       igb0               2 
 +3       v4/resolve 127.0.0.1          lo0/resolve        HS            0  16384        lo0      igb0     2 
 +4       v4/resolve 10.0.231.2         igb1/resolve                       1500       igb1               2 
 +5       v4/resolve 127.0.0.1          lo0/resolve        HS            0  16384        lo0      igb1     2 
 +6       v4/resolve 10.0.232.2         igb2/resolve                       1500       igb2               2 
 +7       v4/resolve 127.0.0.1          lo0/resolve        HS            0  16384        lo0      igb2     2 
 +8            v4/gw 10.0.231.2         10.0.231.3         GS            0   1500       igb1               1 
 +9            v4/gw 10.0.232.2         10.0.232.3         GS            0   1500       igb2               1 
 + 
 +root@R1:~ # netstat -6onW 
 +Nexthop data 
 + 
 +Internet6: 
 +Idx   Type         IFA                           Gateway                        Flags      Use Mtu       Netif   Addrif Refcnt Prepend 
 +1       v6/resolve ::1                           lo0/resolve                   HS            0  16384      lo0             2 
 +2       v6/resolve fe80::1%lo0                   lo0/resolve                   HS            0  16384      lo0             2 
 +3       v6/resolve fe80::1%lo0                   lo0/resolve                                  16384      lo0             2 
 +4       v6/resolve ::1                           lo0/resolve                   HS            0  16384      lo0    igb0     3 
 +5       v6/resolve fe80::20d:b9ff:fe41:ca3c%igb0 igb0/resolve                                0   1500     igb0             3 
 +6       v6/resolve ::1                           lo0/resolve                   HS            0  16384      lo0    igb1     3 
 +7       v6/resolve fe80::20d:b9ff:fe41:ca3d%igb1 igb1/resolve                                0   1500     igb1             3 
 +8       v6/resolve ::1                           lo0/resolve                   HS            0  16384      lo0    igb2     3 
 +9       v6/resolve fe80::20d:b9ff:fe41:ca3e%igb2 igb2/resolve                                0   1500     igb2             3 
 +10           v6/gw ::1                           ::                          GRS            16384      lo0             5 
 +11           v6/gw 2001:db8:231::              2001:db8:231::              GS            0   1500     igb1             1 
 +12           v6/gw 2001:db8:232::              2001:db8:232::              GS            0   1500     igb2             1 
 +</code> 
 +==== R2 (ECMP router) ==== 
 + 
 +R2 is like R1, a router with ECMP: 2 static routing toward the same destination but using 2 different next-hop..
  
 <code> <code>
-sysrc hostname=R3 +sysrc hostname=R2 \ 
-sysrc ifconfig_vtnet1="inet 10.0.23.3/24" +  gateway_enable=YES \ 
-sysrc ifconfig_vtnet3="inet 10.0.35.3/24" +  ipv6_gateway_enable=YES \ 
-sysrc ifconfig_vtnet1_ipv6="inet6 2001:db8:23::3 prefixlen 64" +  ifconfig_igb0="inet 10.0.34.3/24" 
-sysrc ifconfig_vtnet3_ipv6="inet6 2001:db8:35::3 prefixlen 64" +  ifconfig_igb0_ipv6="inet6 2001:db8:34::3 prefixlen 64" \ 
-sysrc static_routes="R6 R1+  ifconfig_igb1="inet 10.0.231.3/24" \ 
-sysrc route_R1="-net 10.0.12.0/24 10.0.23.2" +  ifconfig_igb1_ipv6="inet6 2001:db8:231::3 prefixlen 64" \ 
-sysrc route_R6="-net 10.0.56.0/24 10.0.35.5+  ifconfig_igb2="inet 10.0.232.3/24"
-sysrc ipv6_static_routes="R6 R1+  ifconfig_igb2_ipv6="inet6 2001:db8:232::3 prefixlen 64" \ 
-sysrc ipv6_route_R1="2001:db8:12:: -prefixlen 64 2001:db8:23::2" +  static_routes="DST1 DST2 SRC1 SRC2\ 
-sysrc ipv6_route_R6="2001:db8:56:: -prefixlen 64 2001:db8:35::5"+  route_DST1="-net 10.0.0.0/16 10.0.231.4"
 +  route_DST2="-net 10.0.0.0/16 10.0.232.4"
 +  route_SRC1="-net 10.0.12.0/24 10.0.231.2" \ 
 +  route_SRC2="-net 10.0.12.0/24 10.0.232.2\ 
 +  ipv6_static_routes="DST1 DST2 SRC1 SRC2\ 
 +  ipv6_route_MPATH1="2001:db8:: -prefixlen 32 2001:db8:231::4"
 +  ipv6_route_MPATH2="2001:db8:: -prefixlen 32 2001:db8:231::4"
 +  ipv6_route_SRC1="2001:db8:12:: -prefixlen 64 2001:db8:231::2" \ 
 +  ipv6_route_SRC2="2001:db8:12:: -prefixlen 64 2001:db8:231::2"
 service hostname restart service hostname restart
 service netif restart service netif restart
Line 156: Line 135:
 config save config save
 </code> </code>
 +==== Server ====
  
-==== Router 4 (simple router) ==== +simple host with some static routes:
- +
-R4 is like R3, a simple router.+
  
 <code> <code>
-sysrc hostname=R4 +sysrc hostname=server \ 
-sysrc ifconfig_vtnet1="inet 10.0.24.4/24" +  gateway_enable=NO \ 
-sysrc ifconfig_vtnet3="inet 10.0.45.4/24" +  ipv6_gateway_enable=NO \ 
-sysrc ifconfig_vtnet1_ipv6="inet6 2001:db8:24::4 prefixlen 64" +  ifconfig_igb1="inet 10.0.34.4/24" \ 
-sysrc ifconfig_vtnet3_ipv6="inet6 2001:db8:45::4 prefixlen 64+  ifconfig_igb1_ipv6="inet6 2001:db8:34::4 prefixlen 64" \ 
-sysrc static_routes="R6 R1+  static_routes="12 231 232\ 
-sysrc route_R1="-net 10.0.12.0/24 10.0.24.2+  route_12="-net 10.0.12.0/24 10.0.34.3\ 
-sysrc route_R6="-net 10.0.56.0/24 10.0.45.5+  route_231="-net 10.0.231.0/24 10.0.34.3\ 
-sysrc ipv6_static_routes="R6 R1+  route_232="-net 10.0.232.0/24 10.0.34.3\ 
-sysrc ipv6_route_R1="2001:db8:12:: -prefixlen 64 2001:db8:24::2+  ipv6_static_routes="12 231 232\ 
-sysrc ipv6_route_R6="2001:db8:56:: -prefixlen 64 2001:db8:45::5"+  ipv6_route_12="2001:db8:12:: -prefixlen 64 2001:db8:34::3" \ 
 +  ipv6_route_231="2001:db8:231:: -prefixlen 64 2001:db8:34::3\ 
 +  ipv6_route_232="2001:db8:232:: -prefixlen 64 2001:db8:34::3"
 service hostname restart service hostname restart
 service netif restart service netif restart
Line 179: Line 159:
 </code> </code>
  
-==== Router 5 (ECMP router) ====+===== FRR Multipath setup =====
  
-R5 is like R2, a router with ECMP: 2 static routing toward the same destination but using 2 different next-hop..+Replacing static routes by FRR (OSPF) compiled with MULTIPATH option. 
 + 
 +==== R1 (ECMP router) ==== 
 + 
 +In place of static routes, OSPF with FRR is used:
  
 <code> <code>
-sysrc hostname=R5 +sysrc frr_vtysh_boot="YES\ 
-sysrc ifconfig_vtnet2="inet 10.0.35.5/24+  frr_enable="YES\ 
-sysrc ifconfig_vtnet3="inet 10.0.45.5/24+  frr_daemons="zebra ospfd ospf6d\ 
-sysrc ifconfig_vtnet4="inet 10.0.56.5/24+  watchfrr_flags=" -d -r /usr/sbin/servicebBfrrbBrestartbB%s -s /usr/sbin/servicebBfrrbBstartbB%s -k /usr/sbin/servicebBfrrbBstopbB%s -b bB -t 30 zebra ospfd ospf6d\ 
-sysrc ifconfig_vtnet2_ipv6="inet6 2001:db8:35::5 prefixlen 64+  watchfrr_enable="YES
-sysrc ifconfig_vtnet3_ipv6="inet6 2001:db8:45::5 prefixlen 64+ 
-sysrc ifconfig_vtnet4_ipv6="inet6 2001:db8:56::5 prefixlen 64" +cat > /usr/local/etc/frr/frr.conf <EOF 
-sysrc static_routes="R3R1 R3R2 R4R1 R4R2" +frr version 8.4.1 
-sysrc route_R3R1="-net 10.0.12.0/24 10.0.35.3" +frr defaults traditional 
-sysrc route_R3R2="-net 10.0.23.0/24 10.0.35.3" +hostname R1 
-sysrc route_R4R1="-net 10.0.12.0/24 10.0.45.4" +
-sysrc route_R4R2="-net 10.0.24.0/24 10.0.45.4" +interface igb0 
-sysrc ipv6_static_routes="R3R1 R3R2 R4R1 R4R2" + ip ospf passive 
-sysrc ipv6_route_R3R1="2001:db8:12:: -prefixlen 64 2001:db8:35::3" + ipv6 ospf6 area 0.0.0.
-sysrc ipv6_route_R3R2="2001:db8:23:: -prefixlen 64 2001:db8:35::3" + ipv6 ospf6 passive 
-sysrc ipv6_route_R4R1="2001:db8:12:: -prefixlen 64 2001:db8:45::4" +exit 
-sysrc ipv6_route_R4R2="2001:db8:24:: -prefixlen 64 2001:db8:45::4" +
-service hostname restart +interface igb1 
-service netif restart + ipv6 ospf6 area 0.0.0.0 
-service routing restart +exit 
-config save+
 +interface igb2 
 + ipv6 ospf6 area 0.0.0.0 
 +exit 
 +
 +router ospf 
 + ospf router-id 1.1.1.1 
 + network 10.0.12.0/24 area 0 
 + network 10.0.231.0/24 area 0 
 + network 10.0.232.0/24 area 
 +exit 
 +! 
 +router ospf6 
 +exit 
 +! 
 +EOF 
 +service frr start 
 +service watchfrr start
 </code> </code>
  
-==== Router 6 (server) ====+==== R2 (ECMP router) ====
  
-R6, like R1 is configured as a simple host with multiple aliases:+Same as R1 with OSPF and FRR: 
 +<code> 
 +sysrc frr_vtysh_boot="YES"
 +  frr_enable="YES"
 +  frr_daemons="zebra staticd ospfd ospf6d"
 +  watchfrr_flags=" -d -r /usr/sbin/servicebBfrrbBrestartbB%s -s /usr/sbin/servicebBfrrbBstartbB%s -k /usr/sbin/servicebBfrrbBstopbB%s -b bB -t 30 zebra ospfd ospf6d"
 +  watchfrr_enable="YES"
  
 +cat > /usr/local/etc/frr/frr.conf <EOF
 +frr version 8.4.1
 +frr defaults traditional
 +hostname R2
 +!
 +ip route 10.0.0.0/16 10.0.34.4
 +ipv6 route 2001:db8::/32 2001:db8:231::4
 +!
 +interface igb0
 + ip ospf passive
 + ipv6 ospf6 area 0.0.0.0
 + ipv6 ospf6 passive
 +exit
 +!
 +interface igb1
 + ipv6 ospf6 area 0.0.0.0
 +exit
 +!
 +interface igb2
 + ipv6 ospf6 area 0.0.0.0
 +exit
 +!
 +router ospf
 + ospf router-id 2.2.2.2
 + redistribute static
 + network 10.0.34.0/24 area 0
 + network 10.0.231.0/24 area 0
 + network 10.0.232.0/24 area 0
 +exit
 +!
 +router ospf6
 + redistribute static
 +exit
 +!
 +EOF
 +service frr start
 +service watchfrr start
 +</code>
 +
 +==== Checking routes installed ====
 +
 +On R1:
 <code> <code>
-sysrc hostname=R6 +root@R1:~ # vtysh 
-sysrc gateway_enable=NO +Hello, this is FRRouting (version 8.4.1)
-sysrc ipv6_gateway_enable=NO +Copyright 1996-2005 Kunihiro Ishiguro, et al
-sysrc ifconfig_vtnet4="inet 10.0.56.6/24" + 
-sysrc ifconfig_vtnet4_alias1="inet 10.0.56.16/32" +R1# sh ip route 10.0.0.0 
-sysrc ifconfig_vtnet4_alias2="inet 10.0.56.26/32" +Routing entry for 10.0.0.0/16 
-sysrc ifconfig_vtnet4_alias3="inet 10.0.56.36/32+  Known via "ospf", distance 110, metric 20, best 
-sysrc ifconfig_vtnet4_alias4="inet 10.0.56.46/32" +  Last update 00:02:26 ago 
-sysrc ifconfig_vtnet4_alias5="inet 10.0.56.56/32" +  * 10.0.231.3, via igb1, weight 1 
-sysrc ifconfig_vtnet4_ipv6="inet6 2001:db8:56::6 prefixlen 64" +  10.0.232.3, via igb2, weight 1 
-sysrc ifconfig_vtnet4_alias61="inet6 2001:db8:56::16 prefixlen 64" + 
-sysrc ifconfig_vtnet4_alias62="inet6 2001:db8:56::26 prefixlen 64+R1# sh ipv6 route 2001:db8:: 
-sysrc ifconfig_vtnet4_alias63="inet6 2001:db8:56::36 prefixlen 64" +Routing entry for 2001:db8::/32 
-sysrc ifconfig_vtnet4_alias64="inet6 2001:db8:56::46 prefixlen 64" +  Known via "ospf6", distance 110, metric 20, best 
-sysrc ifconfig_vtnet4_alias65="inet6 2001:db8:56::56 prefixlen 64" +  Last update 00:02:39 ago 
-sysrc defaultrouter="10.0.56.5" +  * fe80::20d:b9ff:fe45:7ad5, via igb1, weight 1 
-sysrc ipv6_defaultrouter="2001:db8:56::5" +  * fe80::20d:b9ff:fe45:7ad6, via igb2, weight 1
-service hostname restart +
-service netif restart +
-service routing restart +
-config save+
 </code> </code>
  
-==== Testing Load balancing ====+===== Test Load balancing IP packets =====
  
-Flows from R1 to R6 should be load-balanced by R2 toward R3 and R4. Let's check using multiple sources and destination IP addresses:+Flows from the client to the server should be "flow-id shared" between the 2 paths. Let's check using multiple sources and destination IP addresses using pkt-gen on client and server, then using systat on R1 and R2 to check their load-distribution.
  
-^ Source ^ Destination ^ Ongoing path selected by R2 ^ Returning path selected by R5^ +On server: 
-10.0.12.1 10.0.56.6 | R3 | R3 | +<code> 
-10.0.12.11 | 10.0.56.16 | R3 | R3 +root@server:~ # pkt-gen -i igb1 -f rx 
-| 10.0.12.21 | 10.0.56.26 | R3 | R3 | +</code> 
-| 10.0.12.31 | 10.0.56.36 | R3 | R3 | + 
-| 10.0.12.41 | 10.0.56.46 | R3 | R3 | +On client: 
-| 10.0.12.51 | 10.0.56.56 | R3 | R3 | +<code> 
-| 2001:db8:12::1 | 2001:db8:56::| R3 | R3 | +root@client:~ # pkt-gen -i igb1 -f tx -n 8000000 -l 60 -d 10.0.255.1:2000-10.0.255.254 -D 00:0d:b9:41:ca:3c -s 10.0.254.1:2000-10.0.254.254 -S 00:0d:b9:45:7f:b0 -w 4 -R 20000 
-| 2001:db8:12::11 | 2001:db8:56::16 | R3 | R3 +</code> 
-| 2001:db8:12::21 | 2001:db8:56::26 | R3 | R3 | + 
-| 2001:db8:12::31 | 2001:db8:56::36 | R3 | R3 | +On R1: 
-| 2001:db8:12::41 | 2001:db8:56::46 | R3 | R3 | +<code> 
-| 2001:db8:12::51 | 2001:db8:56::56 | R3 | R3 | +systat -ifstat -match igb0,igb1,igb2 -pps 
-| 10.0.12.1 | 10.0.45.5 | R4 | R3 |+ 
 +                    /0   /  /  /  /  /  /  /  /  /  /10 
 +     Load Average   
 + 
 +      Interface           Traffic               Peak                Total 
 +           igb2  in      0.000 Kp/s          0.000 Kp/s           71.247 Mp 
 +                 out     9.762 Kp/s          9.777 Kp/s           76.892 Mp 
 + 
 +           igb1  in      0.000 Kp/s          0.000 Kp/s           71.392 Mp 
 +                 out     9.770 Kp/s          9.771 Kp/s           80.341 Mp 
 + 
 +           igb0  in     19.533 Kp/s         19.534 Kp/s           90.007 Mp 
 +                 out     0.000 Kp/s          0.000 Kp/s            0.243 Kp 
 +                  
 +</code> 
 + 
 +=> We confirm that 20 Kps entering igb0 and are equally split by exiting by igb1 and igb2 
 + 
 +On R2: 
 +<code> 
 +systat -ifstat -match igb0,igb1,igb2 -pps 
 + 
 +                    /0   /  /2   /  /  /  /  /7   /  /  /10 
 +     Load Average   
 + 
 +      Interface           Traffic               Peak                Total 
 +           igb2  in      9.768 Kp/s          9.771 Kp/s          300.830 Kp 
 +                 out     0.000 Kp/s          0.000 Kp/s            0.000 Kp 
 + 
 +           igb1  in      9.763 Kp/s          9.768 Kp/s          300.785 Kp 
 +                 out     0.000 Kp/s          0.000 Kp/s            0.006 Kp 
 + 
 +           igb0  in      0.000 Kp/s          0.001 Kp/s            0.240 Kp 
 +                 out    19.530 Kp/s         19.531 Kp/s          601.615 Kp 
 +</code>
  
-<note>There is no flow load-balancing with RADIX MPATH on FreeBSD 11[[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225792|seems broken with tryforward]], put proposed patch disable tryforward(fastforward) if RADIX_MPATH is enabled.</note>+=R2 has no choice than receiving packets from igb1 and igb2and forwarding them through igb0.
  
documentation/examples/ecmp.1531470677.txt.gz · Last modified: 2018/07/13 10:31 by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: BSD 2-Clause
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki