• D
    net/ipv6: Simplify route replace and appending into multipath route · f34436a4
    David Ahern 提交于
    Bring consistency to ipv6 route replace and append semantics.
    
    Remove rt6_qualify_for_ecmp which is just guess work. It fails in 2 cases:
    1. can not replace a route with a reject route. Existing code appends
       a new route instead of replacing the existing one.
    
    2. can not have a multipath route where a leg uses a dev only nexthop
    
    Existing use cases affected by this change:
    1. adding a route with existing prefix and metric using NLM_F_CREATE
       without NLM_F_APPEND or NLM_F_EXCL (ie., what iproute2 calls
       'prepend'). Existing code auto-determines that the new nexthop can
       be appended to an existing route to create a multipath route. This
       change breaks that by requiring the APPEND flag for the new route
       to be added to an existing one. Instead the prepend just adds another
       route entry.
    
    2. route replace. Existing code replaces first matching multipath route
       if new route is multipath capable and fallback to first matching
       non-ECMP route (reject or dev only route) in case one isn't available.
       New behavior replaces first matching route. (Thanks to Ido for spotting
       this one)
    
    Note: Newer iproute2 is needed to display multipath routes with a dev-only
          nexthop. This is due to a bug in iproute2 and parsing nexthops.
    Signed-off-by: NDavid Ahern <dsahern@gmail.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    f34436a4
route.c 130.3 KB