naccyde / rpms / iproute

Forked from rpms/iproute 5 months ago
Clone

Blame SOURCES/0013-ip-neigh-allow-flush-FAILED-neighbour-entry.patch

cd1737
From 3b6fd8227cbb03b5b211d2cb53534ad405673668 Mon Sep 17 00:00:00 2001
cd1737
From: Matteo Croce <mcroce@redhat.com>
cd1737
Date: Wed, 2 Aug 2017 13:57:17 +0200
cd1737
Subject: [PATCH] ip neigh: allow flush FAILED neighbour entry
cd1737
cd1737
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1469945
cd1737
Tested: locally using proper reproducer
cd1737
Upstream Status: merged 37a5f7c5
cd1737
cd1737
commit 37a5f7c571623059ae671992f72feaa444a6ffc8
cd1737
Author: Hangbin Liu <liuhangbin@gmail.com>
cd1737
Date:   Fri Jun 16 11:31:52 2017 +0800
cd1737
cd1737
    ip neigh: allow flush FAILED neighbour entry
cd1737
cd1737
    After upstream commit 5071034e4af7 ('neigh: Really delete an arp/neigh entry
cd1737
    on "ip neigh delete" or "arp -d"'), we could delete a single FAILED neighbour
cd1737
    entry now. But `ip neigh flush` still skip the FAILED entry.
cd1737
cd1737
    Move the filter after first round flush so we can flush FAILED entry on fixed
cd1737
    kernel and also do not keep retrying on old kernel.
cd1737
cd1737
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
cd1737
cd1737
Signed-off-by: Matteo Croce <mcroce@redhat.com>
cd1737
---
cd1737
 ip/ipneigh.c | 2 +-
cd1737
 1 file changed, 1 insertion(+), 1 deletion(-)
cd1737
cd1737
diff --git a/ip/ipneigh.c b/ip/ipneigh.c
cd1737
index 4d8fc85..9c38a60 100644
cd1737
--- a/ip/ipneigh.c
cd1737
+++ b/ip/ipneigh.c
cd1737
@@ -445,7 +445,6 @@ static int do_show_or_flush(int argc, char **argv, int flush)
cd1737
 		filter.flushb = flushb;
cd1737
 		filter.flushp = 0;
cd1737
 		filter.flushe = sizeof(flushb);
cd1737
-		filter.state &= ~NUD_FAILED;
cd1737
 
cd1737
 		while (round < MAX_ROUNDS) {
cd1737
 			if (rtnl_dump_request_n(&rth, &req.n) < 0) {
cd1737
@@ -474,6 +473,7 @@ static int do_show_or_flush(int argc, char **argv, int flush)
cd1737
 				printf("\n*** Round %d, deleting %d entries ***\n", round, filter.flushed);
cd1737
 				fflush(stdout);
cd1737
 			}
cd1737
+			filter.state &= ~NUD_FAILED;
cd1737
 		}
cd1737
 		printf("*** Flush not complete bailing out after %d rounds\n",
cd1737
 			MAX_ROUNDS);
cd1737
-- 
cd1737
1.8.3.1
cd1737