LCOV - code coverage report
Current view: top level - include/linux - sctp.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2014-04-16 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       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                 :            :  * This SCTP 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                 :            :  * This SCTP 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, see
      27                 :            :  * <http://www.gnu.org/licenses/>.
      28                 :            :  *
      29                 :            :  * Please send any bug reports or fixes you make to the
      30                 :            :  * email address(es):
      31                 :            :  *    lksctp developers <linux-sctp@vger.kernel.org>
      32                 :            :  *
      33                 :            :  * Or submit a bug report through the following website:
      34                 :            :  *    http://www.sf.net/projects/lksctp
      35                 :            :  *
      36                 :            :  * Written or modified by:
      37                 :            :  *    La Monte H.P. Yarroll <piggy@acm.org>
      38                 :            :  *    Karl Knutson <karl@athena.chicago.il.us>
      39                 :            :  *    Jon Grimm <jgrimm@us.ibm.com>
      40                 :            :  *    Xingang Guo <xingang.guo@intel.com>
      41                 :            :  *    randall@sctp.chicago.il.us
      42                 :            :  *    kmorneau@cisco.com
      43                 :            :  *    qxie1@email.mot.com
      44                 :            :  *    Sridhar Samudrala <sri@us.ibm.com>
      45                 :            :  *    Kevin Gao <kevin.gao@intel.com>
      46                 :            :  *
      47                 :            :  * Any bugs reported given to us we will try to fix... any fixes shared will
      48                 :            :  * be incorporated into the next SCTP release.
      49                 :            :  */
      50                 :            : #ifndef __LINUX_SCTP_H__
      51                 :            : #define __LINUX_SCTP_H__
      52                 :            : 
      53                 :            : #include <linux/in.h>             /* We need in_addr.  */
      54                 :            : #include <linux/in6.h>            /* We need in6_addr.  */
      55                 :            : #include <linux/skbuff.h>
      56                 :            : 
      57                 :            : #include <uapi/linux/sctp.h>
      58                 :            : 
      59                 :            : /* Section 3.1.  SCTP Common Header Format */
      60                 :            : typedef struct sctphdr {
      61                 :            :         __be16 source;
      62                 :            :         __be16 dest;
      63                 :            :         __be32 vtag;
      64                 :            :         __le32 checksum;
      65                 :            : } __packed sctp_sctphdr_t;
      66                 :            : 
      67                 :          0 : static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
      68                 :            : {
      69                 :            :         return (struct sctphdr *)skb_transport_header(skb);
      70                 :            : }
      71                 :            : 
      72                 :            : /* Section 3.2.  Chunk Field Descriptions. */
      73                 :            : typedef struct sctp_chunkhdr {
      74                 :            :         __u8 type;
      75                 :            :         __u8 flags;
      76                 :            :         __be16 length;
      77                 :            : } __packed sctp_chunkhdr_t;
      78                 :            : 
      79                 :            : 
      80                 :            : /* Section 3.2.  Chunk Type Values.
      81                 :            :  * [Chunk Type] identifies the type of information contained in the Chunk
      82                 :            :  * Value field. It takes a value from 0 to 254. The value of 255 is
      83                 :            :  * reserved for future use as an extension field.
      84                 :            :  */
      85                 :            : typedef enum {
      86                 :            :         SCTP_CID_DATA                   = 0,
      87                 :            :         SCTP_CID_INIT                   = 1,
      88                 :            :         SCTP_CID_INIT_ACK               = 2,
      89                 :            :         SCTP_CID_SACK                   = 3,
      90                 :            :         SCTP_CID_HEARTBEAT              = 4,
      91                 :            :         SCTP_CID_HEARTBEAT_ACK          = 5,
      92                 :            :         SCTP_CID_ABORT                  = 6,
      93                 :            :         SCTP_CID_SHUTDOWN               = 7,
      94                 :            :         SCTP_CID_SHUTDOWN_ACK           = 8,
      95                 :            :         SCTP_CID_ERROR                  = 9,
      96                 :            :         SCTP_CID_COOKIE_ECHO            = 10,
      97                 :            :         SCTP_CID_COOKIE_ACK             = 11,
      98                 :            :         SCTP_CID_ECN_ECNE               = 12,
      99                 :            :         SCTP_CID_ECN_CWR                = 13,
     100                 :            :         SCTP_CID_SHUTDOWN_COMPLETE      = 14,
     101                 :            : 
     102                 :            :         /* AUTH Extension Section 4.1 */
     103                 :            :         SCTP_CID_AUTH                   = 0x0F,
     104                 :            : 
     105                 :            :         /* PR-SCTP Sec 3.2 */
     106                 :            :         SCTP_CID_FWD_TSN                = 0xC0,
     107                 :            : 
     108                 :            :         /* Use hex, as defined in ADDIP sec. 3.1 */
     109                 :            :         SCTP_CID_ASCONF                 = 0xC1,
     110                 :            :         SCTP_CID_ASCONF_ACK             = 0x80,
     111                 :            : } sctp_cid_t; /* enum */
     112                 :            : 
     113                 :            : 
     114                 :            : /* Section 3.2
     115                 :            :  *  Chunk Types are encoded such that the highest-order two bits specify
     116                 :            :  *  the action that must be taken if the processing endpoint does not
     117                 :            :  *  recognize the Chunk Type.
     118                 :            :  */
     119                 :            : typedef enum {
     120                 :            :         SCTP_CID_ACTION_DISCARD     = 0x00,
     121                 :            :         SCTP_CID_ACTION_DISCARD_ERR = 0x40,
     122                 :            :         SCTP_CID_ACTION_SKIP        = 0x80,
     123                 :            :         SCTP_CID_ACTION_SKIP_ERR    = 0xc0,
     124                 :            : } sctp_cid_action_t;
     125                 :            : 
     126                 :            : enum { SCTP_CID_ACTION_MASK = 0xc0, };
     127                 :            : 
     128                 :            : /* This flag is used in Chunk Flags for ABORT and SHUTDOWN COMPLETE.
     129                 :            :  *
     130                 :            :  * 3.3.7 Abort Association (ABORT) (6):
     131                 :            :  *    The T bit is set to 0 if the sender had a TCB that it destroyed.
     132                 :            :  *    If the sender did not have a TCB it should set this bit to 1.
     133                 :            :  */
     134                 :            : enum { SCTP_CHUNK_FLAG_T = 0x01 };
     135                 :            : 
     136                 :            : /*
     137                 :            :  *  Set the T bit
     138                 :            :  *
     139                 :            :  *      0                   1                   2                   3
     140                 :            :  *      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
     141                 :            :  *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     142                 :            :  *     |   Type = 14   |Reserved     |T|      Length = 4               |
     143                 :            :  *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     144                 :            :  *
     145                 :            :  * Chunk Flags: 8 bits
     146                 :            :  *
     147                 :            :  *   Reserved:  7 bits
     148                 :            :  *     Set to 0 on transmit and ignored on receipt.
     149                 :            :  *
     150                 :            :  *   T bit:  1 bit
     151                 :            :  *     The T bit is set to 0 if the sender had a TCB that it destroyed. If
     152                 :            :  *     the sender did NOT have a TCB it should set this bit to 1.
     153                 :            :  *
     154                 :            :  * Note: Special rules apply to this chunk for verification, please
     155                 :            :  * see Section 8.5.1 for details.
     156                 :            :  */
     157                 :            : 
     158                 :            : #define sctp_test_T_bit(c)    ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T)
     159                 :            : 
     160                 :            : /* RFC 2960
     161                 :            :  * Section 3.2.1 Optional/Variable-length Parmaeter Format.
     162                 :            :  */
     163                 :            : 
     164                 :            : typedef struct sctp_paramhdr {
     165                 :            :         __be16 type;
     166                 :            :         __be16 length;
     167                 :            : } __packed sctp_paramhdr_t;
     168                 :            : 
     169                 :            : typedef enum {
     170                 :            : 
     171                 :            :         /* RFC 2960 Section 3.3.5 */
     172                 :            :         SCTP_PARAM_HEARTBEAT_INFO               = cpu_to_be16(1),
     173                 :            :         /* RFC 2960 Section 3.3.2.1 */
     174                 :            :         SCTP_PARAM_IPV4_ADDRESS                 = cpu_to_be16(5),
     175                 :            :         SCTP_PARAM_IPV6_ADDRESS                 = cpu_to_be16(6),
     176                 :            :         SCTP_PARAM_STATE_COOKIE                 = cpu_to_be16(7),
     177                 :            :         SCTP_PARAM_UNRECOGNIZED_PARAMETERS      = cpu_to_be16(8),
     178                 :            :         SCTP_PARAM_COOKIE_PRESERVATIVE          = cpu_to_be16(9),
     179                 :            :         SCTP_PARAM_HOST_NAME_ADDRESS            = cpu_to_be16(11),
     180                 :            :         SCTP_PARAM_SUPPORTED_ADDRESS_TYPES      = cpu_to_be16(12),
     181                 :            :         SCTP_PARAM_ECN_CAPABLE                  = cpu_to_be16(0x8000),
     182                 :            : 
     183                 :            :         /* AUTH Extension Section 3 */
     184                 :            :         SCTP_PARAM_RANDOM                       = cpu_to_be16(0x8002),
     185                 :            :         SCTP_PARAM_CHUNKS                       = cpu_to_be16(0x8003),
     186                 :            :         SCTP_PARAM_HMAC_ALGO                    = cpu_to_be16(0x8004),
     187                 :            : 
     188                 :            :         /* Add-IP: Supported Extensions, Section 4.2 */
     189                 :            :         SCTP_PARAM_SUPPORTED_EXT        = cpu_to_be16(0x8008),
     190                 :            : 
     191                 :            :         /* PR-SCTP Sec 3.1 */
     192                 :            :         SCTP_PARAM_FWD_TSN_SUPPORT      = cpu_to_be16(0xc000),
     193                 :            : 
     194                 :            :         /* Add-IP Extension. Section 3.2 */
     195                 :            :         SCTP_PARAM_ADD_IP               = cpu_to_be16(0xc001),
     196                 :            :         SCTP_PARAM_DEL_IP               = cpu_to_be16(0xc002),
     197                 :            :         SCTP_PARAM_ERR_CAUSE            = cpu_to_be16(0xc003),
     198                 :            :         SCTP_PARAM_SET_PRIMARY          = cpu_to_be16(0xc004),
     199                 :            :         SCTP_PARAM_SUCCESS_REPORT       = cpu_to_be16(0xc005),
     200                 :            :         SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006),
     201                 :            : 
     202                 :            : } sctp_param_t; /* enum */
     203                 :            : 
     204                 :            : 
     205                 :            : /* RFC 2960 Section 3.2.1
     206                 :            :  *  The Parameter Types are encoded such that the highest-order two bits
     207                 :            :  *  specify the action that must be taken if the processing endpoint does
     208                 :            :  *  not recognize the Parameter Type.
     209                 :            :  *
     210                 :            :  */
     211                 :            : typedef enum {
     212                 :            :         SCTP_PARAM_ACTION_DISCARD     = cpu_to_be16(0x0000),
     213                 :            :         SCTP_PARAM_ACTION_DISCARD_ERR = cpu_to_be16(0x4000),
     214                 :            :         SCTP_PARAM_ACTION_SKIP        = cpu_to_be16(0x8000),
     215                 :            :         SCTP_PARAM_ACTION_SKIP_ERR    = cpu_to_be16(0xc000),
     216                 :            : } sctp_param_action_t;
     217                 :            : 
     218                 :            : enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), };
     219                 :            : 
     220                 :            : /* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
     221                 :            : 
     222                 :            : typedef struct sctp_datahdr {
     223                 :            :         __be32 tsn;
     224                 :            :         __be16 stream;
     225                 :            :         __be16 ssn;
     226                 :            :         __be32 ppid;
     227                 :            :         __u8  payload[0];
     228                 :            : } __packed sctp_datahdr_t;
     229                 :            : 
     230                 :            : typedef struct sctp_data_chunk {
     231                 :            :         sctp_chunkhdr_t chunk_hdr;
     232                 :            :         sctp_datahdr_t  data_hdr;
     233                 :            : } __packed sctp_data_chunk_t;
     234                 :            : 
     235                 :            : /* DATA Chuck Specific Flags */
     236                 :            : enum {
     237                 :            :         SCTP_DATA_MIDDLE_FRAG   = 0x00,
     238                 :            :         SCTP_DATA_LAST_FRAG     = 0x01,
     239                 :            :         SCTP_DATA_FIRST_FRAG    = 0x02,
     240                 :            :         SCTP_DATA_NOT_FRAG      = 0x03,
     241                 :            :         SCTP_DATA_UNORDERED     = 0x04,
     242                 :            :         SCTP_DATA_SACK_IMM      = 0x08,
     243                 :            : };
     244                 :            : enum { SCTP_DATA_FRAG_MASK = 0x03, };
     245                 :            : 
     246                 :            : 
     247                 :            : /* RFC 2960 Section 3.3.2 Initiation (INIT) (1)
     248                 :            :  *
     249                 :            :  *  This chunk is used to initiate a SCTP association between two
     250                 :            :  *  endpoints.
     251                 :            :  */
     252                 :            : typedef struct sctp_inithdr {
     253                 :            :         __be32 init_tag;
     254                 :            :         __be32 a_rwnd;
     255                 :            :         __be16 num_outbound_streams;
     256                 :            :         __be16 num_inbound_streams;
     257                 :            :         __be32 initial_tsn;
     258                 :            :         __u8  params[0];
     259                 :            : } __packed sctp_inithdr_t;
     260                 :            : 
     261                 :            : typedef struct sctp_init_chunk {
     262                 :            :         sctp_chunkhdr_t chunk_hdr;
     263                 :            :         sctp_inithdr_t init_hdr;
     264                 :            : } __packed sctp_init_chunk_t;
     265                 :            : 
     266                 :            : 
     267                 :            : /* Section 3.3.2.1. IPv4 Address Parameter (5) */
     268                 :            : typedef struct sctp_ipv4addr_param {
     269                 :            :         sctp_paramhdr_t param_hdr;
     270                 :            :         struct in_addr  addr;
     271                 :            : } __packed sctp_ipv4addr_param_t;
     272                 :            : 
     273                 :            : /* Section 3.3.2.1. IPv6 Address Parameter (6) */
     274                 :            : typedef struct sctp_ipv6addr_param {
     275                 :            :         sctp_paramhdr_t param_hdr;
     276                 :            :         struct in6_addr addr;
     277                 :            : } __packed sctp_ipv6addr_param_t;
     278                 :            : 
     279                 :            : /* Section 3.3.2.1 Cookie Preservative (9) */
     280                 :            : typedef struct sctp_cookie_preserve_param {
     281                 :            :         sctp_paramhdr_t param_hdr;
     282                 :            :         __be32          lifespan_increment;
     283                 :            : } __packed sctp_cookie_preserve_param_t;
     284                 :            : 
     285                 :            : /* Section 3.3.2.1 Host Name Address (11) */
     286                 :            : typedef struct sctp_hostname_param {
     287                 :            :         sctp_paramhdr_t param_hdr;
     288                 :            :         uint8_t hostname[0];
     289                 :            : } __packed sctp_hostname_param_t;
     290                 :            : 
     291                 :            : /* Section 3.3.2.1 Supported Address Types (12) */
     292                 :            : typedef struct sctp_supported_addrs_param {
     293                 :            :         sctp_paramhdr_t param_hdr;
     294                 :            :         __be16 types[0];
     295                 :            : } __packed sctp_supported_addrs_param_t;
     296                 :            : 
     297                 :            : /* Appendix A. ECN Capable (32768) */
     298                 :            : typedef struct sctp_ecn_capable_param {
     299                 :            :         sctp_paramhdr_t param_hdr;
     300                 :            : } __packed sctp_ecn_capable_param_t;
     301                 :            : 
     302                 :            : /* ADDIP Section 3.2.6 Adaptation Layer Indication */
     303                 :            : typedef struct sctp_adaptation_ind_param {
     304                 :            :         struct sctp_paramhdr param_hdr;
     305                 :            :         __be32 adaptation_ind;
     306                 :            : } __packed sctp_adaptation_ind_param_t;
     307                 :            : 
     308                 :            : /* ADDIP Section 4.2.7 Supported Extensions Parameter */
     309                 :            : typedef struct sctp_supported_ext_param {
     310                 :            :         struct sctp_paramhdr param_hdr;
     311                 :            :         __u8 chunks[0];
     312                 :            : } __packed sctp_supported_ext_param_t;
     313                 :            : 
     314                 :            : /* AUTH Section 3.1 Random */
     315                 :            : typedef struct sctp_random_param {
     316                 :            :         sctp_paramhdr_t param_hdr;
     317                 :            :         __u8 random_val[0];
     318                 :            : } __packed sctp_random_param_t;
     319                 :            : 
     320                 :            : /* AUTH Section 3.2 Chunk List */
     321                 :            : typedef struct sctp_chunks_param {
     322                 :            :         sctp_paramhdr_t param_hdr;
     323                 :            :         __u8 chunks[0];
     324                 :            : } __packed sctp_chunks_param_t;
     325                 :            : 
     326                 :            : /* AUTH Section 3.3 HMAC Algorithm */
     327                 :            : typedef struct sctp_hmac_algo_param {
     328                 :            :         sctp_paramhdr_t param_hdr;
     329                 :            :         __be16 hmac_ids[0];
     330                 :            : } __packed sctp_hmac_algo_param_t;
     331                 :            : 
     332                 :            : /* RFC 2960.  Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
     333                 :            :  *   The INIT ACK chunk is used to acknowledge the initiation of an SCTP
     334                 :            :  *   association.
     335                 :            :  */
     336                 :            : typedef sctp_init_chunk_t sctp_initack_chunk_t;
     337                 :            : 
     338                 :            : /* Section 3.3.3.1 State Cookie (7) */
     339                 :            : typedef struct sctp_cookie_param {
     340                 :            :         sctp_paramhdr_t p;
     341                 :            :         __u8 body[0];
     342                 :            : } __packed sctp_cookie_param_t;
     343                 :            : 
     344                 :            : /* Section 3.3.3.1 Unrecognized Parameters (8) */
     345                 :            : typedef struct sctp_unrecognized_param {
     346                 :            :         sctp_paramhdr_t param_hdr;
     347                 :            :         sctp_paramhdr_t unrecognized;
     348                 :            : } __packed sctp_unrecognized_param_t;
     349                 :            : 
     350                 :            : 
     351                 :            : 
     352                 :            : /*
     353                 :            :  * 3.3.4 Selective Acknowledgement (SACK) (3):
     354                 :            :  *
     355                 :            :  *  This chunk is sent to the peer endpoint to acknowledge received DATA
     356                 :            :  *  chunks and to inform the peer endpoint of gaps in the received
     357                 :            :  *  subsequences of DATA chunks as represented by their TSNs.
     358                 :            :  */
     359                 :            : 
     360                 :            : typedef struct sctp_gap_ack_block {
     361                 :            :         __be16 start;
     362                 :            :         __be16 end;
     363                 :            : } __packed sctp_gap_ack_block_t;
     364                 :            : 
     365                 :            : typedef __be32 sctp_dup_tsn_t;
     366                 :            : 
     367                 :            : typedef union {
     368                 :            :         sctp_gap_ack_block_t    gab;
     369                 :            :         sctp_dup_tsn_t          dup;
     370                 :            : } sctp_sack_variable_t;
     371                 :            : 
     372                 :            : typedef struct sctp_sackhdr {
     373                 :            :         __be32 cum_tsn_ack;
     374                 :            :         __be32 a_rwnd;
     375                 :            :         __be16 num_gap_ack_blocks;
     376                 :            :         __be16 num_dup_tsns;
     377                 :            :         sctp_sack_variable_t variable[0];
     378                 :            : } __packed sctp_sackhdr_t;
     379                 :            : 
     380                 :            : typedef struct sctp_sack_chunk {
     381                 :            :         sctp_chunkhdr_t chunk_hdr;
     382                 :            :         sctp_sackhdr_t sack_hdr;
     383                 :            : } __packed sctp_sack_chunk_t;
     384                 :            : 
     385                 :            : 
     386                 :            : /* RFC 2960.  Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
     387                 :            :  *
     388                 :            :  *  An endpoint should send this chunk to its peer endpoint to probe the
     389                 :            :  *  reachability of a particular destination transport address defined in
     390                 :            :  *  the present association.
     391                 :            :  */
     392                 :            : 
     393                 :            : typedef struct sctp_heartbeathdr {
     394                 :            :         sctp_paramhdr_t info;
     395                 :            : } __packed sctp_heartbeathdr_t;
     396                 :            : 
     397                 :            : typedef struct sctp_heartbeat_chunk {
     398                 :            :         sctp_chunkhdr_t chunk_hdr;
     399                 :            :         sctp_heartbeathdr_t hb_hdr;
     400                 :            : } __packed sctp_heartbeat_chunk_t;
     401                 :            : 
     402                 :            : 
     403                 :            : /* For the abort and shutdown ACK we must carry the init tag in the
     404                 :            :  * common header. Just the common header is all that is needed with a
     405                 :            :  * chunk descriptor.
     406                 :            :  */
     407                 :            : typedef struct sctp_abort_chunk {
     408                 :            :         sctp_chunkhdr_t uh;
     409                 :            : } __packed sctp_abort_chunk_t;
     410                 :            : 
     411                 :            : 
     412                 :            : /* For the graceful shutdown we must carry the tag (in common header)
     413                 :            :  * and the highest consecutive acking value.
     414                 :            :  */
     415                 :            : typedef struct sctp_shutdownhdr {
     416                 :            :         __be32 cum_tsn_ack;
     417                 :            : } __packed sctp_shutdownhdr_t;
     418                 :            : 
     419                 :            : struct sctp_shutdown_chunk_t {
     420                 :            :         sctp_chunkhdr_t    chunk_hdr;
     421                 :            :         sctp_shutdownhdr_t shutdown_hdr;
     422                 :            : } __packed;
     423                 :            : 
     424                 :            : /* RFC 2960.  Section 3.3.10 Operation Error (ERROR) (9) */
     425                 :            : 
     426                 :            : typedef struct sctp_errhdr {
     427                 :            :         __be16 cause;
     428                 :            :         __be16 length;
     429                 :            :         __u8  variable[0];
     430                 :            : } __packed sctp_errhdr_t;
     431                 :            : 
     432                 :            : typedef struct sctp_operr_chunk {
     433                 :            :         sctp_chunkhdr_t chunk_hdr;
     434                 :            :         sctp_errhdr_t   err_hdr;
     435                 :            : } __packed sctp_operr_chunk_t;
     436                 :            : 
     437                 :            : /* RFC 2960 3.3.10 - Operation Error
     438                 :            :  *
     439                 :            :  * Cause Code: 16 bits (unsigned integer)
     440                 :            :  *
     441                 :            :  *     Defines the type of error conditions being reported.
     442                 :            :  *    Cause Code
     443                 :            :  *     Value           Cause Code
     444                 :            :  *     ---------      ----------------
     445                 :            :  *      1              Invalid Stream Identifier
     446                 :            :  *      2              Missing Mandatory Parameter
     447                 :            :  *      3              Stale Cookie Error
     448                 :            :  *      4              Out of Resource
     449                 :            :  *      5              Unresolvable Address
     450                 :            :  *      6              Unrecognized Chunk Type
     451                 :            :  *      7              Invalid Mandatory Parameter
     452                 :            :  *      8              Unrecognized Parameters
     453                 :            :  *      9              No User Data
     454                 :            :  *     10              Cookie Received While Shutting Down
     455                 :            :  */
     456                 :            : typedef enum {
     457                 :            : 
     458                 :            :         SCTP_ERROR_NO_ERROR        = cpu_to_be16(0x00),
     459                 :            :         SCTP_ERROR_INV_STRM        = cpu_to_be16(0x01),
     460                 :            :         SCTP_ERROR_MISS_PARAM      = cpu_to_be16(0x02),
     461                 :            :         SCTP_ERROR_STALE_COOKIE    = cpu_to_be16(0x03),
     462                 :            :         SCTP_ERROR_NO_RESOURCE     = cpu_to_be16(0x04),
     463                 :            :         SCTP_ERROR_DNS_FAILED      = cpu_to_be16(0x05),
     464                 :            :         SCTP_ERROR_UNKNOWN_CHUNK   = cpu_to_be16(0x06),
     465                 :            :         SCTP_ERROR_INV_PARAM       = cpu_to_be16(0x07),
     466                 :            :         SCTP_ERROR_UNKNOWN_PARAM   = cpu_to_be16(0x08),
     467                 :            :         SCTP_ERROR_NO_DATA         = cpu_to_be16(0x09),
     468                 :            :         SCTP_ERROR_COOKIE_IN_SHUTDOWN = cpu_to_be16(0x0a),
     469                 :            : 
     470                 :            : 
     471                 :            :         /* SCTP Implementation Guide:
     472                 :            :          *  11  Restart of an association with new addresses
     473                 :            :          *  12  User Initiated Abort
     474                 :            :          *  13  Protocol Violation
     475                 :            :          */
     476                 :            : 
     477                 :            :         SCTP_ERROR_RESTART         = cpu_to_be16(0x0b),
     478                 :            :         SCTP_ERROR_USER_ABORT      = cpu_to_be16(0x0c),
     479                 :            :         SCTP_ERROR_PROTO_VIOLATION = cpu_to_be16(0x0d),
     480                 :            : 
     481                 :            :         /* ADDIP Section 3.3  New Error Causes
     482                 :            :          *
     483                 :            :          * Four new Error Causes are added to the SCTP Operational Errors,
     484                 :            :          * primarily for use in the ASCONF-ACK chunk.
     485                 :            :          *
     486                 :            :          * Value          Cause Code
     487                 :            :          * ---------      ----------------
     488                 :            :          * 0x00A0          Request to Delete Last Remaining IP Address.
     489                 :            :          * 0x00A1          Operation Refused Due to Resource Shortage.
     490                 :            :          * 0x00A2          Request to Delete Source IP Address.
     491                 :            :          * 0x00A3          Association Aborted due to illegal ASCONF-ACK
     492                 :            :          * 0x00A4          Request refused - no authorization.
     493                 :            :          */
     494                 :            :         SCTP_ERROR_DEL_LAST_IP  = cpu_to_be16(0x00A0),
     495                 :            :         SCTP_ERROR_RSRC_LOW     = cpu_to_be16(0x00A1),
     496                 :            :         SCTP_ERROR_DEL_SRC_IP   = cpu_to_be16(0x00A2),
     497                 :            :         SCTP_ERROR_ASCONF_ACK   = cpu_to_be16(0x00A3),
     498                 :            :         SCTP_ERROR_REQ_REFUSED  = cpu_to_be16(0x00A4),
     499                 :            : 
     500                 :            :         /* AUTH Section 4.  New Error Cause
     501                 :            :          *
     502                 :            :          * This section defines a new error cause that will be sent if an AUTH
     503                 :            :          * chunk is received with an unsupported HMAC identifier.
     504                 :            :          * illustrates the new error cause.
     505                 :            :          *
     506                 :            :          * Cause Code      Error Cause Name
     507                 :            :          * --------------------------------------------------------------
     508                 :            :          * 0x0105          Unsupported HMAC Identifier
     509                 :            :          */
     510                 :            :          SCTP_ERROR_UNSUP_HMAC  = cpu_to_be16(0x0105)
     511                 :            : } sctp_error_t;
     512                 :            : 
     513                 :            : 
     514                 :            : 
     515                 :            : /* RFC 2960.  Appendix A.  Explicit Congestion Notification.
     516                 :            :  *   Explicit Congestion Notification Echo (ECNE) (12)
     517                 :            :  */
     518                 :            : typedef struct sctp_ecnehdr {
     519                 :            :         __be32 lowest_tsn;
     520                 :            : } sctp_ecnehdr_t;
     521                 :            : 
     522                 :            : typedef struct sctp_ecne_chunk {
     523                 :            :         sctp_chunkhdr_t chunk_hdr;
     524                 :            :         sctp_ecnehdr_t ence_hdr;
     525                 :            : } __packed sctp_ecne_chunk_t;
     526                 :            : 
     527                 :            : /* RFC 2960.  Appendix A.  Explicit Congestion Notification.
     528                 :            :  *   Congestion Window Reduced (CWR) (13)
     529                 :            :  */
     530                 :            : typedef struct sctp_cwrhdr {
     531                 :            :         __be32 lowest_tsn;
     532                 :            : } sctp_cwrhdr_t;
     533                 :            : 
     534                 :            : typedef struct sctp_cwr_chunk {
     535                 :            :         sctp_chunkhdr_t chunk_hdr;
     536                 :            :         sctp_cwrhdr_t cwr_hdr;
     537                 :            : } __packed sctp_cwr_chunk_t;
     538                 :            : 
     539                 :            : /* PR-SCTP
     540                 :            :  * 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
     541                 :            :  *
     542                 :            :  * Forward Cumulative TSN chunk has the following format:
     543                 :            :  *
     544                 :            :  *        0                   1                   2                   3
     545                 :            :  *        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
     546                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     547                 :            :  *      |   Type = 192  |  Flags = 0x00 |        Length = Variable      |
     548                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     549                 :            :  *      |                      New Cumulative TSN                       |
     550                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     551                 :            :  *      |         Stream-1              |       Stream Sequence-1       |
     552                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     553                 :            :  *      \                                                               /
     554                 :            :  *      /                                                               \
     555                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     556                 :            :  *      |         Stream-N              |       Stream Sequence-N       |
     557                 :            :  *      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     558                 :            :  *
     559                 :            :  *      Chunk Flags:
     560                 :            :  *
     561                 :            :  *        Set to all zeros on transmit and ignored on receipt.
     562                 :            :  *
     563                 :            :  *      New Cumulative TSN: 32 bit u_int
     564                 :            :  *
     565                 :            :  *       This indicates the new cumulative TSN to the data receiver. Upon
     566                 :            :  *       the reception of this value, the data receiver MUST consider
     567                 :            :  *       any missing TSNs earlier than or equal to this value as received
     568                 :            :  *       and stop reporting them as gaps in any subsequent SACKs.
     569                 :            :  *
     570                 :            :  *      Stream-N: 16 bit u_int
     571                 :            :  *
     572                 :            :  *       This field holds a stream number that was skipped by this
     573                 :            :  *       FWD-TSN.
     574                 :            :  *
     575                 :            :  *      Stream Sequence-N: 16 bit u_int
     576                 :            :  *       This field holds the sequence number associated with the stream
     577                 :            :  *       that was skipped. The stream sequence field holds the largest stream
     578                 :            :  *       sequence number in this stream being skipped.  The receiver of
     579                 :            :  *       the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
     580                 :            :  *       to enable delivery of any stranded TSN's that remain on the stream
     581                 :            :  *       re-ordering queues. This field MUST NOT report TSN's corresponding
     582                 :            :  *       to DATA chunk that are marked as unordered. For ordered DATA
     583                 :            :  *       chunks this field MUST be filled in.
     584                 :            :  */
     585                 :            : struct sctp_fwdtsn_skip {
     586                 :            :         __be16 stream;
     587                 :            :         __be16 ssn;
     588                 :            : } __packed;
     589                 :            : 
     590                 :            : struct sctp_fwdtsn_hdr {
     591                 :            :         __be32 new_cum_tsn;
     592                 :            :         struct sctp_fwdtsn_skip skip[0];
     593                 :            : } __packed;
     594                 :            : 
     595                 :            : struct sctp_fwdtsn_chunk {
     596                 :            :         struct sctp_chunkhdr chunk_hdr;
     597                 :            :         struct sctp_fwdtsn_hdr fwdtsn_hdr;
     598                 :            : } __packed;
     599                 :            : 
     600                 :            : 
     601                 :            : /* ADDIP
     602                 :            :  * Section 3.1.1 Address Configuration Change Chunk (ASCONF)
     603                 :            :  *
     604                 :            :  *      Serial Number: 32 bits (unsigned integer)
     605                 :            :  *      This value represents a Serial Number for the ASCONF Chunk. The
     606                 :            :  *      valid range of Serial Number is from 0 to 2^32-1.
     607                 :            :  *      Serial Numbers wrap back to 0 after reaching 2^32 -1.
     608                 :            :  *
     609                 :            :  *      Address Parameter: 8 or 20 bytes (depending on type)
     610                 :            :  *      The address is an address of the sender of the ASCONF chunk,
     611                 :            :  *      the address MUST be considered part of the association by the
     612                 :            :  *      peer endpoint. This field may be used by the receiver of the 
     613                 :            :  *      ASCONF to help in finding the association. This parameter MUST
     614                 :            :  *      be present in every ASCONF message i.e. it is a mandatory TLV
     615                 :            :  *      parameter.
     616                 :            :  *
     617                 :            :  *      ASCONF Parameter: TLV format
     618                 :            :  *      Each Address configuration change is represented by a TLV
     619                 :            :  *      parameter as defined in Section 3.2. One or more requests may
     620                 :            :  *      be present in an ASCONF Chunk.
     621                 :            :  *
     622                 :            :  * Section 3.1.2 Address Configuration Acknowledgement Chunk (ASCONF-ACK)
     623                 :            :  * 
     624                 :            :  *      Serial Number: 32 bits (unsigned integer)
     625                 :            :  *      This value represents the Serial Number for the received ASCONF
     626                 :            :  *      Chunk that is acknowledged by this chunk. This value is copied
     627                 :            :  *      from the received ASCONF Chunk. 
     628                 :            :  *
     629                 :            :  *      ASCONF Parameter Response: TLV format
     630                 :            :  *      The ASCONF Parameter Response is used in the ASCONF-ACK to
     631                 :            :  *      report status of ASCONF processing.
     632                 :            :  */
     633                 :            : typedef struct sctp_addip_param {
     634                 :            :         sctp_paramhdr_t param_hdr;
     635                 :            :         __be32          crr_id;
     636                 :            : } __packed sctp_addip_param_t;
     637                 :            : 
     638                 :            : typedef struct sctp_addiphdr {
     639                 :            :         __be32  serial;
     640                 :            :         __u8    params[0];
     641                 :            : } __packed sctp_addiphdr_t;
     642                 :            : 
     643                 :            : typedef struct sctp_addip_chunk {
     644                 :            :         sctp_chunkhdr_t chunk_hdr;
     645                 :            :         sctp_addiphdr_t addip_hdr;
     646                 :            : } __packed sctp_addip_chunk_t;
     647                 :            : 
     648                 :            : /* AUTH
     649                 :            :  * Section 4.1  Authentication Chunk (AUTH)
     650                 :            :  *
     651                 :            :  *   This chunk is used to hold the result of the HMAC calculation.
     652                 :            :  *
     653                 :            :  *    0                   1                   2                   3
     654                 :            :  *    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
     655                 :            :  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     656                 :            :  *   | Type = 0x0F   |   Flags=0     |             Length            |
     657                 :            :  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     658                 :            :  *   |     Shared Key Identifier     |   HMAC Identifier             |
     659                 :            :  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     660                 :            :  *   |                                                               |
     661                 :            :  *   \                             HMAC                              /
     662                 :            :  *   /                                                               \
     663                 :            :  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     664                 :            :  *
     665                 :            :  *   Type: 1 byte (unsigned integer)
     666                 :            :  *      This value MUST be set to 0x0F for  all AUTH-chunks.
     667                 :            :  *
     668                 :            :  *   Flags: 1 byte (unsigned integer)
     669                 :            :  *      Set to zero on transmit and ignored on receipt.
     670                 :            :  *
     671                 :            :  *   Length: 2 bytes (unsigned integer)
     672                 :            :  *      This value holds the length of the HMAC in bytes plus 8.
     673                 :            :  *
     674                 :            :  *  Shared Key Identifier: 2 bytes (unsigned integer)
     675                 :            :  *      This value describes which endpoint pair shared key is used.
     676                 :            :  *
     677                 :            :  *   HMAC Identifier: 2 bytes (unsigned integer)
     678                 :            :  *      This value describes which message digest is being used.  Table 2
     679                 :            :  *      shows the currently defined values.
     680                 :            :  *
     681                 :            :  *    The following Table 2 shows the currently defined values for HMAC
     682                 :            :  *       identifiers.
     683                 :            :  *
     684                 :            :  *       +-----------------+--------------------------+
     685                 :            :  *       | HMAC Identifier | Message Digest Algorithm |
     686                 :            :  *       +-----------------+--------------------------+
     687                 :            :  *       | 0               | Reserved                 |
     688                 :            :  *       | 1               | SHA-1 defined in [8]     |
     689                 :            :  *       | 2               | Reserved                 |
     690                 :            :  *       | 3               | SHA-256 defined in [8]   |
     691                 :            :  *       +-----------------+--------------------------+
     692                 :            :  *
     693                 :            :  *
     694                 :            :  *   HMAC: n bytes (unsigned integer) This hold the result of the HMAC
     695                 :            :  *      calculation.
     696                 :            :  */
     697                 :            : typedef struct sctp_authhdr {
     698                 :            :         __be16 shkey_id;
     699                 :            :         __be16 hmac_id;
     700                 :            :         __u8   hmac[0];
     701                 :            : } __packed sctp_authhdr_t;
     702                 :            : 
     703                 :            : typedef struct sctp_auth_chunk {
     704                 :            :         sctp_chunkhdr_t chunk_hdr;
     705                 :            :         sctp_authhdr_t auth_hdr;
     706                 :            : } __packed sctp_auth_chunk_t;
     707                 :            : 
     708                 :            : #endif /* __LINUX_SCTP_H__ */

Generated by: LCOV version 1.9