sctp.h revision 96c1db7b9d601c31d103389cac074a6cce0d7633
1/****************************************************************************
2 ****************************************************************************
3 ***
4 ***   This header was automatically generated from a Linux kernel header
5 ***   of the same name, to make information necessary for userspace to
6 ***   call into the kernel available to libc.  It contains only constants,
7 ***   structures, and macros generated from the original header, and thus,
8 ***   contains no copyrightable information.
9 ***
10 ***   To edit the content of this header, modify the corresponding
11 ***   source file (e.g. under external/kernel-headers/original/) then
12 ***   run bionic/libc/kernel/tools/update_all.py
13 ***
14 ***   Any manual change here will be lost the next time this script will
15 ***   be run. You've been warned!
16 ***
17 ****************************************************************************
18 ****************************************************************************/
19#ifndef _UAPI_SCTP_H
20#define _UAPI_SCTP_H
21#include <linux/types.h>
22#include <linux/socket.h>
23typedef __s32 sctp_assoc_t;
24#define SCTP_RTOINFO 0
25#define SCTP_ASSOCINFO 1
26#define SCTP_INITMSG 2
27#define SCTP_NODELAY 3
28#define SCTP_AUTOCLOSE 4
29#define SCTP_SET_PEER_PRIMARY_ADDR 5
30#define SCTP_PRIMARY_ADDR 6
31#define SCTP_ADAPTATION_LAYER 7
32#define SCTP_DISABLE_FRAGMENTS 8
33#define SCTP_PEER_ADDR_PARAMS 9
34#define SCTP_DEFAULT_SEND_PARAM 10
35#define SCTP_EVENTS 11
36#define SCTP_I_WANT_MAPPED_V4_ADDR 12
37#define SCTP_MAXSEG 13
38#define SCTP_STATUS 14
39#define SCTP_GET_PEER_ADDR_INFO 15
40#define SCTP_DELAYED_ACK_TIME 16
41#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
42#define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
43#define SCTP_CONTEXT 17
44#define SCTP_FRAGMENT_INTERLEAVE 18
45#define SCTP_PARTIAL_DELIVERY_POINT 19
46#define SCTP_MAX_BURST 20
47#define SCTP_AUTH_CHUNK 21
48#define SCTP_HMAC_IDENT 22
49#define SCTP_AUTH_KEY 23
50#define SCTP_AUTH_ACTIVE_KEY 24
51#define SCTP_AUTH_DELETE_KEY 25
52#define SCTP_PEER_AUTH_CHUNKS 26
53#define SCTP_LOCAL_AUTH_CHUNKS 27
54#define SCTP_GET_ASSOC_NUMBER 28
55#define SCTP_GET_ASSOC_ID_LIST 29
56#define SCTP_AUTO_ASCONF 30
57#define SCTP_PEER_ADDR_THLDS 31
58#define SCTP_RECVRCVINFO 32
59#define SCTP_RECVNXTINFO 33
60#define SCTP_DEFAULT_SNDINFO 34
61#define SCTP_SOCKOPT_BINDX_ADD 100
62#define SCTP_SOCKOPT_BINDX_REM 101
63#define SCTP_SOCKOPT_PEELOFF 102
64#define SCTP_SOCKOPT_CONNECTX_OLD 107
65#define SCTP_GET_PEER_ADDRS 108
66#define SCTP_GET_LOCAL_ADDRS 109
67#define SCTP_SOCKOPT_CONNECTX 110
68#define SCTP_SOCKOPT_CONNECTX3 111
69#define SCTP_GET_ASSOC_STATS 112
70#define SCTP_PR_SUPPORTED 113
71#define SCTP_DEFAULT_PRINFO 114
72#define SCTP_PR_ASSOC_STATUS 115
73#define SCTP_PR_SCTP_NONE 0x0000
74#define SCTP_PR_SCTP_TTL 0x0010
75#define SCTP_PR_SCTP_RTX 0x0020
76#define SCTP_PR_SCTP_PRIO 0x0030
77#define SCTP_PR_SCTP_MAX SCTP_PR_SCTP_PRIO
78#define SCTP_PR_SCTP_MASK 0x0030
79#define __SCTP_PR_INDEX(x) ((x >> 4) - 1)
80#define SCTP_PR_INDEX(x) __SCTP_PR_INDEX(SCTP_PR_SCTP_ ##x)
81#define SCTP_PR_POLICY(x) ((x) & SCTP_PR_SCTP_MASK)
82#define SCTP_PR_SET_POLICY(flags,x) do { flags &= ~SCTP_PR_SCTP_MASK; flags |= x; } while(0)
83#define SCTP_PR_TTL_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_TTL)
84#define SCTP_PR_RTX_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_RTX)
85#define SCTP_PR_PRIO_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_PRIO)
86enum sctp_msg_flags {
87  MSG_NOTIFICATION = 0x8000,
88#define MSG_NOTIFICATION MSG_NOTIFICATION
89};
90struct sctp_initmsg {
91  __u16 sinit_num_ostreams;
92  __u16 sinit_max_instreams;
93  __u16 sinit_max_attempts;
94  __u16 sinit_max_init_timeo;
95};
96struct sctp_sndrcvinfo {
97  __u16 sinfo_stream;
98  __u16 sinfo_ssn;
99  __u16 sinfo_flags;
100  __u32 sinfo_ppid;
101  __u32 sinfo_context;
102  __u32 sinfo_timetolive;
103  __u32 sinfo_tsn;
104  __u32 sinfo_cumtsn;
105  sctp_assoc_t sinfo_assoc_id;
106};
107struct sctp_sndinfo {
108  __u16 snd_sid;
109  __u16 snd_flags;
110  __u32 snd_ppid;
111  __u32 snd_context;
112  sctp_assoc_t snd_assoc_id;
113};
114struct sctp_rcvinfo {
115  __u16 rcv_sid;
116  __u16 rcv_ssn;
117  __u16 rcv_flags;
118  __u32 rcv_ppid;
119  __u32 rcv_tsn;
120  __u32 rcv_cumtsn;
121  __u32 rcv_context;
122  sctp_assoc_t rcv_assoc_id;
123};
124struct sctp_nxtinfo {
125  __u16 nxt_sid;
126  __u16 nxt_flags;
127  __u32 nxt_ppid;
128  __u32 nxt_length;
129  sctp_assoc_t nxt_assoc_id;
130};
131enum sctp_sinfo_flags {
132  SCTP_UNORDERED = (1 << 0),
133  SCTP_ADDR_OVER = (1 << 1),
134  SCTP_ABORT = (1 << 2),
135  SCTP_SACK_IMMEDIATELY = (1 << 3),
136  SCTP_NOTIFICATION = MSG_NOTIFICATION,
137  SCTP_EOF = MSG_FIN,
138};
139typedef union {
140  __u8 raw;
141  struct sctp_initmsg init;
142  struct sctp_sndrcvinfo sndrcv;
143} sctp_cmsg_data_t;
144typedef enum sctp_cmsg_type {
145  SCTP_INIT,
146#define SCTP_INIT SCTP_INIT
147  SCTP_SNDRCV,
148#define SCTP_SNDRCV SCTP_SNDRCV
149  SCTP_SNDINFO,
150#define SCTP_SNDINFO SCTP_SNDINFO
151  SCTP_RCVINFO,
152#define SCTP_RCVINFO SCTP_RCVINFO
153  SCTP_NXTINFO,
154#define SCTP_NXTINFO SCTP_NXTINFO
155} sctp_cmsg_t;
156struct sctp_assoc_change {
157  __u16 sac_type;
158  __u16 sac_flags;
159  __u32 sac_length;
160  __u16 sac_state;
161  __u16 sac_error;
162  __u16 sac_outbound_streams;
163  __u16 sac_inbound_streams;
164  sctp_assoc_t sac_assoc_id;
165  __u8 sac_info[0];
166};
167enum sctp_sac_state {
168  SCTP_COMM_UP,
169  SCTP_COMM_LOST,
170  SCTP_RESTART,
171  SCTP_SHUTDOWN_COMP,
172  SCTP_CANT_STR_ASSOC,
173};
174struct sctp_paddr_change {
175  __u16 spc_type;
176  __u16 spc_flags;
177  __u32 spc_length;
178  struct sockaddr_storage spc_aaddr;
179  int spc_state;
180  int spc_error;
181  sctp_assoc_t spc_assoc_id;
182} __attribute__((packed, aligned(4)));
183enum sctp_spc_state {
184  SCTP_ADDR_AVAILABLE,
185  SCTP_ADDR_UNREACHABLE,
186  SCTP_ADDR_REMOVED,
187  SCTP_ADDR_ADDED,
188  SCTP_ADDR_MADE_PRIM,
189  SCTP_ADDR_CONFIRMED,
190};
191struct sctp_remote_error {
192  __u16 sre_type;
193  __u16 sre_flags;
194  __u32 sre_length;
195  __u16 sre_error;
196  sctp_assoc_t sre_assoc_id;
197  __u8 sre_data[0];
198};
199struct sctp_send_failed {
200  __u16 ssf_type;
201  __u16 ssf_flags;
202  __u32 ssf_length;
203  __u32 ssf_error;
204  struct sctp_sndrcvinfo ssf_info;
205  sctp_assoc_t ssf_assoc_id;
206  __u8 ssf_data[0];
207};
208enum sctp_ssf_flags {
209  SCTP_DATA_UNSENT,
210  SCTP_DATA_SENT,
211};
212struct sctp_shutdown_event {
213  __u16 sse_type;
214  __u16 sse_flags;
215  __u32 sse_length;
216  sctp_assoc_t sse_assoc_id;
217};
218struct sctp_adaptation_event {
219  __u16 sai_type;
220  __u16 sai_flags;
221  __u32 sai_length;
222  __u32 sai_adaptation_ind;
223  sctp_assoc_t sai_assoc_id;
224};
225struct sctp_pdapi_event {
226  __u16 pdapi_type;
227  __u16 pdapi_flags;
228  __u32 pdapi_length;
229  __u32 pdapi_indication;
230  sctp_assoc_t pdapi_assoc_id;
231};
232enum {
233  SCTP_PARTIAL_DELIVERY_ABORTED = 0,
234};
235struct sctp_authkey_event {
236  __u16 auth_type;
237  __u16 auth_flags;
238  __u32 auth_length;
239  __u16 auth_keynumber;
240  __u16 auth_altkeynumber;
241  __u32 auth_indication;
242  sctp_assoc_t auth_assoc_id;
243};
244enum {
245  SCTP_AUTH_NEWKEY = 0,
246};
247struct sctp_sender_dry_event {
248  __u16 sender_dry_type;
249  __u16 sender_dry_flags;
250  __u32 sender_dry_length;
251  sctp_assoc_t sender_dry_assoc_id;
252};
253struct sctp_event_subscribe {
254  __u8 sctp_data_io_event;
255  __u8 sctp_association_event;
256  __u8 sctp_address_event;
257  __u8 sctp_send_failure_event;
258  __u8 sctp_peer_error_event;
259  __u8 sctp_shutdown_event;
260  __u8 sctp_partial_delivery_event;
261  __u8 sctp_adaptation_layer_event;
262  __u8 sctp_authentication_event;
263  __u8 sctp_sender_dry_event;
264};
265union sctp_notification {
266  struct {
267    __u16 sn_type;
268    __u16 sn_flags;
269    __u32 sn_length;
270  } sn_header;
271  struct sctp_assoc_change sn_assoc_change;
272  struct sctp_paddr_change sn_paddr_change;
273  struct sctp_remote_error sn_remote_error;
274  struct sctp_send_failed sn_send_failed;
275  struct sctp_shutdown_event sn_shutdown_event;
276  struct sctp_adaptation_event sn_adaptation_event;
277  struct sctp_pdapi_event sn_pdapi_event;
278  struct sctp_authkey_event sn_authkey_event;
279  struct sctp_sender_dry_event sn_sender_dry_event;
280};
281enum sctp_sn_type {
282  SCTP_SN_TYPE_BASE = (1 << 15),
283  SCTP_ASSOC_CHANGE,
284#define SCTP_ASSOC_CHANGE SCTP_ASSOC_CHANGE
285  SCTP_PEER_ADDR_CHANGE,
286#define SCTP_PEER_ADDR_CHANGE SCTP_PEER_ADDR_CHANGE
287  SCTP_SEND_FAILED,
288#define SCTP_SEND_FAILED SCTP_SEND_FAILED
289  SCTP_REMOTE_ERROR,
290#define SCTP_REMOTE_ERROR SCTP_REMOTE_ERROR
291  SCTP_SHUTDOWN_EVENT,
292#define SCTP_SHUTDOWN_EVENT SCTP_SHUTDOWN_EVENT
293  SCTP_PARTIAL_DELIVERY_EVENT,
294#define SCTP_PARTIAL_DELIVERY_EVENT SCTP_PARTIAL_DELIVERY_EVENT
295  SCTP_ADAPTATION_INDICATION,
296#define SCTP_ADAPTATION_INDICATION SCTP_ADAPTATION_INDICATION
297  SCTP_AUTHENTICATION_EVENT,
298#define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_EVENT
299  SCTP_SENDER_DRY_EVENT,
300#define SCTP_SENDER_DRY_EVENT SCTP_SENDER_DRY_EVENT
301};
302typedef enum sctp_sn_error {
303  SCTP_FAILED_THRESHOLD,
304  SCTP_RECEIVED_SACK,
305  SCTP_HEARTBEAT_SUCCESS,
306  SCTP_RESPONSE_TO_USER_REQ,
307  SCTP_INTERNAL_ERROR,
308  SCTP_SHUTDOWN_GUARD_EXPIRES,
309  SCTP_PEER_FAULTY,
310} sctp_sn_error_t;
311struct sctp_rtoinfo {
312  sctp_assoc_t srto_assoc_id;
313  __u32 srto_initial;
314  __u32 srto_max;
315  __u32 srto_min;
316};
317struct sctp_assocparams {
318  sctp_assoc_t sasoc_assoc_id;
319  __u16 sasoc_asocmaxrxt;
320  __u16 sasoc_number_peer_destinations;
321  __u32 sasoc_peer_rwnd;
322  __u32 sasoc_local_rwnd;
323  __u32 sasoc_cookie_life;
324};
325struct sctp_setpeerprim {
326  sctp_assoc_t sspp_assoc_id;
327  struct sockaddr_storage sspp_addr;
328} __attribute__((packed, aligned(4)));
329struct sctp_prim {
330  sctp_assoc_t ssp_assoc_id;
331  struct sockaddr_storage ssp_addr;
332} __attribute__((packed, aligned(4)));
333#define sctp_setprim sctp_prim
334struct sctp_setadaptation {
335  __u32 ssb_adaptation_ind;
336};
337enum sctp_spp_flags {
338  SPP_HB_ENABLE = 1 << 0,
339  SPP_HB_DISABLE = 1 << 1,
340  SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
341  SPP_HB_DEMAND = 1 << 2,
342  SPP_PMTUD_ENABLE = 1 << 3,
343  SPP_PMTUD_DISABLE = 1 << 4,
344  SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
345  SPP_SACKDELAY_ENABLE = 1 << 5,
346  SPP_SACKDELAY_DISABLE = 1 << 6,
347  SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
348  SPP_HB_TIME_IS_ZERO = 1 << 7,
349};
350struct sctp_paddrparams {
351  sctp_assoc_t spp_assoc_id;
352  struct sockaddr_storage spp_address;
353  __u32 spp_hbinterval;
354  __u16 spp_pathmaxrxt;
355  __u32 spp_pathmtu;
356  __u32 spp_sackdelay;
357  __u32 spp_flags;
358} __attribute__((packed, aligned(4)));
359struct sctp_authchunk {
360  __u8 sauth_chunk;
361};
362enum {
363  SCTP_AUTH_HMAC_ID_SHA1 = 1,
364  SCTP_AUTH_HMAC_ID_SHA256 = 3,
365};
366struct sctp_hmacalgo {
367  __u32 shmac_num_idents;
368  __u16 shmac_idents[];
369};
370#define shmac_number_of_idents shmac_num_idents
371struct sctp_authkey {
372  sctp_assoc_t sca_assoc_id;
373  __u16 sca_keynumber;
374  __u16 sca_keylength;
375  __u8 sca_key[];
376};
377struct sctp_authkeyid {
378  sctp_assoc_t scact_assoc_id;
379  __u16 scact_keynumber;
380};
381struct sctp_sack_info {
382  sctp_assoc_t sack_assoc_id;
383  uint32_t sack_delay;
384  uint32_t sack_freq;
385};
386struct sctp_assoc_value {
387  sctp_assoc_t assoc_id;
388  uint32_t assoc_value;
389};
390struct sctp_paddrinfo {
391  sctp_assoc_t spinfo_assoc_id;
392  struct sockaddr_storage spinfo_address;
393  __s32 spinfo_state;
394  __u32 spinfo_cwnd;
395  __u32 spinfo_srtt;
396  __u32 spinfo_rto;
397  __u32 spinfo_mtu;
398} __attribute__((packed, aligned(4)));
399enum sctp_spinfo_state {
400  SCTP_INACTIVE,
401  SCTP_PF,
402  SCTP_ACTIVE,
403  SCTP_UNCONFIRMED,
404  SCTP_UNKNOWN = 0xffff
405};
406struct sctp_status {
407  sctp_assoc_t sstat_assoc_id;
408  __s32 sstat_state;
409  __u32 sstat_rwnd;
410  __u16 sstat_unackdata;
411  __u16 sstat_penddata;
412  __u16 sstat_instrms;
413  __u16 sstat_outstrms;
414  __u32 sstat_fragmentation_point;
415  struct sctp_paddrinfo sstat_primary;
416};
417struct sctp_authchunks {
418  sctp_assoc_t gauth_assoc_id;
419  __u32 gauth_number_of_chunks;
420  uint8_t gauth_chunks[];
421};
422#define guth_number_of_chunks gauth_number_of_chunks
423enum sctp_sstat_state {
424  SCTP_EMPTY = 0,
425  SCTP_CLOSED = 1,
426  SCTP_COOKIE_WAIT = 2,
427  SCTP_COOKIE_ECHOED = 3,
428  SCTP_ESTABLISHED = 4,
429  SCTP_SHUTDOWN_PENDING = 5,
430  SCTP_SHUTDOWN_SENT = 6,
431  SCTP_SHUTDOWN_RECEIVED = 7,
432  SCTP_SHUTDOWN_ACK_SENT = 8,
433};
434struct sctp_assoc_ids {
435  __u32 gaids_number_of_ids;
436  sctp_assoc_t gaids_assoc_id[];
437};
438struct sctp_getaddrs_old {
439  sctp_assoc_t assoc_id;
440  int addr_num;
441  struct sockaddr * addrs;
442};
443struct sctp_getaddrs {
444  sctp_assoc_t assoc_id;
445  __u32 addr_num;
446  __u8 addrs[0];
447};
448struct sctp_assoc_stats {
449  sctp_assoc_t sas_assoc_id;
450  struct sockaddr_storage sas_obs_rto_ipaddr;
451  __u64 sas_maxrto;
452  __u64 sas_isacks;
453  __u64 sas_osacks;
454  __u64 sas_opackets;
455  __u64 sas_ipackets;
456  __u64 sas_rtxchunks;
457  __u64 sas_outofseqtsns;
458  __u64 sas_idupchunks;
459  __u64 sas_gapcnt;
460  __u64 sas_ouodchunks;
461  __u64 sas_iuodchunks;
462  __u64 sas_oodchunks;
463  __u64 sas_iodchunks;
464  __u64 sas_octrlchunks;
465  __u64 sas_ictrlchunks;
466};
467#define SCTP_BINDX_ADD_ADDR 0x01
468#define SCTP_BINDX_REM_ADDR 0x02
469typedef struct {
470  sctp_assoc_t associd;
471  int sd;
472} sctp_peeloff_arg_t;
473struct sctp_paddrthlds {
474  sctp_assoc_t spt_assoc_id;
475  struct sockaddr_storage spt_address;
476  __u16 spt_pathmaxrxt;
477  __u16 spt_pathpfthld;
478};
479struct sctp_prstatus {
480  sctp_assoc_t sprstat_assoc_id;
481  __u16 sprstat_sid;
482  __u16 sprstat_policy;
483  __u64 sprstat_abandoned_unsent;
484  __u64 sprstat_abandoned_sent;
485};
486struct sctp_default_prinfo {
487  sctp_assoc_t pr_assoc_id;
488  __u32 pr_value;
489  __u16 pr_policy;
490};
491struct sctp_info {
492  __u32 sctpi_tag;
493  __u32 sctpi_state;
494  __u32 sctpi_rwnd;
495  __u16 sctpi_unackdata;
496  __u16 sctpi_penddata;
497  __u16 sctpi_instrms;
498  __u16 sctpi_outstrms;
499  __u32 sctpi_fragmentation_point;
500  __u32 sctpi_inqueue;
501  __u32 sctpi_outqueue;
502  __u32 sctpi_overall_error;
503  __u32 sctpi_max_burst;
504  __u32 sctpi_maxseg;
505  __u32 sctpi_peer_rwnd;
506  __u32 sctpi_peer_tag;
507  __u8 sctpi_peer_capable;
508  __u8 sctpi_peer_sack;
509  __u16 __reserved1;
510  __u64 sctpi_isacks;
511  __u64 sctpi_osacks;
512  __u64 sctpi_opackets;
513  __u64 sctpi_ipackets;
514  __u64 sctpi_rtxchunks;
515  __u64 sctpi_outofseqtsns;
516  __u64 sctpi_idupchunks;
517  __u64 sctpi_gapcnt;
518  __u64 sctpi_ouodchunks;
519  __u64 sctpi_iuodchunks;
520  __u64 sctpi_oodchunks;
521  __u64 sctpi_iodchunks;
522  __u64 sctpi_octrlchunks;
523  __u64 sctpi_ictrlchunks;
524  struct sockaddr_storage sctpi_p_address;
525  __s32 sctpi_p_state;
526  __u32 sctpi_p_cwnd;
527  __u32 sctpi_p_srtt;
528  __u32 sctpi_p_rto;
529  __u32 sctpi_p_hbinterval;
530  __u32 sctpi_p_pathmaxrxt;
531  __u32 sctpi_p_sackdelay;
532  __u32 sctpi_p_sackfreq;
533  __u32 sctpi_p_ssthresh;
534  __u32 sctpi_p_partial_bytes_acked;
535  __u32 sctpi_p_flight_size;
536  __u16 sctpi_p_error;
537  __u16 __reserved2;
538  __u32 sctpi_s_autoclose;
539  __u32 sctpi_s_adaptation_ind;
540  __u32 sctpi_s_pd_point;
541  __u8 sctpi_s_nodelay;
542  __u8 sctpi_s_disable_fragments;
543  __u8 sctpi_s_v4mapped;
544  __u8 sctpi_s_frag_interleave;
545  __u32 sctpi_s_type;
546  __u32 __reserved3;
547};
548#endif
549