lkml.org 
[lkml]   [2015]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net v3 1/2] ipv6: do not delete previously existing ECMP routes if add fails
    Date
    If adding a nexthop of an IPv6 multipath route fails, comment in
    ip6_route_multipath() says we are going to delete all nexthops already
    added. However, current implementation deletes even the routes it
    hasn't even tried to add yet. For example, running

    ip route add 1234:5678::/64 \
    nexthop via fe80::aa dev dummy1 \
    nexthop via fe80::bb dev dummy1 \
    nexthop via fe80::cc dev dummy1

    twice results in removing all routes first command added.

    Limit the second (delete) run to nexthops that succeeded in the first
    (add) run.

    Fixes: 51ebd3181572 ("ipv6: add support of equal cost multipath (ECMP)")
    Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
    Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    ---
    net/ipv6/route.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/net/ipv6/route.c b/net/ipv6/route.c
    index d3588885f097..3821a3517478 100644
    --- a/net/ipv6/route.c
    +++ b/net/ipv6/route.c
    @@ -2504,9 +2504,9 @@ static int ip6_route_multipath(struct fib6_config *cfg, int add)
    int attrlen;
    int err = 0, last_err = 0;

    + remaining = cfg->fc_mp_len;
    beginning:
    rtnh = (struct rtnexthop *)cfg->fc_mp;
    - remaining = cfg->fc_mp_len;

    /* Parse a Multipath Entry */
    while (rtnh_ok(rtnh, remaining)) {
    @@ -2536,6 +2536,7 @@ beginning:
    * next hops that have been already added.
    */
    add = 0;
    + remaining = cfg->fc_mp_len - remaining;
    goto beginning;
    }
    }
    --
    2.4.1


    \
     
     \ /
      Last update: 2015-05-18 21:21    [W:3.344 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site