1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54#ifndef _UAPI_SCTP_H
55#define _UAPI_SCTP_H
56
57#include <linux/types.h>
58#include <linux/socket.h>
59
60typedef __s32 sctp_assoc_t;
61
62#define SCTP_FUTURE_ASSOC 0
63#define SCTP_CURRENT_ASSOC 1
64#define SCTP_ALL_ASSOC 2
65
66
67
68
69#define SCTP_RTOINFO 0
70#define SCTP_ASSOCINFO 1
71#define SCTP_INITMSG 2
72#define SCTP_NODELAY 3
73#define SCTP_AUTOCLOSE 4
74#define SCTP_SET_PEER_PRIMARY_ADDR 5
75#define SCTP_PRIMARY_ADDR 6
76#define SCTP_ADAPTATION_LAYER 7
77#define SCTP_DISABLE_FRAGMENTS 8
78#define SCTP_PEER_ADDR_PARAMS 9
79#define SCTP_DEFAULT_SEND_PARAM 10
80#define SCTP_EVENTS 11
81#define SCTP_I_WANT_MAPPED_V4_ADDR 12
82#define SCTP_MAXSEG 13
83#define SCTP_STATUS 14
84#define SCTP_GET_PEER_ADDR_INFO 15
85#define SCTP_DELAYED_ACK_TIME 16
86#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
87#define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
88#define SCTP_CONTEXT 17
89#define SCTP_FRAGMENT_INTERLEAVE 18
90#define SCTP_PARTIAL_DELIVERY_POINT 19
91#define SCTP_MAX_BURST 20
92#define SCTP_AUTH_CHUNK 21
93#define SCTP_HMAC_IDENT 22
94#define SCTP_AUTH_KEY 23
95#define SCTP_AUTH_ACTIVE_KEY 24
96#define SCTP_AUTH_DELETE_KEY 25
97#define SCTP_PEER_AUTH_CHUNKS 26
98#define SCTP_LOCAL_AUTH_CHUNKS 27
99#define SCTP_GET_ASSOC_NUMBER 28
100#define SCTP_GET_ASSOC_ID_LIST 29
101#define SCTP_AUTO_ASCONF 30
102#define SCTP_PEER_ADDR_THLDS 31
103#define SCTP_RECVRCVINFO 32
104#define SCTP_RECVNXTINFO 33
105#define SCTP_DEFAULT_SNDINFO 34
106#define SCTP_AUTH_DEACTIVATE_KEY 35
107#define SCTP_REUSE_PORT 36
108#define SCTP_PEER_ADDR_THLDS_V2 37
109
110
111
112
113#define SCTP_SOCKOPT_BINDX_ADD 100
114#define SCTP_SOCKOPT_BINDX_REM 101
115#define SCTP_SOCKOPT_PEELOFF 102
116
117#define SCTP_SOCKOPT_CONNECTX_OLD 107
118#define SCTP_GET_PEER_ADDRS 108
119#define SCTP_GET_LOCAL_ADDRS 109
120#define SCTP_SOCKOPT_CONNECTX 110
121#define SCTP_SOCKOPT_CONNECTX3 111
122#define SCTP_GET_ASSOC_STATS 112
123#define SCTP_PR_SUPPORTED 113
124#define SCTP_DEFAULT_PRINFO 114
125#define SCTP_PR_ASSOC_STATUS 115
126#define SCTP_PR_STREAM_STATUS 116
127#define SCTP_RECONFIG_SUPPORTED 117
128#define SCTP_ENABLE_STREAM_RESET 118
129#define SCTP_RESET_STREAMS 119
130#define SCTP_RESET_ASSOC 120
131#define SCTP_ADD_STREAMS 121
132#define SCTP_SOCKOPT_PEELOFF_FLAGS 122
133#define SCTP_STREAM_SCHEDULER 123
134#define SCTP_STREAM_SCHEDULER_VALUE 124
135#define SCTP_INTERLEAVING_SUPPORTED 125
136#define SCTP_SENDMSG_CONNECT 126
137#define SCTP_EVENT 127
138#define SCTP_ASCONF_SUPPORTED 128
139#define SCTP_AUTH_SUPPORTED 129
140#define SCTP_ECN_SUPPORTED 130
141#define SCTP_EXPOSE_POTENTIALLY_FAILED_STATE 131
142#define SCTP_EXPOSE_PF_STATE SCTP_EXPOSE_POTENTIALLY_FAILED_STATE
143#define SCTP_REMOTE_UDP_ENCAPS_PORT 132
144
145
146#define SCTP_PR_SCTP_NONE 0x0000
147#define SCTP_PR_SCTP_TTL 0x0010
148#define SCTP_PR_SCTP_RTX 0x0020
149#define SCTP_PR_SCTP_PRIO 0x0030
150#define SCTP_PR_SCTP_MAX SCTP_PR_SCTP_PRIO
151#define SCTP_PR_SCTP_MASK 0x0030
152
153#define __SCTP_PR_INDEX(x) ((x >> 4) - 1)
154#define SCTP_PR_INDEX(x) __SCTP_PR_INDEX(SCTP_PR_SCTP_ ## x)
155
156#define SCTP_PR_POLICY(x) ((x) & SCTP_PR_SCTP_MASK)
157#define SCTP_PR_SET_POLICY(flags, x) \
158 do { \
159 flags &= ~SCTP_PR_SCTP_MASK; \
160 flags |= x; \
161 } while (0)
162
163#define SCTP_PR_TTL_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_TTL)
164#define SCTP_PR_RTX_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_RTX)
165#define SCTP_PR_PRIO_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_PRIO)
166
167
168#define SCTP_ENABLE_RESET_STREAM_REQ 0x01
169#define SCTP_ENABLE_RESET_ASSOC_REQ 0x02
170#define SCTP_ENABLE_CHANGE_ASSOC_REQ 0x04
171#define SCTP_ENABLE_STRRESET_MASK 0x07
172
173#define SCTP_STREAM_RESET_INCOMING 0x01
174#define SCTP_STREAM_RESET_OUTGOING 0x02
175
176
177
178enum sctp_msg_flags {
179 MSG_NOTIFICATION = 0x8000,
180#define MSG_NOTIFICATION MSG_NOTIFICATION
181};
182
183
184
185
186
187
188
189
190
191
192
193
194struct sctp_initmsg {
195 __u16 sinit_num_ostreams;
196 __u16 sinit_max_instreams;
197 __u16 sinit_max_attempts;
198 __u16 sinit_max_init_timeo;
199};
200
201
202
203
204
205
206
207
208
209
210
211struct sctp_sndrcvinfo {
212 __u16 sinfo_stream;
213 __u16 sinfo_ssn;
214 __u16 sinfo_flags;
215 __u32 sinfo_ppid;
216 __u32 sinfo_context;
217 __u32 sinfo_timetolive;
218 __u32 sinfo_tsn;
219 __u32 sinfo_cumtsn;
220 sctp_assoc_t sinfo_assoc_id;
221};
222
223
224
225
226
227
228
229
230
231struct sctp_sndinfo {
232 __u16 snd_sid;
233 __u16 snd_flags;
234 __u32 snd_ppid;
235 __u32 snd_context;
236 sctp_assoc_t snd_assoc_id;
237};
238
239
240
241
242
243
244
245
246
247
248struct sctp_rcvinfo {
249 __u16 rcv_sid;
250 __u16 rcv_ssn;
251 __u16 rcv_flags;
252 __u32 rcv_ppid;
253 __u32 rcv_tsn;
254 __u32 rcv_cumtsn;
255 __u32 rcv_context;
256 sctp_assoc_t rcv_assoc_id;
257};
258
259
260
261
262
263
264
265
266
267
268
269
270struct sctp_nxtinfo {
271 __u16 nxt_sid;
272 __u16 nxt_flags;
273 __u32 nxt_ppid;
274 __u32 nxt_length;
275 sctp_assoc_t nxt_assoc_id;
276};
277
278
279
280
281
282
283
284
285
286struct sctp_prinfo {
287 __u16 pr_policy;
288 __u32 pr_value;
289};
290
291
292
293
294
295
296
297
298
299struct sctp_authinfo {
300 __u16 auth_keynumber;
301};
302
303
304
305
306
307
308
309enum sctp_sinfo_flags {
310 SCTP_UNORDERED = (1 << 0),
311 SCTP_ADDR_OVER = (1 << 1),
312 SCTP_ABORT = (1 << 2),
313 SCTP_SACK_IMMEDIATELY = (1 << 3),
314
315 SCTP_SENDALL = (1 << 6),
316 SCTP_PR_SCTP_ALL = (1 << 7),
317 SCTP_NOTIFICATION = MSG_NOTIFICATION,
318 SCTP_EOF = MSG_FIN,
319};
320
321typedef union {
322 __u8 raw;
323 struct sctp_initmsg init;
324 struct sctp_sndrcvinfo sndrcv;
325} sctp_cmsg_data_t;
326
327
328typedef enum sctp_cmsg_type {
329 SCTP_INIT,
330#define SCTP_INIT SCTP_INIT
331 SCTP_SNDRCV,
332#define SCTP_SNDRCV SCTP_SNDRCV
333 SCTP_SNDINFO,
334#define SCTP_SNDINFO SCTP_SNDINFO
335 SCTP_RCVINFO,
336#define SCTP_RCVINFO SCTP_RCVINFO
337 SCTP_NXTINFO,
338#define SCTP_NXTINFO SCTP_NXTINFO
339 SCTP_PRINFO,
340#define SCTP_PRINFO SCTP_PRINFO
341 SCTP_AUTHINFO,
342#define SCTP_AUTHINFO SCTP_AUTHINFO
343 SCTP_DSTADDRV4,
344#define SCTP_DSTADDRV4 SCTP_DSTADDRV4
345 SCTP_DSTADDRV6,
346#define SCTP_DSTADDRV6 SCTP_DSTADDRV6
347} sctp_cmsg_t;
348
349
350
351
352
353
354
355
356
357
358struct sctp_assoc_change {
359 __u16 sac_type;
360 __u16 sac_flags;
361 __u32 sac_length;
362 __u16 sac_state;
363 __u16 sac_error;
364 __u16 sac_outbound_streams;
365 __u16 sac_inbound_streams;
366 sctp_assoc_t sac_assoc_id;
367 __u8 sac_info[0];
368};
369
370
371
372
373
374
375
376
377
378
379enum sctp_sac_state {
380 SCTP_COMM_UP,
381 SCTP_COMM_LOST,
382 SCTP_RESTART,
383 SCTP_SHUTDOWN_COMP,
384 SCTP_CANT_STR_ASSOC,
385};
386
387
388
389
390
391
392
393
394struct sctp_paddr_change {
395 __u16 spc_type;
396 __u16 spc_flags;
397 __u32 spc_length;
398 struct sockaddr_storage spc_aaddr;
399 int spc_state;
400 int spc_error;
401 sctp_assoc_t spc_assoc_id;
402} __attribute__((packed, aligned(4)));
403
404
405
406
407
408
409
410enum sctp_spc_state {
411 SCTP_ADDR_AVAILABLE,
412 SCTP_ADDR_UNREACHABLE,
413 SCTP_ADDR_REMOVED,
414 SCTP_ADDR_ADDED,
415 SCTP_ADDR_MADE_PRIM,
416 SCTP_ADDR_CONFIRMED,
417 SCTP_ADDR_POTENTIALLY_FAILED,
418#define SCTP_ADDR_PF SCTP_ADDR_POTENTIALLY_FAILED
419};
420
421
422
423
424
425
426
427
428
429
430
431
432struct sctp_remote_error {
433 __u16 sre_type;
434 __u16 sre_flags;
435 __u32 sre_length;
436 __be16 sre_error;
437 sctp_assoc_t sre_assoc_id;
438 __u8 sre_data[0];
439};
440
441
442
443
444
445
446
447
448struct sctp_send_failed {
449 __u16 ssf_type;
450 __u16 ssf_flags;
451 __u32 ssf_length;
452 __u32 ssf_error;
453 struct sctp_sndrcvinfo ssf_info;
454 sctp_assoc_t ssf_assoc_id;
455 __u8 ssf_data[0];
456};
457
458struct sctp_send_failed_event {
459 __u16 ssf_type;
460 __u16 ssf_flags;
461 __u32 ssf_length;
462 __u32 ssf_error;
463 struct sctp_sndinfo ssfe_info;
464 sctp_assoc_t ssf_assoc_id;
465 __u8 ssf_data[0];
466};
467
468
469
470
471
472
473
474
475
476
477
478
479
480enum sctp_ssf_flags {
481 SCTP_DATA_UNSENT,
482 SCTP_DATA_SENT,
483};
484
485
486
487
488
489
490
491struct sctp_shutdown_event {
492 __u16 sse_type;
493 __u16 sse_flags;
494 __u32 sse_length;
495 sctp_assoc_t sse_assoc_id;
496};
497
498
499
500
501
502
503
504
505struct sctp_adaptation_event {
506 __u16 sai_type;
507 __u16 sai_flags;
508 __u32 sai_length;
509 __u32 sai_adaptation_ind;
510 sctp_assoc_t sai_assoc_id;
511};
512
513
514
515
516
517
518
519
520struct sctp_pdapi_event {
521 __u16 pdapi_type;
522 __u16 pdapi_flags;
523 __u32 pdapi_length;
524 __u32 pdapi_indication;
525 sctp_assoc_t pdapi_assoc_id;
526 __u32 pdapi_stream;
527 __u32 pdapi_seq;
528};
529
530enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
531
532
533
534
535
536
537
538struct sctp_authkey_event {
539 __u16 auth_type;
540 __u16 auth_flags;
541 __u32 auth_length;
542 __u16 auth_keynumber;
543 __u16 auth_altkeynumber;
544 __u32 auth_indication;
545 sctp_assoc_t auth_assoc_id;
546};
547
548enum {
549 SCTP_AUTH_NEW_KEY,
550#define SCTP_AUTH_NEWKEY SCTP_AUTH_NEW_KEY
551 SCTP_AUTH_FREE_KEY,
552 SCTP_AUTH_NO_AUTH,
553};
554
555
556
557
558
559
560
561
562
563struct sctp_sender_dry_event {
564 __u16 sender_dry_type;
565 __u16 sender_dry_flags;
566 __u32 sender_dry_length;
567 sctp_assoc_t sender_dry_assoc_id;
568};
569
570#define SCTP_STREAM_RESET_INCOMING_SSN 0x0001
571#define SCTP_STREAM_RESET_OUTGOING_SSN 0x0002
572#define SCTP_STREAM_RESET_DENIED 0x0004
573#define SCTP_STREAM_RESET_FAILED 0x0008
574struct sctp_stream_reset_event {
575 __u16 strreset_type;
576 __u16 strreset_flags;
577 __u32 strreset_length;
578 sctp_assoc_t strreset_assoc_id;
579 __u16 strreset_stream_list[];
580};
581
582#define SCTP_ASSOC_RESET_DENIED 0x0004
583#define SCTP_ASSOC_RESET_FAILED 0x0008
584struct sctp_assoc_reset_event {
585 __u16 assocreset_type;
586 __u16 assocreset_flags;
587 __u32 assocreset_length;
588 sctp_assoc_t assocreset_assoc_id;
589 __u32 assocreset_local_tsn;
590 __u32 assocreset_remote_tsn;
591};
592
593#define SCTP_ASSOC_CHANGE_DENIED 0x0004
594#define SCTP_ASSOC_CHANGE_FAILED 0x0008
595#define SCTP_STREAM_CHANGE_DENIED SCTP_ASSOC_CHANGE_DENIED
596#define SCTP_STREAM_CHANGE_FAILED SCTP_ASSOC_CHANGE_FAILED
597struct sctp_stream_change_event {
598 __u16 strchange_type;
599 __u16 strchange_flags;
600 __u32 strchange_length;
601 sctp_assoc_t strchange_assoc_id;
602 __u16 strchange_instrms;
603 __u16 strchange_outstrms;
604};
605
606
607
608
609
610struct sctp_event_subscribe {
611 __u8 sctp_data_io_event;
612 __u8 sctp_association_event;
613 __u8 sctp_address_event;
614 __u8 sctp_send_failure_event;
615 __u8 sctp_peer_error_event;
616 __u8 sctp_shutdown_event;
617 __u8 sctp_partial_delivery_event;
618 __u8 sctp_adaptation_layer_event;
619 __u8 sctp_authentication_event;
620 __u8 sctp_sender_dry_event;
621 __u8 sctp_stream_reset_event;
622 __u8 sctp_assoc_reset_event;
623 __u8 sctp_stream_change_event;
624 __u8 sctp_send_failure_event_event;
625};
626
627
628
629
630
631
632
633
634union sctp_notification {
635 struct {
636 __u16 sn_type;
637 __u16 sn_flags;
638 __u32 sn_length;
639 } sn_header;
640 struct sctp_assoc_change sn_assoc_change;
641 struct sctp_paddr_change sn_paddr_change;
642 struct sctp_remote_error sn_remote_error;
643 struct sctp_send_failed sn_send_failed;
644 struct sctp_shutdown_event sn_shutdown_event;
645 struct sctp_adaptation_event sn_adaptation_event;
646 struct sctp_pdapi_event sn_pdapi_event;
647 struct sctp_authkey_event sn_authkey_event;
648 struct sctp_sender_dry_event sn_sender_dry_event;
649 struct sctp_stream_reset_event sn_strreset_event;
650 struct sctp_assoc_reset_event sn_assocreset_event;
651 struct sctp_stream_change_event sn_strchange_event;
652 struct sctp_send_failed_event sn_send_failed_event;
653};
654
655
656
657
658
659
660enum sctp_sn_type {
661 SCTP_SN_TYPE_BASE = (1<<15),
662 SCTP_DATA_IO_EVENT = SCTP_SN_TYPE_BASE,
663#define SCTP_DATA_IO_EVENT SCTP_DATA_IO_EVENT
664 SCTP_ASSOC_CHANGE,
665#define SCTP_ASSOC_CHANGE SCTP_ASSOC_CHANGE
666 SCTP_PEER_ADDR_CHANGE,
667#define SCTP_PEER_ADDR_CHANGE SCTP_PEER_ADDR_CHANGE
668 SCTP_SEND_FAILED,
669#define SCTP_SEND_FAILED SCTP_SEND_FAILED
670 SCTP_REMOTE_ERROR,
671#define SCTP_REMOTE_ERROR SCTP_REMOTE_ERROR
672 SCTP_SHUTDOWN_EVENT,
673#define SCTP_SHUTDOWN_EVENT SCTP_SHUTDOWN_EVENT
674 SCTP_PARTIAL_DELIVERY_EVENT,
675#define SCTP_PARTIAL_DELIVERY_EVENT SCTP_PARTIAL_DELIVERY_EVENT
676 SCTP_ADAPTATION_INDICATION,
677#define SCTP_ADAPTATION_INDICATION SCTP_ADAPTATION_INDICATION
678 SCTP_AUTHENTICATION_EVENT,
679#define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_EVENT
680 SCTP_SENDER_DRY_EVENT,
681#define SCTP_SENDER_DRY_EVENT SCTP_SENDER_DRY_EVENT
682 SCTP_STREAM_RESET_EVENT,
683#define SCTP_STREAM_RESET_EVENT SCTP_STREAM_RESET_EVENT
684 SCTP_ASSOC_RESET_EVENT,
685#define SCTP_ASSOC_RESET_EVENT SCTP_ASSOC_RESET_EVENT
686 SCTP_STREAM_CHANGE_EVENT,
687#define SCTP_STREAM_CHANGE_EVENT SCTP_STREAM_CHANGE_EVENT
688 SCTP_SEND_FAILED_EVENT,
689#define SCTP_SEND_FAILED_EVENT SCTP_SEND_FAILED_EVENT
690 SCTP_SN_TYPE_MAX = SCTP_SEND_FAILED_EVENT,
691#define SCTP_SN_TYPE_MAX SCTP_SN_TYPE_MAX
692};
693
694
695
696
697
698
699
700
701typedef enum sctp_sn_error {
702 SCTP_FAILED_THRESHOLD,
703 SCTP_RECEIVED_SACK,
704 SCTP_HEARTBEAT_SUCCESS,
705 SCTP_RESPONSE_TO_USER_REQ,
706 SCTP_INTERNAL_ERROR,
707 SCTP_SHUTDOWN_GUARD_EXPIRES,
708 SCTP_PEER_FAULTY,
709} sctp_sn_error_t;
710
711
712
713
714
715
716
717
718struct sctp_rtoinfo {
719 sctp_assoc_t srto_assoc_id;
720 __u32 srto_initial;
721 __u32 srto_max;
722 __u32 srto_min;
723};
724
725
726
727
728
729
730
731struct sctp_assocparams {
732 sctp_assoc_t sasoc_assoc_id;
733 __u16 sasoc_asocmaxrxt;
734 __u16 sasoc_number_peer_destinations;
735 __u32 sasoc_peer_rwnd;
736 __u32 sasoc_local_rwnd;
737 __u32 sasoc_cookie_life;
738};
739
740
741
742
743
744
745
746
747
748struct sctp_setpeerprim {
749 sctp_assoc_t sspp_assoc_id;
750 struct sockaddr_storage sspp_addr;
751} __attribute__((packed, aligned(4)));
752
753
754
755
756
757
758
759
760
761struct sctp_prim {
762 sctp_assoc_t ssp_assoc_id;
763 struct sockaddr_storage ssp_addr;
764} __attribute__((packed, aligned(4)));
765
766
767#define sctp_setprim sctp_prim
768
769
770
771
772
773
774
775struct sctp_setadaptation {
776 __u32 ssb_adaptation_ind;
777};
778
779
780
781
782
783
784
785
786
787
788
789enum sctp_spp_flags {
790 SPP_HB_ENABLE = 1<<0,
791 SPP_HB_DISABLE = 1<<1,
792 SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
793 SPP_HB_DEMAND = 1<<2,
794 SPP_PMTUD_ENABLE = 1<<3,
795 SPP_PMTUD_DISABLE = 1<<4,
796 SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
797 SPP_SACKDELAY_ENABLE = 1<<5,
798 SPP_SACKDELAY_DISABLE = 1<<6,
799 SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
800 SPP_HB_TIME_IS_ZERO = 1<<7,
801 SPP_IPV6_FLOWLABEL = 1<<8,
802 SPP_DSCP = 1<<9,
803};
804
805struct sctp_paddrparams {
806 sctp_assoc_t spp_assoc_id;
807 struct sockaddr_storage spp_address;
808 __u32 spp_hbinterval;
809 __u16 spp_pathmaxrxt;
810 __u32 spp_pathmtu;
811 __u32 spp_sackdelay;
812 __u32 spp_flags;
813 __u32 spp_ipv6_flowlabel;
814 __u8 spp_dscp;
815} __attribute__((packed, aligned(4)));
816
817
818
819
820
821
822
823
824struct sctp_authchunk {
825 __u8 sauth_chunk;
826};
827
828
829
830
831
832
833
834#ifndef __KERNEL__
835
836
837
838enum {
839 SCTP_AUTH_HMAC_ID_SHA1 = 1,
840 SCTP_AUTH_HMAC_ID_SHA256 = 3,
841};
842#endif
843
844struct sctp_hmacalgo {
845 __u32 shmac_num_idents;
846 __u16 shmac_idents[];
847};
848
849
850
851
852#define shmac_number_of_idents shmac_num_idents
853
854
855
856
857
858
859
860struct sctp_authkey {
861 sctp_assoc_t sca_assoc_id;
862 __u16 sca_keynumber;
863 __u16 sca_keylength;
864 __u8 sca_key[];
865};
866
867
868
869
870
871
872
873
874struct sctp_authkeyid {
875 sctp_assoc_t scact_assoc_id;
876 __u16 scact_keynumber;
877};
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894struct sctp_sack_info {
895 sctp_assoc_t sack_assoc_id;
896 uint32_t sack_delay;
897 uint32_t sack_freq;
898};
899
900struct sctp_assoc_value {
901 sctp_assoc_t assoc_id;
902 uint32_t assoc_value;
903};
904
905struct sctp_stream_value {
906 sctp_assoc_t assoc_id;
907 uint16_t stream_id;
908 uint16_t stream_value;
909};
910
911
912
913
914
915
916
917
918
919
920struct sctp_paddrinfo {
921 sctp_assoc_t spinfo_assoc_id;
922 struct sockaddr_storage spinfo_address;
923 __s32 spinfo_state;
924 __u32 spinfo_cwnd;
925 __u32 spinfo_srtt;
926 __u32 spinfo_rto;
927 __u32 spinfo_mtu;
928} __attribute__((packed, aligned(4)));
929
930
931
932
933
934
935
936
937
938
939enum sctp_spinfo_state {
940 SCTP_INACTIVE,
941 SCTP_PF,
942#define SCTP_POTENTIALLY_FAILED SCTP_PF
943 SCTP_ACTIVE,
944 SCTP_UNCONFIRMED,
945 SCTP_UNKNOWN = 0xffff
946};
947
948
949
950
951
952
953
954
955
956
957struct sctp_status {
958 sctp_assoc_t sstat_assoc_id;
959 __s32 sstat_state;
960 __u32 sstat_rwnd;
961 __u16 sstat_unackdata;
962 __u16 sstat_penddata;
963 __u16 sstat_instrms;
964 __u16 sstat_outstrms;
965 __u32 sstat_fragmentation_point;
966 struct sctp_paddrinfo sstat_primary;
967};
968
969
970
971
972
973
974
975
976struct sctp_authchunks {
977 sctp_assoc_t gauth_assoc_id;
978 __u32 gauth_number_of_chunks;
979 uint8_t gauth_chunks[];
980};
981
982
983
984
985#define guth_number_of_chunks gauth_number_of_chunks
986
987
988enum sctp_sstat_state {
989 SCTP_EMPTY = 0,
990 SCTP_CLOSED = 1,
991 SCTP_COOKIE_WAIT = 2,
992 SCTP_COOKIE_ECHOED = 3,
993 SCTP_ESTABLISHED = 4,
994 SCTP_SHUTDOWN_PENDING = 5,
995 SCTP_SHUTDOWN_SENT = 6,
996 SCTP_SHUTDOWN_RECEIVED = 7,
997 SCTP_SHUTDOWN_ACK_SENT = 8,
998};
999
1000
1001
1002
1003
1004
1005
1006
1007struct sctp_assoc_ids {
1008 __u32 gaids_number_of_ids;
1009 sctp_assoc_t gaids_assoc_id[];
1010};
1011
1012
1013
1014
1015
1016
1017
1018struct sctp_getaddrs_old {
1019 sctp_assoc_t assoc_id;
1020 int addr_num;
1021#ifdef __KERNEL__
1022 struct sockaddr __user *addrs;
1023#else
1024 struct sockaddr *addrs;
1025#endif
1026};
1027
1028struct sctp_getaddrs {
1029 sctp_assoc_t assoc_id;
1030 __u32 addr_num;
1031 __u8 addrs[0];
1032};
1033
1034
1035
1036
1037
1038
1039struct sctp_assoc_stats {
1040 sctp_assoc_t sas_assoc_id;
1041
1042 struct sockaddr_storage sas_obs_rto_ipaddr;
1043 __u64 sas_maxrto;
1044 __u64 sas_isacks;
1045 __u64 sas_osacks;
1046 __u64 sas_opackets;
1047 __u64 sas_ipackets;
1048 __u64 sas_rtxchunks;
1049 __u64 sas_outofseqtsns;
1050 __u64 sas_idupchunks;
1051 __u64 sas_gapcnt;
1052 __u64 sas_ouodchunks;
1053 __u64 sas_iuodchunks;
1054 __u64 sas_oodchunks;
1055 __u64 sas_iodchunks;
1056 __u64 sas_octrlchunks;
1057 __u64 sas_ictrlchunks;
1058};
1059
1060
1061
1062
1063
1064
1065
1066#define SCTP_BINDX_ADD_ADDR 0x01
1067#define SCTP_BINDX_REM_ADDR 0x02
1068
1069
1070
1071
1072typedef struct {
1073 sctp_assoc_t associd;
1074 int sd;
1075} sctp_peeloff_arg_t;
1076
1077typedef struct {
1078 sctp_peeloff_arg_t p_arg;
1079 unsigned flags;
1080} sctp_peeloff_flags_arg_t;
1081
1082
1083
1084
1085struct sctp_paddrthlds {
1086 sctp_assoc_t spt_assoc_id;
1087 struct sockaddr_storage spt_address;
1088 __u16 spt_pathmaxrxt;
1089 __u16 spt_pathpfthld;
1090};
1091
1092
1093struct sctp_paddrthlds_v2 {
1094 sctp_assoc_t spt_assoc_id;
1095 struct sockaddr_storage spt_address;
1096 __u16 spt_pathmaxrxt;
1097 __u16 spt_pathpfthld;
1098 __u16 spt_pathcpthld;
1099};
1100
1101
1102
1103
1104struct sctp_prstatus {
1105 sctp_assoc_t sprstat_assoc_id;
1106 __u16 sprstat_sid;
1107 __u16 sprstat_policy;
1108 __u64 sprstat_abandoned_unsent;
1109 __u64 sprstat_abandoned_sent;
1110};
1111
1112struct sctp_default_prinfo {
1113 sctp_assoc_t pr_assoc_id;
1114 __u32 pr_value;
1115 __u16 pr_policy;
1116};
1117
1118struct sctp_info {
1119 __u32 sctpi_tag;
1120 __u32 sctpi_state;
1121 __u32 sctpi_rwnd;
1122 __u16 sctpi_unackdata;
1123 __u16 sctpi_penddata;
1124 __u16 sctpi_instrms;
1125 __u16 sctpi_outstrms;
1126 __u32 sctpi_fragmentation_point;
1127 __u32 sctpi_inqueue;
1128 __u32 sctpi_outqueue;
1129 __u32 sctpi_overall_error;
1130 __u32 sctpi_max_burst;
1131 __u32 sctpi_maxseg;
1132 __u32 sctpi_peer_rwnd;
1133 __u32 sctpi_peer_tag;
1134 __u8 sctpi_peer_capable;
1135 __u8 sctpi_peer_sack;
1136 __u16 __reserved1;
1137
1138
1139 __u64 sctpi_isacks;
1140 __u64 sctpi_osacks;
1141 __u64 sctpi_opackets;
1142 __u64 sctpi_ipackets;
1143 __u64 sctpi_rtxchunks;
1144 __u64 sctpi_outofseqtsns;
1145 __u64 sctpi_idupchunks;
1146 __u64 sctpi_gapcnt;
1147 __u64 sctpi_ouodchunks;
1148 __u64 sctpi_iuodchunks;
1149 __u64 sctpi_oodchunks;
1150 __u64 sctpi_iodchunks;
1151 __u64 sctpi_octrlchunks;
1152 __u64 sctpi_ictrlchunks;
1153
1154
1155 struct sockaddr_storage sctpi_p_address;
1156 __s32 sctpi_p_state;
1157 __u32 sctpi_p_cwnd;
1158 __u32 sctpi_p_srtt;
1159 __u32 sctpi_p_rto;
1160 __u32 sctpi_p_hbinterval;
1161 __u32 sctpi_p_pathmaxrxt;
1162 __u32 sctpi_p_sackdelay;
1163 __u32 sctpi_p_sackfreq;
1164 __u32 sctpi_p_ssthresh;
1165 __u32 sctpi_p_partial_bytes_acked;
1166 __u32 sctpi_p_flight_size;
1167 __u16 sctpi_p_error;
1168 __u16 __reserved2;
1169
1170
1171 __u32 sctpi_s_autoclose;
1172 __u32 sctpi_s_adaptation_ind;
1173 __u32 sctpi_s_pd_point;
1174 __u8 sctpi_s_nodelay;
1175 __u8 sctpi_s_disable_fragments;
1176 __u8 sctpi_s_v4mapped;
1177 __u8 sctpi_s_frag_interleave;
1178 __u32 sctpi_s_type;
1179 __u32 __reserved3;
1180};
1181
1182struct sctp_reset_streams {
1183 sctp_assoc_t srs_assoc_id;
1184 uint16_t srs_flags;
1185 uint16_t srs_number_streams;
1186 uint16_t srs_stream_list[];
1187};
1188
1189struct sctp_add_streams {
1190 sctp_assoc_t sas_assoc_id;
1191 uint16_t sas_instrms;
1192 uint16_t sas_outstrms;
1193};
1194
1195struct sctp_event {
1196 sctp_assoc_t se_assoc_id;
1197 uint16_t se_type;
1198 uint8_t se_on;
1199};
1200
1201struct sctp_udpencaps {
1202 sctp_assoc_t sue_assoc_id;
1203 struct sockaddr_storage sue_address;
1204 uint16_t sue_port;
1205};
1206
1207
1208enum sctp_sched_type {
1209 SCTP_SS_FCFS,
1210 SCTP_SS_DEFAULT = SCTP_SS_FCFS,
1211 SCTP_SS_PRIO,
1212 SCTP_SS_RR,
1213 SCTP_SS_MAX = SCTP_SS_RR
1214};
1215
1216#endif
1217