All of lore.kernel.org
 help / color / mirror / Atom feed
From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
To: Romain KUNTZ <r.kuntz@ipflavors.com>, davem@davemloft.net
Cc: nicolas.dichtel@6wind.com,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Subject: Re: [PATCH 1/1] ipv6: use addrconf_get_prefix_route for prefix route lookup [v2] (was [PATCH 1/2] ipv6: avoid blackhole and prohibited entries upon prefix purge [v3])
Date: Thu, 10 Jan 2013 18:44:25 +0900	[thread overview]
Message-ID: <50EE8D79.1080807@linux-ipv6.org> (raw)
In-Reply-To: <683E9BA1-C85B-43E0-AF98-397D50E302F6@ipflavors.com>

Romain KUNTZ wrote:

> From 203474c87f45da40b5c9d9e629164561307b4199 Mon Sep 17 00:00:00 2001
> From: Romain Kuntz <r.kuntz@ipflavors.com>
> Date: Thu, 10 Jan 2013 07:41:36 +0100
> Subject: [PATCH 1/1] ipv6: use addrconf_get_prefix_route for prefix route lookup [v2]
> 
> Replace ip6_route_lookup() with addrconf_get_prefix_route() when
> looking up for a prefix route. This ensures that the connected prefix
> is looked up in the main table, and avoids the selection of other
> matching routes located in different tables as well as blackhole
> or prohibited entries.
> 
> In addition, this fixes an Opps introduced by commit 64c6d08e (ipv6:
> del unreachable route when an addr is deleted on lo), that would occur
> when a blackhole or prohibited entry is selected by ip6_route_lookup().
> Such entries have a NULL rt6i_table argument, which is accessed by
> __ip6_del_rt() when trying to lock rt6i_table->tb6_lock.
> 
> The function addrconf_is_prefix_route() is not used anymore and is
> removed.
> 
> [v2] Minor indentation cleanup and log updates.
> 
> Signed-off-by: Romain Kuntz <r.kuntz@ipflavors.com>
> Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> ---
>  net/ipv6/addrconf.c |   25 +++++++++++--------------
>  1 files changed, 11 insertions(+), 14 deletions(-)
> 
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 29ba4ff..ec3e065 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -154,6 +154,11 @@ static void addrconf_type_change(struct net_device *dev,
>  				 unsigned long event);
>  static int addrconf_ifdown(struct net_device *dev, int how);
>  
> +static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
> +						  int plen,
> +						  const struct net_device *dev,
> +						  u32 flags, u32 noflags);
> +
>  static void addrconf_dad_start(struct inet6_ifaddr *ifp);
>  static void addrconf_dad_timer(unsigned long data);
>  static void addrconf_dad_completed(struct inet6_ifaddr *ifp);
> @@ -250,12 +255,6 @@ static inline bool addrconf_qdisc_ok(const struct net_device *dev)
>  	return !qdisc_tx_is_noop(dev);
>  }
>  
> -/* Check if a route is valid prefix route */
> -static inline int addrconf_is_prefix_route(const struct rt6_info *rt)
> -{
> -	return (rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0;
> -}
> -
>  static void addrconf_del_timer(struct inet6_ifaddr *ifp)
>  {
>  	if (del_timer(&ifp->timer))
> @@ -941,17 +940,15 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
>  	if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) {
>  		struct in6_addr prefix;
>  		struct rt6_info *rt;
> -		struct net *net = dev_net(ifp->idev->dev);
> -		struct flowi6 fl6 = {};
>  
>  		ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
> -		fl6.flowi6_oif = ifp->idev->dev->ifindex;
> -		fl6.daddr = prefix;
> -		rt = (struct rt6_info *)ip6_route_lookup(net, &fl6,
> -							 RT6_LOOKUP_F_IFACE);
>  
> -		if (rt != net->ipv6.ip6_null_entry &&
> -		    addrconf_is_prefix_route(rt)) {
> +		rt = addrconf_get_prefix_route(&prefix,
> +					       ifp->prefix_len,
> +					       ifp->idev->dev,
> +					       0, RTF_GATEWAY | RTF_DEFAULT);
> +
> +		if (rt) {
>  			if (onlink == 0) {
>  				ip6_del_rt(rt);
>  				rt = NULL;
> 

Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>

--yoshfuji

  reply	other threads:[~2013-01-10  9:44 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-05 16:13 [PATCH 1/2] ipv6: avoid blackhole and prohibited entries upon prefix purge Romain KUNTZ
2013-01-05 16:19 ` [PATCH 2/2] ipv6: fix packet corruption when Dest/RT2 options are used Romain KUNTZ
2013-01-07 10:49   ` Nicolas Dichtel
2013-01-07 12:41     ` Steffen Klassert
2013-01-11  7:27   ` Romain KUNTZ
2013-01-14  7:21     ` Romain KUNTZ
2013-01-05 19:59 ` [PATCH 1/2] ipv6: avoid blackhole and prohibited entries upon prefix purge Eric Dumazet
2013-01-05 21:44   ` [PATCH 1/2] ipv6: avoid blackhole and prohibited entries upon prefix purge [v2] Romain KUNTZ
2013-01-07 10:25     ` Nicolas Dichtel
2013-01-07 11:30       ` Romain KUNTZ
2013-01-07 15:43         ` Nicolas Dichtel
2013-01-08 11:38           ` Romain KUNTZ
2013-01-08 16:22             ` Nicolas Dichtel
2013-01-08 17:18               ` YOSHIFUJI Hideaki
2013-01-09 14:37                 ` [PATCH 1/2] ipv6: avoid blackhole and prohibited entries upon prefix purge [v3] Romain KUNTZ
2013-01-09 15:11                   ` Nicolas Dichtel
2013-01-10  7:06                     ` Romain KUNTZ
2013-01-10  9:44                       ` YOSHIFUJI Hideaki [this message]
2013-01-10 22:39                         ` [PATCH 1/1] ipv6: use addrconf_get_prefix_route for prefix route lookup [v2] David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50EE8D79.1080807@linux-ipv6.org \
    --to=yoshfuji@linux-ipv6.org \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=nicolas.dichtel@6wind.com \
    --cc=r.kuntz@ipflavors.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.