diff options
Diffstat (limited to 'include/net/inet_connection_sock.h')
-rw-r--r-- | include/net/inet_connection_sock.h | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h index b0c99060b78d..50234fa56a68 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h | |||
@@ -15,9 +15,11 @@ | |||
15 | #ifndef _INET_CONNECTION_SOCK_H | 15 | #ifndef _INET_CONNECTION_SOCK_H |
16 | #define _INET_CONNECTION_SOCK_H | 16 | #define _INET_CONNECTION_SOCK_H |
17 | 17 | ||
18 | #include <linux/ip.h> | 18 | #include <linux/compiler.h> |
19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
20 | #include <linux/timer.h> | 20 | #include <linux/timer.h> |
21 | |||
22 | #include <net/inet_sock.h> | ||
21 | #include <net/request_sock.h> | 23 | #include <net/request_sock.h> |
22 | 24 | ||
23 | #define INET_CSK_DEBUG 1 | 25 | #define INET_CSK_DEBUG 1 |
@@ -29,6 +31,29 @@ struct inet_bind_bucket; | |||
29 | struct inet_hashinfo; | 31 | struct inet_hashinfo; |
30 | struct tcp_congestion_ops; | 32 | struct tcp_congestion_ops; |
31 | 33 | ||
34 | /* | ||
35 | * Pointers to address related TCP functions | ||
36 | * (i.e. things that depend on the address family) | ||
37 | */ | ||
38 | struct inet_connection_sock_af_ops { | ||
39 | int (*queue_xmit)(struct sk_buff *skb, int ipfragok); | ||
40 | void (*send_check)(struct sock *sk, int len, | ||
41 | struct sk_buff *skb); | ||
42 | int (*rebuild_header)(struct sock *sk); | ||
43 | int (*conn_request)(struct sock *sk, struct sk_buff *skb); | ||
44 | struct sock *(*syn_recv_sock)(struct sock *sk, struct sk_buff *skb, | ||
45 | struct request_sock *req, | ||
46 | struct dst_entry *dst); | ||
47 | int (*remember_stamp)(struct sock *sk); | ||
48 | __u16 net_header_len; | ||
49 | int (*setsockopt)(struct sock *sk, int level, int optname, | ||
50 | char __user *optval, int optlen); | ||
51 | int (*getsockopt)(struct sock *sk, int level, int optname, | ||
52 | char __user *optval, int __user *optlen); | ||
53 | void (*addr2sockaddr)(struct sock *sk, struct sockaddr *); | ||
54 | int sockaddr_len; | ||
55 | }; | ||
56 | |||
32 | /** inet_connection_sock - INET connection oriented sock | 57 | /** inet_connection_sock - INET connection oriented sock |
33 | * | 58 | * |
34 | * @icsk_accept_queue: FIFO of established children | 59 | * @icsk_accept_queue: FIFO of established children |
@@ -36,13 +61,16 @@ struct tcp_congestion_ops; | |||
36 | * @icsk_timeout: Timeout | 61 | * @icsk_timeout: Timeout |
37 | * @icsk_retransmit_timer: Resend (no ack) | 62 | * @icsk_retransmit_timer: Resend (no ack) |
38 | * @icsk_rto: Retransmit timeout | 63 | * @icsk_rto: Retransmit timeout |
64 | * @icsk_pmtu_cookie Last pmtu seen by socket | ||
39 | * @icsk_ca_ops Pluggable congestion control hook | 65 | * @icsk_ca_ops Pluggable congestion control hook |
66 | * @icsk_af_ops Operations which are AF_INET{4,6} specific | ||
40 | * @icsk_ca_state: Congestion control state | 67 | * @icsk_ca_state: Congestion control state |
41 | * @icsk_retransmits: Number of unrecovered [RTO] timeouts | 68 | * @icsk_retransmits: Number of unrecovered [RTO] timeouts |
42 | * @icsk_pending: Scheduled timer event | 69 | * @icsk_pending: Scheduled timer event |
43 | * @icsk_backoff: Backoff | 70 | * @icsk_backoff: Backoff |
44 | * @icsk_syn_retries: Number of allowed SYN (or equivalent) retries | 71 | * @icsk_syn_retries: Number of allowed SYN (or equivalent) retries |
45 | * @icsk_probes_out: unanswered 0 window probes | 72 | * @icsk_probes_out: unanswered 0 window probes |
73 | * @icsk_ext_hdr_len: Network protocol overhead (IP/IPv6 options) | ||
46 | * @icsk_ack: Delayed ACK control data | 74 | * @icsk_ack: Delayed ACK control data |
47 | */ | 75 | */ |
48 | struct inet_connection_sock { | 76 | struct inet_connection_sock { |
@@ -54,14 +82,17 @@ struct inet_connection_sock { | |||
54 | struct timer_list icsk_retransmit_timer; | 82 | struct timer_list icsk_retransmit_timer; |
55 | struct timer_list icsk_delack_timer; | 83 | struct timer_list icsk_delack_timer; |
56 | __u32 icsk_rto; | 84 | __u32 icsk_rto; |
85 | __u32 icsk_pmtu_cookie; | ||
57 | struct tcp_congestion_ops *icsk_ca_ops; | 86 | struct tcp_congestion_ops *icsk_ca_ops; |
87 | struct inet_connection_sock_af_ops *icsk_af_ops; | ||
88 | unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu); | ||
58 | __u8 icsk_ca_state; | 89 | __u8 icsk_ca_state; |
59 | __u8 icsk_retransmits; | 90 | __u8 icsk_retransmits; |
60 | __u8 icsk_pending; | 91 | __u8 icsk_pending; |
61 | __u8 icsk_backoff; | 92 | __u8 icsk_backoff; |
62 | __u8 icsk_syn_retries; | 93 | __u8 icsk_syn_retries; |
63 | __u8 icsk_probes_out; | 94 | __u8 icsk_probes_out; |
64 | /* 2 BYTES HOLE, TRY TO PACK! */ | 95 | __u16 icsk_ext_hdr_len; |
65 | struct { | 96 | struct { |
66 | __u8 pending; /* ACK is pending */ | 97 | __u8 pending; /* ACK is pending */ |
67 | __u8 quick; /* Scheduled number of quick acks */ | 98 | __u8 quick; /* Scheduled number of quick acks */ |
@@ -192,8 +223,12 @@ extern struct request_sock *inet_csk_search_req(const struct sock *sk, | |||
192 | const __u16 rport, | 223 | const __u16 rport, |
193 | const __u32 raddr, | 224 | const __u32 raddr, |
194 | const __u32 laddr); | 225 | const __u32 laddr); |
226 | extern int inet_csk_bind_conflict(const struct sock *sk, | ||
227 | const struct inet_bind_bucket *tb); | ||
195 | extern int inet_csk_get_port(struct inet_hashinfo *hashinfo, | 228 | extern int inet_csk_get_port(struct inet_hashinfo *hashinfo, |
196 | struct sock *sk, unsigned short snum); | 229 | struct sock *sk, unsigned short snum, |
230 | int (*bind_conflict)(const struct sock *sk, | ||
231 | const struct inet_bind_bucket *tb)); | ||
197 | 232 | ||
198 | extern struct dst_entry* inet_csk_route_req(struct sock *sk, | 233 | extern struct dst_entry* inet_csk_route_req(struct sock *sk, |
199 | const struct request_sock *req); | 234 | const struct request_sock *req); |
@@ -207,7 +242,7 @@ static inline void inet_csk_reqsk_queue_add(struct sock *sk, | |||
207 | 242 | ||
208 | extern void inet_csk_reqsk_queue_hash_add(struct sock *sk, | 243 | extern void inet_csk_reqsk_queue_hash_add(struct sock *sk, |
209 | struct request_sock *req, | 244 | struct request_sock *req, |
210 | const unsigned timeout); | 245 | unsigned long timeout); |
211 | 246 | ||
212 | static inline void inet_csk_reqsk_queue_removed(struct sock *sk, | 247 | static inline void inet_csk_reqsk_queue_removed(struct sock *sk, |
213 | struct request_sock *req) | 248 | struct request_sock *req) |
@@ -273,4 +308,6 @@ static inline unsigned int inet_csk_listen_poll(const struct sock *sk) | |||
273 | extern int inet_csk_listen_start(struct sock *sk, const int nr_table_entries); | 308 | extern int inet_csk_listen_start(struct sock *sk, const int nr_table_entries); |
274 | extern void inet_csk_listen_stop(struct sock *sk); | 309 | extern void inet_csk_listen_stop(struct sock *sk); |
275 | 310 | ||
311 | extern void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); | ||
312 | |||
276 | #endif /* _INET_CONNECTION_SOCK_H */ | 313 | #endif /* _INET_CONNECTION_SOCK_H */ |