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@jessie4:~# 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@jessie4:~# 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@jessie4:~# ss -ap 'dev == red' Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port