Patchwork [net] ipv6: do not create neighbor entries for local delivery

login
register
mail settings
Submitter Jiri Pirko
Date Jan. 30, 2013, 8:26 a.m.
Message ID <20130130082608.GA1604@minipsycho.orion>
Download mbox | patch
Permalink /patch/216780/
State Accepted
Delegated to: David Miller
Headers show

Comments

Jiri Pirko - Jan. 30, 2013, 8:26 a.m.
From: Marcelo Ricardo Leitner <mleitner@redhat.com>

They will be created at output, if ever needed. This avoids creating
empty neighbor entries when TPROXYing/Forwarding packets for addresses
that are not even directly reachable.

Note that IPv4 already handles it this way. No neighbor entries are
created for local input.

Tested by myself and customer.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
---
 net/ipv6/route.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
David Miller - Jan. 31, 2013, 1:26 a.m.
From: Jiri Pirko <jiri@resnulli.us>
Date: Wed, 30 Jan 2013 09:26:08 +0100

> From: Marcelo Ricardo Leitner <mleitner@redhat.com>
> 
> They will be created at output, if ever needed. This avoids creating
> empty neighbor entries when TPROXYing/Forwarding packets for addresses
> that are not even directly reachable.
> 
> Note that IPv4 already handles it this way. No neighbor entries are
> created for local input.
> 
> Tested by myself and customer.
> 
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>

Applied and queued up for -stable, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index e229a3b..363d8b7 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -928,7 +928,7 @@  restart:
 	dst_hold(&rt->dst);
 	read_unlock_bh(&table->tb6_lock);
 
-	if (!rt->n && !(rt->rt6i_flags & RTF_NONEXTHOP))
+	if (!rt->n && !(rt->rt6i_flags & (RTF_NONEXTHOP | RTF_LOCAL)))
 		nrt = rt6_alloc_cow(rt, &fl6->daddr, &fl6->saddr);
 	else if (!(rt->dst.flags & DST_HOST))
 		nrt = rt6_alloc_clone(rt, &fl6->daddr);