0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054 #ifndef _UAPI_SCTP_H
0055 #define _UAPI_SCTP_H
0056
0057 #include <linux/types.h>
0058 #include <linux/socket.h>
0059
0060 typedef __s32 sctp_assoc_t;
0061
0062 #define SCTP_FUTURE_ASSOC 0
0063 #define SCTP_CURRENT_ASSOC 1
0064 #define SCTP_ALL_ASSOC 2
0065
0066
0067
0068
0069 #define SCTP_RTOINFO 0
0070 #define SCTP_ASSOCINFO 1
0071 #define SCTP_INITMSG 2
0072 #define SCTP_NODELAY 3
0073 #define SCTP_AUTOCLOSE 4
0074 #define SCTP_SET_PEER_PRIMARY_ADDR 5
0075 #define SCTP_PRIMARY_ADDR 6
0076 #define SCTP_ADAPTATION_LAYER 7
0077 #define SCTP_DISABLE_FRAGMENTS 8
0078 #define SCTP_PEER_ADDR_PARAMS 9
0079 #define SCTP_DEFAULT_SEND_PARAM 10
0080 #define SCTP_EVENTS 11
0081 #define SCTP_I_WANT_MAPPED_V4_ADDR 12
0082 #define SCTP_MAXSEG 13
0083 #define SCTP_STATUS 14
0084 #define SCTP_GET_PEER_ADDR_INFO 15
0085 #define SCTP_DELAYED_ACK_TIME 16
0086 #define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
0087 #define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME
0088 #define SCTP_CONTEXT 17
0089 #define SCTP_FRAGMENT_INTERLEAVE 18
0090 #define SCTP_PARTIAL_DELIVERY_POINT 19
0091 #define SCTP_MAX_BURST 20
0092 #define SCTP_AUTH_CHUNK 21
0093 #define SCTP_HMAC_IDENT 22
0094 #define SCTP_AUTH_KEY 23
0095 #define SCTP_AUTH_ACTIVE_KEY 24
0096 #define SCTP_AUTH_DELETE_KEY 25
0097 #define SCTP_PEER_AUTH_CHUNKS 26
0098 #define SCTP_LOCAL_AUTH_CHUNKS 27
0099 #define SCTP_GET_ASSOC_NUMBER 28
0100 #define SCTP_GET_ASSOC_ID_LIST 29
0101 #define SCTP_AUTO_ASCONF 30
0102 #define SCTP_PEER_ADDR_THLDS 31
0103 #define SCTP_RECVRCVINFO 32
0104 #define SCTP_RECVNXTINFO 33
0105 #define SCTP_DEFAULT_SNDINFO 34
0106 #define SCTP_AUTH_DEACTIVATE_KEY 35
0107 #define SCTP_REUSE_PORT 36
0108 #define SCTP_PEER_ADDR_THLDS_V2 37
0109
0110
0111
0112
0113 #define SCTP_SOCKOPT_BINDX_ADD 100
0114 #define SCTP_SOCKOPT_BINDX_REM 101
0115 #define SCTP_SOCKOPT_PEELOFF 102
0116
0117 #define SCTP_SOCKOPT_CONNECTX_OLD 107
0118 #define SCTP_GET_PEER_ADDRS 108
0119 #define SCTP_GET_LOCAL_ADDRS 109
0120 #define SCTP_SOCKOPT_CONNECTX 110
0121 #define SCTP_SOCKOPT_CONNECTX3 111
0122 #define SCTP_GET_ASSOC_STATS 112
0123 #define SCTP_PR_SUPPORTED 113
0124 #define SCTP_DEFAULT_PRINFO 114
0125 #define SCTP_PR_ASSOC_STATUS 115
0126 #define SCTP_PR_STREAM_STATUS 116
0127 #define SCTP_RECONFIG_SUPPORTED 117
0128 #define SCTP_ENABLE_STREAM_RESET 118
0129 #define SCTP_RESET_STREAMS 119
0130 #define SCTP_RESET_ASSOC 120
0131 #define SCTP_ADD_STREAMS 121
0132 #define SCTP_SOCKOPT_PEELOFF_FLAGS 122
0133 #define SCTP_STREAM_SCHEDULER 123
0134 #define SCTP_STREAM_SCHEDULER_VALUE 124
0135 #define SCTP_INTERLEAVING_SUPPORTED 125
0136 #define SCTP_SENDMSG_CONNECT 126
0137 #define SCTP_EVENT 127
0138 #define SCTP_ASCONF_SUPPORTED 128
0139 #define SCTP_AUTH_SUPPORTED 129
0140 #define SCTP_ECN_SUPPORTED 130
0141 #define SCTP_EXPOSE_POTENTIALLY_FAILED_STATE 131
0142 #define SCTP_EXPOSE_PF_STATE SCTP_EXPOSE_POTENTIALLY_FAILED_STATE
0143 #define SCTP_REMOTE_UDP_ENCAPS_PORT 132
0144 #define SCTP_PLPMTUD_PROBE_INTERVAL 133
0145
0146
0147 #define SCTP_PR_SCTP_NONE 0x0000
0148 #define SCTP_PR_SCTP_TTL 0x0010
0149 #define SCTP_PR_SCTP_RTX 0x0020
0150 #define SCTP_PR_SCTP_PRIO 0x0030
0151 #define SCTP_PR_SCTP_MAX SCTP_PR_SCTP_PRIO
0152 #define SCTP_PR_SCTP_MASK 0x0030
0153
0154 #define __SCTP_PR_INDEX(x) ((x >> 4) - 1)
0155 #define SCTP_PR_INDEX(x) __SCTP_PR_INDEX(SCTP_PR_SCTP_ ## x)
0156
0157 #define SCTP_PR_POLICY(x) ((x) & SCTP_PR_SCTP_MASK)
0158 #define SCTP_PR_SET_POLICY(flags, x) \
0159 do { \
0160 flags &= ~SCTP_PR_SCTP_MASK; \
0161 flags |= x; \
0162 } while (0)
0163
0164 #define SCTP_PR_TTL_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_TTL)
0165 #define SCTP_PR_RTX_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_RTX)
0166 #define SCTP_PR_PRIO_ENABLED(x) (SCTP_PR_POLICY(x) == SCTP_PR_SCTP_PRIO)
0167
0168
0169 #define SCTP_ENABLE_RESET_STREAM_REQ 0x01
0170 #define SCTP_ENABLE_RESET_ASSOC_REQ 0x02
0171 #define SCTP_ENABLE_CHANGE_ASSOC_REQ 0x04
0172 #define SCTP_ENABLE_STRRESET_MASK 0x07
0173
0174 #define SCTP_STREAM_RESET_INCOMING 0x01
0175 #define SCTP_STREAM_RESET_OUTGOING 0x02
0176
0177
0178
0179 enum sctp_msg_flags {
0180 MSG_NOTIFICATION = 0x8000,
0181 #define MSG_NOTIFICATION MSG_NOTIFICATION
0182 };
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195 struct sctp_initmsg {
0196 __u16 sinit_num_ostreams;
0197 __u16 sinit_max_instreams;
0198 __u16 sinit_max_attempts;
0199 __u16 sinit_max_init_timeo;
0200 };
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212 struct sctp_sndrcvinfo {
0213 __u16 sinfo_stream;
0214 __u16 sinfo_ssn;
0215 __u16 sinfo_flags;
0216 __u32 sinfo_ppid;
0217 __u32 sinfo_context;
0218 __u32 sinfo_timetolive;
0219 __u32 sinfo_tsn;
0220 __u32 sinfo_cumtsn;
0221 sctp_assoc_t sinfo_assoc_id;
0222 };
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232 struct sctp_sndinfo {
0233 __u16 snd_sid;
0234 __u16 snd_flags;
0235 __u32 snd_ppid;
0236 __u32 snd_context;
0237 sctp_assoc_t snd_assoc_id;
0238 };
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249 struct sctp_rcvinfo {
0250 __u16 rcv_sid;
0251 __u16 rcv_ssn;
0252 __u16 rcv_flags;
0253 __u32 rcv_ppid;
0254 __u32 rcv_tsn;
0255 __u32 rcv_cumtsn;
0256 __u32 rcv_context;
0257 sctp_assoc_t rcv_assoc_id;
0258 };
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271 struct sctp_nxtinfo {
0272 __u16 nxt_sid;
0273 __u16 nxt_flags;
0274 __u32 nxt_ppid;
0275 __u32 nxt_length;
0276 sctp_assoc_t nxt_assoc_id;
0277 };
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 struct sctp_prinfo {
0288 __u16 pr_policy;
0289 __u32 pr_value;
0290 };
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300 struct sctp_authinfo {
0301 __u16 auth_keynumber;
0302 };
0303
0304
0305
0306
0307
0308
0309
0310 enum sctp_sinfo_flags {
0311 SCTP_UNORDERED = (1 << 0),
0312 SCTP_ADDR_OVER = (1 << 1),
0313 SCTP_ABORT = (1 << 2),
0314 SCTP_SACK_IMMEDIATELY = (1 << 3),
0315
0316 SCTP_SENDALL = (1 << 6),
0317 SCTP_PR_SCTP_ALL = (1 << 7),
0318 SCTP_NOTIFICATION = MSG_NOTIFICATION,
0319 SCTP_EOF = MSG_FIN,
0320 };
0321
0322 typedef union {
0323 __u8 raw;
0324 struct sctp_initmsg init;
0325 struct sctp_sndrcvinfo sndrcv;
0326 } sctp_cmsg_data_t;
0327
0328
0329 typedef enum sctp_cmsg_type {
0330 SCTP_INIT,
0331 #define SCTP_INIT SCTP_INIT
0332 SCTP_SNDRCV,
0333 #define SCTP_SNDRCV SCTP_SNDRCV
0334 SCTP_SNDINFO,
0335 #define SCTP_SNDINFO SCTP_SNDINFO
0336 SCTP_RCVINFO,
0337 #define SCTP_RCVINFO SCTP_RCVINFO
0338 SCTP_NXTINFO,
0339 #define SCTP_NXTINFO SCTP_NXTINFO
0340 SCTP_PRINFO,
0341 #define SCTP_PRINFO SCTP_PRINFO
0342 SCTP_AUTHINFO,
0343 #define SCTP_AUTHINFO SCTP_AUTHINFO
0344 SCTP_DSTADDRV4,
0345 #define SCTP_DSTADDRV4 SCTP_DSTADDRV4
0346 SCTP_DSTADDRV6,
0347 #define SCTP_DSTADDRV6 SCTP_DSTADDRV6
0348 } sctp_cmsg_t;
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359 struct sctp_assoc_change {
0360 __u16 sac_type;
0361 __u16 sac_flags;
0362 __u32 sac_length;
0363 __u16 sac_state;
0364 __u16 sac_error;
0365 __u16 sac_outbound_streams;
0366 __u16 sac_inbound_streams;
0367 sctp_assoc_t sac_assoc_id;
0368 __u8 sac_info[];
0369 };
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380 enum sctp_sac_state {
0381 SCTP_COMM_UP,
0382 SCTP_COMM_LOST,
0383 SCTP_RESTART,
0384 SCTP_SHUTDOWN_COMP,
0385 SCTP_CANT_STR_ASSOC,
0386 };
0387
0388
0389
0390
0391
0392
0393
0394
0395 struct sctp_paddr_change {
0396 __u16 spc_type;
0397 __u16 spc_flags;
0398 __u32 spc_length;
0399 struct sockaddr_storage spc_aaddr;
0400 int spc_state;
0401 int spc_error;
0402 sctp_assoc_t spc_assoc_id;
0403 } __attribute__((packed, aligned(4)));
0404
0405
0406
0407
0408
0409
0410
0411 enum sctp_spc_state {
0412 SCTP_ADDR_AVAILABLE,
0413 SCTP_ADDR_UNREACHABLE,
0414 SCTP_ADDR_REMOVED,
0415 SCTP_ADDR_ADDED,
0416 SCTP_ADDR_MADE_PRIM,
0417 SCTP_ADDR_CONFIRMED,
0418 SCTP_ADDR_POTENTIALLY_FAILED,
0419 #define SCTP_ADDR_PF SCTP_ADDR_POTENTIALLY_FAILED
0420 };
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433 struct sctp_remote_error {
0434 __u16 sre_type;
0435 __u16 sre_flags;
0436 __u32 sre_length;
0437 __be16 sre_error;
0438 sctp_assoc_t sre_assoc_id;
0439 __u8 sre_data[];
0440 };
0441
0442
0443
0444
0445
0446
0447
0448
0449 struct sctp_send_failed {
0450 __u16 ssf_type;
0451 __u16 ssf_flags;
0452 __u32 ssf_length;
0453 __u32 ssf_error;
0454 struct sctp_sndrcvinfo ssf_info;
0455 sctp_assoc_t ssf_assoc_id;
0456 __u8 ssf_data[];
0457 };
0458
0459 struct sctp_send_failed_event {
0460 __u16 ssf_type;
0461 __u16 ssf_flags;
0462 __u32 ssf_length;
0463 __u32 ssf_error;
0464 struct sctp_sndinfo ssfe_info;
0465 sctp_assoc_t ssf_assoc_id;
0466 __u8 ssf_data[];
0467 };
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481 enum sctp_ssf_flags {
0482 SCTP_DATA_UNSENT,
0483 SCTP_DATA_SENT,
0484 };
0485
0486
0487
0488
0489
0490
0491
0492 struct sctp_shutdown_event {
0493 __u16 sse_type;
0494 __u16 sse_flags;
0495 __u32 sse_length;
0496 sctp_assoc_t sse_assoc_id;
0497 };
0498
0499
0500
0501
0502
0503
0504
0505
0506 struct sctp_adaptation_event {
0507 __u16 sai_type;
0508 __u16 sai_flags;
0509 __u32 sai_length;
0510 __u32 sai_adaptation_ind;
0511 sctp_assoc_t sai_assoc_id;
0512 };
0513
0514
0515
0516
0517
0518
0519
0520
0521 struct sctp_pdapi_event {
0522 __u16 pdapi_type;
0523 __u16 pdapi_flags;
0524 __u32 pdapi_length;
0525 __u32 pdapi_indication;
0526 sctp_assoc_t pdapi_assoc_id;
0527 __u32 pdapi_stream;
0528 __u32 pdapi_seq;
0529 };
0530
0531 enum { SCTP_PARTIAL_DELIVERY_ABORTED=0, };
0532
0533
0534
0535
0536
0537
0538
0539 struct sctp_authkey_event {
0540 __u16 auth_type;
0541 __u16 auth_flags;
0542 __u32 auth_length;
0543 __u16 auth_keynumber;
0544 __u16 auth_altkeynumber;
0545 __u32 auth_indication;
0546 sctp_assoc_t auth_assoc_id;
0547 };
0548
0549 enum {
0550 SCTP_AUTH_NEW_KEY,
0551 #define SCTP_AUTH_NEWKEY SCTP_AUTH_NEW_KEY
0552 SCTP_AUTH_FREE_KEY,
0553 SCTP_AUTH_NO_AUTH,
0554 };
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564 struct sctp_sender_dry_event {
0565 __u16 sender_dry_type;
0566 __u16 sender_dry_flags;
0567 __u32 sender_dry_length;
0568 sctp_assoc_t sender_dry_assoc_id;
0569 };
0570
0571 #define SCTP_STREAM_RESET_INCOMING_SSN 0x0001
0572 #define SCTP_STREAM_RESET_OUTGOING_SSN 0x0002
0573 #define SCTP_STREAM_RESET_DENIED 0x0004
0574 #define SCTP_STREAM_RESET_FAILED 0x0008
0575 struct sctp_stream_reset_event {
0576 __u16 strreset_type;
0577 __u16 strreset_flags;
0578 __u32 strreset_length;
0579 sctp_assoc_t strreset_assoc_id;
0580 __u16 strreset_stream_list[];
0581 };
0582
0583 #define SCTP_ASSOC_RESET_DENIED 0x0004
0584 #define SCTP_ASSOC_RESET_FAILED 0x0008
0585 struct sctp_assoc_reset_event {
0586 __u16 assocreset_type;
0587 __u16 assocreset_flags;
0588 __u32 assocreset_length;
0589 sctp_assoc_t assocreset_assoc_id;
0590 __u32 assocreset_local_tsn;
0591 __u32 assocreset_remote_tsn;
0592 };
0593
0594 #define SCTP_ASSOC_CHANGE_DENIED 0x0004
0595 #define SCTP_ASSOC_CHANGE_FAILED 0x0008
0596 #define SCTP_STREAM_CHANGE_DENIED SCTP_ASSOC_CHANGE_DENIED
0597 #define SCTP_STREAM_CHANGE_FAILED SCTP_ASSOC_CHANGE_FAILED
0598 struct sctp_stream_change_event {
0599 __u16 strchange_type;
0600 __u16 strchange_flags;
0601 __u32 strchange_length;
0602 sctp_assoc_t strchange_assoc_id;
0603 __u16 strchange_instrms;
0604 __u16 strchange_outstrms;
0605 };
0606
0607
0608
0609
0610
0611 struct sctp_event_subscribe {
0612 __u8 sctp_data_io_event;
0613 __u8 sctp_association_event;
0614 __u8 sctp_address_event;
0615 __u8 sctp_send_failure_event;
0616 __u8 sctp_peer_error_event;
0617 __u8 sctp_shutdown_event;
0618 __u8 sctp_partial_delivery_event;
0619 __u8 sctp_adaptation_layer_event;
0620 __u8 sctp_authentication_event;
0621 __u8 sctp_sender_dry_event;
0622 __u8 sctp_stream_reset_event;
0623 __u8 sctp_assoc_reset_event;
0624 __u8 sctp_stream_change_event;
0625 __u8 sctp_send_failure_event_event;
0626 };
0627
0628
0629
0630
0631
0632
0633
0634
0635 union sctp_notification {
0636 struct {
0637 __u16 sn_type;
0638 __u16 sn_flags;
0639 __u32 sn_length;
0640 } sn_header;
0641 struct sctp_assoc_change sn_assoc_change;
0642 struct sctp_paddr_change sn_paddr_change;
0643 struct sctp_remote_error sn_remote_error;
0644 struct sctp_send_failed sn_send_failed;
0645 struct sctp_shutdown_event sn_shutdown_event;
0646 struct sctp_adaptation_event sn_adaptation_event;
0647 struct sctp_pdapi_event sn_pdapi_event;
0648 struct sctp_authkey_event sn_authkey_event;
0649 struct sctp_sender_dry_event sn_sender_dry_event;
0650 struct sctp_stream_reset_event sn_strreset_event;
0651 struct sctp_assoc_reset_event sn_assocreset_event;
0652 struct sctp_stream_change_event sn_strchange_event;
0653 struct sctp_send_failed_event sn_send_failed_event;
0654 };
0655
0656
0657
0658
0659
0660
0661 enum sctp_sn_type {
0662 SCTP_SN_TYPE_BASE = (1<<15),
0663 SCTP_DATA_IO_EVENT = SCTP_SN_TYPE_BASE,
0664 #define SCTP_DATA_IO_EVENT SCTP_DATA_IO_EVENT
0665 SCTP_ASSOC_CHANGE,
0666 #define SCTP_ASSOC_CHANGE SCTP_ASSOC_CHANGE
0667 SCTP_PEER_ADDR_CHANGE,
0668 #define SCTP_PEER_ADDR_CHANGE SCTP_PEER_ADDR_CHANGE
0669 SCTP_SEND_FAILED,
0670 #define SCTP_SEND_FAILED SCTP_SEND_FAILED
0671 SCTP_REMOTE_ERROR,
0672 #define SCTP_REMOTE_ERROR SCTP_REMOTE_ERROR
0673 SCTP_SHUTDOWN_EVENT,
0674 #define SCTP_SHUTDOWN_EVENT SCTP_SHUTDOWN_EVENT
0675 SCTP_PARTIAL_DELIVERY_EVENT,
0676 #define SCTP_PARTIAL_DELIVERY_EVENT SCTP_PARTIAL_DELIVERY_EVENT
0677 SCTP_ADAPTATION_INDICATION,
0678 #define SCTP_ADAPTATION_INDICATION SCTP_ADAPTATION_INDICATION
0679 SCTP_AUTHENTICATION_EVENT,
0680 #define SCTP_AUTHENTICATION_INDICATION SCTP_AUTHENTICATION_EVENT
0681 SCTP_SENDER_DRY_EVENT,
0682 #define SCTP_SENDER_DRY_EVENT SCTP_SENDER_DRY_EVENT
0683 SCTP_STREAM_RESET_EVENT,
0684 #define SCTP_STREAM_RESET_EVENT SCTP_STREAM_RESET_EVENT
0685 SCTP_ASSOC_RESET_EVENT,
0686 #define SCTP_ASSOC_RESET_EVENT SCTP_ASSOC_RESET_EVENT
0687 SCTP_STREAM_CHANGE_EVENT,
0688 #define SCTP_STREAM_CHANGE_EVENT SCTP_STREAM_CHANGE_EVENT
0689 SCTP_SEND_FAILED_EVENT,
0690 #define SCTP_SEND_FAILED_EVENT SCTP_SEND_FAILED_EVENT
0691 SCTP_SN_TYPE_MAX = SCTP_SEND_FAILED_EVENT,
0692 #define SCTP_SN_TYPE_MAX SCTP_SN_TYPE_MAX
0693 };
0694
0695
0696
0697
0698
0699
0700
0701
0702 typedef enum sctp_sn_error {
0703 SCTP_FAILED_THRESHOLD,
0704 SCTP_RECEIVED_SACK,
0705 SCTP_HEARTBEAT_SUCCESS,
0706 SCTP_RESPONSE_TO_USER_REQ,
0707 SCTP_INTERNAL_ERROR,
0708 SCTP_SHUTDOWN_GUARD_EXPIRES,
0709 SCTP_PEER_FAULTY,
0710 } sctp_sn_error_t;
0711
0712
0713
0714
0715
0716
0717
0718
0719 struct sctp_rtoinfo {
0720 sctp_assoc_t srto_assoc_id;
0721 __u32 srto_initial;
0722 __u32 srto_max;
0723 __u32 srto_min;
0724 };
0725
0726
0727
0728
0729
0730
0731
0732 struct sctp_assocparams {
0733 sctp_assoc_t sasoc_assoc_id;
0734 __u16 sasoc_asocmaxrxt;
0735 __u16 sasoc_number_peer_destinations;
0736 __u32 sasoc_peer_rwnd;
0737 __u32 sasoc_local_rwnd;
0738 __u32 sasoc_cookie_life;
0739 };
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749 struct sctp_setpeerprim {
0750 sctp_assoc_t sspp_assoc_id;
0751 struct sockaddr_storage sspp_addr;
0752 } __attribute__((packed, aligned(4)));
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762 struct sctp_prim {
0763 sctp_assoc_t ssp_assoc_id;
0764 struct sockaddr_storage ssp_addr;
0765 } __attribute__((packed, aligned(4)));
0766
0767
0768 #define sctp_setprim sctp_prim
0769
0770
0771
0772
0773
0774
0775
0776 struct sctp_setadaptation {
0777 __u32 ssb_adaptation_ind;
0778 };
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790 enum sctp_spp_flags {
0791 SPP_HB_ENABLE = 1<<0,
0792 SPP_HB_DISABLE = 1<<1,
0793 SPP_HB = SPP_HB_ENABLE | SPP_HB_DISABLE,
0794 SPP_HB_DEMAND = 1<<2,
0795 SPP_PMTUD_ENABLE = 1<<3,
0796 SPP_PMTUD_DISABLE = 1<<4,
0797 SPP_PMTUD = SPP_PMTUD_ENABLE | SPP_PMTUD_DISABLE,
0798 SPP_SACKDELAY_ENABLE = 1<<5,
0799 SPP_SACKDELAY_DISABLE = 1<<6,
0800 SPP_SACKDELAY = SPP_SACKDELAY_ENABLE | SPP_SACKDELAY_DISABLE,
0801 SPP_HB_TIME_IS_ZERO = 1<<7,
0802 SPP_IPV6_FLOWLABEL = 1<<8,
0803 SPP_DSCP = 1<<9,
0804 };
0805
0806 struct sctp_paddrparams {
0807 sctp_assoc_t spp_assoc_id;
0808 struct sockaddr_storage spp_address;
0809 __u32 spp_hbinterval;
0810 __u16 spp_pathmaxrxt;
0811 __u32 spp_pathmtu;
0812 __u32 spp_sackdelay;
0813 __u32 spp_flags;
0814 __u32 spp_ipv6_flowlabel;
0815 __u8 spp_dscp;
0816 } __attribute__((packed, aligned(4)));
0817
0818
0819
0820
0821
0822
0823
0824
0825 struct sctp_authchunk {
0826 __u8 sauth_chunk;
0827 };
0828
0829
0830
0831
0832
0833
0834
0835 #ifndef __KERNEL__
0836
0837
0838
0839 enum {
0840 SCTP_AUTH_HMAC_ID_SHA1 = 1,
0841 SCTP_AUTH_HMAC_ID_SHA256 = 3,
0842 };
0843 #endif
0844
0845 struct sctp_hmacalgo {
0846 __u32 shmac_num_idents;
0847 __u16 shmac_idents[];
0848 };
0849
0850
0851
0852
0853 #define shmac_number_of_idents shmac_num_idents
0854
0855
0856
0857
0858
0859
0860
0861 struct sctp_authkey {
0862 sctp_assoc_t sca_assoc_id;
0863 __u16 sca_keynumber;
0864 __u16 sca_keylength;
0865 __u8 sca_key[];
0866 };
0867
0868
0869
0870
0871
0872
0873
0874
0875 struct sctp_authkeyid {
0876 sctp_assoc_t scact_assoc_id;
0877 __u16 scact_keynumber;
0878 };
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895 struct sctp_sack_info {
0896 sctp_assoc_t sack_assoc_id;
0897 uint32_t sack_delay;
0898 uint32_t sack_freq;
0899 };
0900
0901 struct sctp_assoc_value {
0902 sctp_assoc_t assoc_id;
0903 uint32_t assoc_value;
0904 };
0905
0906 struct sctp_stream_value {
0907 sctp_assoc_t assoc_id;
0908 uint16_t stream_id;
0909 uint16_t stream_value;
0910 };
0911
0912
0913
0914
0915
0916
0917
0918
0919
0920
0921 struct sctp_paddrinfo {
0922 sctp_assoc_t spinfo_assoc_id;
0923 struct sockaddr_storage spinfo_address;
0924 __s32 spinfo_state;
0925 __u32 spinfo_cwnd;
0926 __u32 spinfo_srtt;
0927 __u32 spinfo_rto;
0928 __u32 spinfo_mtu;
0929 } __attribute__((packed, aligned(4)));
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940 enum sctp_spinfo_state {
0941 SCTP_INACTIVE,
0942 SCTP_PF,
0943 #define SCTP_POTENTIALLY_FAILED SCTP_PF
0944 SCTP_ACTIVE,
0945 SCTP_UNCONFIRMED,
0946 SCTP_UNKNOWN = 0xffff
0947 };
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958 struct sctp_status {
0959 sctp_assoc_t sstat_assoc_id;
0960 __s32 sstat_state;
0961 __u32 sstat_rwnd;
0962 __u16 sstat_unackdata;
0963 __u16 sstat_penddata;
0964 __u16 sstat_instrms;
0965 __u16 sstat_outstrms;
0966 __u32 sstat_fragmentation_point;
0967 struct sctp_paddrinfo sstat_primary;
0968 };
0969
0970
0971
0972
0973
0974
0975
0976
0977 struct sctp_authchunks {
0978 sctp_assoc_t gauth_assoc_id;
0979 __u32 gauth_number_of_chunks;
0980 uint8_t gauth_chunks[];
0981 };
0982
0983
0984
0985
0986 #define guth_number_of_chunks gauth_number_of_chunks
0987
0988
0989 enum sctp_sstat_state {
0990 SCTP_EMPTY = 0,
0991 SCTP_CLOSED = 1,
0992 SCTP_COOKIE_WAIT = 2,
0993 SCTP_COOKIE_ECHOED = 3,
0994 SCTP_ESTABLISHED = 4,
0995 SCTP_SHUTDOWN_PENDING = 5,
0996 SCTP_SHUTDOWN_SENT = 6,
0997 SCTP_SHUTDOWN_RECEIVED = 7,
0998 SCTP_SHUTDOWN_ACK_SENT = 8,
0999 };
1000
1001
1002
1003
1004
1005
1006
1007
1008 struct sctp_assoc_ids {
1009 __u32 gaids_number_of_ids;
1010 sctp_assoc_t gaids_assoc_id[];
1011 };
1012
1013
1014
1015
1016
1017
1018
1019 struct sctp_getaddrs_old {
1020 sctp_assoc_t assoc_id;
1021 int addr_num;
1022 #ifdef __KERNEL__
1023 struct sockaddr __user *addrs;
1024 #else
1025 struct sockaddr *addrs;
1026 #endif
1027 };
1028
1029 struct sctp_getaddrs {
1030 sctp_assoc_t assoc_id;
1031 __u32 addr_num;
1032 __u8 addrs[];
1033 };
1034
1035
1036
1037
1038
1039
1040 struct sctp_assoc_stats {
1041 sctp_assoc_t sas_assoc_id;
1042
1043 struct sockaddr_storage sas_obs_rto_ipaddr;
1044 __u64 sas_maxrto;
1045 __u64 sas_isacks;
1046 __u64 sas_osacks;
1047 __u64 sas_opackets;
1048 __u64 sas_ipackets;
1049 __u64 sas_rtxchunks;
1050 __u64 sas_outofseqtsns;
1051 __u64 sas_idupchunks;
1052 __u64 sas_gapcnt;
1053 __u64 sas_ouodchunks;
1054 __u64 sas_iuodchunks;
1055 __u64 sas_oodchunks;
1056 __u64 sas_iodchunks;
1057 __u64 sas_octrlchunks;
1058 __u64 sas_ictrlchunks;
1059 };
1060
1061
1062
1063
1064
1065
1066
1067 #define SCTP_BINDX_ADD_ADDR 0x01
1068 #define SCTP_BINDX_REM_ADDR 0x02
1069
1070
1071
1072
1073 typedef struct {
1074 sctp_assoc_t associd;
1075 int sd;
1076 } sctp_peeloff_arg_t;
1077
1078 typedef struct {
1079 sctp_peeloff_arg_t p_arg;
1080 unsigned flags;
1081 } sctp_peeloff_flags_arg_t;
1082
1083
1084
1085
1086 struct sctp_paddrthlds {
1087 sctp_assoc_t spt_assoc_id;
1088 struct sockaddr_storage spt_address;
1089 __u16 spt_pathmaxrxt;
1090 __u16 spt_pathpfthld;
1091 };
1092
1093
1094 struct sctp_paddrthlds_v2 {
1095 sctp_assoc_t spt_assoc_id;
1096 struct sockaddr_storage spt_address;
1097 __u16 spt_pathmaxrxt;
1098 __u16 spt_pathpfthld;
1099 __u16 spt_pathcpthld;
1100 };
1101
1102
1103
1104
1105 struct sctp_prstatus {
1106 sctp_assoc_t sprstat_assoc_id;
1107 __u16 sprstat_sid;
1108 __u16 sprstat_policy;
1109 __u64 sprstat_abandoned_unsent;
1110 __u64 sprstat_abandoned_sent;
1111 };
1112
1113 struct sctp_default_prinfo {
1114 sctp_assoc_t pr_assoc_id;
1115 __u32 pr_value;
1116 __u16 pr_policy;
1117 };
1118
1119 struct sctp_info {
1120 __u32 sctpi_tag;
1121 __u32 sctpi_state;
1122 __u32 sctpi_rwnd;
1123 __u16 sctpi_unackdata;
1124 __u16 sctpi_penddata;
1125 __u16 sctpi_instrms;
1126 __u16 sctpi_outstrms;
1127 __u32 sctpi_fragmentation_point;
1128 __u32 sctpi_inqueue;
1129 __u32 sctpi_outqueue;
1130 __u32 sctpi_overall_error;
1131 __u32 sctpi_max_burst;
1132 __u32 sctpi_maxseg;
1133 __u32 sctpi_peer_rwnd;
1134 __u32 sctpi_peer_tag;
1135 __u8 sctpi_peer_capable;
1136 __u8 sctpi_peer_sack;
1137 __u16 __reserved1;
1138
1139
1140 __u64 sctpi_isacks;
1141 __u64 sctpi_osacks;
1142 __u64 sctpi_opackets;
1143 __u64 sctpi_ipackets;
1144 __u64 sctpi_rtxchunks;
1145 __u64 sctpi_outofseqtsns;
1146 __u64 sctpi_idupchunks;
1147 __u64 sctpi_gapcnt;
1148 __u64 sctpi_ouodchunks;
1149 __u64 sctpi_iuodchunks;
1150 __u64 sctpi_oodchunks;
1151 __u64 sctpi_iodchunks;
1152 __u64 sctpi_octrlchunks;
1153 __u64 sctpi_ictrlchunks;
1154
1155
1156 struct sockaddr_storage sctpi_p_address;
1157 __s32 sctpi_p_state;
1158 __u32 sctpi_p_cwnd;
1159 __u32 sctpi_p_srtt;
1160 __u32 sctpi_p_rto;
1161 __u32 sctpi_p_hbinterval;
1162 __u32 sctpi_p_pathmaxrxt;
1163 __u32 sctpi_p_sackdelay;
1164 __u32 sctpi_p_sackfreq;
1165 __u32 sctpi_p_ssthresh;
1166 __u32 sctpi_p_partial_bytes_acked;
1167 __u32 sctpi_p_flight_size;
1168 __u16 sctpi_p_error;
1169 __u16 __reserved2;
1170
1171
1172 __u32 sctpi_s_autoclose;
1173 __u32 sctpi_s_adaptation_ind;
1174 __u32 sctpi_s_pd_point;
1175 __u8 sctpi_s_nodelay;
1176 __u8 sctpi_s_disable_fragments;
1177 __u8 sctpi_s_v4mapped;
1178 __u8 sctpi_s_frag_interleave;
1179 __u32 sctpi_s_type;
1180 __u32 __reserved3;
1181 };
1182
1183 struct sctp_reset_streams {
1184 sctp_assoc_t srs_assoc_id;
1185 uint16_t srs_flags;
1186 uint16_t srs_number_streams;
1187 uint16_t srs_stream_list[];
1188 };
1189
1190 struct sctp_add_streams {
1191 sctp_assoc_t sas_assoc_id;
1192 uint16_t sas_instrms;
1193 uint16_t sas_outstrms;
1194 };
1195
1196 struct sctp_event {
1197 sctp_assoc_t se_assoc_id;
1198 uint16_t se_type;
1199 uint8_t se_on;
1200 };
1201
1202 struct sctp_udpencaps {
1203 sctp_assoc_t sue_assoc_id;
1204 struct sockaddr_storage sue_address;
1205 uint16_t sue_port;
1206 };
1207
1208
1209 enum sctp_sched_type {
1210 SCTP_SS_FCFS,
1211 SCTP_SS_DEFAULT = SCTP_SS_FCFS,
1212 SCTP_SS_PRIO,
1213 SCTP_SS_RR,
1214 SCTP_SS_MAX = SCTP_SS_RR
1215 };
1216
1217
1218 struct sctp_probeinterval {
1219 sctp_assoc_t spi_assoc_id;
1220 struct sockaddr_storage spi_address;
1221 __u32 spi_interval;
1222 };
1223
1224 #endif