diff options
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/inet_timewait_sock.h | 3 | ||||
| -rw-r--r-- | include/net/sock.h | 4 | ||||
| -rw-r--r-- | include/net/tcp.h | 3 | ||||
| -rw-r--r-- | include/net/timewait_sock.h | 31 |
4 files changed, 38 insertions, 3 deletions
diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h index ca240f856c4..e396a65473d 100644 --- a/include/net/inet_timewait_sock.h +++ b/include/net/inet_timewait_sock.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | #include <net/sock.h> | 27 | #include <net/sock.h> |
| 28 | #include <net/tcp_states.h> | 28 | #include <net/tcp_states.h> |
| 29 | #include <net/timewait_sock.h> | ||
| 29 | 30 | ||
| 30 | #include <asm/atomic.h> | 31 | #include <asm/atomic.h> |
| 31 | 32 | ||
| @@ -200,7 +201,7 @@ static inline void inet_twsk_put(struct inet_timewait_sock *tw) | |||
| 200 | printk(KERN_DEBUG "%s timewait_sock %p released\n", | 201 | printk(KERN_DEBUG "%s timewait_sock %p released\n", |
| 201 | tw->tw_prot->name, tw); | 202 | tw->tw_prot->name, tw); |
| 202 | #endif | 203 | #endif |
| 203 | kmem_cache_free(tw->tw_prot->twsk_slab, tw); | 204 | kmem_cache_free(tw->tw_prot->twsk_prot->twsk_slab, tw); |
| 204 | module_put(owner); | 205 | module_put(owner); |
| 205 | } | 206 | } |
| 206 | } | 207 | } |
diff --git a/include/net/sock.h b/include/net/sock.h index 0fbae85c6d5..91d28957dc1 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -493,6 +493,7 @@ extern void sk_stream_kill_queues(struct sock *sk); | |||
| 493 | extern int sk_wait_data(struct sock *sk, long *timeo); | 493 | extern int sk_wait_data(struct sock *sk, long *timeo); |
| 494 | 494 | ||
| 495 | struct request_sock_ops; | 495 | struct request_sock_ops; |
| 496 | struct timewait_sock_ops; | ||
| 496 | 497 | ||
| 497 | /* Networking protocol blocks we attach to sockets. | 498 | /* Networking protocol blocks we attach to sockets. |
| 498 | * socket layer -> transport layer interface | 499 | * socket layer -> transport layer interface |
| @@ -557,11 +558,10 @@ struct proto { | |||
| 557 | kmem_cache_t *slab; | 558 | kmem_cache_t *slab; |
| 558 | unsigned int obj_size; | 559 | unsigned int obj_size; |
| 559 | 560 | ||
| 560 | kmem_cache_t *twsk_slab; | ||
| 561 | unsigned int twsk_obj_size; | ||
| 562 | atomic_t *orphan_count; | 561 | atomic_t *orphan_count; |
| 563 | 562 | ||
| 564 | struct request_sock_ops *rsk_prot; | 563 | struct request_sock_ops *rsk_prot; |
| 564 | struct timewait_sock_ops *twsk_prot; | ||
| 565 | 565 | ||
| 566 | struct module *owner; | 566 | struct module *owner; |
| 567 | 567 | ||
diff --git a/include/net/tcp.h b/include/net/tcp.h index 83b117a25c2..176221cd0cc 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -287,6 +287,9 @@ extern int tcp_rcv_established(struct sock *sk, | |||
| 287 | 287 | ||
| 288 | extern void tcp_rcv_space_adjust(struct sock *sk); | 288 | extern void tcp_rcv_space_adjust(struct sock *sk); |
| 289 | 289 | ||
| 290 | extern int tcp_twsk_unique(struct sock *sk, | ||
| 291 | struct sock *sktw, void *twp); | ||
| 292 | |||
| 290 | static inline void tcp_dec_quickack_mode(struct sock *sk, | 293 | static inline void tcp_dec_quickack_mode(struct sock *sk, |
| 291 | const unsigned int pkts) | 294 | const unsigned int pkts) |
| 292 | { | 295 | { |
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h new file mode 100644 index 00000000000..2544281e1d5 --- /dev/null +++ b/include/net/timewait_sock.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * NET Generic infrastructure for Network protocols. | ||
| 3 | * | ||
| 4 | * Authors: Arnaldo Carvalho de Melo <acme@conectiva.com.br> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | #ifndef _TIMEWAIT_SOCK_H | ||
| 12 | #define _TIMEWAIT_SOCK_H | ||
| 13 | |||
| 14 | #include <linux/slab.h> | ||
| 15 | #include <net/sock.h> | ||
| 16 | |||
| 17 | struct timewait_sock_ops { | ||
| 18 | kmem_cache_t *twsk_slab; | ||
| 19 | unsigned int twsk_obj_size; | ||
| 20 | int (*twsk_unique)(struct sock *sk, | ||
| 21 | struct sock *sktw, void *twp); | ||
| 22 | }; | ||
| 23 | |||
| 24 | static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) | ||
| 25 | { | ||
| 26 | if (sk->sk_prot->twsk_prot->twsk_unique != NULL) | ||
| 27 | return sk->sk_prot->twsk_prot->twsk_unique(sk, sktw, twp); | ||
| 28 | return 0; | ||
| 29 | } | ||
| 30 | |||
| 31 | #endif /* _TIMEWAIT_SOCK_H */ | ||
