This source file includes following definitions.
- sctp_hdr
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 #ifndef __LINUX_SCTP_H__
36 #define __LINUX_SCTP_H__
37
38 #include <linux/in.h>
39 #include <linux/in6.h>
40 #include <linux/skbuff.h>
41
42 #include <uapi/linux/sctp.h>
43
44
45 struct sctphdr {
46 __be16 source;
47 __be16 dest;
48 __be32 vtag;
49 __le32 checksum;
50 };
51
52 static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
53 {
54 return (struct sctphdr *)skb_transport_header(skb);
55 }
56
57
58 struct sctp_chunkhdr {
59 __u8 type;
60 __u8 flags;
61 __be16 length;
62 };
63
64
65
66
67
68
69
70 enum sctp_cid {
71 SCTP_CID_DATA = 0,
72 SCTP_CID_INIT = 1,
73 SCTP_CID_INIT_ACK = 2,
74 SCTP_CID_SACK = 3,
75 SCTP_CID_HEARTBEAT = 4,
76 SCTP_CID_HEARTBEAT_ACK = 5,
77 SCTP_CID_ABORT = 6,
78 SCTP_CID_SHUTDOWN = 7,
79 SCTP_CID_SHUTDOWN_ACK = 8,
80 SCTP_CID_ERROR = 9,
81 SCTP_CID_COOKIE_ECHO = 10,
82 SCTP_CID_COOKIE_ACK = 11,
83 SCTP_CID_ECN_ECNE = 12,
84 SCTP_CID_ECN_CWR = 13,
85 SCTP_CID_SHUTDOWN_COMPLETE = 14,
86
87
88 SCTP_CID_AUTH = 0x0F,
89
90
91 SCTP_CID_I_DATA = 0x40,
92
93
94 SCTP_CID_FWD_TSN = 0xC0,
95
96
97 SCTP_CID_ASCONF = 0xC1,
98 SCTP_CID_I_FWD_TSN = 0xC2,
99 SCTP_CID_ASCONF_ACK = 0x80,
100 SCTP_CID_RECONF = 0x82,
101 };
102
103
104
105
106
107
108
109 enum {
110 SCTP_CID_ACTION_DISCARD = 0x00,
111 SCTP_CID_ACTION_DISCARD_ERR = 0x40,
112 SCTP_CID_ACTION_SKIP = 0x80,
113 SCTP_CID_ACTION_SKIP_ERR = 0xc0,
114 };
115
116 enum { SCTP_CID_ACTION_MASK = 0xc0, };
117
118
119
120
121
122
123
124 enum { SCTP_CHUNK_FLAG_T = 0x01 };
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 #define sctp_test_T_bit(c) ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T)
149
150
151
152
153
154 struct sctp_paramhdr {
155 __be16 type;
156 __be16 length;
157 };
158
159 enum sctp_param {
160
161
162 SCTP_PARAM_HEARTBEAT_INFO = cpu_to_be16(1),
163
164 SCTP_PARAM_IPV4_ADDRESS = cpu_to_be16(5),
165 SCTP_PARAM_IPV6_ADDRESS = cpu_to_be16(6),
166 SCTP_PARAM_STATE_COOKIE = cpu_to_be16(7),
167 SCTP_PARAM_UNRECOGNIZED_PARAMETERS = cpu_to_be16(8),
168 SCTP_PARAM_COOKIE_PRESERVATIVE = cpu_to_be16(9),
169 SCTP_PARAM_HOST_NAME_ADDRESS = cpu_to_be16(11),
170 SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = cpu_to_be16(12),
171 SCTP_PARAM_ECN_CAPABLE = cpu_to_be16(0x8000),
172
173
174 SCTP_PARAM_RANDOM = cpu_to_be16(0x8002),
175 SCTP_PARAM_CHUNKS = cpu_to_be16(0x8003),
176 SCTP_PARAM_HMAC_ALGO = cpu_to_be16(0x8004),
177
178
179 SCTP_PARAM_SUPPORTED_EXT = cpu_to_be16(0x8008),
180
181
182 SCTP_PARAM_FWD_TSN_SUPPORT = cpu_to_be16(0xc000),
183
184
185 SCTP_PARAM_ADD_IP = cpu_to_be16(0xc001),
186 SCTP_PARAM_DEL_IP = cpu_to_be16(0xc002),
187 SCTP_PARAM_ERR_CAUSE = cpu_to_be16(0xc003),
188 SCTP_PARAM_SET_PRIMARY = cpu_to_be16(0xc004),
189 SCTP_PARAM_SUCCESS_REPORT = cpu_to_be16(0xc005),
190 SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006),
191
192
193 SCTP_PARAM_RESET_OUT_REQUEST = cpu_to_be16(0x000d),
194 SCTP_PARAM_RESET_IN_REQUEST = cpu_to_be16(0x000e),
195 SCTP_PARAM_RESET_TSN_REQUEST = cpu_to_be16(0x000f),
196 SCTP_PARAM_RESET_RESPONSE = cpu_to_be16(0x0010),
197 SCTP_PARAM_RESET_ADD_OUT_STREAMS = cpu_to_be16(0x0011),
198 SCTP_PARAM_RESET_ADD_IN_STREAMS = cpu_to_be16(0x0012),
199 };
200
201
202
203
204
205
206
207
208 enum {
209 SCTP_PARAM_ACTION_DISCARD = cpu_to_be16(0x0000),
210 SCTP_PARAM_ACTION_DISCARD_ERR = cpu_to_be16(0x4000),
211 SCTP_PARAM_ACTION_SKIP = cpu_to_be16(0x8000),
212 SCTP_PARAM_ACTION_SKIP_ERR = cpu_to_be16(0xc000),
213 };
214
215 enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), };
216
217
218
219 struct sctp_datahdr {
220 __be32 tsn;
221 __be16 stream;
222 __be16 ssn;
223 __u32 ppid;
224 __u8 payload[0];
225 };
226
227 struct sctp_data_chunk {
228 struct sctp_chunkhdr chunk_hdr;
229 struct sctp_datahdr data_hdr;
230 };
231
232 struct sctp_idatahdr {
233 __be32 tsn;
234 __be16 stream;
235 __be16 reserved;
236 __be32 mid;
237 union {
238 __u32 ppid;
239 __be32 fsn;
240 };
241 __u8 payload[0];
242 };
243
244 struct sctp_idata_chunk {
245 struct sctp_chunkhdr chunk_hdr;
246 struct sctp_idatahdr data_hdr;
247 };
248
249
250 enum {
251 SCTP_DATA_MIDDLE_FRAG = 0x00,
252 SCTP_DATA_LAST_FRAG = 0x01,
253 SCTP_DATA_FIRST_FRAG = 0x02,
254 SCTP_DATA_NOT_FRAG = 0x03,
255 SCTP_DATA_UNORDERED = 0x04,
256 SCTP_DATA_SACK_IMM = 0x08,
257 };
258 enum { SCTP_DATA_FRAG_MASK = 0x03, };
259
260
261
262
263
264
265
266 struct sctp_inithdr {
267 __be32 init_tag;
268 __be32 a_rwnd;
269 __be16 num_outbound_streams;
270 __be16 num_inbound_streams;
271 __be32 initial_tsn;
272 __u8 params[0];
273 };
274
275 struct sctp_init_chunk {
276 struct sctp_chunkhdr chunk_hdr;
277 struct sctp_inithdr init_hdr;
278 };
279
280
281
282 struct sctp_ipv4addr_param {
283 struct sctp_paramhdr param_hdr;
284 struct in_addr addr;
285 };
286
287
288 struct sctp_ipv6addr_param {
289 struct sctp_paramhdr param_hdr;
290 struct in6_addr addr;
291 };
292
293
294 struct sctp_cookie_preserve_param {
295 struct sctp_paramhdr param_hdr;
296 __be32 lifespan_increment;
297 };
298
299
300 struct sctp_hostname_param {
301 struct sctp_paramhdr param_hdr;
302 uint8_t hostname[0];
303 };
304
305
306 struct sctp_supported_addrs_param {
307 struct sctp_paramhdr param_hdr;
308 __be16 types[0];
309 };
310
311
312 struct sctp_adaptation_ind_param {
313 struct sctp_paramhdr param_hdr;
314 __be32 adaptation_ind;
315 };
316
317
318 struct sctp_supported_ext_param {
319 struct sctp_paramhdr param_hdr;
320 __u8 chunks[0];
321 };
322
323
324 struct sctp_random_param {
325 struct sctp_paramhdr param_hdr;
326 __u8 random_val[0];
327 };
328
329
330 struct sctp_chunks_param {
331 struct sctp_paramhdr param_hdr;
332 __u8 chunks[0];
333 };
334
335
336 struct sctp_hmac_algo_param {
337 struct sctp_paramhdr param_hdr;
338 __be16 hmac_ids[0];
339 };
340
341
342
343
344
345 struct sctp_initack_chunk {
346 struct sctp_chunkhdr chunk_hdr;
347 struct sctp_inithdr init_hdr;
348 };
349
350
351 struct sctp_cookie_param {
352 struct sctp_paramhdr p;
353 __u8 body[0];
354 };
355
356
357 struct sctp_unrecognized_param {
358 struct sctp_paramhdr param_hdr;
359 struct sctp_paramhdr unrecognized;
360 };
361
362
363
364
365
366
367
368
369
370
371
372 struct sctp_gap_ack_block {
373 __be16 start;
374 __be16 end;
375 };
376
377 union sctp_sack_variable {
378 struct sctp_gap_ack_block gab;
379 __be32 dup;
380 };
381
382 struct sctp_sackhdr {
383 __be32 cum_tsn_ack;
384 __be32 a_rwnd;
385 __be16 num_gap_ack_blocks;
386 __be16 num_dup_tsns;
387 union sctp_sack_variable variable[0];
388 };
389
390 struct sctp_sack_chunk {
391 struct sctp_chunkhdr chunk_hdr;
392 struct sctp_sackhdr sack_hdr;
393 };
394
395
396
397
398
399
400
401
402
403 struct sctp_heartbeathdr {
404 struct sctp_paramhdr info;
405 };
406
407 struct sctp_heartbeat_chunk {
408 struct sctp_chunkhdr chunk_hdr;
409 struct sctp_heartbeathdr hb_hdr;
410 };
411
412
413
414
415
416
417 struct sctp_abort_chunk {
418 struct sctp_chunkhdr uh;
419 };
420
421
422
423
424
425 struct sctp_shutdownhdr {
426 __be32 cum_tsn_ack;
427 };
428
429 struct sctp_shutdown_chunk {
430 struct sctp_chunkhdr chunk_hdr;
431 struct sctp_shutdownhdr shutdown_hdr;
432 };
433
434
435
436 struct sctp_errhdr {
437 __be16 cause;
438 __be16 length;
439 __u8 variable[0];
440 };
441
442 struct sctp_operr_chunk {
443 struct sctp_chunkhdr chunk_hdr;
444 struct sctp_errhdr err_hdr;
445 };
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466 enum sctp_error {
467
468 SCTP_ERROR_NO_ERROR = cpu_to_be16(0x00),
469 SCTP_ERROR_INV_STRM = cpu_to_be16(0x01),
470 SCTP_ERROR_MISS_PARAM = cpu_to_be16(0x02),
471 SCTP_ERROR_STALE_COOKIE = cpu_to_be16(0x03),
472 SCTP_ERROR_NO_RESOURCE = cpu_to_be16(0x04),
473 SCTP_ERROR_DNS_FAILED = cpu_to_be16(0x05),
474 SCTP_ERROR_UNKNOWN_CHUNK = cpu_to_be16(0x06),
475 SCTP_ERROR_INV_PARAM = cpu_to_be16(0x07),
476 SCTP_ERROR_UNKNOWN_PARAM = cpu_to_be16(0x08),
477 SCTP_ERROR_NO_DATA = cpu_to_be16(0x09),
478 SCTP_ERROR_COOKIE_IN_SHUTDOWN = cpu_to_be16(0x0a),
479
480
481
482
483
484
485
486
487 SCTP_ERROR_RESTART = cpu_to_be16(0x0b),
488 SCTP_ERROR_USER_ABORT = cpu_to_be16(0x0c),
489 SCTP_ERROR_PROTO_VIOLATION = cpu_to_be16(0x0d),
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504 SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x00A0),
505 SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x00A1),
506 SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x00A2),
507 SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x00A3),
508 SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x00A4),
509
510
511
512
513
514
515
516
517
518
519
520 SCTP_ERROR_UNSUP_HMAC = cpu_to_be16(0x0105)
521 };
522
523
524
525
526
527
528 struct sctp_ecnehdr {
529 __be32 lowest_tsn;
530 };
531
532 struct sctp_ecne_chunk {
533 struct sctp_chunkhdr chunk_hdr;
534 struct sctp_ecnehdr ence_hdr;
535 };
536
537
538
539
540 struct sctp_cwrhdr {
541 __be32 lowest_tsn;
542 };
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590 struct sctp_fwdtsn_skip {
591 __be16 stream;
592 __be16 ssn;
593 };
594
595 struct sctp_fwdtsn_hdr {
596 __be32 new_cum_tsn;
597 struct sctp_fwdtsn_skip skip[0];
598 };
599
600 struct sctp_fwdtsn_chunk {
601 struct sctp_chunkhdr chunk_hdr;
602 struct sctp_fwdtsn_hdr fwdtsn_hdr;
603 };
604
605 struct sctp_ifwdtsn_skip {
606 __be16 stream;
607 __u8 reserved;
608 __u8 flags;
609 __be32 mid;
610 };
611
612 struct sctp_ifwdtsn_hdr {
613 __be32 new_cum_tsn;
614 struct sctp_ifwdtsn_skip skip[0];
615 };
616
617 struct sctp_ifwdtsn_chunk {
618 struct sctp_chunkhdr chunk_hdr;
619 struct sctp_ifwdtsn_hdr fwdtsn_hdr;
620 };
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654 struct sctp_addip_param {
655 struct sctp_paramhdr param_hdr;
656 __be32 crr_id;
657 };
658
659 struct sctp_addiphdr {
660 __be32 serial;
661 __u8 params[0];
662 };
663
664 struct sctp_addip_chunk {
665 struct sctp_chunkhdr chunk_hdr;
666 struct sctp_addiphdr addip_hdr;
667 };
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718 struct sctp_authhdr {
719 __be16 shkey_id;
720 __be16 hmac_id;
721 __u8 hmac[0];
722 };
723
724 struct sctp_auth_chunk {
725 struct sctp_chunkhdr chunk_hdr;
726 struct sctp_authhdr auth_hdr;
727 };
728
729 struct sctp_infox {
730 struct sctp_info *sctpinfo;
731 struct sctp_association *asoc;
732 };
733
734 struct sctp_reconf_chunk {
735 struct sctp_chunkhdr chunk_hdr;
736 __u8 params[0];
737 };
738
739 struct sctp_strreset_outreq {
740 struct sctp_paramhdr param_hdr;
741 __be32 request_seq;
742 __be32 response_seq;
743 __be32 send_reset_at_tsn;
744 __be16 list_of_streams[0];
745 };
746
747 struct sctp_strreset_inreq {
748 struct sctp_paramhdr param_hdr;
749 __be32 request_seq;
750 __be16 list_of_streams[0];
751 };
752
753 struct sctp_strreset_tsnreq {
754 struct sctp_paramhdr param_hdr;
755 __be32 request_seq;
756 };
757
758 struct sctp_strreset_addstrm {
759 struct sctp_paramhdr param_hdr;
760 __be32 request_seq;
761 __be16 number_of_streams;
762 __be16 reserved;
763 };
764
765 enum {
766 SCTP_STRRESET_NOTHING_TO_DO = 0x00,
767 SCTP_STRRESET_PERFORMED = 0x01,
768 SCTP_STRRESET_DENIED = 0x02,
769 SCTP_STRRESET_ERR_WRONG_SSN = 0x03,
770 SCTP_STRRESET_ERR_IN_PROGRESS = 0x04,
771 SCTP_STRRESET_ERR_BAD_SEQNO = 0x05,
772 SCTP_STRRESET_IN_PROGRESS = 0x06,
773 };
774
775 struct sctp_strreset_resp {
776 struct sctp_paramhdr param_hdr;
777 __be32 response_seq;
778 __be32 result;
779 };
780
781 struct sctp_strreset_resptsn {
782 struct sctp_paramhdr param_hdr;
783 __be32 response_seq;
784 __be32 result;
785 __be32 senders_next_tsn;
786 __be32 receivers_next_tsn;
787 };
788
789 enum {
790 SCTP_DSCP_SET_MASK = 0x1,
791 SCTP_DSCP_VAL_MASK = 0xfc,
792 SCTP_FLOWLABEL_SET_MASK = 0x100000,
793 SCTP_FLOWLABEL_VAL_MASK = 0xfffff
794 };
795
796 #endif