]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/sctp.h
Merge branch 'work.read_write' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[karo-tx-linux.git] / include / linux / sctp.h
index fcb4c364617329f10257c5cfe6d86d75d42c7132..99e866487e2f5cea6311b1617afe115c94da00f5 100644 (file)
 #include <uapi/linux/sctp.h>
 
 /* Section 3.1.  SCTP Common Header Format */
-typedef struct sctphdr {
+struct sctphdr {
        __be16 source;
        __be16 dest;
        __be32 vtag;
        __le32 checksum;
-} __packed sctp_sctphdr_t;
+};
 
 static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
 {
@@ -70,11 +70,11 @@ static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
 }
 
 /* Section 3.2.  Chunk Field Descriptions. */
-typedef struct sctp_chunkhdr {
+struct sctp_chunkhdr {
        __u8 type;
        __u8 flags;
        __be16 length;
-} __packed sctp_chunkhdr_t;
+};
 
 
 /* Section 3.2.  Chunk Type Values.
@@ -82,7 +82,7 @@ typedef struct sctp_chunkhdr {
  * Value field. It takes a value from 0 to 254. The value of 255 is
  * reserved for future use as an extension field.
  */
-typedef enum {
+enum sctp_cid {
        SCTP_CID_DATA                   = 0,
         SCTP_CID_INIT                  = 1,
         SCTP_CID_INIT_ACK              = 2,
@@ -108,7 +108,8 @@ typedef enum {
        /* Use hex, as defined in ADDIP sec. 3.1 */
        SCTP_CID_ASCONF                 = 0xC1,
        SCTP_CID_ASCONF_ACK             = 0x80,
-} sctp_cid_t; /* enum */
+       SCTP_CID_RECONF                 = 0x82,
+}; /* enum */
 
 
 /* Section 3.2
@@ -116,12 +117,12 @@ typedef enum {
  *  the action that must be taken if the processing endpoint does not
  *  recognize the Chunk Type.
  */
-typedef enum {
+enum {
        SCTP_CID_ACTION_DISCARD     = 0x00,
        SCTP_CID_ACTION_DISCARD_ERR = 0x40,
        SCTP_CID_ACTION_SKIP        = 0x80,
        SCTP_CID_ACTION_SKIP_ERR    = 0xc0,
-} sctp_cid_action_t;
+};
 
 enum { SCTP_CID_ACTION_MASK = 0xc0, };
 
@@ -161,12 +162,12 @@ enum { SCTP_CHUNK_FLAG_T = 0x01 };
  * Section 3.2.1 Optional/Variable-length Parmaeter Format.
  */
 
-typedef struct sctp_paramhdr {
+struct sctp_paramhdr {
        __be16 type;
        __be16 length;
-} __packed sctp_paramhdr_t;
+};
 
-typedef enum {
+enum sctp_param {
 
        /* RFC 2960 Section 3.3.5 */
        SCTP_PARAM_HEARTBEAT_INFO               = cpu_to_be16(1),
@@ -199,7 +200,14 @@ typedef enum {
        SCTP_PARAM_SUCCESS_REPORT       = cpu_to_be16(0xc005),
        SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006),
 
-} sctp_param_t; /* enum */
+       /* RE-CONFIG. Section 4 */
+       SCTP_PARAM_RESET_OUT_REQUEST            = cpu_to_be16(0x000d),
+       SCTP_PARAM_RESET_IN_REQUEST             = cpu_to_be16(0x000e),
+       SCTP_PARAM_RESET_TSN_REQUEST            = cpu_to_be16(0x000f),
+       SCTP_PARAM_RESET_RESPONSE               = cpu_to_be16(0x0010),
+       SCTP_PARAM_RESET_ADD_OUT_STREAMS        = cpu_to_be16(0x0011),
+       SCTP_PARAM_RESET_ADD_IN_STREAMS         = cpu_to_be16(0x0012),
+}; /* enum */
 
 
 /* RFC 2960 Section 3.2.1
@@ -208,29 +216,29 @@ typedef enum {
  *  not recognize the Parameter Type.
  *
  */
-typedef enum {
+enum {
        SCTP_PARAM_ACTION_DISCARD     = cpu_to_be16(0x0000),
        SCTP_PARAM_ACTION_DISCARD_ERR = cpu_to_be16(0x4000),
        SCTP_PARAM_ACTION_SKIP        = cpu_to_be16(0x8000),
        SCTP_PARAM_ACTION_SKIP_ERR    = cpu_to_be16(0xc000),
-} sctp_param_action_t;
+};
 
 enum { SCTP_PARAM_ACTION_MASK = cpu_to_be16(0xc000), };
 
 /* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */
 
-typedef struct sctp_datahdr {
+struct sctp_datahdr {
        __be32 tsn;
        __be16 stream;
        __be16 ssn;
        __be32 ppid;
        __u8  payload[0];
-} __packed sctp_datahdr_t;
+};
 
-typedef struct sctp_data_chunk {
-        sctp_chunkhdr_t chunk_hdr;
-        sctp_datahdr_t  data_hdr;
-} __packed sctp_data_chunk_t;
+struct sctp_data_chunk {
+       struct sctp_chunkhdr chunk_hdr;
+       struct sctp_datahdr data_hdr;
+};
 
 /* DATA Chuck Specific Flags */
 enum {
@@ -249,103 +257,103 @@ enum { SCTP_DATA_FRAG_MASK = 0x03, };
  *  This chunk is used to initiate a SCTP association between two
  *  endpoints.
  */
-typedef struct sctp_inithdr {
+struct sctp_inithdr {
        __be32 init_tag;
        __be32 a_rwnd;
        __be16 num_outbound_streams;
        __be16 num_inbound_streams;
        __be32 initial_tsn;
        __u8  params[0];
-} __packed sctp_inithdr_t;
+};
 
-typedef struct sctp_init_chunk {
-       sctp_chunkhdr_t chunk_hdr;
-       sctp_inithdr_t init_hdr;
-} __packed sctp_init_chunk_t;
+struct sctp_init_chunk {
+       struct sctp_chunkhdr chunk_hdr;
+       struct sctp_inithdr init_hdr;
+};
 
 
 /* Section 3.3.2.1. IPv4 Address Parameter (5) */
 typedef struct sctp_ipv4addr_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        struct in_addr  addr;
-} __packed sctp_ipv4addr_param_t;
+} sctp_ipv4addr_param_t;
 
 /* Section 3.3.2.1. IPv6 Address Parameter (6) */
 typedef struct sctp_ipv6addr_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        struct in6_addr addr;
-} __packed sctp_ipv6addr_param_t;
+} sctp_ipv6addr_param_t;
 
 /* Section 3.3.2.1 Cookie Preservative (9) */
 typedef struct sctp_cookie_preserve_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        __be32          lifespan_increment;
-} __packed sctp_cookie_preserve_param_t;
+} sctp_cookie_preserve_param_t;
 
 /* Section 3.3.2.1 Host Name Address (11) */
 typedef struct sctp_hostname_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        uint8_t hostname[0];
-} __packed sctp_hostname_param_t;
+} sctp_hostname_param_t;
 
 /* Section 3.3.2.1 Supported Address Types (12) */
 typedef struct sctp_supported_addrs_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        __be16 types[0];
-} __packed sctp_supported_addrs_param_t;
+} sctp_supported_addrs_param_t;
 
 /* Appendix A. ECN Capable (32768) */
 typedef struct sctp_ecn_capable_param {
-       sctp_paramhdr_t param_hdr;
-} __packed sctp_ecn_capable_param_t;
+       struct sctp_paramhdr param_hdr;
+} sctp_ecn_capable_param_t;
 
 /* ADDIP Section 3.2.6 Adaptation Layer Indication */
 typedef struct sctp_adaptation_ind_param {
        struct sctp_paramhdr param_hdr;
        __be32 adaptation_ind;
-} __packed sctp_adaptation_ind_param_t;
+} sctp_adaptation_ind_param_t;
 
 /* ADDIP Section 4.2.7 Supported Extensions Parameter */
 typedef struct sctp_supported_ext_param {
        struct sctp_paramhdr param_hdr;
        __u8 chunks[0];
-} __packed sctp_supported_ext_param_t;
+} sctp_supported_ext_param_t;
 
 /* AUTH Section 3.1 Random */
 typedef struct sctp_random_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        __u8 random_val[0];
-} __packed sctp_random_param_t;
+} sctp_random_param_t;
 
 /* AUTH Section 3.2 Chunk List */
 typedef struct sctp_chunks_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        __u8 chunks[0];
-} __packed sctp_chunks_param_t;
+} sctp_chunks_param_t;
 
 /* AUTH Section 3.3 HMAC Algorithm */
 typedef struct sctp_hmac_algo_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr param_hdr;
        __be16 hmac_ids[0];
-} __packed sctp_hmac_algo_param_t;
+} sctp_hmac_algo_param_t;
 
 /* RFC 2960.  Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
  *   The INIT ACK chunk is used to acknowledge the initiation of an SCTP
  *   association.
  */
-typedef sctp_init_chunk_t sctp_initack_chunk_t;
+typedef struct sctp_init_chunk sctp_initack_chunk_t;
 
 /* Section 3.3.3.1 State Cookie (7) */
 typedef struct sctp_cookie_param {
-       sctp_paramhdr_t p;
+       struct sctp_paramhdr p;
        __u8 body[0];
-} __packed sctp_cookie_param_t;
+} sctp_cookie_param_t;
 
 /* Section 3.3.3.1 Unrecognized Parameters (8) */
 typedef struct sctp_unrecognized_param {
-       sctp_paramhdr_t param_hdr;
-       sctp_paramhdr_t unrecognized;
-} __packed sctp_unrecognized_param_t;
+       struct sctp_paramhdr param_hdr;
+       struct sctp_paramhdr unrecognized;
+} sctp_unrecognized_param_t;
 
 
 
@@ -360,7 +368,7 @@ typedef struct sctp_unrecognized_param {
 typedef struct sctp_gap_ack_block {
        __be16 start;
        __be16 end;
-} __packed sctp_gap_ack_block_t;
+} sctp_gap_ack_block_t;
 
 typedef __be32 sctp_dup_tsn_t;
 
@@ -375,12 +383,12 @@ typedef struct sctp_sackhdr {
        __be16 num_gap_ack_blocks;
        __be16 num_dup_tsns;
        sctp_sack_variable_t variable[0];
-} __packed sctp_sackhdr_t;
+} sctp_sackhdr_t;
 
 typedef struct sctp_sack_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_sackhdr_t sack_hdr;
-} __packed sctp_sack_chunk_t;
+} sctp_sack_chunk_t;
 
 
 /* RFC 2960.  Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
@@ -391,13 +399,13 @@ typedef struct sctp_sack_chunk {
  */
 
 typedef struct sctp_heartbeathdr {
-       sctp_paramhdr_t info;
-} __packed sctp_heartbeathdr_t;
+       struct sctp_paramhdr info;
+} sctp_heartbeathdr_t;
 
 typedef struct sctp_heartbeat_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_heartbeathdr_t hb_hdr;
-} __packed sctp_heartbeat_chunk_t;
+} sctp_heartbeat_chunk_t;
 
 
 /* For the abort and shutdown ACK we must carry the init tag in the
@@ -405,8 +413,8 @@ typedef struct sctp_heartbeat_chunk {
  * chunk descriptor.
  */
 typedef struct sctp_abort_chunk {
-        sctp_chunkhdr_t uh;
-} __packed sctp_abort_chunk_t;
+       struct sctp_chunkhdr uh;
+} sctp_abort_chunk_t;
 
 
 /* For the graceful shutdown we must carry the tag (in common header)
@@ -414,12 +422,12 @@ typedef struct sctp_abort_chunk {
  */
 typedef struct sctp_shutdownhdr {
        __be32 cum_tsn_ack;
-} __packed sctp_shutdownhdr_t;
+} sctp_shutdownhdr_t;
 
 struct sctp_shutdown_chunk_t {
-        sctp_chunkhdr_t    chunk_hdr;
-        sctp_shutdownhdr_t shutdown_hdr;
-} __packed;
+       struct sctp_chunkhdr chunk_hdr;
+       sctp_shutdownhdr_t shutdown_hdr;
+};
 
 /* RFC 2960.  Section 3.3.10 Operation Error (ERROR) (9) */
 
@@ -427,12 +435,12 @@ typedef struct sctp_errhdr {
        __be16 cause;
        __be16 length;
        __u8  variable[0];
-} __packed sctp_errhdr_t;
+} sctp_errhdr_t;
 
 typedef struct sctp_operr_chunk {
-        sctp_chunkhdr_t chunk_hdr;
-       sctp_errhdr_t   err_hdr;
-} __packed sctp_operr_chunk_t;
+       struct sctp_chunkhdr chunk_hdr;
+       sctp_errhdr_t err_hdr;
+} sctp_operr_chunk_t;
 
 /* RFC 2960 3.3.10 - Operation Error
  *
@@ -520,9 +528,9 @@ typedef struct sctp_ecnehdr {
 } sctp_ecnehdr_t;
 
 typedef struct sctp_ecne_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_ecnehdr_t ence_hdr;
-} __packed sctp_ecne_chunk_t;
+} sctp_ecne_chunk_t;
 
 /* RFC 2960.  Appendix A.  Explicit Congestion Notification.
  *   Congestion Window Reduced (CWR) (13)
@@ -532,9 +540,9 @@ typedef struct sctp_cwrhdr {
 } sctp_cwrhdr_t;
 
 typedef struct sctp_cwr_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_cwrhdr_t cwr_hdr;
-} __packed sctp_cwr_chunk_t;
+} sctp_cwr_chunk_t;
 
 /* PR-SCTP
  * 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
@@ -585,17 +593,17 @@ typedef struct sctp_cwr_chunk {
 struct sctp_fwdtsn_skip {
        __be16 stream;
        __be16 ssn;
-} __packed;
+};
 
 struct sctp_fwdtsn_hdr {
        __be32 new_cum_tsn;
        struct sctp_fwdtsn_skip skip[0];
-} __packed;
+};
 
 struct sctp_fwdtsn_chunk {
        struct sctp_chunkhdr chunk_hdr;
        struct sctp_fwdtsn_hdr fwdtsn_hdr;
-} __packed;
+};
 
 
 /* ADDIP
@@ -631,19 +639,19 @@ struct sctp_fwdtsn_chunk {
  *     report status of ASCONF processing.
  */
 typedef struct sctp_addip_param {
-       sctp_paramhdr_t param_hdr;
+       struct sctp_paramhdr    param_hdr;
        __be32          crr_id;
-} __packed sctp_addip_param_t;
+} sctp_addip_param_t;
 
 typedef struct sctp_addiphdr {
        __be32  serial;
        __u8    params[0];
-} __packed sctp_addiphdr_t;
+} sctp_addiphdr_t;
 
 typedef struct sctp_addip_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_addiphdr_t addip_hdr;
-} __packed sctp_addip_chunk_t;
+} sctp_addip_chunk_t;
 
 /* AUTH
  * Section 4.1  Authentication Chunk (AUTH)
@@ -698,16 +706,71 @@ typedef struct sctp_authhdr {
        __be16 shkey_id;
        __be16 hmac_id;
        __u8   hmac[0];
-} __packed sctp_authhdr_t;
+} sctp_authhdr_t;
 
 typedef struct sctp_auth_chunk {
-       sctp_chunkhdr_t chunk_hdr;
+       struct sctp_chunkhdr chunk_hdr;
        sctp_authhdr_t auth_hdr;
-} __packed sctp_auth_chunk_t;
+} sctp_auth_chunk_t;
 
 struct sctp_infox {
        struct sctp_info *sctpinfo;
        struct sctp_association *asoc;
 };
 
+struct sctp_reconf_chunk {
+       struct sctp_chunkhdr chunk_hdr;
+       __u8 params[0];
+};
+
+struct sctp_strreset_outreq {
+       struct sctp_paramhdr param_hdr;
+       __u32 request_seq;
+       __u32 response_seq;
+       __u32 send_reset_at_tsn;
+       __u16 list_of_streams[0];
+};
+
+struct sctp_strreset_inreq {
+       struct sctp_paramhdr param_hdr;
+       __u32 request_seq;
+       __u16 list_of_streams[0];
+};
+
+struct sctp_strreset_tsnreq {
+       struct sctp_paramhdr param_hdr;
+       __u32 request_seq;
+};
+
+struct sctp_strreset_addstrm {
+       struct sctp_paramhdr param_hdr;
+       __u32 request_seq;
+       __u16 number_of_streams;
+       __u16 reserved;
+};
+
+enum {
+       SCTP_STRRESET_NOTHING_TO_DO     = 0x00,
+       SCTP_STRRESET_PERFORMED         = 0x01,
+       SCTP_STRRESET_DENIED            = 0x02,
+       SCTP_STRRESET_ERR_WRONG_SSN     = 0x03,
+       SCTP_STRRESET_ERR_IN_PROGRESS   = 0x04,
+       SCTP_STRRESET_ERR_BAD_SEQNO     = 0x05,
+       SCTP_STRRESET_IN_PROGRESS       = 0x06,
+};
+
+struct sctp_strreset_resp {
+       struct sctp_paramhdr param_hdr;
+       __u32 response_seq;
+       __u32 result;
+};
+
+struct sctp_strreset_resptsn {
+       struct sctp_paramhdr param_hdr;
+       __u32 response_seq;
+       __u32 result;
+       __u32 senders_next_tsn;
+       __u32 receivers_next_tsn;
+};
+
 #endif /* __LINUX_SCTP_H__ */