This patch implement the protocol definitions for STREAM-RESET extension. Signed-off-by: Wei Yongjun <yjwei@xxxxxxxxxxxxxx> --- include/linux/sctp.h | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) diff --git a/include/linux/sctp.h b/include/linux/sctp.h index c2731bf..5a12eb0 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h @@ -111,6 +111,9 @@ typedef enum { /* Use hex, as defined in ADDIP sec. 3.1 */ SCTP_CID_ASCONF = 0xC1, SCTP_CID_ASCONF_ACK = 0x80, + + /* STREAM-RESET Extension Section 3.1 */ + SCTP_CID_STREAM_RESET = 0x82, } sctp_cid_t; /* enum */ @@ -202,6 +205,12 @@ typedef enum { SCTP_PARAM_SUCCESS_REPORT = cpu_to_be16(0xc005), SCTP_PARAM_ADAPTATION_LAYER_IND = cpu_to_be16(0xc006), + /* STREAM-RESET Extension Section 3.2 */ + 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_ADD_STREAM = cpu_to_be16(0x0011), } sctp_param_t; /* enum */ @@ -707,4 +716,96 @@ typedef struct sctp_auth_chunk { sctp_authhdr_t auth_hdr; } __attribute__((packed)) sctp_auth_chunk_t; +/* STREAM-RESET Extension Section 3.1 STREAM RESET Chunk + * + * The chunk has the following format: + * 0 1 2 3 + * 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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Type = 0x82 | Chunk Flags | Chunk Length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Stream Reset Parameter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Stream Reset Parameter (optional) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +typedef struct sctp_strrst_chunk { + sctp_chunkhdr_t chunk_hdr; + __u8 params[0]; +} __attribute__((packed)) sctp_strrst_chunk_t; + +/* STREAM-RESET Extension Section 3.2.1 Outgoing SSN Reset Request Parameter + * + * This parameter is used by the sender to request some outgoing streams + * to be reset. + */ +typedef struct sctp_reset_out_req { + sctp_paramhdr_t param_hdr; + __be32 request_seq; + __be32 response_seq; + __be32 send_reset_at_tsn; + __be16 stream[0]; +} __attribute__((packed)) sctp_reset_out_req_t; + +/* STREAM-RESET Extension Section 3.2.2 Incoming SSN Reset Request Parameter + * + * This parameter is used by the sender to request that the peer + * requests some of its outgoing streams to be reset. + */ +typedef struct sctp_reset_in_req { + sctp_paramhdr_t param_hdr; + __be32 request_seq; + __be16 stream[0]; +} __attribute__((packed)) sctp_reset_in_req_t; + +/* STREAM-RESET Extension Section 3.2.3 SSN/TSN Reset Request Parameter + * + * This parameter is used by the sender to request to reset the TSN and + * SSN numbering of all streams. + */ +typedef struct sctp_reset_tsn_req { + sctp_paramhdr_t param_hdr; + __be32 request_seq; +} __attribute__((packed)) sctp_reset_tsn_req_t; + +/* STREAM-RESET Extension Section 3.2.4 Stream Reset Response Parameter + * + * This parameter is used by the receiver of a stream reset request + * parameter to respond to the stream reset request. + */ +typedef struct sctp_reset_res { + sctp_paramhdr_t param_hdr; + __be32 response_seq; + __be32 result; +} __attribute__((packed)) sctp_reset_res_t; + +typedef struct sctp_reset_tsn_res { + sctp_paramhdr_t param_hdr; + __be32 response_seq; + __be32 result; + __be32 senders_next_tsn; + __be32 receivers_next_tsn; +} __attribute__((packed)) sctp_reset_tsn_res_t; + +/* STREAM-RESET Extension Section 3.2.5 Add Streams + * + * This parameter is used by the sender to request that the peer add the + * requested number of streams to the association. + */ +typedef struct sctp_add_stream { + sctp_paramhdr_t param_hdr; + __be32 request_seq; + __be16 num_streams; + __be16 reserved; +} __attribute__((packed)) sctp_add_stream_t; + +typedef enum { + SCTP_STREAM_RESET_NOTHING = cpu_to_be32(0x00), + SCTP_STREAM_RESET_PERFORMED = cpu_to_be32(0x01), + SCTP_STREAM_RESET_DENIED = cpu_to_be32(0x02), + SCTP_STREAM_RESET_WRONG_SSN = cpu_to_be32(0x03), + SCTP_STREAM_RESET_TRY_LATER = cpu_to_be32(0x04), + SCTP_STREAM_RESET_BAD_SEQNO = cpu_to_be32(0x05), +} sctp_stream_reset_result_t; + #endif /* __LINUX_SCTP_H__ */ -- 1.5.3.8 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html