Blame view
include/linux/dccp.h
16.5 KB
7c657876b [DCCP]: Initial i... |
1 2 |
#ifndef _LINUX_DCCP_H #define _LINUX_DCCP_H |
7c657876b [DCCP]: Initial i... |
3 |
#include <linux/types.h> |
5a47a470e [DCCP]: make <lin... |
4 |
#include <asm/byteorder.h> |
7c657876b [DCCP]: Initial i... |
5 |
|
7c657876b [DCCP]: Initial i... |
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * struct dccp_hdr - generic part of DCCP packet header * * @dccph_sport - Relevant port on the endpoint that sent this packet * @dccph_dport - Relevant port on the other endpoint * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words * @dccph_ccval - Used by the HC-Sender CCID * @dccph_cscov - Parts of the packet that are covered by the Checksum field * @dccph_checksum - Internet checksum, depends on dccph_cscov * @dccph_x - 0 = 24 bit sequence number, 1 = 48 * @dccph_type - packet type, see DCCP_PKT_ prefixed macros * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x */ struct dccp_hdr { |
60fe62e78 [DCCP]: sparse en... |
20 |
__be16 dccph_sport, |
7c657876b [DCCP]: Initial i... |
21 22 23 24 25 26 27 28 29 30 31 |
dccph_dport; __u8 dccph_doff; #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 dccph_cscov:4, dccph_ccval:4; #elif defined(__BIG_ENDIAN_BITFIELD) __u8 dccph_ccval:4, dccph_cscov:4; #else #error "Adjust your <asm/byteorder.h> defines" #endif |
9981a0e36 [NET]: Annotate c... |
32 |
__sum16 dccph_checksum; |
7c657876b [DCCP]: Initial i... |
33 |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
60fe62e78 [DCCP]: sparse en... |
34 |
__u8 dccph_x:1, |
7c657876b [DCCP]: Initial i... |
35 |
dccph_type:4, |
60fe62e78 [DCCP]: sparse en... |
36 |
dccph_reserved:3; |
7c657876b [DCCP]: Initial i... |
37 |
#elif defined(__BIG_ENDIAN_BITFIELD) |
60fe62e78 [DCCP]: sparse en... |
38 |
__u8 dccph_reserved:3, |
7c657876b [DCCP]: Initial i... |
39 |
dccph_type:4, |
60fe62e78 [DCCP]: sparse en... |
40 |
dccph_x:1; |
7c657876b [DCCP]: Initial i... |
41 42 43 |
#else #error "Adjust your <asm/byteorder.h> defines" #endif |
60fe62e78 [DCCP]: sparse en... |
44 45 |
__u8 dccph_seq2; __be16 dccph_seq; |
7c657876b [DCCP]: Initial i... |
46 |
}; |
7c657876b [DCCP]: Initial i... |
47 48 49 50 51 52 |
/** * struct dccp_hdr_ext - the low bits of a 48 bit seq packet * * @dccph_seq_low - low 24 bits of a 48 bit seq packet */ struct dccp_hdr_ext { |
60fe62e78 [DCCP]: sparse en... |
53 |
__be32 dccph_seq_low; |
7c657876b [DCCP]: Initial i... |
54 |
}; |
7c657876b [DCCP]: Initial i... |
55 |
/** |
0430ee345 [DCCP]: Add Suppo... |
56 |
* struct dccp_hdr_request - Connection initiation request header |
7c657876b [DCCP]: Initial i... |
57 58 |
* * @dccph_req_service - Service to which the client app wants to connect |
7c657876b [DCCP]: Initial i... |
59 60 |
*/ struct dccp_hdr_request { |
60fe62e78 [DCCP]: sparse en... |
61 |
__be32 dccph_req_service; |
7c657876b [DCCP]: Initial i... |
62 |
}; |
7c657876b [DCCP]: Initial i... |
63 64 65 66 67 68 69 |
/** * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets * * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR */ struct dccp_hdr_ack_bits { |
60fe62e78 [DCCP]: sparse en... |
70 71 72 |
__be16 dccph_reserved1; __be16 dccph_ack_nr_high; __be32 dccph_ack_nr_low; |
7c657876b [DCCP]: Initial i... |
73 |
}; |
7c657876b [DCCP]: Initial i... |
74 |
/** |
0430ee345 [DCCP]: Add Suppo... |
75 |
* struct dccp_hdr_response - Connection initiation response header |
7c657876b [DCCP]: Initial i... |
76 |
* |
0430ee345 [DCCP]: Add Suppo... |
77 |
* @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3) |
7c657876b [DCCP]: Initial i... |
78 |
* @dccph_resp_service - Echoes the Service Code on a received DCCP-Request |
7c657876b [DCCP]: Initial i... |
79 80 81 |
*/ struct dccp_hdr_response { struct dccp_hdr_ack_bits dccph_resp_ack; |
60fe62e78 [DCCP]: sparse en... |
82 |
__be32 dccph_resp_service; |
7c657876b [DCCP]: Initial i... |
83 |
}; |
7c657876b [DCCP]: Initial i... |
84 85 86 |
/** * struct dccp_hdr_reset - Unconditionally shut down a connection * |
0430ee345 [DCCP]: Add Suppo... |
87 88 89 |
* @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6) * @dccph_reset_code - one of %dccp_reset_codes * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6 |
7c657876b [DCCP]: Initial i... |
90 91 92 93 94 95 |
*/ struct dccp_hdr_reset { struct dccp_hdr_ack_bits dccph_reset_ack; __u8 dccph_reset_code, dccph_reset_data[3]; }; |
7c657876b [DCCP]: Initial i... |
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
enum dccp_pkt_type { DCCP_PKT_REQUEST = 0, DCCP_PKT_RESPONSE, DCCP_PKT_DATA, DCCP_PKT_ACK, DCCP_PKT_DATAACK, DCCP_PKT_CLOSEREQ, DCCP_PKT_CLOSE, DCCP_PKT_RESET, DCCP_PKT_SYNC, DCCP_PKT_SYNCACK, DCCP_PKT_INVALID, }; #define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID static inline unsigned int dccp_packet_hdr_len(const __u8 type) { if (type == DCCP_PKT_DATA) return 0; if (type == DCCP_PKT_DATAACK || type == DCCP_PKT_ACK || type == DCCP_PKT_SYNC || type == DCCP_PKT_SYNCACK || type == DCCP_PKT_CLOSE || type == DCCP_PKT_CLOSEREQ) return sizeof(struct dccp_hdr_ack_bits); if (type == DCCP_PKT_REQUEST) return sizeof(struct dccp_hdr_request); if (type == DCCP_PKT_RESPONSE) return sizeof(struct dccp_hdr_response); return sizeof(struct dccp_hdr_reset); } |
7c657876b [DCCP]: Initial i... |
129 130 131 132 133 134 135 136 137 138 139 140 141 |
enum dccp_reset_codes { DCCP_RESET_CODE_UNSPECIFIED = 0, DCCP_RESET_CODE_CLOSED, DCCP_RESET_CODE_ABORTED, DCCP_RESET_CODE_NO_CONNECTION, DCCP_RESET_CODE_PACKET_ERROR, DCCP_RESET_CODE_OPTION_ERROR, DCCP_RESET_CODE_MANDATORY_ERROR, DCCP_RESET_CODE_CONNECTION_REFUSED, DCCP_RESET_CODE_BAD_SERVICE_CODE, DCCP_RESET_CODE_TOO_BUSY, DCCP_RESET_CODE_BAD_INIT_COOKIE, DCCP_RESET_CODE_AGGRESSION_PENALTY, |
d8ef2c29a [DCCP]: Convert R... |
142 143 |
DCCP_MAX_RESET_CODES /* Leave at the end! */ |
7c657876b [DCCP]: Initial i... |
144 145 146 147 148 149 150 151 |
}; /* DCCP options */ enum { DCCPO_PADDING = 0, DCCPO_MANDATORY = 1, DCCPO_MIN_RESERVED = 3, DCCPO_MAX_RESERVED = 31, |
afe00251d [DCCP]: Initial f... |
152 153 154 155 |
DCCPO_CHANGE_L = 32, DCCPO_CONFIRM_L = 33, DCCPO_CHANGE_R = 34, DCCPO_CONFIRM_R = 35, |
7c657876b [DCCP]: Initial i... |
156 157 158 159 160 161 162 |
DCCPO_NDP_COUNT = 37, DCCPO_ACK_VECTOR_0 = 38, DCCPO_ACK_VECTOR_1 = 39, DCCPO_TIMESTAMP = 41, DCCPO_TIMESTAMP_ECHO = 42, DCCPO_ELAPSED_TIME = 43, DCCPO_MAX = 45, |
a18213d1d dccp: Replace mag... |
163 164 165 166 |
DCCPO_MIN_RX_CCID_SPECIFIC = 128, /* from sender to receiver */ DCCPO_MAX_RX_CCID_SPECIFIC = 191, DCCPO_MIN_TX_CCID_SPECIFIC = 192, /* from receiver to sender */ DCCPO_MAX_TX_CCID_SPECIFIC = 255, |
7c657876b [DCCP]: Initial i... |
167 |
}; |
b20a9c24d dccp: Set per-con... |
168 169 |
/* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */ #define DCCP_SINGLE_OPT_MAXLEN 253 |
7c657876b [DCCP]: Initial i... |
170 |
|
b83eff641 [DCCP]: Introduce... |
171 172 173 174 175 |
/* DCCP CCIDS */ enum { DCCPC_CCID2 = 2, DCCPC_CCID3 = 3, }; |
c02fdc0e8 [DCCP]: Make feat... |
176 |
/* DCCP features (RFC 4340 section 6.4) */ |
7d43d1a0f dccp: Implement l... |
177 |
enum dccp_feature_numbers { |
8109b02b5 [DCCP]: Whitespac... |
178 179 |
DCCPF_RESERVED = 0, DCCPF_CCID = 1, |
7d43d1a0f dccp: Implement l... |
180 |
DCCPF_SHORT_SEQNOS = 2, |
8109b02b5 [DCCP]: Whitespac... |
181 |
DCCPF_SEQUENCE_WINDOW = 3, |
7d43d1a0f dccp: Implement l... |
182 |
DCCPF_ECN_INCAPABLE = 4, |
8109b02b5 [DCCP]: Whitespac... |
183 184 185 |
DCCPF_ACK_RATIO = 5, DCCPF_SEND_ACK_VECTOR = 6, DCCPF_SEND_NDP_COUNT = 7, |
6f4e5fff1 [DCCP]: Support f... |
186 |
DCCPF_MIN_CSUM_COVER = 8, |
7d43d1a0f dccp: Implement l... |
187 |
DCCPF_DATA_CHECKSUM = 9, |
8109b02b5 [DCCP]: Whitespac... |
188 189 |
/* 10-127 reserved */ DCCPF_MIN_CCID_SPECIFIC = 128, |
7d43d1a0f dccp: Implement l... |
190 |
DCCPF_SEND_LEV_RATE = 192, /* RFC 4342, sec. 8.4 */ |
8109b02b5 [DCCP]: Whitespac... |
191 |
DCCPF_MAX_CCID_SPECIFIC = 255, |
7c657876b [DCCP]: Initial i... |
192 |
}; |
871a2c16c dccp: Policy-base... |
193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
/* DCCP socket control message types for cmsg */ enum dccp_cmsg_type { DCCP_SCM_PRIORITY = 1, DCCP_SCM_QPOLICY_MAX = 0xFFFF, /* ^-- Up to here reserved exclusively for qpolicy parameters */ DCCP_SCM_MAX }; /* DCCP priorities for outgoing/queued packets */ enum dccp_packet_dequeueing_policy { DCCPQ_POLICY_SIMPLE, DCCPQ_POLICY_PRIO, DCCPQ_POLICY_MAX }; |
a84ffe430 [DCCP]: Introduce... |
207 |
/* DCCP socket options */ |
5aed32436 [DCCP]: Tidy up u... |
208 |
#define DCCP_SOCKOPT_PACKET_SIZE 1 /* XXX deprecated, without effect */ |
67e6b6292 [DCCP]: Introduce... |
209 |
#define DCCP_SOCKOPT_SERVICE 2 |
afe00251d [DCCP]: Initial f... |
210 211 |
#define DCCP_SOCKOPT_CHANGE_L 3 #define DCCP_SOCKOPT_CHANGE_R 4 |
7c559a9e4 [DCCP]: Add socke... |
212 |
#define DCCP_SOCKOPT_GET_CUR_MPS 5 |
b8599d207 [DCCP]: Support f... |
213 |
#define DCCP_SOCKOPT_SERVER_TIMEWAIT 6 |
6f4e5fff1 [DCCP]: Support f... |
214 215 |
#define DCCP_SOCKOPT_SEND_CSCOV 10 #define DCCP_SOCKOPT_RECV_CSCOV 11 |
d90ebcbfa dccp: Query suppo... |
216 |
#define DCCP_SOCKOPT_AVAILABLE_CCIDS 12 |
b20a9c24d dccp: Set per-con... |
217 218 219 |
#define DCCP_SOCKOPT_CCID 13 #define DCCP_SOCKOPT_TX_CCID 14 #define DCCP_SOCKOPT_RX_CCID 15 |
871a2c16c dccp: Policy-base... |
220 221 |
#define DCCP_SOCKOPT_QPOLICY_ID 16 #define DCCP_SOCKOPT_QPOLICY_TXQLEN 17 |
88f964db6 [DCCP]: Introduce... |
222 223 |
#define DCCP_SOCKOPT_CCID_RX_INFO 128 #define DCCP_SOCKOPT_CCID_TX_INFO 192 |
67e6b6292 [DCCP]: Introduce... |
224 |
|
09dbc3895 [DCCP]: Miscellan... |
225 |
/* maximum number of services provided on the same listening port */ |
67e6b6292 [DCCP]: Introduce... |
226 |
#define DCCP_SERVICE_LIST_MAX_LEN 32 |
a84ffe430 [DCCP]: Introduce... |
227 |
|
5a47a470e [DCCP]: make <lin... |
228 229 230 |
#ifdef __KERNEL__ #include <linux/in.h> |
a6b7a4078 net: remove inter... |
231 |
#include <linux/interrupt.h> |
19ac21465 [DCCP]: Convert d... |
232 |
#include <linux/ktime.h> |
5a47a470e [DCCP]: make <lin... |
233 234 235 236 237 |
#include <linux/list.h> #include <linux/uio.h> #include <linux/workqueue.h> #include <net/inet_connection_sock.h> |
14c850212 [INET_SOCK]: Move... |
238 |
#include <net/inet_sock.h> |
64cf1e5d8 [DCCP]: Finish th... |
239 |
#include <net/inet_timewait_sock.h> |
5a47a470e [DCCP]: make <lin... |
240 |
#include <net/tcp_states.h> |
5a47a470e [DCCP]: make <lin... |
241 242 |
enum dccp_state { |
f11135a34 [DCCP]: Dedicated... |
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
DCCP_OPEN = TCP_ESTABLISHED, DCCP_REQUESTING = TCP_SYN_SENT, DCCP_LISTEN = TCP_LISTEN, DCCP_RESPOND = TCP_SYN_RECV, /* * States involved in closing a DCCP connection: * 1) ACTIVE_CLOSEREQ is entered by a server sending a CloseReq. * * 2) CLOSING can have three different meanings (RFC 4340, 8.3): * a. Client has performed active-close, has sent a Close to the server * from state OPEN or PARTOPEN, and is waiting for the final Reset * (in this case, SOCK_DONE == 1). * b. Client is asked to perform passive-close, by receiving a CloseReq * in (PART)OPEN state. It sends a Close and waits for final Reset * (in this case, SOCK_DONE == 0). * c. Server performs an active-close as in (a), keeps TIMEWAIT state. * * 3) The following intermediate states are employed to give passively * closing nodes a chance to process their unread data: * - PASSIVE_CLOSE (from OPEN => CLOSED) and * - PASSIVE_CLOSEREQ (from (PART)OPEN to CLOSING; case (b) above). */ DCCP_ACTIVE_CLOSEREQ = TCP_FIN_WAIT1, DCCP_PASSIVE_CLOSE = TCP_CLOSE_WAIT, /* any node receiving a Close */ DCCP_CLOSING = TCP_CLOSING, DCCP_TIME_WAIT = TCP_TIME_WAIT, DCCP_CLOSED = TCP_CLOSE, DCCP_PARTOPEN = TCP_MAX_STATES, DCCP_PASSIVE_CLOSEREQ, /* clients receiving CloseReq */ |
9b91ad274 [DCCP]: Make PART... |
272 |
DCCP_MAX_STATES |
5a47a470e [DCCP]: make <lin... |
273 |
}; |
5a47a470e [DCCP]: make <lin... |
274 |
enum { |
f11135a34 [DCCP]: Dedicated... |
275 276 277 278 279 280 281 282 283 |
DCCPF_OPEN = TCPF_ESTABLISHED, DCCPF_REQUESTING = TCPF_SYN_SENT, DCCPF_LISTEN = TCPF_LISTEN, DCCPF_RESPOND = TCPF_SYN_RECV, DCCPF_ACTIVE_CLOSEREQ = TCPF_FIN_WAIT1, DCCPF_CLOSING = TCPF_CLOSING, DCCPF_TIME_WAIT = TCPF_TIME_WAIT, DCCPF_CLOSED = TCPF_CLOSE, DCCPF_PARTOPEN = (1 << DCCP_PARTOPEN), |
5a47a470e [DCCP]: make <lin... |
284 285 286 287 |
}; static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb) { |
9c70220b7 [SK_BUFF]: Introd... |
288 |
return (struct dccp_hdr *)skb_transport_header(skb); |
5a47a470e [DCCP]: make <lin... |
289 |
} |
9b42078ed [DCCP]: Combine a... |
290 291 |
static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen) { |
badff6d01 [SK_BUFF]: Introd... |
292 293 |
skb_push(skb, headlen); skb_reset_transport_header(skb); |
9c70220b7 [SK_BUFF]: Introd... |
294 |
return memset(skb_transport_header(skb), 0, headlen); |
9b42078ed [DCCP]: Combine a... |
295 |
} |
fde20105f [DCCP]: Retrieve ... |
296 |
static inline struct dccp_hdr_ext *dccp_hdrx(const struct dccp_hdr *dh) |
5a47a470e [DCCP]: make <lin... |
297 |
{ |
fde20105f [DCCP]: Retrieve ... |
298 |
return (struct dccp_hdr_ext *)((unsigned char *)dh + sizeof(*dh)); |
5a47a470e [DCCP]: make <lin... |
299 |
} |
1d3de414e [NETFILTER]: New ... |
300 301 302 303 |
static inline unsigned int __dccp_basic_hdr_len(const struct dccp_hdr *dh) { return sizeof(*dh) + (dh->dccph_x ? sizeof(struct dccp_hdr_ext) : 0); } |
5a47a470e [DCCP]: make <lin... |
304 305 306 |
static inline unsigned int dccp_basic_hdr_len(const struct sk_buff *skb) { const struct dccp_hdr *dh = dccp_hdr(skb); |
1d3de414e [NETFILTER]: New ... |
307 |
return __dccp_basic_hdr_len(dh); |
5a47a470e [DCCP]: make <lin... |
308 |
} |
fde20105f [DCCP]: Retrieve ... |
309 |
static inline __u64 dccp_hdr_seq(const struct dccp_hdr *dh) |
5a47a470e [DCCP]: make <lin... |
310 |
{ |
60fe62e78 [DCCP]: sparse en... |
311 |
__u64 seq_nr = ntohs(dh->dccph_seq); |
5a47a470e [DCCP]: make <lin... |
312 313 |
if (dh->dccph_x != 0) |
fde20105f [DCCP]: Retrieve ... |
314 |
seq_nr = (seq_nr << 32) + ntohl(dccp_hdrx(dh)->dccph_seq_low); |
60fe62e78 [DCCP]: sparse en... |
315 316 |
else seq_nr += (u32)dh->dccph_seq2 << 16; |
5a47a470e [DCCP]: make <lin... |
317 318 319 320 321 322 |
return seq_nr; } static inline struct dccp_hdr_request *dccp_hdr_request(struct sk_buff *skb) { |
9c70220b7 [SK_BUFF]: Introd... |
323 324 |
return (struct dccp_hdr_request *)(skb_transport_header(skb) + dccp_basic_hdr_len(skb)); |
5a47a470e [DCCP]: make <lin... |
325 326 327 328 |
} static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff *skb) { |
9c70220b7 [SK_BUFF]: Introd... |
329 330 |
return (struct dccp_hdr_ack_bits *)(skb_transport_header(skb) + dccp_basic_hdr_len(skb)); |
5a47a470e [DCCP]: make <lin... |
331 332 333 334 335 |
} static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) { const struct dccp_hdr_ack_bits *dhack = dccp_hdr_ack_bits(skb); |
60fe62e78 [DCCP]: sparse en... |
336 |
return ((u64)ntohs(dhack->dccph_ack_nr_high) << 32) + ntohl(dhack->dccph_ack_nr_low); |
5a47a470e [DCCP]: make <lin... |
337 338 339 340 |
} static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb) { |
9c70220b7 [SK_BUFF]: Introd... |
341 342 |
return (struct dccp_hdr_response *)(skb_transport_header(skb) + dccp_basic_hdr_len(skb)); |
5a47a470e [DCCP]: make <lin... |
343 344 345 346 |
} static inline struct dccp_hdr_reset *dccp_hdr_reset(struct sk_buff *skb) { |
9c70220b7 [SK_BUFF]: Introd... |
347 348 |
return (struct dccp_hdr_reset *)(skb_transport_header(skb) + dccp_basic_hdr_len(skb)); |
5a47a470e [DCCP]: make <lin... |
349 |
} |
1d3de414e [NETFILTER]: New ... |
350 351 352 353 354 |
static inline unsigned int __dccp_hdr_len(const struct dccp_hdr *dh) { return __dccp_basic_hdr_len(dh) + dccp_packet_hdr_len(dh->dccph_type); } |
5a47a470e [DCCP]: make <lin... |
355 356 |
static inline unsigned int dccp_hdr_len(const struct sk_buff *skb) { |
1d3de414e [NETFILTER]: New ... |
357 |
return __dccp_hdr_len(dccp_hdr(skb)); |
5a47a470e [DCCP]: make <lin... |
358 |
} |
7c657876b [DCCP]: Initial i... |
359 |
/** |
b4d4f7c70 [DCCP]: Handle ti... |
360 361 362 363 364 |
* struct dccp_request_sock - represent DCCP-specific connection request * @dreq_inet_rsk: structure inherited from * @dreq_iss: initial sequence number sent on the Response (RFC 4340, 7.1) * @dreq_isr: initial sequence number received on the Request * @dreq_service: service code present on the Request (there is just one) |
ac75773c2 dccp: Per-socket ... |
365 |
* @dreq_featneg: feature negotiation options for this connection |
b4d4f7c70 [DCCP]: Handle ti... |
366 367 368 369 |
* The following two fields are analogous to the ones in dccp_sock: * @dreq_timestamp_echo: last received timestamp to echo (13.1) * @dreq_timestamp_echo: the time of receiving the last @dreq_timestamp_echo */ |
7c657876b [DCCP]: Initial i... |
370 371 372 373 |
struct dccp_request_sock { struct inet_request_sock dreq_inet_rsk; __u64 dreq_iss; __u64 dreq_isr; |
60fe62e78 [DCCP]: sparse en... |
374 |
__be32 dreq_service; |
ac75773c2 dccp: Per-socket ... |
375 |
struct list_head dreq_featneg; |
b4d4f7c70 [DCCP]: Handle ti... |
376 377 |
__u32 dreq_timestamp_echo; __u32 dreq_timestamp_time; |
7c657876b [DCCP]: Initial i... |
378 379 380 381 382 383 |
}; static inline struct dccp_request_sock *dccp_rsk(const struct request_sock *req) { return (struct dccp_request_sock *)req; } |
64cf1e5d8 [DCCP]: Finish th... |
384 |
extern struct inet_timewait_death_row dccp_death_row; |
8b8194124 [DCCP]: Allow to ... |
385 386 |
extern int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq, struct sk_buff *skb); |
7c657876b [DCCP]: Initial i... |
387 |
struct dccp_options_received { |
5b5d0e704 dccp: Upgrade NDP... |
388 |
u64 dccpor_ndp:48; |
7c657876b [DCCP]: Initial i... |
389 390 391 392 393 394 395 396 397 398 399 400 401 |
u32 dccpor_timestamp; u32 dccpor_timestamp_echo; u32 dccpor_elapsed_time; }; struct ccid; enum dccp_role { DCCP_ROLE_UNDEFINED, DCCP_ROLE_LISTEN, DCCP_ROLE_CLIENT, DCCP_ROLE_SERVER, }; |
67e6b6292 [DCCP]: Introduce... |
402 403 |
struct dccp_service_list { __u32 dccpsl_nr; |
60fe62e78 [DCCP]: sparse en... |
404 |
__be32 dccpsl_list[0]; |
67e6b6292 [DCCP]: Introduce... |
405 406 407 |
}; #define DCCP_SERVICE_INVALID_VALUE htonl((__u32)-1) |
8109b02b5 [DCCP]: Whitespac... |
408 |
#define DCCP_SERVICE_CODE_IS_ABSENT 0 |
67e6b6292 [DCCP]: Introduce... |
409 410 |
static inline int dccp_list_has_service(const struct dccp_service_list *sl, |
60fe62e78 [DCCP]: sparse en... |
411 |
const __be32 service) |
67e6b6292 [DCCP]: Introduce... |
412 413 414 415 416 |
{ if (likely(sl != NULL)) { u32 i = sl->dccpsl_nr; while (i--) if (sl->dccpsl_list[i] == service) |
8109b02b5 [DCCP]: Whitespac... |
417 |
return 1; |
67e6b6292 [DCCP]: Introduce... |
418 419 420 |
} return 0; } |
ae31c3399 [DCCP]: Move the ... |
421 |
struct dccp_ackvec; |
7c657876b [DCCP]: Initial i... |
422 423 424 425 426 427 428 429 430 431 432 433 434 |
/** * struct dccp_sock - DCCP socket state * * @dccps_swl - sequence number window low * @dccps_swh - sequence number window high * @dccps_awl - acknowledgement number window low * @dccps_awh - acknowledgement number window high * @dccps_iss - initial sequence number sent * @dccps_isr - initial sequence number received * @dccps_osr - first OPEN sequence number received * @dccps_gss - greatest sequence number sent * @dccps_gsr - greatest valid sequence number received * @dccps_gar - greatest valid ack number received on a non-Sync; initialized to %dccps_iss |
09dbc3895 [DCCP]: Miscellan... |
435 436 |
* @dccps_service - first (passive sock) or unique (active sock) service code * @dccps_service_list - second .. last service code on passive socket |
7c657876b [DCCP]: Initial i... |
437 |
* @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option |
b4d4f7c70 [DCCP]: Handle ti... |
438 |
* @dccps_timestamp_time - time of receiving latest @dccps_timestamp_echo |
91d73c15c [DCCP]: Complete ... |
439 440 |
* @dccps_l_ack_ratio - feature-local Ack Ratio * @dccps_r_ack_ratio - feature-remote Ack Ratio |
792b48780 dccp: Implement b... |
441 442 |
* @dccps_l_seq_win - local Sequence Window (influences ack number validity) * @dccps_r_seq_win - remote Sequence Window (influences seq number validity) |
6f4e5fff1 [DCCP]: Support f... |
443 444 |
* @dccps_pcslen - sender partial checksum coverage (via sockopt) * @dccps_pcrlen - receiver partial checksum coverage (via sockopt) |
4098dce5b dccp: Remove manu... |
445 |
* @dccps_send_ndp_count - local Send NDP Count feature (7.7.2) |
7c657876b [DCCP]: Initial i... |
446 |
* @dccps_ndp_count - number of Non Data Packets since last data packet |
91d73c15c [DCCP]: Complete ... |
447 |
* @dccps_mss_cache - current value of MSS (path MTU minus header sizes) |
a94f0f970 [DCCP]: Rate-limi... |
448 |
* @dccps_rate_last - timestamp for rate-limiting DCCP-Sync (RFC 4340, 7.5.4) |
ac75773c2 dccp: Per-socket ... |
449 |
* @dccps_featneg - tracks feature-negotiation state (mostly during handshake) |
ae31c3399 [DCCP]: Move the ... |
450 |
* @dccps_hc_rx_ackvec - rx half connection ack vector |
91d73c15c [DCCP]: Complete ... |
451 452 453 |
* @dccps_hc_rx_ccid - CCID used for the receiver (or receiving half-connection) * @dccps_hc_tx_ccid - CCID used for the sender (or sending half-connection) * @dccps_options_received - parsed set of retrieved options |
871a2c16c dccp: Policy-base... |
454 455 |
* @dccps_qpolicy - TX dequeueing policy, one of %dccp_packet_dequeueing_policy * @dccps_tx_qlen - maximum length of the TX queue |
91d73c15c [DCCP]: Complete ... |
456 457 458 |
* @dccps_role - role of this sock, one of %dccp_role * @dccps_hc_rx_insert_options - receiver wants to add options when acking * @dccps_hc_tx_insert_options - sender wants to add options when sending |
b8599d207 [DCCP]: Support f... |
459 |
* @dccps_server_timewait - server holds timewait state on close (RFC 4340, 8.3) |
d83447f09 dccp ccid-2: Sche... |
460 |
* @dccps_sync_scheduled - flag which signals "send out-of-band message soon" |
dc841e30e dccp: Extend CCID... |
461 462 |
* @dccps_xmitlet - tasklet scheduled by the TX CCID to dequeue data packets * @dccps_xmit_timer - used by the TX CCID to delay sending (rate-based pacing) |
89560b53b [DCCP]: Sample RT... |
463 |
* @dccps_syn_rtt - RTT sample from Request/Response exchange (in usecs) |
7c657876b [DCCP]: Initial i... |
464 465 466 467 |
*/ struct dccp_sock { /* inet_connection_sock has to be the first member of dccp_sock */ struct inet_connection_sock dccps_inet_connection; |
89560b53b [DCCP]: Sample RT... |
468 |
#define dccps_syn_rtt dccps_inet_connection.icsk_ack.lrcvtime |
7c657876b [DCCP]: Initial i... |
469 470 471 472 473 474 475 476 477 478 |
__u64 dccps_swl; __u64 dccps_swh; __u64 dccps_awl; __u64 dccps_awh; __u64 dccps_iss; __u64 dccps_isr; __u64 dccps_osr; __u64 dccps_gss; __u64 dccps_gsr; __u64 dccps_gar; |
60fe62e78 [DCCP]: sparse en... |
479 |
__be32 dccps_service; |
cf6b5fbe7 [DCCP]: Reorganiz... |
480 |
__u32 dccps_mss_cache; |
67e6b6292 [DCCP]: Introduce... |
481 |
struct dccp_service_list *dccps_service_list; |
7c657876b [DCCP]: Initial i... |
482 |
__u32 dccps_timestamp_echo; |
b4d4f7c70 [DCCP]: Handle ti... |
483 |
__u32 dccps_timestamp_time; |
2a91aa396 [DCCP] CCID2: Ini... |
484 485 |
__u16 dccps_l_ack_ratio; __u16 dccps_r_ack_ratio; |
792b48780 dccp: Implement b... |
486 487 |
__u64 dccps_l_seq_win:48; __u64 dccps_r_seq_win:48; |
294505598 dccp: Feature neg... |
488 489 |
__u8 dccps_pcslen:4; __u8 dccps_pcrlen:4; |
4098dce5b dccp: Remove manu... |
490 |
__u8 dccps_send_ndp_count:1; |
5b5d0e704 dccp: Upgrade NDP... |
491 |
__u64 dccps_ndp_count:48; |
a94f0f970 [DCCP]: Rate-limi... |
492 |
unsigned long dccps_rate_last; |
ac75773c2 dccp: Per-socket ... |
493 |
struct list_head dccps_featneg; |
ae31c3399 [DCCP]: Move the ... |
494 |
struct dccp_ackvec *dccps_hc_rx_ackvec; |
7c657876b [DCCP]: Initial i... |
495 496 497 |
struct ccid *dccps_hc_rx_ccid; struct ccid *dccps_hc_tx_ccid; struct dccp_options_received dccps_options_received; |
871a2c16c dccp: Policy-base... |
498 499 |
__u8 dccps_qpolicy; __u32 dccps_tx_qlen; |
7c657876b [DCCP]: Initial i... |
500 |
enum dccp_role dccps_role:2; |
507d37cf2 [CCID] Only call ... |
501 502 |
__u8 dccps_hc_rx_insert_options:1; __u8 dccps_hc_tx_insert_options:1; |
b8599d207 [DCCP]: Support f... |
503 |
__u8 dccps_server_timewait:1; |
d83447f09 dccp ccid-2: Sche... |
504 |
__u8 dccps_sync_scheduled:1; |
dc841e30e dccp: Extend CCID... |
505 |
struct tasklet_struct dccps_xmitlet; |
97e5848dd [DCCP]: Introduce... |
506 |
struct timer_list dccps_xmit_timer; |
7c657876b [DCCP]: Initial i... |
507 |
}; |
8109b02b5 [DCCP]: Whitespac... |
508 |
|
7c657876b [DCCP]: Initial i... |
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 |
static inline struct dccp_sock *dccp_sk(const struct sock *sk) { return (struct dccp_sock *)sk; } static inline const char *dccp_role(const struct sock *sk) { switch (dccp_sk(sk)->dccps_role) { case DCCP_ROLE_UNDEFINED: return "undefined"; case DCCP_ROLE_LISTEN: return "listen"; case DCCP_ROLE_SERVER: return "server"; case DCCP_ROLE_CLIENT: return "client"; } return NULL; } |
5a47a470e [DCCP]: make <lin... |
524 |
#endif /* __KERNEL__ */ |
7c657876b [DCCP]: Initial i... |
525 |
#endif /* _LINUX_DCCP_H */ |