Blame view
include/net/inet_connection_sock.h
10.3 KB
463c84b97 [NET]: Introduce ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * NET Generic infrastructure for INET connection oriented protocols. * * Definitions for inet_connection_sock * * Authors: Many people, see the TCP sources * * From code originally in TCP * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ #ifndef _INET_CONNECTION_SOCK_H #define _INET_CONNECTION_SOCK_H |
8292a17a3 [ICSK]: Rename st... |
17 |
#include <linux/compiler.h> |
3f421baa4 [NET]: Just move ... |
18 |
#include <linux/string.h> |
463c84b97 [NET]: Introduce ... |
19 |
#include <linux/timer.h> |
bd01f843c [PATCH] severing ... |
20 |
#include <linux/poll.h> |
14c850212 [INET_SOCK]: Move... |
21 22 |
#include <net/inet_sock.h> |
463c84b97 [NET]: Introduce ... |
23 |
#include <net/request_sock.h> |
3f421baa4 [NET]: Just move ... |
24 25 26 27 |
#define INET_CSK_DEBUG 1 /* Cancel timers, when they are not required. */ #undef INET_CSK_CLEAR_TIMERS |
463c84b97 [NET]: Introduce ... |
28 |
struct inet_bind_bucket; |
6687e988d [ICSK]: Move TCP ... |
29 |
struct tcp_congestion_ops; |
463c84b97 [NET]: Introduce ... |
30 |
|
8292a17a3 [ICSK]: Rename st... |
31 32 33 34 35 |
/* * Pointers to address related TCP functions * (i.e. things that depend on the address family) */ struct inet_connection_sock_af_ops { |
b0270e910 ipv4: add a sock ... |
36 |
int (*queue_xmit)(struct sock *sk, struct sk_buff *skb, struct flowi *fl); |
bb2962461 inet: Remove unus... |
37 |
void (*send_check)(struct sock *sk, struct sk_buff *skb); |
8292a17a3 [ICSK]: Rename st... |
38 |
int (*rebuild_header)(struct sock *sk); |
5d299f3d3 net: ipv6: fix TC... |
39 |
void (*sk_rx_dst_set)(struct sock *sk, const struct sk_buff *skb); |
8292a17a3 [ICSK]: Rename st... |
40 |
int (*conn_request)(struct sock *sk, struct sk_buff *skb); |
0c27171e6 tcp/dccp: constif... |
41 |
struct sock *(*syn_recv_sock)(const struct sock *sk, struct sk_buff *skb, |
8292a17a3 [ICSK]: Rename st... |
42 |
struct request_sock *req, |
5e0724d02 tcp/dccp: fix has... |
43 44 45 |
struct dst_entry *dst, struct request_sock *req_unhash, bool *own_req); |
850db6b8c [INET_CONNECTION_... |
46 |
u16 net_header_len; |
674696014 ipv6: RTAX_FEATUR... |
47 |
u16 net_frag_header_len; |
850db6b8c [INET_CONNECTION_... |
48 |
u16 sockaddr_len; |
8292a17a3 [ICSK]: Rename st... |
49 |
int (*setsockopt)(struct sock *sk, int level, int optname, |
b7058842c net: Make setsock... |
50 |
char __user *optval, unsigned int optlen); |
8292a17a3 [ICSK]: Rename st... |
51 52 |
int (*getsockopt)(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen); |
af01d5374 net: more #ifdef ... |
53 |
#ifdef CONFIG_COMPAT |
3fdadf7d2 [NET]: {get|set}s... |
54 55 |
int (*compat_setsockopt)(struct sock *sk, int level, int optname, |
b7058842c net: Make setsock... |
56 |
char __user *optval, unsigned int optlen); |
3fdadf7d2 [NET]: {get|set}s... |
57 58 59 |
int (*compat_getsockopt)(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen); |
af01d5374 net: more #ifdef ... |
60 |
#endif |
8292a17a3 [ICSK]: Rename st... |
61 |
void (*addr2sockaddr)(struct sock *sk, struct sockaddr *); |
4fab90719 tcp: fix tcp_rele... |
62 |
void (*mtu_reduced)(struct sock *sk); |
8292a17a3 [ICSK]: Rename st... |
63 |
}; |
463c84b97 [NET]: Introduce ... |
64 65 66 67 68 69 70 |
/** inet_connection_sock - INET connection oriented sock * * @icsk_accept_queue: FIFO of established children * @icsk_bind_hash: Bind node * @icsk_timeout: Timeout * @icsk_retransmit_timer: Resend (no ack) * @icsk_rto: Retransmit timeout |
d83d8461f [IP_SOCKGLUE]: Re... |
71 |
* @icsk_pmtu_cookie Last pmtu seen by socket |
6687e988d [ICSK]: Move TCP ... |
72 |
* @icsk_ca_ops Pluggable congestion control hook |
8292a17a3 [ICSK]: Rename st... |
73 |
* @icsk_af_ops Operations which are AF_INET{4,6} specific |
734942cc4 tcp: ULP infrastr... |
74 75 |
* @icsk_ulp_ops Pluggable ULP control hook * @icsk_ulp_data ULP private data |
6687e988d [ICSK]: Move TCP ... |
76 |
* @icsk_ca_state: Congestion control state |
463c84b97 [NET]: Introduce ... |
77 78 79 80 |
* @icsk_retransmits: Number of unrecovered [RTO] timeouts * @icsk_pending: Scheduled timer event * @icsk_backoff: Backoff * @icsk_syn_retries: Number of allowed SYN (or equivalent) retries |
6687e988d [ICSK]: Move TCP ... |
81 |
* @icsk_probes_out: unanswered 0 window probes |
d83d8461f [IP_SOCKGLUE]: Re... |
82 |
* @icsk_ext_hdr_len: Network protocol overhead (IP/IPv6 options) |
463c84b97 [NET]: Introduce ... |
83 |
* @icsk_ack: Delayed ACK control data |
5d424d5a6 [TCP]: MTU probing |
84 |
* @icsk_mtup; MTU probing control data |
463c84b97 [NET]: Introduce ... |
85 86 87 88 89 90 91 92 93 94 |
*/ struct inet_connection_sock { /* inet_sock has to be the first member! */ struct inet_sock icsk_inet; struct request_sock_queue icsk_accept_queue; struct inet_bind_bucket *icsk_bind_hash; unsigned long icsk_timeout; struct timer_list icsk_retransmit_timer; struct timer_list icsk_delack_timer; __u32 icsk_rto; |
d83d8461f [IP_SOCKGLUE]: Re... |
95 |
__u32 icsk_pmtu_cookie; |
770cfbcff [INET]: congestio... |
96 97 |
const struct tcp_congestion_ops *icsk_ca_ops; const struct inet_connection_sock_af_ops *icsk_af_ops; |
734942cc4 tcp: ULP infrastr... |
98 99 |
const struct tcp_ulp_ops *icsk_ulp_ops; void *icsk_ulp_data; |
d83d8461f [IP_SOCKGLUE]: Re... |
100 |
unsigned int (*icsk_sync_mss)(struct sock *sk, u32 pmtu); |
9f950415e tcp: fix child so... |
101 102 |
__u8 icsk_ca_state:6, icsk_ca_setsockopt:1, |
c5c6a8ab4 net: tcp: add key... |
103 |
icsk_ca_dst_locked:1; |
463c84b97 [NET]: Introduce ... |
104 105 106 107 |
__u8 icsk_retransmits; __u8 icsk_pending; __u8 icsk_backoff; __u8 icsk_syn_retries; |
6687e988d [ICSK]: Move TCP ... |
108 |
__u8 icsk_probes_out; |
d83d8461f [IP_SOCKGLUE]: Re... |
109 |
__u16 icsk_ext_hdr_len; |
463c84b97 [NET]: Introduce ... |
110 111 112 113 114 115 116 117 118 119 120 |
struct { __u8 pending; /* ACK is pending */ __u8 quick; /* Scheduled number of quick acks */ __u8 pingpong; /* The session is interactive */ __u8 blocked; /* Delayed ACK was blocked by socket lock */ __u32 ato; /* Predicted tick of soft clock */ unsigned long timeout; /* Currently scheduled timeout */ __u32 lrcvtime; /* timestamp of last received data packet */ __u16 last_seg_size; /* Size of last incoming segment */ __u16 rcv_mss; /* MSS used for delayed ACK decisions */ } icsk_ack; |
5d424d5a6 [TCP]: MTU probing |
121 122 123 124 125 126 127 128 129 |
struct { int enabled; /* Range of MTUs to search */ int search_high; int search_low; /* Information on the current probe. */ int probe_size; |
05cbc0db0 ipv4: Create prob... |
130 131 |
u32 probe_timestamp; |
5d424d5a6 [TCP]: MTU probing |
132 |
} icsk_mtup; |
dca43c75e tcp: Add TCP_USER... |
133 |
u32 icsk_user_timeout; |
b5d721d76 inet: properly al... |
134 |
|
7e7441713 tcp: increase ICS... |
135 136 |
u64 icsk_ca_priv[88 / sizeof(u64)]; #define ICSK_CA_PRIV_SIZE (11 * sizeof(u64)) |
463c84b97 [NET]: Introduce ... |
137 |
}; |
3f421baa4 [NET]: Just move ... |
138 139 140 |
#define ICSK_TIME_RETRANS 1 /* Retransmit timer */ #define ICSK_TIME_DACK 2 /* Delayed ack timer */ #define ICSK_TIME_PROBE0 3 /* Zero window probe timer */ |
6ba8a3b19 tcp: Tail loss pr... |
141 142 |
#define ICSK_TIME_EARLY_RETRANS 4 /* Early retransmit timer */ #define ICSK_TIME_LOSS_PROBE 5 /* Tail loss probe timer */ |
57dde7f70 tcp: add reorderi... |
143 |
#define ICSK_TIME_REO_TIMEOUT 6 /* Reordering timer */ |
3f421baa4 [NET]: Just move ... |
144 |
|
463c84b97 [NET]: Introduce ... |
145 146 147 148 |
static inline struct inet_connection_sock *inet_csk(const struct sock *sk) { return (struct inet_connection_sock *)sk; } |
6687e988d [ICSK]: Move TCP ... |
149 150 151 152 |
static inline void *inet_csk_ca(const struct sock *sk) { return (void *)inet_csk(sk)->icsk_ca_priv; } |
1fd511553 inet*.h: Remove e... |
153 154 155 |
struct sock *inet_csk_clone_lock(const struct sock *sk, const struct request_sock *req, const gfp_t priority); |
9f1d2604c [ICSK]: Introduce... |
156 |
|
3f421baa4 [NET]: Just move ... |
157 158 159 |
enum inet_csk_ack_state_t { ICSK_ACK_SCHED = 1, ICSK_ACK_TIMER = 2, |
1ef9696c9 [TCP]: Send ACKs ... |
160 161 |
ICSK_ACK_PUSHED = 4, ICSK_ACK_PUSHED2 = 8 |
3f421baa4 [NET]: Just move ... |
162 |
}; |
1fd511553 inet*.h: Remove e... |
163 164 165 166 167 |
void inet_csk_init_xmit_timers(struct sock *sk, void (*retransmit_handler)(unsigned long), void (*delack_handler)(unsigned long), void (*keepalive_handler)(unsigned long)); void inet_csk_clear_xmit_timers(struct sock *sk); |
463c84b97 [NET]: Introduce ... |
168 |
|
3f421baa4 [NET]: Just move ... |
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
static inline void inet_csk_schedule_ack(struct sock *sk) { inet_csk(sk)->icsk_ack.pending |= ICSK_ACK_SCHED; } static inline int inet_csk_ack_scheduled(const struct sock *sk) { return inet_csk(sk)->icsk_ack.pending & ICSK_ACK_SCHED; } static inline void inet_csk_delack_init(struct sock *sk) { memset(&inet_csk(sk)->icsk_ack, 0, sizeof(inet_csk(sk)->icsk_ack)); } |
1fd511553 inet*.h: Remove e... |
183 184 |
void inet_csk_delete_keepalive_timer(struct sock *sk); void inet_csk_reset_keepalive_timer(struct sock *sk, unsigned long timeout); |
3f421baa4 [NET]: Just move ... |
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
#ifdef INET_CSK_DEBUG extern const char inet_csk_timer_bug_msg[]; #endif static inline void inet_csk_clear_xmit_timer(struct sock *sk, const int what) { struct inet_connection_sock *icsk = inet_csk(sk); if (what == ICSK_TIME_RETRANS || what == ICSK_TIME_PROBE0) { icsk->icsk_pending = 0; #ifdef INET_CSK_CLEAR_TIMERS sk_stop_timer(sk, &icsk->icsk_retransmit_timer); #endif } else if (what == ICSK_TIME_DACK) { icsk->icsk_ack.blocked = icsk->icsk_ack.pending = 0; #ifdef INET_CSK_CLEAR_TIMERS sk_stop_timer(sk, &icsk->icsk_delack_timer); #endif } #ifdef INET_CSK_DEBUG else { |
d8971fcb7 [INET]: compile e... |
207 |
pr_debug("%s", inet_csk_timer_bug_msg); |
3f421baa4 [NET]: Just move ... |
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
} #endif } /* * Reset the retransmission timer */ static inline void inet_csk_reset_xmit_timer(struct sock *sk, const int what, unsigned long when, const unsigned long max_when) { struct inet_connection_sock *icsk = inet_csk(sk); if (when > max_when) { #ifdef INET_CSK_DEBUG pr_debug("reset_xmit_timer: sk=%p %d when=0x%lx, caller=%p ", sk, what, when, current_text_addr()); #endif when = max_when; } |
6ba8a3b19 tcp: Tail loss pr... |
229 |
if (what == ICSK_TIME_RETRANS || what == ICSK_TIME_PROBE0 || |
57dde7f70 tcp: add reorderi... |
230 231 |
what == ICSK_TIME_EARLY_RETRANS || what == ICSK_TIME_LOSS_PROBE || what == ICSK_TIME_REO_TIMEOUT) { |
3f421baa4 [NET]: Just move ... |
232 233 234 235 236 237 238 239 240 241 |
icsk->icsk_pending = what; icsk->icsk_timeout = jiffies + when; sk_reset_timer(sk, &icsk->icsk_retransmit_timer, icsk->icsk_timeout); } else if (what == ICSK_TIME_DACK) { icsk->icsk_ack.pending |= ICSK_ACK_TIMER; icsk->icsk_ack.timeout = jiffies + when; sk_reset_timer(sk, &icsk->icsk_delack_timer, icsk->icsk_ack.timeout); } #ifdef INET_CSK_DEBUG else { |
d8971fcb7 [INET]: compile e... |
242 |
pr_debug("%s", inet_csk_timer_bug_msg); |
3f421baa4 [NET]: Just move ... |
243 244 245 |
} #endif } |
fcdd1cf4d tcp: avoid possib... |
246 247 248 249 250 251 252 253 |
static inline unsigned long inet_csk_rto_backoff(const struct inet_connection_sock *icsk, unsigned long max_when) { u64 when = (u64)icsk->icsk_rto << icsk->icsk_backoff; return (unsigned long)min_t(u64, when, max_when); } |
cdfbabfb2 net: Work around ... |
254 |
struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern); |
3f421baa4 [NET]: Just move ... |
255 |
|
1fd511553 inet*.h: Remove e... |
256 |
int inet_csk_get_port(struct sock *sk, unsigned short snum); |
463c84b97 [NET]: Introduce ... |
257 |
|
e5895bc60 inet: constify in... |
258 |
struct dst_entry *inet_csk_route_req(const struct sock *sk, struct flowi4 *fl4, |
1fd511553 inet*.h: Remove e... |
259 |
const struct request_sock *req); |
a2432c4fa inet: constify in... |
260 261 |
struct dst_entry *inet_csk_route_child_sock(const struct sock *sk, struct sock *newsk, |
ba3f7f04e ipv4: Kill FLOWI_... |
262 |
const struct request_sock *req); |
463c84b97 [NET]: Introduce ... |
263 |
|
7716682cc tcp/dccp: fix ano... |
264 265 266 |
struct sock *inet_csk_reqsk_queue_add(struct sock *sk, struct request_sock *req, struct sock *child); |
1fd511553 inet*.h: Remove e... |
267 268 |
void inet_csk_reqsk_queue_hash_add(struct sock *sk, struct request_sock *req, unsigned long timeout); |
5e0724d02 tcp/dccp: fix has... |
269 270 271 |
struct sock *inet_csk_complete_hashdance(struct sock *sk, struct sock *child, struct request_sock *req, bool own_req); |
3f421baa4 [NET]: Just move ... |
272 |
|
2feda3419 tcp/dccp: remove ... |
273 |
static inline void inet_csk_reqsk_queue_added(struct sock *sk) |
3f421baa4 [NET]: Just move ... |
274 |
{ |
fa76ce732 inet: get rid of ... |
275 |
reqsk_queue_added(&inet_csk(sk)->icsk_accept_queue); |
3f421baa4 [NET]: Just move ... |
276 277 278 279 280 281 |
} static inline int inet_csk_reqsk_queue_len(const struct sock *sk) { return reqsk_queue_len(&inet_csk(sk)->icsk_accept_queue); } |
3f421baa4 [NET]: Just move ... |
282 283 |
static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk) { |
ef547f2ac tcp: remove max_q... |
284 |
return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog; |
3f421baa4 [NET]: Just move ... |
285 |
} |
b357a364c inet: fix possibl... |
286 |
void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req); |
f03f2e154 tcp/dccp: add ine... |
287 |
void inet_csk_reqsk_queue_drop_and_put(struct sock *sk, struct request_sock *req); |
3f421baa4 [NET]: Just move ... |
288 |
|
1fd511553 inet*.h: Remove e... |
289 290 |
void inet_csk_destroy_sock(struct sock *sk); void inet_csk_prepare_forced_close(struct sock *sk); |
dc40c7bc7 [ICSK]: Generalis... |
291 292 293 294 295 296 297 298 299 |
/* * LISTEN is a special case for poll.. */ static inline unsigned int inet_csk_listen_poll(const struct sock *sk) { return !reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue) ? (POLLIN | POLLRDNORM) : 0; } |
f985c65c9 tcp: avoid spurio... |
300 |
int inet_csk_listen_start(struct sock *sk, int backlog); |
1fd511553 inet*.h: Remove e... |
301 |
void inet_csk_listen_stop(struct sock *sk); |
295f7324f [ICSK]: Introduce... |
302 |
|
1fd511553 inet*.h: Remove e... |
303 |
void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); |
af05dc939 [ICSK]: Move v4_a... |
304 |
|
1fd511553 inet*.h: Remove e... |
305 306 307 308 |
int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen); int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, char __user *optval, unsigned int optlen); |
80d0a69fc ipv4: Add helper ... |
309 |
|
1fd511553 inet*.h: Remove e... |
310 |
struct dst_entry *inet_csk_update_pmtu(struct sock *sk, u32 mtu); |
463c84b97 [NET]: Introduce ... |
311 |
#endif /* _INET_CONNECTION_SOCK_H */ |