Eric Dumazet
719f835853
udp: add rehash on connect()
...
commit 30fff923 introduced in linux-2.6.33 (udp: bind() optimisation)
added a secondary hash on UDP, hashed on (local addr, local port).
Problem is that following sequence :
fd = socket(...)
connect(fd, &remote, ...)
not only selects remote end point (address and port), but also sets
local address, while UDP stack stored in secondary hash table the socket
while its local address was INADDR_ANY (or ipv6 equivalent)
Sequence is :
- autobind() : choose a random local port, insert socket in hash tables
[while local address is INADDR_ANY]
- connect() : set remote address and port, change local address to IP
given by a route lookup.
When an incoming UDP frame comes, if more than 10 sockets are found in
primary hash table, we switch to secondary table, and fail to find
socket because its local address changed.
One solution to this problem is to rehash datagram socket if needed.
We add a new rehash(struct socket *) method in "struct proto", and
implement this method for UDP v4 & v6, using a common helper.
This rehashing only takes care of secondary hash table, since primary
hash (based on local port only) is not changed.
Reported-by: Krzysztof Piotr Oledzki <ole@ans.pl>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-09-08 21:45:01 -07:00
..
netfilter
netfilter: discard overlapping IPv6 fragment
2010-09-07 13:57:21 -07:00
addrconf.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-07-27 21:01:35 -07:00
addrconf_core.c
ipv6: Remove IPV6_ADDR_RESERVED
2010-02-26 03:59:07 -08:00
addrlabel.c
net: CONFIG_NET_NS reduction
2010-06-02 05:16:23 -07:00
af_inet6.c
inet, inet6: make tcp_sendmsg() and tcp_sendpage() through inet_sendmsg() and inet_sendpage()
2010-07-12 20:21:46 -07:00
ah6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
anycast.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
datagram.c
udp: add rehash on connect()
2010-09-08 21:45:01 -07:00
esp6.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
exthdrs.c
ipv6: avoid two atomics in ipv6_rthdr_rcv()
2010-06-14 23:13:06 -07:00
exthdrs_core.c
fib6_rules.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
icmp.c
ipv6: fix ICMP6_MIB_OUTERRORS
2010-06-09 18:39:27 -07:00
inet6_connection_sock.c
ipv6: Refactor update of IPv6 flowi destination address for srcrt (RH) option
2010-06-02 07:08:31 -07:00
inet6_hashtables.c
ip6_fib.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
ip6_flowlabel.c
IPv6: Add dontfrag argument to relevant functions
2010-04-23 23:35:28 -07:00
ip6_input.c
Merge branch 'master' of /repos/git/net-next-2.6
2010-04-20 16:02:01 +02:00
ip6_output.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
ip6_tunnel.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
ip6mr.c
ipmr: dont corrupt lists
2010-06-07 02:57:14 -07:00
ipcomp6.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
ipv6_sockglue.c
ipv6: remove ipv6_statistics
2010-06-25 21:33:17 -07:00
Kconfig
ipv6: ip6mr: support multiple tables
2010-05-11 14:40:55 +02:00
Makefile
mcast.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
mip6.c
IPv6: fix CoA check in RH2 input handler (mip6_rthdr_input())
2010-07-18 15:04:33 -07:00
ndisc.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
2010-07-07 15:59:38 -07:00
netfilter.c
netfilter: kill redundant check code in which setting ip_summed value
2010-06-14 16:20:02 +02:00
proc.c
snmp: 64bit ipstats_mib for all arches
2010-06-30 13:31:19 -07:00
protocol.c
raw.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
reassembly.c
ipv6: discard overlapping fragment
2010-09-07 13:57:21 -07:00
route.c
ipv6: remove sysctl jiffies conversion on gc_elasticity and min_adv_mss
2010-08-14 22:42:51 -07:00
sit.c
net-next: remove useless union keyword
2010-06-10 23:31:35 -07:00
syncookies.c
syncookies: add support for ECN
2010-06-26 22:00:03 -07:00
sysctl_net_ipv6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
tcp_ipv6.c
inet, inet6: make tcp_sendmsg() and tcp_sendpage() through inet_sendmsg() and inet_sendpage()
2010-07-12 20:21:46 -07:00
tunnel6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
udp.c
udp: add rehash on connect()
2010-09-08 21:45:01 -07:00
udp_impl.h
udplite.c
net: spread __net_init, __net_exit
2010-01-17 19:16:02 -08:00
xfrm6_input.c
netfilter: ipv6: use NFPROTO values for NF_HOOK invocation
2010-03-25 16:00:49 +01:00
xfrm6_mode_beet.c
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
xfrm6_output.c
netfilter: ipv6: use NFPROTO values for NF_HOOK invocation
2010-03-25 16:00:49 +01:00
xfrm6_policy.c
xfrm: fix xfrm by MARK logic
2010-07-04 11:46:07 -07:00
xfrm6_state.c
xfrm6_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00