cvs commit: src/sys/conf files options src/sys/net radix.c radix.h route.c route.h rtsock.c src/sys/netinet in_proto.c ip_output.c src/sys/netinet6 in6_proto.c in6_src.c nd6_nbr.c

Andre Oppermann andre at freebsd.org
Mon Apr 14 22:43:47 UTC 2008


Qing Li wrote:
> qingli      2008-04-13 05:45:14 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/conf             files options 
>     sys/net              radix.c radix.h route.c route.h rtsock.c 
>     sys/netinet          in_proto.c ip_output.c 
>     sys/netinet6         in6_proto.c in6_src.c nd6_nbr.c 
>   Log:
>   This patch provides the back end support for equal-cost multi-path
>   (ECMP) for both IPv4 and IPv6. Previously, multipath route insertion

Nice!  Long overdue that we get this functionality. :-)

Do you do hash-based next-hop balancing ("flow"-aware) or packet
based round robin?  Should it be made an option to switch between them
(globally) like on Cisco routers?

>   is disallowed. For example,
>   
>           route add -net 192.103.54.0/24 10.9.44.1
>           route add -net 192.103.54.0/24 10.9.44.2
>   
>   The second route insertion will trigger an error message of
>   "add net 192.103.54.0/24: gateway 10.2.5.2: route already in table"

Would it make sense to retain this behavior by default (POLA) and have
multi-path being enabled via sysctl like packet forwarding in general?
Just adding the same route twice with different next-hops can lead to
very confusing situations for the users which are not used to multi-path.

>   Multiple default routes can also be inserted. Here is the netstat
>   output:
>   
>   default         10.2.5.1        UGS     0       3074    bge0 =>
>   default         10.2.5.2        UGS     0       0       bge0
>   
>   When multipath routes exist, the "route delete" command requires
>   a specific gateway to be specified or else an error message would
>   be displayed. For example,
>   
>           route delete default
>   
>   would fail and trigger the following error message:
>   
>   "route: writing to routing socket: No such process"
>   "delete net default: not in table"

Can this be made more descriptive?  This messages are about as confusing
and non-descript as possible.  Not being aware of the multipath functionality
I would pull out my last hair try to get rid of a route.

>   On the other hand,
>   
>           route delete default 10.2.5.2
>   
>   would be successful: "delete net default: gateway 10.2.5.2"
>   
>   One does not have to specify a gateway if there is only a single
>   route for a particular destination.
>   
>   I need to perform more testings on address aliases and multiple
>   interfaces that have the same IP prefixes. This patch as it
>   stands today is not yet ready for prime time. Therefore, the ECMP
>   code fragments are fully guarded by the RADIX_MPATH macro.
>   Include the "options  RADIX_MPATH" in the kernel configuration
>   to enable this feature.

How does this behave with common routing daemons; Quagga/Zebra, OpenBGPD,
OpenOSPFD?  Do they have to be aware of the multipath functionality?  Will
it confuse them?

What about the other big missing piece; new-arp? ;-)  Something for BSDCan?

-- 
Andre



More information about the cvs-src mailing list