All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wengang Wang <wen.gang.wang@oracle.com>
To: Wengang Wang <wen.gang.wang@oracle.com>, netdev@vger.kernel.org
Subject: Re: [PATCH] ip: find correct route for socket which is not bound (v2)
Date: Thu, 8 Oct 2015 11:31:05 +0800	[thread overview]
Message-ID: <5615E379.1040206@oracle.com> (raw)
In-Reply-To: <1443145960-20514-1-git-send-email-wen.gang.wang@oracle.com>

Hi,

Any comment on this patch?

thanks,
wengang

在 2015年09月25日 09:52, Wengang Wang 写道:
> This is the v2, comparing the v1, the changes is:
>   * for loopback outbound device, it continue skipping cached route;
>     for others, it goes through the cached route.
>
> For multicast, we should find valid route(thus get the meaniful pmtu) for
> the packet on the socket which is not bound to a device(sk_bound_dev_if
> being 0) too.
>
>  From man page of socket(7)
>
>         SO_BINDTODEVICE
> 		Bind this socket to a particular device like “eth0”, as
> 		specified in the passed interface name.  If the name is an
> 		empty string or the option length is zero, the socket
> 		device binding is removed. The  passed  option is  a
> 		variable-length null-terminated interface name string with
> 		the maximum size of IFNAMSIZ.  If a socket is bound to an
> 		interface, only packets received from that particular
> 		interface are processed by the socket. Note that this works
> 		only for some socket types, particularly AF_INET sockets.
> 		It is not supported for packet sockets (use normal bind(2)
> 		there).
>
> The man page doesn't say when socket not bound packets won't be routed.
>
> A problem is hit that all multicast packets dropped by kernel(from sender
> host). The lower layer is IPoIB with MTU being 7000. And I was sending 4096
> length multicast  packets. Inside IPoIB the first send is dropped because
> is exeeding the internal packet size limitation mcast_mtu which is 2044.
> So IPoIB calls ip_rt_update_pmtu (indirectly) trying to set path mtu. A
> correct route is configured for the multicast, so the setting of pmtu
> cucceeded and the next multicast packet(to the same target) is expected
> to succeed(it would be well fragmented accroding to the pmtu I just set).
> But actually the second and later multicast packets got dropped too. And
> the reason is that the neighor looking up(fib_lookup) is skipped because of
> the socket is not bound to device(sk_bound_dev_if being 0). After applied
> the patch I proposed here, it works fine.
>
> Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
> ---
>   net/ipv4/route.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/net/ipv4/route.c b/net/ipv4/route.c
> index 5f4a556..c0534c2 100644
> --- a/net/ipv4/route.c
> +++ b/net/ipv4/route.c
> @@ -2097,7 +2097,10 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
>   			 */
>   
>   			fl4->flowi4_oif = dev_out->ifindex;
> -			goto make_route;
> +			if (dev_out->flags & IFF_LOOPBACK)
> +				goto make_route;
> +			else
> +				goto lookup;
>   		}
>   
>   		if (!(fl4->flowi4_flags & FLOWI_FLAG_ANYSRC)) {
> @@ -2153,6 +2156,7 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
>   		goto make_route;
>   	}
>   
> +lookup:
>   	if (fib_lookup(net, fl4, &res, 0)) {
>   		res.fi = NULL;
>   		res.table = NULL;

  reply	other threads:[~2015-10-08  3:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-25  1:52 [PATCH] ip: find correct route for socket which is not bound (v2) Wengang Wang
2015-10-08  3:31 ` Wengang Wang [this message]
2015-10-08 10:30   ` David Miller
2015-11-01 16:47 ` David Miller
  -- strict thread matches above, loose matches on Subject: below --
2015-09-21  8:00 Wengang Wang
2015-09-24 21:22 ` David Miller
2015-09-25  0:54   ` Wengang Wang

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=5615E379.1040206@oracle.com \
    --to=wen.gang.wang@oracle.com \
    --cc=netdev@vger.kernel.org \
    /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.