diff options
author | Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 2005-08-09 23:10:42 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-29 18:43:19 -0400 |
commit | 463c84b97f24010a67cd871746d6a7e4c925a5f9 (patch) | |
tree | 48df67ede4ebb5d12b3c0ae55d72531574bd51a6 /net/ipv6/tcp_ipv6.c | |
parent | 87d11ceb9deb7a3f13fdee6e89d9bb6be7d27a71 (diff) |
[NET]: Introduce inet_connection_sock
This creates struct inet_connection_sock, moving members out of struct
tcp_sock that are shareable with other INET connection oriented
protocols, such as DCCP, that in my private tree already uses most of
these members.
The functions that operate on these members were renamed, using a
inet_csk_ prefix while not being moved yet to a new file, so as to
ease the review of these changes.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index af8ad5bb273b..b9c7003b7f8b 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -207,9 +207,9 @@ tb_not_found: | |||
207 | tb->fastreuse = 0; | 207 | tb->fastreuse = 0; |
208 | 208 | ||
209 | success: | 209 | success: |
210 | if (!inet_sk(sk)->bind_hash) | 210 | if (!inet_csk(sk)->icsk_bind_hash) |
211 | inet_bind_hash(sk, tb, snum); | 211 | inet_bind_hash(sk, tb, snum); |
212 | BUG_TRAP(inet_sk(sk)->bind_hash == tb); | 212 | BUG_TRAP(inet_csk(sk)->icsk_bind_hash == tb); |
213 | ret = 0; | 213 | ret = 0; |
214 | 214 | ||
215 | fail_unlock: | 215 | fail_unlock: |
@@ -381,7 +381,7 @@ EXPORT_SYMBOL_GPL(tcp_v6_lookup); | |||
381 | * Open request hash tables. | 381 | * Open request hash tables. |
382 | */ | 382 | */ |
383 | 383 | ||
384 | static u32 tcp_v6_synq_hash(struct in6_addr *raddr, u16 rport, u32 rnd) | 384 | static u32 tcp_v6_synq_hash(const struct in6_addr *raddr, const u16 rport, const u32 rnd) |
385 | { | 385 | { |
386 | u32 a, b, c; | 386 | u32 a, b, c; |
387 | 387 | ||
@@ -401,14 +401,15 @@ static u32 tcp_v6_synq_hash(struct in6_addr *raddr, u16 rport, u32 rnd) | |||
401 | return c & (TCP_SYNQ_HSIZE - 1); | 401 | return c & (TCP_SYNQ_HSIZE - 1); |
402 | } | 402 | } |
403 | 403 | ||
404 | static struct request_sock *tcp_v6_search_req(struct tcp_sock *tp, | 404 | static struct request_sock *tcp_v6_search_req(const struct sock *sk, |
405 | struct request_sock ***prevp, | 405 | struct request_sock ***prevp, |
406 | __u16 rport, | 406 | __u16 rport, |
407 | struct in6_addr *raddr, | 407 | struct in6_addr *raddr, |
408 | struct in6_addr *laddr, | 408 | struct in6_addr *laddr, |
409 | int iif) | 409 | int iif) |
410 | { | 410 | { |
411 | struct listen_sock *lopt = tp->accept_queue.listen_opt; | 411 | const struct inet_connection_sock *icsk = inet_csk(sk); |
412 | struct listen_sock *lopt = icsk->icsk_accept_queue.listen_opt; | ||
412 | struct request_sock *req, **prev; | 413 | struct request_sock *req, **prev; |
413 | 414 | ||
414 | for (prev = &lopt->syn_table[tcp_v6_synq_hash(raddr, rport, lopt->hash_rnd)]; | 415 | for (prev = &lopt->syn_table[tcp_v6_synq_hash(raddr, rport, lopt->hash_rnd)]; |
@@ -619,7 +620,7 @@ ok: | |||
619 | } | 620 | } |
620 | 621 | ||
621 | head = &tcp_hashinfo.bhash[inet_bhashfn(snum, tcp_hashinfo.bhash_size)]; | 622 | head = &tcp_hashinfo.bhash[inet_bhashfn(snum, tcp_hashinfo.bhash_size)]; |
622 | tb = inet_sk(sk)->bind_hash; | 623 | tb = inet_csk(sk)->icsk_bind_hash; |
623 | spin_lock_bh(&head->lock); | 624 | spin_lock_bh(&head->lock); |
624 | 625 | ||
625 | if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { | 626 | if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { |
@@ -925,7 +926,7 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
925 | if (sock_owned_by_user(sk)) | 926 | if (sock_owned_by_user(sk)) |
926 | goto out; | 927 | goto out; |
927 | 928 | ||
928 | req = tcp_v6_search_req(tp, &prev, th->dest, &hdr->daddr, | 929 | req = tcp_v6_search_req(sk, &prev, th->dest, &hdr->daddr, |
929 | &hdr->saddr, tcp_v6_iif(skb)); | 930 | &hdr->saddr, tcp_v6_iif(skb)); |
930 | if (!req) | 931 | if (!req) |
931 | goto out; | 932 | goto out; |
@@ -940,7 +941,7 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
940 | goto out; | 941 | goto out; |
941 | } | 942 | } |
942 | 943 | ||
943 | tcp_synq_drop(sk, req, prev); | 944 | inet_csk_reqsk_queue_drop(sk, req, prev); |
944 | goto out; | 945 | goto out; |
945 | 946 | ||
946 | case TCP_SYN_SENT: | 947 | case TCP_SYN_SENT: |
@@ -1245,11 +1246,10 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) | |||
1245 | { | 1246 | { |
1246 | struct request_sock *req, **prev; | 1247 | struct request_sock *req, **prev; |
1247 | struct tcphdr *th = skb->h.th; | 1248 | struct tcphdr *th = skb->h.th; |
1248 | struct tcp_sock *tp = tcp_sk(sk); | ||
1249 | struct sock *nsk; | 1249 | struct sock *nsk; |
1250 | 1250 | ||
1251 | /* Find possible connection requests. */ | 1251 | /* Find possible connection requests. */ |
1252 | req = tcp_v6_search_req(tp, &prev, th->source, &skb->nh.ipv6h->saddr, | 1252 | req = tcp_v6_search_req(sk, &prev, th->source, &skb->nh.ipv6h->saddr, |
1253 | &skb->nh.ipv6h->daddr, tcp_v6_iif(skb)); | 1253 | &skb->nh.ipv6h->daddr, tcp_v6_iif(skb)); |
1254 | if (req) | 1254 | if (req) |
1255 | return tcp_check_req(sk, skb, req, prev); | 1255 | return tcp_check_req(sk, skb, req, prev); |
@@ -1278,12 +1278,12 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) | |||
1278 | 1278 | ||
1279 | static void tcp_v6_synq_add(struct sock *sk, struct request_sock *req) | 1279 | static void tcp_v6_synq_add(struct sock *sk, struct request_sock *req) |
1280 | { | 1280 | { |
1281 | struct tcp_sock *tp = tcp_sk(sk); | 1281 | struct inet_connection_sock *icsk = inet_csk(sk); |
1282 | struct listen_sock *lopt = tp->accept_queue.listen_opt; | 1282 | struct listen_sock *lopt = icsk->icsk_accept_queue.listen_opt; |
1283 | u32 h = tcp_v6_synq_hash(&tcp6_rsk(req)->rmt_addr, inet_rsk(req)->rmt_port, lopt->hash_rnd); | 1283 | const u32 h = tcp_v6_synq_hash(&tcp6_rsk(req)->rmt_addr, inet_rsk(req)->rmt_port, lopt->hash_rnd); |
1284 | 1284 | ||
1285 | reqsk_queue_hash_req(&tp->accept_queue, h, req, TCP_TIMEOUT_INIT); | 1285 | reqsk_queue_hash_req(&icsk->icsk_accept_queue, h, req, TCP_TIMEOUT_INIT); |
1286 | tcp_synq_added(sk); | 1286 | inet_csk_reqsk_queue_added(sk, TCP_TIMEOUT_INIT); |
1287 | } | 1287 | } |
1288 | 1288 | ||
1289 | 1289 | ||
@@ -1308,13 +1308,13 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1308 | /* | 1308 | /* |
1309 | * There are no SYN attacks on IPv6, yet... | 1309 | * There are no SYN attacks on IPv6, yet... |
1310 | */ | 1310 | */ |
1311 | if (tcp_synq_is_full(sk) && !isn) { | 1311 | if (inet_csk_reqsk_queue_is_full(sk) && !isn) { |
1312 | if (net_ratelimit()) | 1312 | if (net_ratelimit()) |
1313 | printk(KERN_INFO "TCPv6: dropping request, synflood is possible\n"); | 1313 | printk(KERN_INFO "TCPv6: dropping request, synflood is possible\n"); |
1314 | goto drop; | 1314 | goto drop; |
1315 | } | 1315 | } |
1316 | 1316 | ||
1317 | if (sk_acceptq_is_full(sk) && tcp_synq_young(sk) > 1) | 1317 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
1318 | goto drop; | 1318 | goto drop; |
1319 | 1319 | ||
1320 | req = reqsk_alloc(&tcp6_request_sock_ops); | 1320 | req = reqsk_alloc(&tcp6_request_sock_ops); |
@@ -2015,7 +2015,7 @@ static int tcp_v6_init_sock(struct sock *sk) | |||
2015 | tcp_init_xmit_timers(sk); | 2015 | tcp_init_xmit_timers(sk); |
2016 | tcp_prequeue_init(tp); | 2016 | tcp_prequeue_init(tp); |
2017 | 2017 | ||
2018 | tp->rto = TCP_TIMEOUT_INIT; | 2018 | inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT; |
2019 | tp->mdev = TCP_TIMEOUT_INIT; | 2019 | tp->mdev = TCP_TIMEOUT_INIT; |
2020 | 2020 | ||
2021 | /* So many TCP implementations out there (incorrectly) count the | 2021 | /* So many TCP implementations out there (incorrectly) count the |
@@ -2098,18 +2098,20 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) | |||
2098 | unsigned long timer_expires; | 2098 | unsigned long timer_expires; |
2099 | struct inet_sock *inet = inet_sk(sp); | 2099 | struct inet_sock *inet = inet_sk(sp); |
2100 | struct tcp_sock *tp = tcp_sk(sp); | 2100 | struct tcp_sock *tp = tcp_sk(sp); |
2101 | const struct inet_connection_sock *icsk = inet_csk(sp); | ||
2101 | struct ipv6_pinfo *np = inet6_sk(sp); | 2102 | struct ipv6_pinfo *np = inet6_sk(sp); |
2102 | 2103 | ||
2103 | dest = &np->daddr; | 2104 | dest = &np->daddr; |
2104 | src = &np->rcv_saddr; | 2105 | src = &np->rcv_saddr; |
2105 | destp = ntohs(inet->dport); | 2106 | destp = ntohs(inet->dport); |
2106 | srcp = ntohs(inet->sport); | 2107 | srcp = ntohs(inet->sport); |
2107 | if (tp->pending == TCP_TIME_RETRANS) { | 2108 | |
2109 | if (icsk->icsk_pending == ICSK_TIME_RETRANS) { | ||
2108 | timer_active = 1; | 2110 | timer_active = 1; |
2109 | timer_expires = tp->timeout; | 2111 | timer_expires = icsk->icsk_timeout; |
2110 | } else if (tp->pending == TCP_TIME_PROBE0) { | 2112 | } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) { |
2111 | timer_active = 4; | 2113 | timer_active = 4; |
2112 | timer_expires = tp->timeout; | 2114 | timer_expires = icsk->icsk_timeout; |
2113 | } else if (timer_pending(&sp->sk_timer)) { | 2115 | } else if (timer_pending(&sp->sk_timer)) { |
2114 | timer_active = 2; | 2116 | timer_active = 2; |
2115 | timer_expires = sp->sk_timer.expires; | 2117 | timer_expires = sp->sk_timer.expires; |
@@ -2130,12 +2132,14 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) | |||
2130 | tp->write_seq-tp->snd_una, tp->rcv_nxt-tp->copied_seq, | 2132 | tp->write_seq-tp->snd_una, tp->rcv_nxt-tp->copied_seq, |
2131 | timer_active, | 2133 | timer_active, |
2132 | jiffies_to_clock_t(timer_expires - jiffies), | 2134 | jiffies_to_clock_t(timer_expires - jiffies), |
2133 | tp->retransmits, | 2135 | icsk->icsk_retransmits, |
2134 | sock_i_uid(sp), | 2136 | sock_i_uid(sp), |
2135 | tp->probes_out, | 2137 | tp->probes_out, |
2136 | sock_i_ino(sp), | 2138 | sock_i_ino(sp), |
2137 | atomic_read(&sp->sk_refcnt), sp, | 2139 | atomic_read(&sp->sk_refcnt), sp, |
2138 | tp->rto, tp->ack.ato, (tp->ack.quick<<1)|tp->ack.pingpong, | 2140 | icsk->icsk_rto, |
2141 | icsk->icsk_ack.ato, | ||
2142 | (icsk->icsk_ack.quick << 1 ) | icsk->icsk_ack.pingpong, | ||
2139 | tp->snd_cwnd, tp->snd_ssthresh>=0xFFFF?-1:tp->snd_ssthresh | 2143 | tp->snd_cwnd, tp->snd_ssthresh>=0xFFFF?-1:tp->snd_ssthresh |
2140 | ); | 2144 | ); |
2141 | } | 2145 | } |
@@ -2227,7 +2231,7 @@ struct proto tcpv6_prot = { | |||
2227 | .close = tcp_close, | 2231 | .close = tcp_close, |
2228 | .connect = tcp_v6_connect, | 2232 | .connect = tcp_v6_connect, |
2229 | .disconnect = tcp_disconnect, | 2233 | .disconnect = tcp_disconnect, |
2230 | .accept = tcp_accept, | 2234 | .accept = inet_csk_accept, |
2231 | .ioctl = tcp_ioctl, | 2235 | .ioctl = tcp_ioctl, |
2232 | .init = tcp_v6_init_sock, | 2236 | .init = tcp_v6_init_sock, |
2233 | .destroy = tcp_v6_destroy_sock, | 2237 | .destroy = tcp_v6_destroy_sock, |