[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ec9f3fbe-c95c-6e07-1263-29784d9ba361@cumulusnetworks.com>
Date: Wed, 2 Nov 2016 09:36:55 -0600
From: David Ahern <dsa@...ulusnetworks.com>
To: Cyrill Gorcunov <gorcunov@...il.com>
Cc: netdev@...r.kernel.org, Eric Dumazet <eric.dumazet@...il.com>,
"David S. Miller" <davem@...emloft.net>,
Andrey Vagin <avagin@...nvz.org>,
Stephen Hemminger <stephen@...workplumber.org>
Subject: Re: [patch net-next 0/2] Fixes for raw diag sockets handling
On 11/2/16 9:29 AM, Cyrill Gorcunov wrote:
> On Wed, Nov 02, 2016 at 09:10:32AM -0600, David Ahern wrote:
>>> @__dif != 0 the match may return socket where sk_bound_dev_if = 0
>>> instead of completely matching one. Isn't it?
>>
>> yes. I recently added an exact_dif to the lookup for listener sockets
>> (see compute_score). Something like that could be added to INET_MATCH.
>
> Seem so. I need to revisit this moment. Because with current lookup code
> iproute2 patches I made and been testing do not kill all sockets bound
> to particular device in one pass (because request from userspace asks
> for index 15 in my case but kernel return one with index 0). At first
> I thought I made a mistake in userspace code but once I added printk's
> into kernel I found that here some strange results over lookup.
Limited to raw sockets or are you looking at multiple spec options (dev, address, port)?
I have not seen issues with tcp or udp. Running:
ss -aK 'dev == red'
drops all sockets bound to device 'red' (or at least signaling the socket failure for the app to handle):
root@...sie4:~# ss -ap 'dev == red'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *%red:12345 *:* users:(("vrf-test",pid=765,fd=3))
tcp LISTEN 0 1 *%red:12345 *:* users:(("vrf-test",pid=766,fd=3))
tcp ESTAB 0 0 10.100.1.4%red:ssh 10.100.1.254:60298 users:(("sshd",pid=738,fd=3))
root@...sie4:~# ss -aKp 'dev == red'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *%red:12345 *:* users:(("vrf-test",pid=765,fd=3))
tcp LISTEN 0 1 *%red:12345 *:* users:(("vrf-test",pid=766,fd=3))
tcp ESTAB 0 0 10.100.1.4%red:ssh 10.100.1.254:60298 users:(("sshd",pid=738,fd=3))
root@...sie4:~# ss -ap 'dev == red'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
Powered by blists - more mailing lists