License cleanup: add SPDX license identifier to uapi header files with no license
[sfrench/cifs-2.6.git] / include / uapi / linux / dccp.h
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _UAPI_LINUX_DCCP_H
3 #define _UAPI_LINUX_DCCP_H
4
5 #include <linux/types.h>
6 #include <asm/byteorder.h>
7
8 /**
9  * struct dccp_hdr - generic part of DCCP packet header
10  *
11  * @dccph_sport - Relevant port on the endpoint that sent this packet
12  * @dccph_dport - Relevant port on the other endpoint
13  * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
14  * @dccph_ccval - Used by the HC-Sender CCID
15  * @dccph_cscov - Parts of the packet that are covered by the Checksum field
16  * @dccph_checksum - Internet checksum, depends on dccph_cscov
17  * @dccph_x - 0 = 24 bit sequence number, 1 = 48
18  * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
19  * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
20  */
21 struct dccp_hdr {
22         __be16  dccph_sport,
23                 dccph_dport;
24         __u8    dccph_doff;
25 #if defined(__LITTLE_ENDIAN_BITFIELD)
26         __u8    dccph_cscov:4,
27                 dccph_ccval:4;
28 #elif defined(__BIG_ENDIAN_BITFIELD)
29         __u8    dccph_ccval:4,
30                 dccph_cscov:4;
31 #else
32 #error  "Adjust your <asm/byteorder.h> defines"
33 #endif
34         __sum16 dccph_checksum;
35 #if defined(__LITTLE_ENDIAN_BITFIELD)
36         __u8    dccph_x:1,
37                 dccph_type:4,
38                 dccph_reserved:3;
39 #elif defined(__BIG_ENDIAN_BITFIELD)
40         __u8    dccph_reserved:3,
41                 dccph_type:4,
42                 dccph_x:1;
43 #else
44 #error  "Adjust your <asm/byteorder.h> defines"
45 #endif
46         __u8    dccph_seq2;
47         __be16  dccph_seq;
48 };
49
50 /**
51  * struct dccp_hdr_ext - the low bits of a 48 bit seq packet
52  *
53  * @dccph_seq_low - low 24 bits of a 48 bit seq packet
54  */
55 struct dccp_hdr_ext {
56         __be32  dccph_seq_low;
57 };
58
59 /**
60  * struct dccp_hdr_request - Connection initiation request header
61  *
62  * @dccph_req_service - Service to which the client app wants to connect
63  */
64 struct dccp_hdr_request {
65         __be32  dccph_req_service;
66 };
67 /**
68  * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
69  *
70  * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR
71  * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
72  */
73 struct dccp_hdr_ack_bits {
74         __be16  dccph_reserved1;
75         __be16  dccph_ack_nr_high;
76         __be32  dccph_ack_nr_low;
77 };
78 /**
79  * struct dccp_hdr_response - Connection initiation response header
80  *
81  * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3)
82  * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
83  */
84 struct dccp_hdr_response {
85         struct dccp_hdr_ack_bits        dccph_resp_ack;
86         __be32                          dccph_resp_service;
87 };
88
89 /**
90  * struct dccp_hdr_reset - Unconditionally shut down a connection
91  *
92  * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6)
93  * @dccph_reset_code - one of %dccp_reset_codes
94  * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6
95  */
96 struct dccp_hdr_reset {
97         struct dccp_hdr_ack_bits        dccph_reset_ack;
98         __u8                            dccph_reset_code,
99                                         dccph_reset_data[3];
100 };
101
102 enum dccp_pkt_type {
103         DCCP_PKT_REQUEST = 0,
104         DCCP_PKT_RESPONSE,
105         DCCP_PKT_DATA,
106         DCCP_PKT_ACK,
107         DCCP_PKT_DATAACK,
108         DCCP_PKT_CLOSEREQ,
109         DCCP_PKT_CLOSE,
110         DCCP_PKT_RESET,
111         DCCP_PKT_SYNC,
112         DCCP_PKT_SYNCACK,
113         DCCP_PKT_INVALID,
114 };
115
116 #define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID
117
118 static inline unsigned int dccp_packet_hdr_len(const __u8 type)
119 {
120         if (type == DCCP_PKT_DATA)
121                 return 0;
122         if (type == DCCP_PKT_DATAACK    ||
123             type == DCCP_PKT_ACK        ||
124             type == DCCP_PKT_SYNC       ||
125             type == DCCP_PKT_SYNCACK    ||
126             type == DCCP_PKT_CLOSE      ||
127             type == DCCP_PKT_CLOSEREQ)
128                 return sizeof(struct dccp_hdr_ack_bits);
129         if (type == DCCP_PKT_REQUEST)
130                 return sizeof(struct dccp_hdr_request);
131         if (type == DCCP_PKT_RESPONSE)
132                 return sizeof(struct dccp_hdr_response);
133         return sizeof(struct dccp_hdr_reset);
134 }
135 enum dccp_reset_codes {
136         DCCP_RESET_CODE_UNSPECIFIED = 0,
137         DCCP_RESET_CODE_CLOSED,
138         DCCP_RESET_CODE_ABORTED,
139         DCCP_RESET_CODE_NO_CONNECTION,
140         DCCP_RESET_CODE_PACKET_ERROR,
141         DCCP_RESET_CODE_OPTION_ERROR,
142         DCCP_RESET_CODE_MANDATORY_ERROR,
143         DCCP_RESET_CODE_CONNECTION_REFUSED,
144         DCCP_RESET_CODE_BAD_SERVICE_CODE,
145         DCCP_RESET_CODE_TOO_BUSY,
146         DCCP_RESET_CODE_BAD_INIT_COOKIE,
147         DCCP_RESET_CODE_AGGRESSION_PENALTY,
148
149         DCCP_MAX_RESET_CODES            /* Leave at the end!  */
150 };
151
152 /* DCCP options */
153 enum {
154         DCCPO_PADDING = 0,
155         DCCPO_MANDATORY = 1,
156         DCCPO_MIN_RESERVED = 3,
157         DCCPO_MAX_RESERVED = 31,
158         DCCPO_CHANGE_L = 32,
159         DCCPO_CONFIRM_L = 33,
160         DCCPO_CHANGE_R = 34,
161         DCCPO_CONFIRM_R = 35,
162         DCCPO_NDP_COUNT = 37,
163         DCCPO_ACK_VECTOR_0 = 38,
164         DCCPO_ACK_VECTOR_1 = 39,
165         DCCPO_TIMESTAMP = 41,
166         DCCPO_TIMESTAMP_ECHO = 42,
167         DCCPO_ELAPSED_TIME = 43,
168         DCCPO_MAX = 45,
169         DCCPO_MIN_RX_CCID_SPECIFIC = 128,       /* from sender to receiver */
170         DCCPO_MAX_RX_CCID_SPECIFIC = 191,
171         DCCPO_MIN_TX_CCID_SPECIFIC = 192,       /* from receiver to sender */
172         DCCPO_MAX_TX_CCID_SPECIFIC = 255,
173 };
174 /* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */
175 #define DCCP_SINGLE_OPT_MAXLEN  253
176
177 /* DCCP CCIDS */
178 enum {
179         DCCPC_CCID2 = 2,
180         DCCPC_CCID3 = 3,
181 };
182
183 /* DCCP features (RFC 4340 section 6.4) */
184 enum dccp_feature_numbers {
185         DCCPF_RESERVED = 0,
186         DCCPF_CCID = 1,
187         DCCPF_SHORT_SEQNOS = 2,
188         DCCPF_SEQUENCE_WINDOW = 3,
189         DCCPF_ECN_INCAPABLE = 4,
190         DCCPF_ACK_RATIO = 5,
191         DCCPF_SEND_ACK_VECTOR = 6,
192         DCCPF_SEND_NDP_COUNT = 7,
193         DCCPF_MIN_CSUM_COVER = 8,
194         DCCPF_DATA_CHECKSUM = 9,
195         /* 10-127 reserved */
196         DCCPF_MIN_CCID_SPECIFIC = 128,
197         DCCPF_SEND_LEV_RATE = 192,      /* RFC 4342, sec. 8.4 */
198         DCCPF_MAX_CCID_SPECIFIC = 255,
199 };
200
201 /* DCCP socket control message types for cmsg */
202 enum dccp_cmsg_type {
203         DCCP_SCM_PRIORITY = 1,
204         DCCP_SCM_QPOLICY_MAX = 0xFFFF,
205         /* ^-- Up to here reserved exclusively for qpolicy parameters */
206         DCCP_SCM_MAX
207 };
208
209 /* DCCP priorities for outgoing/queued packets */
210 enum dccp_packet_dequeueing_policy {
211         DCCPQ_POLICY_SIMPLE,
212         DCCPQ_POLICY_PRIO,
213         DCCPQ_POLICY_MAX
214 };
215
216 /* DCCP socket options */
217 #define DCCP_SOCKOPT_PACKET_SIZE        1 /* XXX deprecated, without effect */
218 #define DCCP_SOCKOPT_SERVICE            2
219 #define DCCP_SOCKOPT_CHANGE_L           3
220 #define DCCP_SOCKOPT_CHANGE_R           4
221 #define DCCP_SOCKOPT_GET_CUR_MPS        5
222 #define DCCP_SOCKOPT_SERVER_TIMEWAIT    6
223 #define DCCP_SOCKOPT_SEND_CSCOV         10
224 #define DCCP_SOCKOPT_RECV_CSCOV         11
225 #define DCCP_SOCKOPT_AVAILABLE_CCIDS    12
226 #define DCCP_SOCKOPT_CCID               13
227 #define DCCP_SOCKOPT_TX_CCID            14
228 #define DCCP_SOCKOPT_RX_CCID            15
229 #define DCCP_SOCKOPT_QPOLICY_ID         16
230 #define DCCP_SOCKOPT_QPOLICY_TXQLEN     17
231 #define DCCP_SOCKOPT_CCID_RX_INFO       128
232 #define DCCP_SOCKOPT_CCID_TX_INFO       192
233
234 /* maximum number of services provided on the same listening port */
235 #define DCCP_SERVICE_LIST_MAX_LEN      32
236
237
238 #endif /* _UAPI_LINUX_DCCP_H */