source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/linux/sctp.h

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 18.9 KB
RevLine 
[2]1/* SCTP kernel reference Implementation
2 * (C) Copyright IBM Corp. 2001, 2004
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 * Copyright (c) 2001 Intel Corp.
6 * Copyright (c) 2001 Nokia, Inc.
7 * Copyright (c) 2001 La Monte H.P. Yarroll
8 *
9 * This file is part of the SCTP kernel reference Implementation
10 *
11 * Various protocol defined structures.
12 *
13 * The SCTP reference implementation is free software;
14 * you can redistribute it and/or modify it under the terms of
15 * the GNU General Public License as published by
16 * the Free Software Foundation; either version 2, or (at your option)
17 * any later version.
18 *
19 * The SCTP reference implementation is distributed in the hope that it
20 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
21 *                 ************************
22 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 * See the GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with GNU CC; see the file COPYING.  If not, write to
27 * the Free Software Foundation, 59 Temple Place - Suite 330,
28 * Boston, MA 02111-1307, USA.
29 *
30 * Please send any bug reports or fixes you make to the
31 * email address(es):
32 *    lksctp developers <lksctp-developerst@lists.sourceforge.net>
33 *
34 * Or submit a bug report through the following website:
35 *    http://www.sf.net/projects/lksctp
36 *
37 * Written or modified by:
38 *    La Monte H.P. Yarroll <piggy@acm.org>
39 *    Karl Knutson <karl@athena.chicago.il.us>
40 *    Jon Grimm <jgrimm@us.ibm.com>
41 *    Xingang Guo <xingang.guo@intel.com>
42 *    randall@sctp.chicago.il.us
43 *    kmorneau@cisco.com
44 *    qxie1@email.mot.com
45 *    Sridhar Samudrala <sri@us.ibm.com>
46 *    Kevin Gao <kevin.gao@intel.com>
47 *
48 * Any bugs reported given to us we will try to fix... any fixes shared will
49 * be incorporated into the next SCTP release.
50 */
51#ifndef __LINUX_SCTP_H__
52#define __LINUX_SCTP_H__
53
54#include <asm/types.h>
55
56#include <linux/in.h>           /* We need in_addr.  */
57#include <linux/in6.h>          /* We need in6_addr.  */
58#include <asm/byteorder.h>
59
60
61/* Section 3.1.  SCTP Common Header Format */
62typedef struct sctphdr {
63        __u16 source;
64        __u16 dest;
65        __u32 vtag;
66        __u32 checksum;
67} __attribute__((packed)) sctp_sctphdr_t;
68
69/* Section 3.2.  Chunk Field Descriptions. */
70typedef struct sctp_chunkhdr {
71        __u8 type;
72        __u8 flags;
73        __u16 length;
74} __attribute__((packed)) sctp_chunkhdr_t;
75
76
77/* Section 3.2.  Chunk Type Values.
78 * [Chunk Type] identifies the type of information contained in the Chunk
79 * Value field. It takes a value from 0 to 254. The value of 255 is
80 * reserved for future use as an extension field.
81 */
82typedef enum {
83        SCTP_CID_DATA                   = 0,
84        SCTP_CID_INIT                   = 1,
85        SCTP_CID_INIT_ACK               = 2,
86        SCTP_CID_SACK                   = 3,
87        SCTP_CID_HEARTBEAT              = 4,
88        SCTP_CID_HEARTBEAT_ACK          = 5,
89        SCTP_CID_ABORT                  = 6,
90        SCTP_CID_SHUTDOWN               = 7,
91        SCTP_CID_SHUTDOWN_ACK           = 8,
92        SCTP_CID_ERROR                  = 9,
93        SCTP_CID_COOKIE_ECHO            = 10,
94        SCTP_CID_COOKIE_ACK             = 11,
95        SCTP_CID_ECN_ECNE               = 12,
96        SCTP_CID_ECN_CWR                = 13,
97        SCTP_CID_SHUTDOWN_COMPLETE      = 14,
98
99        /* PR-SCTP Sec 3.2 */
100        SCTP_CID_FWD_TSN                = 0xC0,
101
102        /* Use hex, as defined in ADDIP sec. 3.1 */
103        SCTP_CID_ASCONF                 = 0xC1,
104        SCTP_CID_ASCONF_ACK             = 0x80,
105} sctp_cid_t; /* enum */
106
107
108/* Section 3.2
109 *  Chunk Types are encoded such that the highest-order two bits specify
110 *  the action that must be taken if the processing endpoint does not
111 *  recognize the Chunk Type.
112 */
113typedef enum {
114        SCTP_CID_ACTION_DISCARD     = 0x00,
115        SCTP_CID_ACTION_DISCARD_ERR = 0x40,
116        SCTP_CID_ACTION_SKIP        = 0x80,
117        SCTP_CID_ACTION_SKIP_ERR    = 0xc0,
118} sctp_cid_action_t;
119
120enum { SCTP_CID_ACTION_MASK = 0xc0, };
121
122/* This flag is used in Chunk Flags for ABORT and SHUTDOWN COMPLETE.
123 *
124 * 3.3.7 Abort Association (ABORT) (6):
125 *    The T bit is set to 0 if the sender had a TCB that it destroyed.
126 *    If the sender did not have a TCB it should set this bit to 1.
127 */
128enum { SCTP_CHUNK_FLAG_T = 0x01 };
129
130/*
131 *  Set the T bit
132 *
133 *      0                   1                   2                   3
134 *      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
135 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
136 *     |   Type = 14   |Reserved     |T|      Length = 4               |
137 *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
138 *
139 * Chunk Flags: 8 bits
140 *
141 *   Reserved:  7 bits
142 *     Set to 0 on transmit and ignored on receipt.
143 *
144 *   T bit:  1 bit
145 *     The T bit is set to 0 if the sender had a TCB that it destroyed. If
146 *     the sender did NOT have a TCB it should set this bit to 1.
147 *
148 * Note: Special rules apply to this chunk for verification, please
149 * see Section 8.5.1 for details.
150 */
151
152#define sctp_test_T_bit(c)    ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T)
153
154/* RFC 2960
155 * Section 3.2.1 Optional/Variable-length Parmaeter Format.
156 */
157
158typedef struct sctp_paramhdr {
159        __u16 type;
160        __u16 length;
161} __attribute__((packed)) sctp_paramhdr_t;
162
163typedef enum {
164
165        /* RFC 2960 Section 3.3.5 */
166        SCTP_PARAM_HEARTBEAT_INFO               = __constant_htons(1),
167        /* RFC 2960 Section 3.3.2.1 */
168        SCTP_PARAM_IPV4_ADDRESS                 = __constant_htons(5),
169        SCTP_PARAM_IPV6_ADDRESS                 = __constant_htons(6),
170        SCTP_PARAM_STATE_COOKIE                 = __constant_htons(7),
171        SCTP_PARAM_UNRECOGNIZED_PARAMETERS      = __constant_htons(8),
172        SCTP_PARAM_COOKIE_PRESERVATIVE          = __constant_htons(9),
173        SCTP_PARAM_HOST_NAME_ADDRESS            = __constant_htons(11),
174        SCTP_PARAM_SUPPORTED_ADDRESS_TYPES      = __constant_htons(12),
175        SCTP_PARAM_ECN_CAPABLE                  = __constant_htons(0x8000),
176
177        /* PR-SCTP Sec 3.1 */
178        SCTP_PARAM_FWD_TSN_SUPPORT      = __constant_htons(0xc000),
179
180        /* Add-IP Extension. Section 3.2 */
181        SCTP_PARAM_ADD_IP               = __constant_htons(0xc001),
182        SCTP_PARAM_DEL_IP               = __constant_htons(0xc002),
183        SCTP_PARAM_ERR_CAUSE            = __constant_htons(0xc003),
184        SCTP_PARAM_SET_PRIMARY          = __constant_htons(0xc004),
185        SCTP_PARAM_SUCCESS_REPORT       = __constant_htons(0xc005),
186        SCTP_PARAM_ADAPTION_LAYER_IND   = __constant_htons(0xc006),
187
188} sctp_param_t; /* enum */
189
190
191/* RFC 2960 Section 3.2.1
192 *  The Parameter Types are encoded such that the highest-order two bits
193 *  specify the action that must be taken if the processing endpoint does
194 *  not recognize the Parameter Type.
195 *
196 */
197typedef enum {
198        SCTP_PARAM_ACTION_DISCARD     = __constant_htons(0x0000),
199        SCTP_PARAM_ACTION_DISCARD_ERR = __constant_htons(0x4000),
200        SCTP_PARAM_ACTION_SKIP        = __constant_htons(0x8000),
201        SCTP_PARAM_ACTION_SKIP_ERR    = __constant_htons(0xc000),
202} sctp_param_action_t;
203
204enum { SCTP_PARAM_ACTION_MASK = __constant_htons(0xc000), };
205
206/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
207
208typedef struct sctp_datahdr {
209        __u32 tsn;
210        __u16 stream;
211        __u16 ssn;
212        __u32 ppid;
213        __u8  payload[0];
214} __attribute__((packed)) sctp_datahdr_t;
215
216typedef struct sctp_data_chunk {
217        sctp_chunkhdr_t chunk_hdr;
218        sctp_datahdr_t  data_hdr;
219} __attribute__((packed)) sctp_data_chunk_t;
220
221/* DATA Chuck Specific Flags */
222enum {
223        SCTP_DATA_MIDDLE_FRAG   = 0x00,
224        SCTP_DATA_LAST_FRAG     = 0x01,
225        SCTP_DATA_FIRST_FRAG    = 0x02,
226        SCTP_DATA_NOT_FRAG      = 0x03,
227        SCTP_DATA_UNORDERED     = 0x04,
228};
229enum { SCTP_DATA_FRAG_MASK = 0x03, };
230
231
232/* RFC 2960 Section 3.3.2 Initiation (INIT) (1)
233 *
234 *  This chunk is used to initiate a SCTP association between two
235 *  endpoints.
236 */
237typedef struct sctp_inithdr {
238        __u32 init_tag;
239        __u32 a_rwnd;
240        __u16 num_outbound_streams;
241        __u16 num_inbound_streams;
242        __u32 initial_tsn;
243        __u8  params[0];
244} __attribute__((packed)) sctp_inithdr_t;
245
246typedef struct sctp_init_chunk {
247        sctp_chunkhdr_t chunk_hdr;
248        sctp_inithdr_t init_hdr;
249} __attribute__((packed)) sctp_init_chunk_t;
250
251
252/* Section 3.3.2.1. IPv4 Address Parameter (5) */
253typedef struct sctp_ipv4addr_param {
254        sctp_paramhdr_t param_hdr;
255        struct in_addr  addr;
256} __attribute__((packed)) sctp_ipv4addr_param_t;
257
258/* Section 3.3.2.1. IPv6 Address Parameter (6) */
259typedef struct sctp_ipv6addr_param {
260        sctp_paramhdr_t param_hdr;
261        struct in6_addr addr;
262} __attribute__((packed)) sctp_ipv6addr_param_t;
263
264/* Section 3.3.2.1 Cookie Preservative (9) */
265typedef struct sctp_cookie_preserve_param {
266        sctp_paramhdr_t param_hdr;
267        uint32_t        lifespan_increment;
268} __attribute__((packed)) sctp_cookie_preserve_param_t;
269
270/* Section 3.3.2.1 Host Name Address (11) */
271typedef struct sctp_hostname_param {
272        sctp_paramhdr_t param_hdr;
273        uint8_t hostname[0];
274} __attribute__((packed)) sctp_hostname_param_t;
275
276/* Section 3.3.2.1 Supported Address Types (12) */
277typedef struct sctp_supported_addrs_param {
278        sctp_paramhdr_t param_hdr;
279        uint16_t types[0];
280} __attribute__((packed)) sctp_supported_addrs_param_t;
281
282/* Appendix A. ECN Capable (32768) */
283typedef struct sctp_ecn_capable_param {
284        sctp_paramhdr_t param_hdr;
285} __attribute__((packed)) sctp_ecn_capable_param_t;
286
287/* ADDIP Section 3.2.6 Adaption Layer Indication */
288typedef struct sctp_adaption_ind_param {
289        struct sctp_paramhdr param_hdr;
290        __u32 adaption_ind;
291} __attribute__((packed)) sctp_adaption_ind_param_t;
292
293/* RFC 2960.  Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
294 *   The INIT ACK chunk is used to acknowledge the initiation of an SCTP
295 *   association.
296 */
297typedef sctp_init_chunk_t sctp_initack_chunk_t;
298
299/* Section 3.3.3.1 State Cookie (7) */
300typedef struct sctp_cookie_param {
301        sctp_paramhdr_t p;
302        __u8 body[0];
303} __attribute__((packed)) sctp_cookie_param_t;
304
305/* Section 3.3.3.1 Unrecognized Parameters (8) */
306typedef struct sctp_unrecognized_param {
307        sctp_paramhdr_t param_hdr;
308        sctp_paramhdr_t unrecognized;
309} __attribute__((packed)) sctp_unrecognized_param_t;
310
311
312
313/*
314 * 3.3.4 Selective Acknowledgement (SACK) (3):
315 *
316 *  This chunk is sent to the peer endpoint to acknowledge received DATA
317 *  chunks and to inform the peer endpoint of gaps in the received
318 *  subsequences of DATA chunks as represented by their TSNs.
319 */
320
321typedef struct sctp_gap_ack_block {
322        __u16 start;
323        __u16 end;
324} __attribute__((packed)) sctp_gap_ack_block_t;
325
326typedef uint32_t sctp_dup_tsn_t;
327
328typedef union {
329        sctp_gap_ack_block_t    gab;
330        sctp_dup_tsn_t          dup;
331} sctp_sack_variable_t;
332
333typedef struct sctp_sackhdr {
334        __u32 cum_tsn_ack;
335        __u32 a_rwnd;
336        __u16 num_gap_ack_blocks;
337        __u16 num_dup_tsns;
338        sctp_sack_variable_t variable[0];
339} __attribute__((packed)) sctp_sackhdr_t;
340
341typedef struct sctp_sack_chunk {
342        sctp_chunkhdr_t chunk_hdr;
343        sctp_sackhdr_t sack_hdr;
344} __attribute__((packed)) sctp_sack_chunk_t;
345
346
347/* RFC 2960.  Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
348 *
349 *  An endpoint should send this chunk to its peer endpoint to probe the
350 *  reachability of a particular destination transport address defined in
351 *  the present association.
352 */
353
354typedef struct sctp_heartbeathdr {
355        sctp_paramhdr_t info;
356} __attribute__((packed)) sctp_heartbeathdr_t;
357
358typedef struct sctp_heartbeat_chunk {
359        sctp_chunkhdr_t chunk_hdr;
360        sctp_heartbeathdr_t hb_hdr;
361} __attribute__((packed)) sctp_heartbeat_chunk_t;
362
363
364/* For the abort and shutdown ACK we must carry the init tag in the
365 * common header. Just the common header is all that is needed with a
366 * chunk descriptor.
367 */
368typedef struct sctp_abort_chunk {
369        sctp_chunkhdr_t uh;
370} __attribute__((packed)) sctp_abort_chunk_t;
371
372
373/* For the graceful shutdown we must carry the tag (in common header)
374 * and the highest consecutive acking value.
375 */
376typedef struct sctp_shutdownhdr {
377        __u32 cum_tsn_ack;
378} __attribute__((packed)) sctp_shutdownhdr_t;
379
380struct sctp_shutdown_chunk_t {
381        sctp_chunkhdr_t    chunk_hdr;
382        sctp_shutdownhdr_t shutdown_hdr;
383} __attribute__ ((packed));
384
385/* RFC 2960.  Section 3.3.10 Operation Error (ERROR) (9) */
386
387typedef struct sctp_errhdr {
388        __u16 cause;
389        __u16 length;
390        __u8  variable[0];
391} __attribute__((packed)) sctp_errhdr_t;
392
393typedef struct sctp_operr_chunk {
394        sctp_chunkhdr_t chunk_hdr;
395        sctp_errhdr_t   err_hdr;
396} __attribute__((packed)) sctp_operr_chunk_t;
397
398/* RFC 2960 3.3.10 - Operation Error
399 *
400 * Cause Code: 16 bits (unsigned integer)
401 *
402 *     Defines the type of error conditions being reported.
403 *    Cause Code
404 *     Value           Cause Code
405 *     ---------      ----------------
406 *      1              Invalid Stream Identifier
407 *      2              Missing Mandatory Parameter
408 *      3              Stale Cookie Error
409 *      4              Out of Resource
410 *      5              Unresolvable Address
411 *      6              Unrecognized Chunk Type
412 *      7              Invalid Mandatory Parameter
413 *      8              Unrecognized Parameters
414 *      9              No User Data
415 *     10              Cookie Received While Shutting Down
416 */
417typedef enum {
418
419        SCTP_ERROR_NO_ERROR        = __constant_htons(0x00),
420        SCTP_ERROR_INV_STRM        = __constant_htons(0x01),
421        SCTP_ERROR_MISS_PARAM      = __constant_htons(0x02),
422        SCTP_ERROR_STALE_COOKIE    = __constant_htons(0x03),
423        SCTP_ERROR_NO_RESOURCE     = __constant_htons(0x04),
424        SCTP_ERROR_DNS_FAILED      = __constant_htons(0x05),
425        SCTP_ERROR_UNKNOWN_CHUNK   = __constant_htons(0x06),
426        SCTP_ERROR_INV_PARAM       = __constant_htons(0x07),
427        SCTP_ERROR_UNKNOWN_PARAM   = __constant_htons(0x08),
428        SCTP_ERROR_NO_DATA         = __constant_htons(0x09),
429        SCTP_ERROR_COOKIE_IN_SHUTDOWN = __constant_htons(0x0a),
430
431
432        /* SCTP Implementation Guide:
433         *  11  Restart of an association with new addresses
434         *  12  User Initiated Abort
435         *  13  Protocol Violation
436         */
437
438        SCTP_ERROR_RESTART         = __constant_htons(0x0b),
439        SCTP_ERROR_USER_ABORT      = __constant_htons(0x0c),
440        SCTP_ERROR_PROTO_VIOLATION = __constant_htons(0x0d),
441
442        /* ADDIP Section 3.3  New Error Causes
443         *
444         * Four new Error Causes are added to the SCTP Operational Errors,
445         * primarily for use in the ASCONF-ACK chunk.
446         *
447         * Value          Cause Code
448         * ---------      ----------------
449         * 0x0100          Request to Delete Last Remaining IP Address.
450         * 0x0101          Operation Refused Due to Resource Shortage.
451         * 0x0102          Request to Delete Source IP Address.
452         * 0x0103          Association Aborted due to illegal ASCONF-ACK
453         * 0x0104          Request refused - no authorization.
454         */
455        SCTP_ERROR_DEL_LAST_IP  = __constant_htons(0x0100),
456        SCTP_ERROR_RSRC_LOW     = __constant_htons(0x0101),
457        SCTP_ERROR_DEL_SRC_IP   = __constant_htons(0x0102),
458        SCTP_ERROR_ASCONF_ACK   = __constant_htons(0x0103),
459        SCTP_ERROR_REQ_REFUSED  = __constant_htons(0x0104)
460} sctp_error_t;
461
462
463
464/* RFC 2960.  Appendix A.  Explicit Congestion Notification.
465 *   Explicit Congestion Notification Echo (ECNE) (12)
466 */
467typedef struct sctp_ecnehdr {
468        __u32 lowest_tsn;
469} sctp_ecnehdr_t;
470
471typedef struct sctp_ecne_chunk {
472        sctp_chunkhdr_t chunk_hdr;
473        sctp_ecnehdr_t ence_hdr;
474} __attribute__((packed)) sctp_ecne_chunk_t;
475
476/* RFC 2960.  Appendix A.  Explicit Congestion Notification.
477 *   Congestion Window Reduced (CWR) (13)
478 */
479typedef struct sctp_cwrhdr {
480        __u32 lowest_tsn;
481} sctp_cwrhdr_t;
482
483typedef struct sctp_cwr_chunk {
484        sctp_chunkhdr_t chunk_hdr;
485        sctp_cwrhdr_t cwr_hdr;
486} __attribute__((packed)) sctp_cwr_chunk_t;
487
488/* PR-SCTP
489 * 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
490 *
491 * Forward Cumulative TSN chunk has the following format:
492 *
493 *        0                   1                   2                   3
494 *        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
495 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
496 *      |   Type = 192  |  Flags = 0x00 |        Length = Variable      |
497 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
498 *      |                      New Cumulative TSN                       |
499 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
500 *      |         Stream-1              |       Stream Sequence-1       |
501 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
502 *      \                                                               /
503 *      /                                                               \
504 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
505 *      |         Stream-N              |       Stream Sequence-N       |
506 *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
507 *
508 *      Chunk Flags:
509 *
510 *        Set to all zeros on transmit and ignored on receipt.
511 *
512 *      New Cumulative TSN: 32 bit u_int
513 *
514 *       This indicates the new cumulative TSN to the data receiver. Upon
515 *       the reception of this value, the data receiver MUST consider
516 *       any missing TSNs earlier than or equal to this value as received
517 *       and stop reporting them as gaps in any subsequent SACKs.
518 *
519 *      Stream-N: 16 bit u_int
520 *
521 *       This field holds a stream number that was skipped by this
522 *       FWD-TSN.
523 *
524 *      Stream Sequence-N: 16 bit u_int
525 *       This field holds the sequence number associated with the stream
526 *       that was skipped. The stream sequence field holds the largest stream
527 *       sequence number in this stream being skipped.  The receiver of
528 *       the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
529 *       to enable delivery of any stranded TSN's that remain on the stream
530 *       re-ordering queues. This field MUST NOT report TSN's corresponding
531 *       to DATA chunk that are marked as unordered. For ordered DATA
532 *       chunks this field MUST be filled in.
533 */
534struct sctp_fwdtsn_skip {
535        __u16 stream;
536        __u16 ssn;
537} __attribute__((packed));
538
539struct sctp_fwdtsn_hdr {
540        __u32 new_cum_tsn;
541        struct sctp_fwdtsn_skip skip[0];
542} __attribute((packed));
543
544struct sctp_fwdtsn_chunk {
545        struct sctp_chunkhdr chunk_hdr;
546        struct sctp_fwdtsn_hdr fwdtsn_hdr;
547} __attribute((packed));
548
549
550/* ADDIP
551 * Section 3.1.1 Address Configuration Change Chunk (ASCONF)
552 *
553 *      Serial Number: 32 bits (unsigned integer)
554 *      This value represents a Serial Number for the ASCONF Chunk. The
555 *      valid range of Serial Number is from 0 to 2^32-1.
556 *      Serial Numbers wrap back to 0 after reaching 2^32 -1.
557 *
558 *      Address Parameter: 8 or 20 bytes (depending on type)
559 *      The address is an address of the sender of the ASCONF chunk,
560 *      the address MUST be considered part of the association by the
561 *      peer endpoint. This field may be used by the receiver of the
562 *      ASCONF to help in finding the association. This parameter MUST
563 *      be present in every ASCONF message i.e. it is a mandatory TLV
564 *      parameter.
565 *
566 *      ASCONF Parameter: TLV format
567 *      Each Address configuration change is represented by a TLV
568 *      parameter as defined in Section 3.2. One or more requests may
569 *      be present in an ASCONF Chunk.
570 *
571 * Section 3.1.2 Address Configuration Acknowledgement Chunk (ASCONF-ACK)
572 *
573 *      Serial Number: 32 bits (unsigned integer)
574 *      This value represents the Serial Number for the received ASCONF
575 *      Chunk that is acknowledged by this chunk. This value is copied
576 *      from the received ASCONF Chunk.
577 *
578 *      ASCONF Parameter Response: TLV format
579 *      The ASCONF Parameter Response is used in the ASCONF-ACK to
580 *      report status of ASCONF processing.
581 */
582typedef struct sctp_addip_param {
583        sctp_paramhdr_t param_hdr;
584        __u32           crr_id; 
585} __attribute__((packed)) sctp_addip_param_t;
586
587typedef struct sctp_addiphdr {
588        __u32   serial;
589        __u8    params[0];
590} __attribute__((packed)) sctp_addiphdr_t;
591
592typedef struct sctp_addip_chunk {
593        sctp_chunkhdr_t chunk_hdr;
594        sctp_addiphdr_t addip_hdr;
595} __attribute__((packed)) sctp_addip_chunk_t;
596
597#endif /* __LINUX_SCTP_H__ */
Note: See TracBrowser for help on using the repository browser.