ipv4: be more aggressive when probing alternative gateways
authorJulian Anastasov <ja@ssi.bg>
Thu, 23 Jul 2015 07:39:35 +0000 (10:39 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jul 2015 03:56:27 +0000 (20:56 -0700)
Currently, we do not notice if new alternative gateways
are added. We can do it by checking for present neigh
entry. Also, gateways that are currently probed (NUD_INCOMPLETE)
can be skipped from round-robin probing.

Suggested-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_semantics.c

index 6754c64b2fe000c3f1112e81e382b515f406653e..d4c6732cfbfa62aa0810729705b791d3de5b88fb 100644 (file)
@@ -438,13 +438,15 @@ static int fib_detect_death(struct fib_info *fi, int order,
        if (n) {
                state = n->nud_state;
                neigh_release(n);
+       } else {
+               return 0;
        }
        if (state == NUD_REACHABLE)
                return 0;
        if ((state & NUD_VALID) && order != dflt)
                return 0;
        if ((state & NUD_VALID) ||
-           (*last_idx < 0 && order > dflt)) {
+           (*last_idx < 0 && order > dflt && state != NUD_INCOMPLETE)) {
                *last_resort = fi;
                *last_idx = order;
        }