[PATCH] ipv4/fib_trie: notify deleted routes on if down event

Subsystems: networking [general], networking [ipv4/ipv6], the rest

STALE5090d

2 messages, 2 authors, 2012-10-31 · open the first message on its own page

[PATCH] ipv4/fib_trie: notify deleted routes on if down event

From: Nicolas Dichtel <hidden>
Date: 2012-10-30 15:23:17

This notification is missing in IPv4 (in IPv6, deleted routes are
notified).

Signed-off-by: Nicolas Dichtel <redacted>
---
 net/ipv4/fib_trie.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 31d771c..5b1c7d0 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1718,15 +1718,20 @@ int fib_table_delete(struct fib_table *tb, struct fib_config *cfg)
 	return 0;
 }
 
-static int trie_flush_list(struct list_head *head)
+static int trie_flush_list(struct fib_table *tb, struct leaf *l,
+			   struct leaf_info *li)
 {
 	struct fib_alias *fa, *fa_node;
 	int found = 0;
 
-	list_for_each_entry_safe(fa, fa_node, head, fa_list) {
+	list_for_each_entry_safe(fa, fa_node, &li->falh, fa_list) {
 		struct fib_info *fi = fa->fa_info;
 
 		if (fi && (fi->fib_flags & RTNH_F_DEAD)) {
+			struct nl_info nlinfo = { .nl_net = fi->fib_net, };
+
+			rtmsg_fib(RTM_DELROUTE, htonl(l->key), fa, li->plen,
+				  tb->tb_id, &nlinfo, 0);
 			list_del_rcu(&fa->fa_list);
 			fib_release_info(fa->fa_info);
 			alias_free_mem_rcu(fa);
@@ -1736,7 +1741,7 @@ static int trie_flush_list(struct list_head *head)
 	return found;
 }
 
-static int trie_flush_leaf(struct leaf *l)
+static int trie_flush_leaf(struct fib_table *tb, struct leaf *l)
 {
 	int found = 0;
 	struct hlist_head *lih = &l->list;
@@ -1744,7 +1749,7 @@ static int trie_flush_leaf(struct leaf *l)
 	struct leaf_info *li = NULL;
 
 	hlist_for_each_entry_safe(li, node, tmp, lih, hlist) {
-		found += trie_flush_list(&li->falh);
+		found += trie_flush_list(tb, l, li);
 
 		if (list_empty(&li->falh)) {
 			hlist_del_rcu(&li->hlist);
@@ -1835,7 +1840,7 @@ int fib_table_flush(struct fib_table *tb)
 	int found = 0;
 
 	for (l = trie_firstleaf(t); l; l = trie_nextleaf(l)) {
-		found += trie_flush_leaf(l);
+		found += trie_flush_leaf(tb, l);
 
 		if (ll && hlist_empty(&ll->list))
 			trie_leaf_remove(t, ll);
-- 
1.7.12

Re: [PATCH] ipv4/fib_trie: notify deleted routes on if down event

From: David Miller <davem@davemloft.net>
Date: 2012-10-31 16:36:29

From: Nicolas Dichtel <redacted>
Date: Tue, 30 Oct 2012 16:32:56 +0100
This notification is missing in IPv4 (in IPv6, deleted routes are
notified).

Signed-off-by: Nicolas Dichtel <redacted>
This is intentional, and your patch has been suggested before.

Routing daemons are expected to purge their tables of all routes for
an interface when the get the interface down event.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help