diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-03-13 17:26:12 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-03-13 17:26:12 -0500 |
commit | 3759fa9c55923f719ae944a3f8fbb029b36f759d (patch) | |
tree | ca48147798cd6a02edf64290dcf14c7681ab88cc /net/ipv6 | |
parent | c33d4568aca9028a22857f94f5e0850012b6444b (diff) |
[TCP]: Fix zero port problem in IPv6
When we link a socket into the hash table, we need to make sure that we
set the num/port fields so that it shows us with a non-zero port value
in proc/netlink and on the wire. This code and comment is copied over
from the IPv4 stack as is.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/inet6_hashtables.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c index 4154f3a8b6cf..bb8ffb8a14c5 100644 --- a/net/ipv6/inet6_hashtables.c +++ b/net/ipv6/inet6_hashtables.c | |||
@@ -87,7 +87,7 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row, | |||
87 | struct inet_timewait_sock **twp) | 87 | struct inet_timewait_sock **twp) |
88 | { | 88 | { |
89 | struct inet_hashinfo *hinfo = death_row->hashinfo; | 89 | struct inet_hashinfo *hinfo = death_row->hashinfo; |
90 | const struct inet_sock *inet = inet_sk(sk); | 90 | struct inet_sock *inet = inet_sk(sk); |
91 | const struct ipv6_pinfo *np = inet6_sk(sk); | 91 | const struct ipv6_pinfo *np = inet6_sk(sk); |
92 | const struct in6_addr *daddr = &np->rcv_saddr; | 92 | const struct in6_addr *daddr = &np->rcv_saddr; |
93 | const struct in6_addr *saddr = &np->daddr; | 93 | const struct in6_addr *saddr = &np->daddr; |
@@ -129,6 +129,10 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row, | |||
129 | } | 129 | } |
130 | 130 | ||
131 | unique: | 131 | unique: |
132 | /* Must record num and sport now. Otherwise we will see | ||
133 | * in hash table socket with a funny identity. */ | ||
134 | inet->num = lport; | ||
135 | inet->sport = htons(lport); | ||
132 | BUG_TRAP(sk_unhashed(sk)); | 136 | BUG_TRAP(sk_unhashed(sk)); |
133 | __sk_add_node(sk, &head->chain); | 137 | __sk_add_node(sk, &head->chain); |
134 | sk->sk_hash = hash; | 138 | sk->sk_hash = hash; |