draft-ietf-tsvwg-sctpsocket-14.txt   draft-ietf-tsvwg-sctpsocket-15.txt 
Network Working Group R. Stewart Network Working Group R. Stewart
Internet-Draft Cisco Systems, Inc. Internet-Draft Cisco Systems, Inc.
Expires: June 14, 2007 Q. Xie Expires: January 10, 2008 Q. Xie
Motorola, Inc. Motorola, Inc.
L. Yarroll L. Yarroll
TimeSys Corp TimeSys Corp
K. Poon K. Poon
Sun Microsystems, Inc. Sun Microsystems, Inc.
M. Tuexen M. Tuexen
Univ. of Applied Sciences Muenster Univ. of Applied Sciences Muenster
December 11, 2006 July 9, 2007
Sockets API Extensions for Stream Control Transmission Protocol (SCTP) Sockets API Extensions for Stream Control Transmission Protocol (SCTP)
draft-ietf-tsvwg-sctpsocket-14.txt draft-ietf-tsvwg-sctpsocket-15.txt
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79. aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 41 skipping to change at page 1, line 41
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on June 14, 2007. This Internet-Draft will expire on January 10, 2008.
Copyright Notice Copyright Notice
Copyright (C) The IETF Trust (2006). Copyright (C) The IETF Trust (2007).
Abstract Abstract
This document describes a mapping of the Stream Control Transmission This document describes a mapping of the Stream Control Transmission
Protocol SCTP into a sockets API. The benefits of this mapping Protocol SCTP into a sockets API. The benefits of this mapping
include compatibility for TCP applications, access to new SCTP include compatibility for TCP applications, access to new SCTP
features and a consolidated error and event notification scheme. features and a consolidated error and event notification scheme.
Table of Contents Table of Contents
skipping to change at page 2, line 42 skipping to change at page 2, line 42
4.1.7. shutdown() - one-to-one style socket . . . . . . . . . 19 4.1.7. shutdown() - one-to-one style socket . . . . . . . . . 19
4.1.8. sendmsg() and recvmsg() - one-to-one style socket . . 20 4.1.8. sendmsg() and recvmsg() - one-to-one style socket . . 20
4.1.9. getpeername() . . . . . . . . . . . . . . . . . . . . 20 4.1.9. getpeername() . . . . . . . . . . . . . . . . . . . . 20
5. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 21 5. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 21
5.1. The msghdr and cmsghdr Structures . . . . . . . . . . . . 21 5.1. The msghdr and cmsghdr Structures . . . . . . . . . . . . 21
5.2. SCTP msg_control Structures . . . . . . . . . . . . . . . 22 5.2. SCTP msg_control Structures . . . . . . . . . . . . . . . 22
5.2.1. SCTP Initiation Structure (SCTP_INIT) . . . . . . . . 23 5.2.1. SCTP Initiation Structure (SCTP_INIT) . . . . . . . . 23
5.2.2. SCTP Header Information Structure (SCTP_SNDRCV) . . . 24 5.2.2. SCTP Header Information Structure (SCTP_SNDRCV) . . . 24
5.2.3. Extended SCTP Header Information Structure 5.2.3. Extended SCTP Header Information Structure
(SCTP_EXTRCV) . . . . . . . . . . . . . . . . . . . . 27 (SCTP_EXTRCV) . . . . . . . . . . . . . . . . . . . . 27
5.3. SCTP Events and Notifications . . . . . . . . . . . . . . 31 5.3. SCTP Events and Notifications . . . . . . . . . . . . . . 29
5.3.1. SCTP Notification Structure . . . . . . . . . . . . . 31 5.3.1. SCTP Notification Structure . . . . . . . . . . . . . 29
5.4. Ancillary Data Considerations and Semantics . . . . . . . 42 5.4. Ancillary Data Considerations and Semantics . . . . . . . 40
5.4.1. Multiple Items and Ordering . . . . . . . . . . . . . 42 5.4.1. Multiple Items and Ordering . . . . . . . . . . . . . 40
5.4.2. Accessing and Manipulating Ancillary Data . . . . . . 42 5.4.2. Accessing and Manipulating Ancillary Data . . . . . . 40
5.4.3. Control Message Buffer Sizing . . . . . . . . . . . . 43 5.4.3. Control Message Buffer Sizing . . . . . . . . . . . . 41
6. Common Operations for Both Styles . . . . . . . . . . . . . . 44 6. Common Operations for Both Styles . . . . . . . . . . . . . . 42
6.1. send(), recv(), sendto(), recvfrom() . . . . . . . . . . . 44 6.1. send(), recv(), sendto(), recvfrom() . . . . . . . . . . . 42
6.2. setsockopt(), getsockopt() . . . . . . . . . . . . . . . . 45 6.2. setsockopt(), getsockopt() . . . . . . . . . . . . . . . . 43
6.3. read() and write() . . . . . . . . . . . . . . . . . . . . 46 6.3. read() and write() . . . . . . . . . . . . . . . . . . . . 44
6.4. getsockname() . . . . . . . . . . . . . . . . . . . . . . 46 6.4. getsockname() . . . . . . . . . . . . . . . . . . . . . . 44
7. Socket Options . . . . . . . . . . . . . . . . . . . . . . . . 47 7. Socket Options . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1. Read / Write Options . . . . . . . . . . . . . . . . . . . 48 7.1. Read / Write Options . . . . . . . . . . . . . . . . . . . 46
7.1.1. Retransmission Timeout Parameters (SCTP_RTOINFO) . . . 48 7.1.1. Retransmission Timeout Parameters (SCTP_RTOINFO) . . . 46
7.1.2. Association Parameters (SCTP_ASSOCINFO) . . . . . . . 49 7.1.2. Association Parameters (SCTP_ASSOCINFO) . . . . . . . 47
7.1.3. Initialization Parameters (SCTP_INITMSG) . . . . . . . 51 7.1.3. Initialization Parameters (SCTP_INITMSG) . . . . . . . 49
7.1.4. SO_LINGER . . . . . . . . . . . . . . . . . . . . . . 51 7.1.4. SO_LINGER . . . . . . . . . . . . . . . . . . . . . . 49
7.1.5. SCTP_NODELAY . . . . . . . . . . . . . . . . . . . . . 51 7.1.5. SCTP_NODELAY . . . . . . . . . . . . . . . . . . . . . 49
7.1.6. SO_RCVBUF . . . . . . . . . . . . . . . . . . . . . . 51 7.1.6. SO_RCVBUF . . . . . . . . . . . . . . . . . . . . . . 49
7.1.7. SO_SNDBUF . . . . . . . . . . . . . . . . . . . . . . 52 7.1.7. SO_SNDBUF . . . . . . . . . . . . . . . . . . . . . . 50
7.1.8. Automatic Close of associations (SCTP_AUTOCLOSE) . . . 52 7.1.8. Automatic Close of associations (SCTP_AUTOCLOSE) . . . 50
7.1.9. Set Peer Primary Address 7.1.9. Set Peer Primary Address
(SCTP_SET_PEER_PRIMARY_ADDR) . . . . . . . . . . . . . 52 (SCTP_SET_PEER_PRIMARY_ADDR) . . . . . . . . . . . . . 50
7.1.10. Set Primary Address (SCTP_PRIMARY_ADDR) . . . . . . . 53 7.1.10. Set Primary Address (SCTP_PRIMARY_ADDR) . . . . . . . 51
7.1.11. Set Adaptation Layer Indicator 7.1.11. Set Adaptation Layer Indicator
(SCTP_ADAPTATION_LAYER) . . . . . . . . . . . . . . . 53 (SCTP_ADAPTATION_LAYER) . . . . . . . . . . . . . . . 51
7.1.12. Enable/Disable message fragmentation 7.1.12. Enable/Disable message fragmentation
(SCTP_DISABLE_FRAGMENTS) . . . . . . . . . . . . . . . 53 (SCTP_DISABLE_FRAGMENTS) . . . . . . . . . . . . . . . 51
7.1.13. Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) . . . 54 7.1.13. Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) . . . 52
7.1.14. Set default send parameters 7.1.14. Set default send parameters
(SCTP_DEFAULT_SEND_PARAM) . . . . . . . . . . . . . . 56 (SCTP_DEFAULT_SEND_PARAM) . . . . . . . . . . . . . . 54
7.1.15. Set notification and ancillary events (SCTP_EVENTS) . 57 7.1.15. Set notification and ancillary events (SCTP_EVENTS) . 54
7.1.16. Set/clear IPv4 mapped addresses 7.1.16. Set/clear IPv4 mapped addresses
(SCTP_I_WANT_MAPPED_V4_ADDR) . . . . . . . . . . . . . 57 (SCTP_I_WANT_MAPPED_V4_ADDR) . . . . . . . . . . . . . 54
7.1.17. Set the maximum fragmentation size (SCTP_MAXSEG) . . . 57 7.1.17. Get or set the maximum fragmentation size
(SCTP_MAXSEG) . . . . . . . . . . . . . . . . . . . . 55
7.1.18. Add a chunk that must be authenticated 7.1.18. Add a chunk that must be authenticated
(SCTP_AUTH_CHUNK) . . . . . . . . . . . . . . . . . . 57 (SCTP_AUTH_CHUNK) . . . . . . . . . . . . . . . . . . 55
7.1.19. Get or set the list of supported HMAC Identifiers 7.1.19. Get or set the list of supported HMAC Identifiers
(SCTP_HMAC_IDENT) . . . . . . . . . . . . . . . . . . 58 (SCTP_HMAC_IDENT) . . . . . . . . . . . . . . . . . . 56
7.1.20. Set a shared key (SCTP_AUTH_KEY) . . . . . . . . . . . 58 7.1.20. Set a shared key (SCTP_AUTH_KEY) . . . . . . . . . . . 56
7.1.21. Get or set the active shared key 7.1.21. Get or set the active shared key
(SCTP_AUTH_ACTIVE_KEY) . . . . . . . . . . . . . . . . 59 (SCTP_AUTH_ACTIVE_KEY) . . . . . . . . . . . . . . . . 57
7.1.22. Delete a shared key (SCTP_AUTH_DELETE_KEY) . . . . . . 59 7.1.22. Delete a shared key (SCTP_AUTH_DELETE_KEY) . . . . . . 58
7.1.23. Get or set delayed ack timer 7.1.23. Get or set delayed ack timer (SCTP_DELAYED_SACK) . . . 58
(SCTP_DELAYED_ACK_TIME) . . . . . . . . . . . . . . . 60
7.1.24. Get or set fragmented interleave 7.1.24. Get or set fragmented interleave
(SCTP_FRAGMENT_INTERLEAVE) . . . . . . . . . . . . . . 60 (SCTP_FRAGMENT_INTERLEAVE) . . . . . . . . . . . . . . 59
7.1.25. Set or Get the sctp partial delivery point 7.1.25. Set or Get the sctp partial delivery point
(SCTP_PARTIAL_DELIVERY_POINT) . . . . . . . . . . . . 61 (SCTP_PARTIAL_DELIVERY_POINT) . . . . . . . . . . . . 60
7.1.26. Set or Get the use of extended receive info 7.1.26. Set or Get the use of extended receive info
(SCTP_USE_EXT_RCVINFO) . . . . . . . . . . . . . . . . 61 (SCTP_USE_EXT_RCVINFO) . . . . . . . . . . . . . . . . 60
7.1.27. Set or Get the auto asconf flag (SCTP_AUTO_ASCONF) . . 61 7.1.27. Set or Get the auto asconf flag (SCTP_AUTO_ASCONF) . . 61
7.1.28. Set or Get the maximum burst (SCTP_MAX_BURST) . . . . 61 7.1.28. Set or Get the maximum burst (SCTP_MAX_BURST) . . . . 61
7.1.29. Set or Get the default context (SCTP_CONTEXT) . . . . 62 7.1.29. Set or Get the default context (SCTP_CONTEXT) . . . . 61
7.1.30. Enable or disable explicit EOR marking 7.1.30. Enable or disable explicit EOR marking
(SCTP_EXPLICIT_EOR) . . . . . . . . . . . . . . . . . 62 (SCTP_EXPLICIT_EOR) . . . . . . . . . . . . . . . . . 62
7.2. Read-Only Options . . . . . . . . . . . . . . . . . . . . 62 7.2. Read-Only Options . . . . . . . . . . . . . . . . . . . . 62
7.2.1. Association Status (SCTP_STATUS) . . . . . . . . . . . 62 7.2.1. Association Status (SCTP_STATUS) . . . . . . . . . . . 62
7.2.2. Peer Address Information (SCTP_GET_PEER_ADDR_INFO) . . 64 7.2.2. Peer Address Information (SCTP_GET_PEER_ADDR_INFO) . . 63
7.2.3. Get the list of chunks the peer requires to be 7.2.3. Get the list of chunks the peer requires to be
authenticated (SCTP_PEER_AUTH_CHUNKS) . . . . . . . . 65 authenticated (SCTP_PEER_AUTH_CHUNKS) . . . . . . . . 64
7.2.4. Get the list of chunks the local endpoint requires 7.2.4. Get the list of chunks the local endpoint requires
to be authenticated (SCTP_LOCAL_AUTH_CHUNKS) . . . . . 65 to be authenticated (SCTP_LOCAL_AUTH_CHUNKS) . . . . . 65
7.2.5. Get the list of current associations 7.2.5. Get the current number of associations
(SCTP_GET_ASOC_ID_LIST) . . . . . . . . . . . . . . . 65 (SCTP_GET_ASSOC_NUMBER) . . . . . . . . . . . . . . . 65
7.2.6. Get the current identifiers of associations
(SCTP_GET_ASSOC_ID_LIST) . . . . . . . . . . . . . . . 65
7.3. Ancillary Data and Notification Interest Options . . . . . 66 7.3. Ancillary Data and Notification Interest Options . . . . . 66
8. New Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 68 8. New Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 68
8.1. sctp_bindx() . . . . . . . . . . . . . . . . . . . . . . . 69 8.1. sctp_bindx() . . . . . . . . . . . . . . . . . . . . . . . 68
8.2. Branched-off Association . . . . . . . . . . . . . . . . . 70 8.2. Branched-off Association . . . . . . . . . . . . . . . . . 69
8.3. sctp_getpaddrs() . . . . . . . . . . . . . . . . . . . . . 70 8.3. sctp_getpaddrs() . . . . . . . . . . . . . . . . . . . . . 70
8.4. sctp_freepaddrs() . . . . . . . . . . . . . . . . . . . . 71 8.4. sctp_freepaddrs() . . . . . . . . . . . . . . . . . . . . 71
8.5. sctp_getladdrs() . . . . . . . . . . . . . . . . . . . . . 71 8.5. sctp_getladdrs() . . . . . . . . . . . . . . . . . . . . . 71
8.6. sctp_freeladdrs() . . . . . . . . . . . . . . . . . . . . 72 8.6. sctp_freeladdrs() . . . . . . . . . . . . . . . . . . . . 72
8.7. sctp_sendmsg() . . . . . . . . . . . . . . . . . . . . . . 72 8.7. sctp_sendmsg() . . . . . . . . . . . . . . . . . . . . . . 72
8.8. sctp_recvmsg() . . . . . . . . . . . . . . . . . . . . . . 73 8.8. sctp_recvmsg() . . . . . . . . . . . . . . . . . . . . . . 72
8.9. sctp_connectx() . . . . . . . . . . . . . . . . . . . . . 73 8.9. sctp_connectx() . . . . . . . . . . . . . . . . . . . . . 73
8.10. sctp_send() . . . . . . . . . . . . . . . . . . . . . . . 74 8.10. sctp_send() . . . . . . . . . . . . . . . . . . . . . . . 74
8.11. sctp_sendx() . . . . . . . . . . . . . . . . . . . . . . . 75 8.11. sctp_sendx() . . . . . . . . . . . . . . . . . . . . . . . 75
8.12. sctp_getaddrlen . . . . . . . . . . . . . . . . . . . . . 76 8.12. sctp_getaddrlen . . . . . . . . . . . . . . . . . . . . . 76
9. Preprocessor Constants . . . . . . . . . . . . . . . . . . . . 76 9. Preprocessor Constants . . . . . . . . . . . . . . . . . . . . 76
10. IANA considerations . . . . . . . . . . . . . . . . . . . . . 77 10. IANA considerations . . . . . . . . . . . . . . . . . . . . . 77
11. Security Considerations . . . . . . . . . . . . . . . . . . . 77 11. Security Considerations . . . . . . . . . . . . . . . . . . . 77
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 77 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 77
13. Normative references . . . . . . . . . . . . . . . . . . . . . 78 13. Normative references . . . . . . . . . . . . . . . . . . . . . 77
Appendix A. one-to-one style Code Example . . . . . . . . . . . . 78 Appendix A. one-to-one style Code Example . . . . . . . . . . . . 78
Appendix B. one-to-many style Code Example . . . . . . . . . . . 84 Appendix B. one-to-many style Code Example . . . . . . . . . . . 83
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 85 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 85
Intellectual Property and Copyright Statements . . . . . . . . . . 87 Intellectual Property and Copyright Statements . . . . . . . . . . 87
1. Introduction 1. Introduction
The sockets API has provided a standard mapping of the Internet The sockets API has provided a standard mapping of the Internet
Protocol suite to many operating systems. Both TCP RFC793 [RFC0793] Protocol suite to many operating systems. Both TCP RFC793 [RFC0793]
and UDP RFC768 [RFC0768] have benefited from this standard and UDP RFC768 [RFC0768] have benefited from this standard
representation and access method across many diverse platforms. SCTP representation and access method across many diverse platforms. SCTP
is a new protocol that provides many of the characteristics of TCP is a new protocol that provides many of the characteristics of TCP
skipping to change at page 11, line 11 skipping to change at page 11, line 11
If the application does not provide enough buffer space to completely If the application does not provide enough buffer space to completely
receive a data message, MSG_EOR will not be set in msg_flags. receive a data message, MSG_EOR will not be set in msg_flags.
Successive reads will consume more of the same message until the Successive reads will consume more of the same message until the
entire message has been delivered, and MSG_EOR will be set. entire message has been delivered, and MSG_EOR will be set.
If the SCTP stack is running low on buffers, it may partially deliver If the SCTP stack is running low on buffers, it may partially deliver
a message. In this case, MSG_EOR will not be set, and more calls to a message. In this case, MSG_EOR will not be set, and more calls to
recvmsg() will be necessary to completely consume the message. Only recvmsg() will be necessary to completely consume the message. Only
one message at a time per stream can be partially delivered. one message at a time can be partially delivered in any stream. The
socket option SCTP_FRAGMENT_INTERLEAVE controls various aspects of
what interlacing of messages occurs for both the one-to-one and the
one-to-many model sockets. Please consult Section 7.1.24 for further
details on message delivery options.
Note, if the socket is a branched-off socket that only represents one Note, if the socket is a branched-off socket that only represents one
association (see Section 3.1), the msg_name field can be used to association (see Section 3.1), the msg_name field can be used to
override the primary address when sending data. override the primary address when sending data.
3.1.5. close() - one-to-many style socket 3.1.5. close() - one-to-many style socket
Applications use close() to perform graceful shutdown (as described Applications use close() to perform graceful shutdown (as described
in Section 10.1 of RFC2960 [RFC2960]) on ALL the associations in Section 10.1 of RFC2960 [RFC2960]) on ALL the associations
currently represented by a one-to-many style socket. currently represented by a one-to-many style socket.
skipping to change at page 27, line 21 skipping to change at page 27, line 21
for the association announced in the SCTP_COMM_UP notification. All for the association announced in the SCTP_COMM_UP notification. All
notifications for a given association have the same identifier. notifications for a given association have the same identifier.
Ignored for one-to-one style sockets. Ignored for one-to-one style sockets.
A sctp_sndrcvinfo item always corresponds to the data in msg_iov. A sctp_sndrcvinfo item always corresponds to the data in msg_iov.
5.2.3. Extended SCTP Header Information Structure (SCTP_EXTRCV) 5.2.3. Extended SCTP Header Information Structure (SCTP_EXTRCV)
This cmsghdr structure specifies SCTP options for SCTP header This cmsghdr structure specifies SCTP options for SCTP header
information about a received message via recvmsg(). Note that this information about a received message via recvmsg(). Note that this
structure is an extended version of SCTP_SNDRCV and will only be structure is an extended version of SCTP_SNDRCV (see Section 5.2.2)
received if the user has set the socket option SCTP_USE_EXT_RCVINFO and will only be received if the user has set the socket option
to true in addition to any event subscription needed to receive SCTP_USE_EXT_RCVINFO to true in addition to any event subscription
ancillary data.. needed to receive ancillary data. Note that next message data is not
valid unless the current message is completely read, i.e. the MSG_EOR
is set, in other words if you have more data to read from the current
message then no next message information will be available.
cmsg_level cmsg_type cmsg_data[] cmsg_level cmsg_type cmsg_data[]
------------ ------------ ---------------------- ------------ ------------ ----------------------
IPPROTO_SCTP SCTP_SNDRCV struct sctp_sndrcvinfo IPPROTO_SCTP SCTP_EXTRCV struct sctp_extrcvinfo
Here is the definition of sctp_sndrcvinfo: Here is the definition of sctp_extrcvinfo
struct sctp_extrcvinfo { struct sctp_extrcvinfo {
uint16_t sinfo_stream; struct sctp_sndrcvinfo serinfo_sinfo;
uint16_t sinfo_ssn; uint16_t serinfo_next_flags;
uint16_t sinfo_flags; uint16_t serinfo_next_stream;
uint32_t sinfo_ppid; uint32_t serinfo_next_aid;
uint32_t sinfo_context; uint32_t serinfo_next_length;
uint32_t sinfo_timetolive; uint32_t serinfo_next_ppid;
uint32_t sinfo_tsn;
uint32_t sinfo_cumtsn;
sctp_assoc_t sinfo_assoc_id;
uint16_t next_flags;
uint16_t next_stream;
uint32_t next_asocid;
uint32_t next_length;
uint32_t next_ppid;
}; };
sinfo_stream: 16 bits (unsigned integer) serinfo_sinfo: structure
For recvmsg() the SCTP stack places the message's stream number in
this value. For sendmsg() this value holds the stream number that
the application wishes to send this message to. If a sender
specifies an invalid stream number an error indication is returned
and the call fails.
sinfo_ssn: 16 bits (unsigned integer)
For recvmsg() this value contains the stream sequence number that the
remote endpoint placed in the DATA chunk. For fragmented messages
this is the same number for all deliveries of the message (if more
than one recvmsg() is needed to read the message). The sendmsg()
call will ignore this parameter.
sinfo_ppid: 32 bits (unsigned integer)
This value in sendmsg() is an unsigned integer that is passed to the
remote end in each user message. In recvmsg() this value is the same
information that was passed by the upper layer in the peer
application. Please note that the SCTP stack performs no byte order
modification of this field. For example, if the DATA chunk has to
contain a given value in network byte order, the SCTP user has to
perform the htonl() computation.
sinfo_context: 32 bits (unsigned integer)
This value is an opaque 32 bit context datum that is used in the
sendmsg() function. This value is passed back to the upper layer if
a error occurs on the send of a message and is retrieved with each
undelivered message (Note: if a endpoint has done multiple sends, all
of which fail, multiple different sinfo_context values will be
returned. One with each user data message).
sinfo_flags: 16 bits (unsigned integer)
This field may contain any of the following flags and is composed of
a bitwise OR of these values.
recvmsg() flags:
SCTP_UNORDERED - This flag is present when the message was sent non-
ordered.
sendmsg() flags:
SCTP_UNORDERED - This flag requests the un-ordered delivery of the
message. If this flag is clear the datagram is considered an
ordered send.
SCTP_ADDR_OVER - This flag, in the one-to-many style, requests the
SCTP stack to override the primary destination address with the
address found with the sendto/sendmsg call.
SCTP_ABORT - Setting this flag causes the specified association to
abort by sending an ABORT message to the peer (one-to-many style
only). The ABORT chunk will contain an error cause 'User
Initiated Abort' with cause code 12. The cause specific
information of this error cause is provided in msg_iov.
SCTP_EOF - Setting this flag invokes the SCTP graceful shutdown
procedures on the specified association. Graceful shutdown
assures that all data enqueued by both endpoints is successfully
transmitted before closing the association (one-to-many style
only).
SCTP_SENDALL - This flag, if set, will cause a one-to-many model
socket to send the message to all associations that are currently
established on this socket. For the one-to-one socket, this flag
has no effect.
SCTP_EOR - This flag, if set, will indicate that this send
terminates the record.
sinfo_timetolive: 32 bit (unsigned integer)
For the sending side, this field contains the message time to live in
milliseconds. The sending side will expire the message within the
specified time period if the message as not been sent to the peer
within this time period. This value will override any default value
set using any socket option. Also note that the value of 0 is
special in that it indicates no timeout should occur on this message.
sinfo_tsn: 32 bit (unsigned integer)
For the receiving side, this field holds a TSN that was assigned to
one of the SCTP Data Chunks.
sinfo_cumtsn: 32 bit (unsigned integer)
This field will hold the current cumulative TSN as known by the
underlying SCTP layer. Note this field is ignored when sending and
only valid for a receive operation when sinfo_flags are set to
SCTP_UNORDERED.
sinfo_assoc_id: sizeof (sctp_assoc_t)
The association handle field, sinfo_assoc_id, holds the identifier
for the association announced in the SCTP_COMM_UP notification. All
notifications for a given association have the same identifier.
Ignored for one-to-one style sockets.
A sctp_sndrcvinfo item always corresponds to the data in msg_iov. Please see Section 5.2.2 for the details for this structure.
next_flags: 16 bit (unsigned integer) serinfo_next_flags: 16 bit (unsigned integer)
This bitmask will hold one or more of the following values: This bitmask will hold one or more of the following values:
SCTP_NEXT_MSG_AVAIL - This bit, when set to 1, indicates that next SCTP_NEXT_MSG_AVAIL - This bit, when set to 1, indicates that next
message information is available i.e.: next_stream, next_asocid, message information is available i.e.: next_stream, next_asocid,
next_length and next_ppid fields all have valid values. If this next_length and next_ppid fields all have valid values. If this
bit is set to 0, then these fields are not valid and should be bit is set to 0, then these fields are not valid and should be
ignored. ignored.
SCTP_NEXT_MSG_ISCOMPLETE - This bit, when set, indicates that the SCTP_NEXT_MSG_ISCOMPLETE - This bit, when set, indicates that the
next message is completely in the receive buffer. The next_length next message is completely in the receive buffer. The next_length
field thus contains the entire message size. If this flag is set field thus contains the entire message size. If this flag is set
to 0, then the next_length field only contains part of the message to 0, then the next_length field only contains part of the message
skipping to change at page 30, line 29 skipping to change at page 28, line 22
next message is completely in the receive buffer. The next_length next message is completely in the receive buffer. The next_length
field thus contains the entire message size. If this flag is set field thus contains the entire message size. If this flag is set
to 0, then the next_length field only contains part of the message to 0, then the next_length field only contains part of the message
size since the message is still being received (it is being size since the message is still being received (it is being
partially delivered). partially delivered).
SCTP_NEXT_MSG_IS_UNORDERED - This bit, when set, indicates that the SCTP_NEXT_MSG_IS_UNORDERED - This bit, when set, indicates that the
next message to be received was sent by the peer as unordered. If next message to be received was sent by the peer as unordered. If
this bit is not set (i.e the bit is 0) the next message to be read this bit is not set (i.e the bit is 0) the next message to be read
is an ordered message in the stream specified. is an ordered message in the stream specified.
SCTP_NEXT_MSG_IS_NOTIFICATION - This bit, when set, indicates that
the next message to be received is not a message from the peer,
but instead is a MSG_NOTIFICATION from the local SCTP stack.
next_stream: 16 bit (unsigned integer) serinfo_next_stream: 16 bit (unsigned integer)
This value, when valid (see next_flags), contains the next stream This value, when valid (see sreinfo_next_flags), contains the next
number that will be received on a subsequent call to one of the stream number that will be received on a subsequent call to one of
receive message functions. the receive message functions.
next_asocid: 32 bit (unsigned integer) serinfo_next_aid: 32 bit (unsigned integer)
This value, when valid (see next_flags), contains the next This value, when valid (see next_flags), contains the next
association identification that will be received on a subsequent call association identification that will be received on a subsequent call
to one of the receive message functions. to one of the receive message functions.
next_length: 32 bit (unsigned integer) sreinfo_next_length: 32 bit (unsigned integer)
This value, when valid (see next_flags), contains the length of the This value, when valid (see sreinfo_next_flags), contains the length
next message that will be received on a subsequent call to one of the of the next message that will be received on a subsequent call to one
receive message functions. Note that this length may be a partial of the receive message functions. Note that this length may be a
length depending on the settings of next_flags. partial length depending on the settings of next_flags.
next_ppid: 32 bit (unsigned integer) sreinfo_next_ppid: 32 bit (unsigned integer)
This value, when valid (see next_flags), contains the ppid of the This value, when valid (see sreinfo_next_flags), contains the ppid of
next message that will be received on a subsequent call to one of the the next message that will be received on a subsequent call to one of
receive message functions. the receive message functions.
5.3. SCTP Events and Notifications 5.3. SCTP Events and Notifications
An SCTP application may need to understand and process events and An SCTP application may need to understand and process events and
errors that happen on the SCTP stack. These events include network errors that happen on the SCTP stack. These events include network
status changes, association startups, remote operational errors and status changes, association startups, remote operational errors and
undeliverable messages. All of these can be essential for the undeliverable messages. All of these can be essential for the
application. application.
When an SCTP application layer does a recvmsg() the message read is When an SCTP application layer does a recvmsg() the message read is
skipping to change at page 40, line 29 skipping to change at page 38, line 10
5.3.1.7. SCTP_PARTIAL_DELIVERY_EVENT 5.3.1.7. SCTP_PARTIAL_DELIVERY_EVENT
When a receiver is engaged in a partial delivery of a message this When a receiver is engaged in a partial delivery of a message this
notification will be used to indicate various events. notification will be used to indicate various events.
struct sctp_pdapi_event { struct sctp_pdapi_event {
uint16_t pdapi_type; uint16_t pdapi_type;
uint16_t pdapi_flags; uint16_t pdapi_flags;
uint32_t pdapi_length; uint32_t pdapi_length;
uint32_t pdapi_indication; uint32_t pdapi_indication;
uint32_t pdapi_stream;
uint32_t pdapi_seq;
sctp_assoc_t pdapi_assoc_id; sctp_assoc_t pdapi_assoc_id;
}; };
pdapi_type pdapi_type
It should be SCTP_PARTIAL_DELIVERY_EVENT It should be SCTP_PARTIAL_DELIVERY_EVENT
pdapi_flags: 16 bits (unsigned integer) pdapi_flags: 16 bits (unsigned integer)
Currently unused. Currently unused.
skipping to change at page 41, line 4 skipping to change at page 38, line 35
This field is the total length of the notification data, including This field is the total length of the notification data, including
the notification header. It will generally be sizeof (struct the notification header. It will generally be sizeof (struct
sctp_pdapi_event). sctp_pdapi_event).
pdapi_indication: 32 bits (unsigned integer) pdapi_indication: 32 bits (unsigned integer)
This field holds the indication being sent to the application This field holds the indication being sent to the application
possible values include: possible values include:
SCTP_PARTIAL_DELIVERY_ABORTED SCTP_PARTIAL_DELIVERY_ABORTED
pdapi_stream: 16 bits (unsigned integer)
This field holds the stream on which the partial delivery event
happened.
pdapi_seq: 16 bits (unsigned integer)
This field holds the stream sequence number which was being partially
delivered.
pdapi_assoc_id: sizeof (sctp_assoc_t) pdapi_assoc_id: sizeof (sctp_assoc_t)
The association id field, holds the identifier for the association. The association id field, holds the identifier for the association.
All notifications for a given association have the same association All notifications for a given association have the same association
identifier. For one-to-one style socket, this field is ignored. identifier. For one-to-one style socket, this field is ignored.
5.3.1.8. SCTP_AUTHENTICATION_EVENT 5.3.1.8. SCTP_AUTHENTICATION_EVENT
When a receiver is using authentication this message will provide When a receiver is using authentication this message will provide
notifications regarding new keys being made active as well as errors. notifications regarding new keys being made active as well as errors.
skipping to change at page 48, line 9 skipping to change at page 46, line 9
opt specifies which SCTP socket option to get. It can get any socket opt specifies which SCTP socket option to get. It can get any socket
option currently supported that requests information (either read/ option currently supported that requests information (either read/
write options or read only) such as: write options or read only) such as:
SCTP_RTOINFO SCTP_RTOINFO
SCTP_ASSOCINFO SCTP_ASSOCINFO
SCTP_DEFAULT_SEND_PARAM SCTP_DEFAULT_SEND_PARAM
SCTP_GET_PEER_ADDR_INFO SCTP_GET_PEER_ADDR_INFO
SCTP_PRIMARY_ADDR SCTP_PRIMARY_ADDR
SCTP_PEER_ADDR_PARAMS SCTP_PEER_ADDR_PARAMS
SCTP_STATUS SCTP_STATUS
SCTP_CONTEXT
SCTP_AUTH_ACTIVE_KEY SCTP_AUTH_ACTIVE_KEY
SCTP_PEER_AUTH_CHUNKS SCTP_PEER_AUTH_CHUNKS
SCTP_LOCAL_AUTH_CHUNKS SCTP_LOCAL_AUTH_CHUNKS
arg is an option-specific structure buffer provided by the caller. arg is an option-specific structure buffer provided by the caller.
See Section 8.5) subsections for more information on these options See Section 8.5) subsections for more information on these options
and option-specific structures. and option-specific structures.
sctp_opt_info() returns 0 on success, or on failure returns -1 and sctp_opt_info() returns 0 on success, or on failure returns -1 and
sets errno to the appropriate error code. sets errno to the appropriate error code.
skipping to change at page 49, line 34 skipping to change at page 47, line 35
To access or modify these parameters, the application should call To access or modify these parameters, the application should call
getsockopt or setsockopt() respectively with the option name getsockopt or setsockopt() respectively with the option name
SCTP_RTOINFO. SCTP_RTOINFO.
7.1.2. Association Parameters (SCTP_ASSOCINFO) 7.1.2. Association Parameters (SCTP_ASSOCINFO)
This option is used to both examine and set various association and This option is used to both examine and set various association and
endpoint parameters. endpoint parameters.
See RFC2960 [RFC2960] for more information on how this parameter is See RFC2960 [RFC2960] for more information on how this parameter is
used. The peer address parameter is ignored for one-to-one style used. The sasoc_assoc_id parameter is ignored for one-to-one style
socket. socket.
The following structure is used to access and modify this parameters: The following structure is used to access and modify this parameters:
struct sctp_assocparams { struct sctp_assocparams {
sctp_assoc_t sasoc_assoc_id; sctp_assoc_t sasoc_assoc_id;
uint16_t sasoc_asocmaxrxt; uint16_t sasoc_asocmaxrxt;
uint16_t sasoc_number_peer_destinations; uint16_t sasoc_number_peer_destinations;
uint32_t sasoc_peer_rwnd; uint32_t sasoc_peer_rwnd;
uint32_t sasoc_local_rwnd; uint32_t sasoc_local_rwnd;
skipping to change at page 53, line 8 skipping to change at page 51, line 8
set primary request: set primary request:
struct sctp_setpeerprim { struct sctp_setpeerprim {
sctp_assoc_t sspp_assoc_id; sctp_assoc_t sspp_assoc_id;
struct sockaddr_storage sspp_addr; struct sockaddr_storage sspp_addr;
}; };
sspp_addr - The address to set as primary sspp_addr - The address to set as primary
sspp_assoc_id - This is filled in by the application, and identifies sspp_assoc_id - This is filled in by the application, and identifies
the association for this request. the association for this request.
This functionality is optional. Implementations that do not support Note that this option really should be considered a write only option
this functionality should return EOPNOTSUPP. (not a read/write option) since it can NOT be passed to a
getsockopt() call and is only valid when used with setsockopt() if
the implementation supports this feature since this functionality is
optional. Implementations that do not support this functionality
should return EOPNOTSUPP.
7.1.10. Set Primary Address (SCTP_PRIMARY_ADDR) 7.1.10. Set Primary Address (SCTP_PRIMARY_ADDR)
Requests that the local SCTP stack use the enclosed peer address as Requests that the local SCTP stack use the enclosed peer address as
the association primary. The enclosed address must be one of the the association primary. The enclosed address must be one of the
association peer's addresses. The following structure is used to association peer's addresses. The following structure is used to
make a set peer primary request: make a set peer primary request:
struct sctp_setprim { struct sctp_setprim {
sctp_assoc_t ssp_assoc_id; sctp_assoc_t ssp_assoc_id;
skipping to change at page 54, line 20 skipping to change at page 52, line 20
number of retransmissions sent before an address is considered number of retransmissions sent before an address is considered
unreachable. The following structure is used to access and modify an unreachable. The following structure is used to access and modify an
address's parameters: address's parameters:
struct sctp_paddrparams { struct sctp_paddrparams {
sctp_assoc_t spp_assoc_id; sctp_assoc_t spp_assoc_id;
struct sockaddr_storage spp_address; struct sockaddr_storage spp_address;
uint32_t spp_hbinterval; uint32_t spp_hbinterval;
uint16_t spp_pathmaxrxt; uint16_t spp_pathmaxrxt;
uint32_t spp_pathmtu; uint32_t spp_pathmtu;
uint32_t spp_sackdelay;
uint32_t spp_flags; uint32_t spp_flags;
uint32_t spp_ipv6_flowlabel; uint32_t spp_ipv6_flowlabel;
uint8_t spp_ipv4_tos; uint8_t spp_ipv4_tos;
}; };
spp_assoc_id - (one-to-many style socket) This is filled in the spp_assoc_id - (one-to-many style socket) This is filled in the
application, and identifies the association for this query. application, and identifies the association for this query.
spp_address - This specifies which address is of interest. spp_address - This specifies which address is of interest.
spp_hbinterval - This contains the value of the heartbeat interval, spp_hbinterval - This contains the value of the heartbeat interval,
in milliseconds. Note that unless the spp_flag is set to in milliseconds. Note that unless the spp_flag is set to
SPP_HB_ENABLE the value of this field is ignored. Note also that SPP_HB_ENABLE the value of this field is ignored. Note also that
a value of zero indicates the current setting should be left a value of zero indicates the current setting should be left
unchanged. To set an actual value of zero the use of the flag unchanged. To set an actual value of zero the use of the flag
SPP_HB_TIME_IS_ZERO should be used. SPP_HB_TIME_IS_ZERO should be used.
spp_pathmaxrxt - This contains the maximum number of retransmissions spp_pathmaxrxt - This contains the maximum number of retransmissions
before this address shall be considered unreachable. Note that before this address shall be considered unreachable. Note that a
unless the spp_flag is set to SPP_PMTUD_ENABLE the value of this value of zero indicates the current setting should be left
field is ignored. Note also that a value of zero indicates the unchanged.
current setting should be left unchanged.
spp_pathmtu - When Path MTU discovery is disabled the value spp_pathmtu - When Path MTU discovery is disabled the value
specified here will be the "fixed" path mtu (i.e. the value of the specified here will be the "fixed" path mtu (i.e. the value of the
spp_flags field must include the flag SPP_PMTUD_DISABLE for this spp_flags field must include the flag SPP_PMTUD_DISABLE for this
field to have any effect). Note that if the spp_address field is field to have any effect). Note that if the spp_address field is
empty then all associations on this address will have this fixed empty then all destinations for this association will have this
path mtu set upon them. If an address is specified, then only fixed path mtu set upon them. If an address is specified, then
that address will be effected. only that address will be effected. Note also that this option
spp_sackdelay - When delayed sack is enabled, this value specifies cannot be set on the endpoint, but must be set on each individual
the number of milliseconds that sacks will be delayed for. This association. Also, when disabling PMTU discovery, the
value will apply to all addresses of an association if the implementation may disallow this behavior if the "fixed" path mtu
spp_address field is empty. Note that unless the spp_flag is set is below the constant value SCTP_SMALLEST_PMTU.
to SPP_SACKDELAY_ENABLE the value of this field is ignored. Note
also that a value of zero indicates the current setting should be
left unchanged.
spp_ipv6_flowlabel- This field is used in conjunction with the spp_ipv6_flowlabel- This field is used in conjunction with the
SPP_IPV4_FLOWLABEL flag. SPP_IPV6_FLOWLABEL flag.
spp_ipv4_tos- This field is used in conjunction with the spp_ipv4_tos- This field is used in conjunction with the
SPP_IPV4_TOS flag. SPP_IPV4_TOS flag.
spp_flags- These flags are used to control various features on an spp_flags- These flags are used to control various features on an
association. The flag field is a bit mask which may contain zero association. The flag field is a bit mask which may contain zero
or more of the following options: or more of the following options:
SPP_HB_ENABLE - Enable heartbeats on the specified address. Note SPP_HB_ENABLE - Enable heartbeats on the specified address. Note
that if the address field is empty all addresses for the that if the address field is empty all addresses for the
association have heartbeats enabled upon them. association have heartbeats enabled upon them.
SPP_HB_DISABLE - Disable heartbeats on the specified address. SPP_HB_DISABLE - Disable heartbeats on the specified address.
Note that if the address field is empty all addresses for the Note that if the address field is empty all addresses for the
skipping to change at page 55, line 33 skipping to change at page 53, line 33
SPP_HB_TIME_IS_ZERO - Specify's that the time for heartbeat delay SPP_HB_TIME_IS_ZERO - Specify's that the time for heartbeat delay
is to be set to the value of 0 milliseconds. is to be set to the value of 0 milliseconds.
SPP_PMTUD_ENABLE - This field will enable PMTU discovery upon the SPP_PMTUD_ENABLE - This field will enable PMTU discovery upon the
specified address. Note that if the address field is empty specified address. Note that if the address field is empty
then all addresses on the association are effected. then all addresses on the association are effected.
SPP_PMTUD_DISABLE - This field will disable PMTU discovery upon SPP_PMTUD_DISABLE - This field will disable PMTU discovery upon
the specified address. Note that if the address field is empty the specified address. Note that if the address field is empty
then all addresses on the association are effected. Not also then all addresses on the association are effected. Not also
that SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually that SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
exclusive. Enabling both will have undetermined results. exclusive. Enabling both will have undetermined results.
SPP_SACKDELAY_ENABLE - Setting this flag turns on delayed sack.
The time specified in spp_sackdelay is used to specify the sack
delay for this address. Note that if spp_address is empty then
all addresses will enable delayed sack and take on the sack
delay value specified in spp_sackdelay.
SPP_SACKDELAY_DISABLE - Setting this flag turns off delayed sack.
If the spp_address field is blank then delayed sack is disabled
for the entire association. Note also that this field is
mutually exclusive to SPP_SACKDELAY_ENABLE, setting both will
have undefined results.
SPP_IPV6_FLOWLABEL - Setting this flag enables setting of the SPP_IPV6_FLOWLABEL - Setting this flag enables setting of the
IPV6 flowlabel value associated with either the association or IPV6 flowlabel value associated with either the association or
the specific address. If the address field is filled in, then the specific address. If the address field is filled in, then
the specific destination address has this value set upon it. the specific destination address has this value set upon it.
If the association is specified, but not the address, then the If the association is specified, but not the address, then the
flowlabel value is set for any future destination addresses flowlabel value is set for any future destination addresses
that may be added. The value is obtained in the that may be added. The value is obtained in the
spp_ipv6_flowlabel field. spp_ipv6_flowlabel field.
Upon retrieval, this flag will be set to indicate that the Upon retrieval, this flag will be set to indicate that the
skipping to change at page 56, line 45 skipping to change at page 54, line 36
7.1.14. Set default send parameters (SCTP_DEFAULT_SEND_PARAM) 7.1.14. Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
Applications that wish to use the sendto() system call may wish to Applications that wish to use the sendto() system call may wish to
specify a default set of parameters that would normally be supplied specify a default set of parameters that would normally be supplied
through the inclusion of ancillary data. This socket option allows through the inclusion of ancillary data. This socket option allows
such an application to set the default sctp_sndrcvinfo structure. such an application to set the default sctp_sndrcvinfo structure.
The application that wishes to use this socket option simply passes The application that wishes to use this socket option simply passes
in to this call the sctp_sndrcvinfo structure defined in in to this call the sctp_sndrcvinfo structure defined in
Section 5.2.2) The input parameters accepted by this call include Section 5.2.2) The input parameters accepted by this call include
sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context, sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context,
sinfo_timetolive. The sinfo_assoc_id field specifies the default sinfo_timetolive. The sinfo_assoc_id field specifies the association
association used for send operations on one-to-many style sockets. to apply the parameters to in a one-to-many style sockets. It is
It is ignored on the one-to-one style. Note that setting the ignored on the one-to-one style. Note that setting the
sinfo_assoc_id field to zero indicates that the users wishes to set sinfo_assoc_id field to zero indicates that the users wishes to set
the endpoint default send parameters for all future associations. the endpoint default send parameters for all future associations.
7.1.15. Set notification and ancillary events (SCTP_EVENTS) 7.1.15. Set notification and ancillary events (SCTP_EVENTS)
This socket option is used to specify various notifications and This socket option is used to specify various notifications and
ancillary data the user wishes to receive. Please see Section 7.3) ancillary data the user wishes to receive. Please see Section 7.3)
for a full description of this option and its usage. for a full description of this option and its usage.
7.1.16. Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 7.1.16. Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR)
skipping to change at page 57, line 16 skipping to change at page 55, line 4
This socket option is used to specify various notifications and This socket option is used to specify various notifications and
ancillary data the user wishes to receive. Please see Section 7.3) ancillary data the user wishes to receive. Please see Section 7.3)
for a full description of this option and its usage. for a full description of this option and its usage.
7.1.16. Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 7.1.16. Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR)
This socket option is a boolean flag which turns on or off mapped V4 This socket option is a boolean flag which turns on or off mapped V4
addresses. If this option is turned on and the socket is type addresses. If this option is turned on and the socket is type
PF_INET6, then IPv4 addresses will be mapped to V6 representation. PF_INET6, then IPv4 addresses will be mapped to V6 representation.
If this option is turned off, then no mapping will be done of V4 If this option is turned off, then no mapping will be done of V4
addresses and a user will receive both PF_INET6 and PF_INET type addresses and a user will receive both PF_INET6 and PF_INET type
addresses on the socket. addresses on the socket.
By default this option is turned on and expects an integer to be By default this option is turned off and expects an integer to be
passed where non-zero turns on the option and zero turns off the passed where non-zero turns on the option and zero turns off the
option. option.
7.1.17. Set the maximum fragmentation size (SCTP_MAXSEG) 7.1.17. Get or set the maximum fragmentation size (SCTP_MAXSEG)
This socket option specifies the maximum size to put in any outgoing This option will get or set the maximum size to put in any outgoing
SCTP DATA chunk. If a message is larger than this size it will be SCTP DATA chunk. If a message is larger than this size it will be
fragmented by SCTP into the specified size. Note that the underlying fragmented by SCTP into the specified size. Note that the underlying
SCTP implementation may fragment into smaller sized chunks when the SCTP implementation may fragment into smaller sized chunks when the
PMTU of the underlying association is smaller than the value set by PMTU of the underlying association is smaller than the value set by
the user. The option expects an integer. the user. The default value for this option is '0' which indicates
the user is NOT limiting fragmentation and only the PMTU will effect
SCTP's choice of DATA chunk size. Note also that values set larger
than the maximum size of an IP datagram will effectively let SCTP
control fragmentation (i.e. the same as setting this option to 0).
The default value for this option is '0' which indicates the user is struct sctp_assoc_value {
NOT limiting fragmentation and only the PMTU will effect SCTP's sctp_assoc_t assoc_id;
choice of DATA chunk size. uint32_t assoc_value;
};
assoc_id - This parameter, indicates which association the user is
performing an action upon. Note that if this field's value is
zero then the endpoints default value is changed (effecting future
associations only).
assoc_value - This parameter specifies the maximum size in bytes.
7.1.18. Add a chunk that must be authenticated (SCTP_AUTH_CHUNK) 7.1.18. Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
This option adds a chunk type that the user is requesting to be This set option adds a chunk type that the user is requesting to be
received only in an authenticated way. Changes to the list of chunks received only in an authenticated way. Changes to the list of chunks
will only effect future associations on the socket. will only effect future associations on the socket.
struct sctp_authchunk { struct sctp_authchunk {
uint8_t sauth_chunk; uint8_t sauth_chunk;
}; };
sauth_chunks - This parameter contains a chunk type sauth_chunks - This parameter contains a chunk type
that the user is requesting to be authenticated. that the user is requesting to be authenticated.
skipping to change at page 58, line 4 skipping to change at page 56, line 7
struct sctp_authchunk { struct sctp_authchunk {
uint8_t sauth_chunk; uint8_t sauth_chunk;
}; };
sauth_chunks - This parameter contains a chunk type sauth_chunks - This parameter contains a chunk type
that the user is requesting to be authenticated. that the user is requesting to be authenticated.
The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE, and AUTH The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE, and AUTH
chunks MUST not be used. If they are used an error MUST be returned. chunks MUST not be used. If they are used an error MUST be returned.
The usage of this option enables SCTP-AUTH in cases where it is not The usage of this option enables SCTP-AUTH in cases where it is not
required by other means (for example the use of ADD-IP). required by other means (for example the use of ADD-IP).
Note that this option is write-only. Using this option in a
getsockopt() or sctp_opt_info() call will return EOPNOTSUPP.
7.1.19. Get or set the list of supported HMAC Identifiers 7.1.19. Get or set the list of supported HMAC Identifiers
(SCTP_HMAC_IDENT) (SCTP_HMAC_IDENT)
This option gets or sets the list of HMAC algorithms that the local This option gets or sets the list of HMAC algorithms that the local
endpoint requires the peer to use. endpoint requires the peer to use.
struct sctp_hmacalgo { struct sctp_hmacalgo {
uint16_t shmac_idents[]; uint16_t shmac_idents[];
}; };
shmac_idents - This parameter contains an array of HMAC Identifiers shmac_idents - This parameter contains an array of HMAC Identifiers
that the local endpoint is requesting the peer to use, in priority that the local endpoint is requesting the peer to use, in priority
order. order. The following identifiers are valid:
1) SCTP_AUTH_HMAC_ID_SHA1
2) SCTP_AUTH_HMAC_ID_SHA256 (optional)
3) SCTP_AUTH_HMAC_ID_SHA224 (optional)
4) SCTP_AUTH_HMAC_ID_SHA384 (optional)
4) SCTP_AUTH_HMAC_ID_SHA512 (optional)
Note that the list supplied must include SHA1 and may include any
of the other values in its preferred order (lowest list postion
has the most preference in algorithm selection). Note also that
the lack of SHA1, or the inclusion of an unknown HMAC identifier
(including optional identifers unknown to the implementation) will
cause the set option to fail and return an error.
7.1.20. Set a shared key (SCTP_AUTH_KEY) 7.1.20. Set a shared key (SCTP_AUTH_KEY)
This option will set a shared secret key which is used to build an This option will set a shared secret key which is used to build an
association shared key. association shared key.
struct sctp_authkey { struct sctp_authkey {
sctp_assoc_t sca_assoc_id; sctp_assoc_t sca_assoc_id;
uint16_t sca_keynumber; uint16_t sca_keynumber;
uint8_t sca_key[]; uint8_t sca_key[];
skipping to change at page 59, line 4 skipping to change at page 57, line 17
endpoint and all future associations will use this key (if not endpoint and all future associations will use this key (if not
changed by subsequent calls to SCTP_AUTH_KEY). For one-to-one changed by subsequent calls to SCTP_AUTH_KEY). For one-to-one
sockets, this parameter is ignored. Note, however, that this sockets, this parameter is ignored. Note, however, that this
option will set a key on the association if the socket is option will set a key on the association if the socket is
connected, otherwise this will set a key on the endpoint. connected, otherwise this will set a key on the endpoint.
sca_keynumber - this parameter is the shared key identifier by which sca_keynumber - this parameter is the shared key identifier by which
the application will refer to this key. If a key of the specified the application will refer to this key. If a key of the specified
index already exists, then this new key will replace the old index already exists, then this new key will replace the old
existing key. Note that shared key identifier '0' defaults to a existing key. Note that shared key identifier '0' defaults to a
null key. null key.
sca_key - This parameter contains an array of bytes that is to be sca_key - This parameter contains an array of bytes that is to be
used by the endpoint (or association) as the shared secret key. used by the endpoint (or association) as the shared secret key.
Note, if the length of this field is zero, a null key is set. Note, if the length of this field is zero, a null key is set.
Note that this option is write-only. Using this option in a
getsockopt() or sctp_opt_info() call will return EOPNOTSUPP.
7.1.21. Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY) 7.1.21. Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
This option will get or set the active shared key to be used to build This option will get or set the active shared key to be used to build
the association shared key. the association shared key.
struct sctp_authkeyid { struct sctp_authkeyid {
sctp_assoc_t scact_assoc_id; sctp_assoc_t scact_assoc_id;
uint16_t scact_keynumber; uint16_t scact_keynumber;
}; };
skipping to change at page 59, line 36 skipping to change at page 58, line 7
connected, otherwise this will set the default active key for the connected, otherwise this will set the default active key for the
endpoint. endpoint.
scact_keynumber - this parameter is the shared key identifier which scact_keynumber - this parameter is the shared key identifier which
the application is requesting to become the active shared key to the application is requesting to become the active shared key to
be used for sending authenticated chunks. The key identifier MUST be used for sending authenticated chunks. The key identifier MUST
correspond to an existing shared key. Note that shared key correspond to an existing shared key. Note that shared key
identifier '0' defaults to a null key. identifier '0' defaults to a null key.
7.1.22. Delete a shared key (SCTP_AUTH_DELETE_KEY) 7.1.22. Delete a shared key (SCTP_AUTH_DELETE_KEY)
This option will delete a shared secret key from use. This set option will delete a shared secret key from use.
struct sctp_authkeyid { struct sctp_authkeyid {
sctp_assoc_t scact_assoc_id; sctp_assoc_t scact_assoc_id;
uint16_t scact_keynumber; uint16_t scact_keynumber;
}; };
scact_assoc_id - This parameter, if non-zero, indicates what scact_assoc_id - This parameter, if non-zero, indicates what
association that the shared key identifier is being deleted from. association that the shared key identifier is being deleted from.
Note that if this element contains zero, then the shared key is Note that if this element contains zero, then the shared key is
deleted from the endpoint and all associations will no longer use deleted from the endpoint and all associations will no longer use
skipping to change at page 60, line 14 skipping to change at page 58, line 30
parameter is ignored. Note, however, that this option will delete parameter is ignored. Note, however, that this option will delete
the key from the association if the socket is connected, otherwise the key from the association if the socket is connected, otherwise
this will delete the key from the endpoint. this will delete the key from the endpoint.
scact_keynumber - this parameter is the shared key identifier which scact_keynumber - this parameter is the shared key identifier which
the application is requesting to be deleted. The key identifier the application is requesting to be deleted. The key identifier
MUST correspond to an existing shared key and MUST NOT be the MUST correspond to an existing shared key and MUST NOT be the
current active key. Note if this parameter is zero, use of the current active key. Note if this parameter is zero, use of the
null key identifier '0' is disabled on the endpoint and/or null key identifier '0' is disabled on the endpoint and/or
association. association.
7.1.23. Get or set delayed ack timer (SCTP_DELAYED_ACK_TIME) Note that this option is write-only. Using this option in a
getsockopt() or sctp_opt_info() call will return EOPNOTSUPP.
This options will get or set the delayed ack timer. The time is set 7.1.23. Get or set delayed ack timer (SCTP_DELAYED_SACK)
in milliseconds. If the assoc_id is 0, then this sets or gets the
endpoints default delayed ack timer value. If the assoc_id field is
non-zero, then the set or get effects the specified association.
struct sctp_assoc_value { This option will effect the way delayed acks are performed. This
sctp_assoc_t assoc_id; option allows you to get or set the delayed ack time, in
uint32_t assoc_value; milliseconds. It also allows changing the delayed ack frequency.
Changing the frequency to 1 disables the delayed sack algorithm. If
the assoc_id is 0, then this sets or gets the endpoints default
values. If the assoc_id field is non-zero, then the set or get
effects the specified association for the one to many model (the
assoc_id field is ignored by the one to one model). Note that if
sack_delay or sack_freq are 0 when setting this option, then the
current values will remain unchanged.
struct sctp_sack_info {
sctp_assoc_t sack_assoc_id;
uint32_t sack_delay;
uint32_t sack_freq;
}; };
assoc_id - This parameter, indicates which association the user is sack_assoc_id - This parameter, indicates which association the user
performing an action upon. Note that if this field's value is is performing an action upon. Note that if this field's value is
zero then the endpoints default value is changed (effecting future zero then the endpoints default value is changed (effecting future
associations only). associations only).
assoc_value - This parameter contains the number of milliseconds sack_delay - This parameter contains the number of milliseconds that
that the user is requesting the delayed ACK timer be set to. Note the user is requesting the delayed ACK timer be set to. Note that
that this value is defined in the standard to be between 200 and this value is defined in the standard to be between 200 and 500
500 milliseconds. milliseconds.
sack_freq - This parameter contains the number of packets that must
be received before a sack is sent without waiting for the delay
timer to expire. The default value for this is 2, setting this
value to 1 will disable the delayed sack algorithm.
7.1.24. Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE) 7.1.24. Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE)
This options will at a minimum specify if the implementation is doing Fragmented interleave controls how the presentation of messages
fragmented interleave. Fragmented interleave, for a one to many occurs for the message receiver. There are three levels of fragment
socket, is when subsequent calls to receive a message may return interleave defined. Two of the levels effect the one-to-one model,
parts of messages from different associations. Some implementations while the one-to-many model is effected by all three levels.
may allow you to turn this value on or off. If so, when turned off,
no fragment interleave will occur (which will cause a head of line
blocking amongst multiple associations sharing the same one to many
socket). When this option is turned on, then each receive call may
come from a different association (thus the user must receive data
with the extended calls (e.g. sctp_recvmsg) to keep track of which
association each receive belongs to.
This option takes a boolean value. A non-zero value indicates that This option takes an integer value. It can be set to a value of 0, 1
fragmented interleave is on. A value of zero indicates that or 2. Attempting to set this level to other values will return an
fragmented interleave is off. error.
Note that it is important that an implementation that allows this Setting the three levels provides the following receiver
option to be turned on, have it off by default. Otherwise an unaware interactions:
application using the one to many model may become confused and act
incorrectly. level 0 - Prevents the interleaving of any messages. This means
that when a partial delivery begins, no other messages will be
received except the message being partially delivered. If another
message arrives on a different stream (or association) that could
be delivered, it will be blocked waiting for the user to read all
of the partially delivered message.
level 1 - Allows interleaving of messages that are from different
associations. For the one-to-one model, level 0 and level 1 thus
have the same meaning since a one-to-one socket always receives
messages from the same association. Note that setting the one-to-
many model to this level may cause multiple partial delivers from
different associations but for any given association, only one
message will be delivered until all parts of a message have been
delivered. This means that one large message, being read with an
association identification of "X", will block other messages from
association "X" from being delivered.
level 2 - Allows complete interleaving of messages. This level
requires that the sender carefully observe not only the peer
association identification (or address) but also must pay careful
attention to the stream number. With this option enabled a
partially delivered message may begin being delivered for
association "X" stream "Y" and the next subsequent receive may
return a message from association "X" stream "Z". Note that no
other messages would be delivered for association "X" stream "Y"
until all of stream "Y"'s partially delivered message was read.
Note that this option also effects the one-to-one model. Also
note that for the one-to-many model not only may another streams
message from the same association be delivered from the next
receive, some other associations message may be delivered upon the
next receive.
An implementation should default the one-to-many model to level 1.
The reason for this is that otherwise it is possible that a peer
could begin sending a partial message and thus block all other peers
from sending data. However a setting of level 2 requires the
application to not only be aware of the association (via the
association id or peers address) but also the stream number. The
stream number is NOT present unless the user has subscribed to the
sctp_data_io_events (see Section 7.3). This is also why we recommend
that the one-to-one model be defaulted to level 0 (level 1 for the
one-to-one model has no effect). Note that an implementation should
return an error if a application attempts to set the level to 2 and
has NOT subscribed to the sctp_data_io_events.
7.1.25. Set or Get the sctp partial delivery point 7.1.25. Set or Get the sctp partial delivery point
(SCTP_PARTIAL_DELIVERY_POINT) (SCTP_PARTIAL_DELIVERY_POINT)
This option will set or get the SCTP partial delivery point. This This option will set or get the SCTP partial delivery point. This
point is the size of a message where the partial delivery API will be point is the size of a message where the partial delivery API will be
invoked to help free up rwnd space for the peer. Setting this to a invoked to help free up rwnd space for the peer. Setting this to a
lower value will cause partial delivery's to happen more often. The lower value will cause partial deliveries to happen more often. The
calls argument is an integer that sets or gets the partial delivery calls argument is an integer that sets or gets the partial delivery
point. point. Note also that the call will fail if the user attempts to set
this value larger than the socket receive buffer size.
Note that any single message having a length smaller than or equal to
the SCTP partial delivery point will be delivered in one single read
call as long as the user provided buffer is large enough to hold the
message.
7.1.26. Set or Get the use of extended receive info 7.1.26. Set or Get the use of extended receive info
(SCTP_USE_EXT_RCVINFO) (SCTP_USE_EXT_RCVINFO)
This option will enable or disable the use of the extended version of This option will enable or disable the use of the extended version of
the sctp_sndrcvinfo structure. If this option is disabled, then the the sctp_sndrcvinfo structure. If this option is disabled, then the
normal sctp_sndrcvinfo structure is returned in all receive message normal sctp_sndrcvinfo structure is returned in all receive message
calls. If this option is enabled then the sctp_extrcvinfo structure calls. If this option is enabled then the sctp_extrcvinfo structure
is returned in all receive message calls. is returned in all receive message calls.
skipping to change at page 65, line 39 skipping to change at page 65, line 25
sctp_assoc_t gauth_assoc_id; sctp_assoc_t gauth_assoc_id;
uint8_t gauth_chunks[]; uint8_t gauth_chunks[];
}; };
gauth_assoc_id - This parameter, indicates which association the gauth_assoc_id - This parameter, indicates which association the
user is requesting the list of local authenticated chunks. For user is requesting the list of local authenticated chunks. For
one-to-one sockets, this parameter is ignored. one-to-one sockets, this parameter is ignored.
gauth_chunks - This parameter contains an array of chunks that the gauth_chunks - This parameter contains an array of chunks that the
local endpoint is requesting to be authenticated. local endpoint is requesting to be authenticated.
7.2.5. Get the list of current associations (SCTP_GET_ASOC_ID_LIST) 7.2.5. Get the current number of associations (SCTP_GET_ASSOC_NUMBER)
This option gets a list of current associations that are associated This option gets the current number of associations that are attached
with a socket. to a one-to-many style socket. The option value is an uint32_t.
7.2.6. Get the current identifiers of associations
(SCTP_GET_ASSOC_ID_LIST)
This option gets the current list of SCTP association identifiers of
the SCTP associations handled by a one-to-many style socket. The
option value has the structure
struct sctp_assoc_ids { struct sctp_assoc_ids {
uint16_t asls_assoc_start; /* array of index's start at 0 */ sctp_assoc_t gaids_assoc_id[0];
uint8_t asls_numb_present;
uint8_t asls_more_to_get;
sctp_assoc_t asls_assoc_id[MAX_ASOC_IDS_RET];
}; };
asls_assoc_start - This parameter gives an initial starting place to The caller MUST provide a large enough buffer to hold all association
begin collecting association information. Normally a user sets identifiers. If the buffer is too small, an error MUST be returned.
this initially to 0. Subsequent calls that need to get more The user can use the SCTP_GET_ASSOC_NUMBER socket option to get an
association identifications (in cases where the socket has more idea how large the buffer has to be.
than MAX_ASOC_IDS_RET established i.e asls_more_to_get returns set
to false) are made by incrementing the asls_assoc_start by the
number of previous association id's seen. This cycle is repeated
until the asls_more_to_get field becomes true, indicating that all
association id's have been retrieved.
asls_numb_present - This field holds the total number of
associations that have been copied into the asls_assoc_id array.
This value will NOT be larger than MAX_ASOC_IDS_RET.
asls_more_to_get - This field holds a boolean flag indicating to the
caller if more association id's are available then asked for.
Subsequent calls to this option will be needed to gather these
association id's.
asls_assoc_id - an array of association id's that are currently
active under this socket.
MAX_ASOC_IDS_RET This value is a constant defined to limit the
number of association identifications returned with each call.
This value can be no larger than 255..
7.3. Ancillary Data and Notification Interest Options 7.3. Ancillary Data and Notification Interest Options
Applications can receive per-message ancillary information and Applications can receive per-message ancillary information and
notifications of certain SCTP events with recvmsg(). notifications of certain SCTP events with recvmsg().
The following optional information is available to the application: The following optional information is available to the application:
1. SCTP_SNDRCV (sctp_data_io_event): Per-message information (i.e. 1. SCTP_SNDRCV (sctp_data_io_event): Per-message information (i.e.
stream number, TSN, SSN, etc. described in Section 5.2.2) stream number, TSN, SSN, etc. described in Section 5.2.2)
skipping to change at page 70, line 11 skipping to change at page 69, line 38
socket is associated with so that no new association accepted will be socket is associated with so that no new association accepted will be
associated with those addresses. If the endpoint supports dynamic associated with those addresses. If the endpoint supports dynamic
address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a
endpoint to send the appropriate message to the peer to change the endpoint to send the appropriate message to the peer to change the
peers address lists. peers address lists.
Adding and removing addresses from a connected association is Adding and removing addresses from a connected association is
optional functionality. Implementations that do not support this optional functionality. Implementations that do not support this
functionality should return EOPNOTSUPP. functionality should return EOPNOTSUPP.
sctp_binx() can be called on an already bound socket or on an unbound
socket. If the socket is unbound and the first port number in the
addrs is zero, the kernel will chose a port number. All port number
after the first one being 0 MUST also be zero. If the first port
number is not zero, the following port numbers MUST be zero or have
the same value as the first one. For an already bound socket, all
port numbers provided MUST the the bound one or 0.
8.2. Branched-off Association 8.2. Branched-off Association
After an association is established on a one-to-many style socket, After an association is established on a one-to-many style socket,
the application may wish to branch off the association into a the application may wish to branch off the association into a
separate socket/file descriptor. separate socket/file descriptor.
This is particularly desirable when, for instance, the application This is particularly desirable when, for instance, the application
wishes to have a number of sporadic message senders/receivers remain wishes to have a number of sporadic message senders/receivers remain
under the original one-to-many style socket but branch off those under the original one-to-many style socket but branch off those
associations carrying high volume data traffic into their own associations carrying high volume data traffic into their own
skipping to change at page 76, line 38 skipping to change at page 76, line 22
int sctp_getaddrlen(sa_family_t family); int sctp_getaddrlen(sa_family_t family);
9. Preprocessor Constants 9. Preprocessor Constants
For application portability it is desirable to define pre-processor For application portability it is desirable to define pre-processor
constants for determination if sctp is present and supports various constants for determination if sctp is present and supports various
features. The following pre-processor constants should be defined in features. The following pre-processor constants should be defined in
a include file, sctp.h. a include file, sctp.h.
HAVE_SCTP - If this constant is defined to 1, then an implementation HAVE_SCTP - If this constant is defined, then an implementation of
of SCTP is available. SCTP is available.
HAVE_KERNEL_SCTP - If this constant is defined to 1, then a kernel HAVE_KERNEL_SCTP - If this constant is defined, then a kernel SCTP
SCTP implementation is available through the sockets interface. implementation is available through the sockets interface.
HAVE_SCTP_PRSCTP - If this constant is defined to 1, then the SCTP HAVE_SCTP_PRSCTP - If this constant is defined, then the SCTP
implementation supports the partial reliability extension to SCTP. implementation supports the partial reliability extension to SCTP.
HAVE_SCTP_ADDIP - If this constant is defined to 1, then the SCTP HAVE_SCTP_ADDIP - If this constant is defined, then the SCTP
implementation supports the dynamic address extension to SCTP. implementation supports the dynamic address extension to SCTP.
HAVE_SCTP_CANSET_PRIMARY - If this constant is defined to 1, then HAVE_SCTP_CANSET_PRIMARY - If this constant is defined, then the
the SCTP implementation supports the ability to request setting of SCTP implementation supports the ability to request setting of the
the remote primary address. remote primary address.
HAVE_SCTP_SAT_NETWORK_CAPABILITY - If this constant is defined, then
HAVE_SCTP_SAT_NETWORK_CAPABILITY - If this constant is defined to 1, the SCTP implementation supports the satellite network extension
then the SCTP implementation supports the satellite network to SCTP.
extension to SCTP.
HAVE_SCTP_MULTIBUF - If this constant is defined to 1, then the SCTP HAVE_SCTP_MULTIBUF - If this constant is defined to 1, then the SCTP
implementation dedicates separate buffer space to each association implementation dedicates separate buffer space to each association
on a one-to-many socket. If this constant is defined to 0, then on a one-to-many socket. If this constant is defined to 0, then
the implementation provides a single block of shared buffer space the implementation provides a single block of shared buffer space
for a one-to-many socket. for a one-to-many socket.
HAVE_SCTP_NOCONNECT - If this constant is defined to 1, then the HAVE_SCTP_NOCONNECT - If this constant is defined, then the SCTP
SCTP implementation supports initiating an association on a one- implementation supports initiating an association on a one-to-one
to-one style socket without the use of connect(), as outlined in style socket without the use of connect(), as outlined in
Section 4.1.5. Section 4.1.5.
HAVE_SCTP_EXT_RCVINFO - If this constant is defined to 1, then the HAVE_SCTP_EXT_RCVINFO - If this constant is defined, then the SCTP
SCTP implementation supports the use of the extended style implementation supports the use of the extended style sndrecinfo
sndrecinfo structure, sctp_extrcvinfo. structure, sctp_extrcvinfo.
10. IANA considerations 10. IANA considerations
This document contains no IANA considerations. This document contains no IANA considerations.
11. Security Considerations 11. Security Considerations
Many TCP and UDP implementations reserve port numbers below 1024 for Many TCP and UDP implementations reserve port numbers below 1024 for
privileged users. If the target platform supports privileged users, privileged users. If the target platform supports privileged users,
the SCTP implementation SHOULD restrict the ability to call bind() or the SCTP implementation SHOULD restrict the ability to call bind() or
skipping to change at page 87, line 7 skipping to change at page 87, line 7
Michael Tuexen Michael Tuexen
Univ. of Applied Sciences Muenster Univ. of Applied Sciences Muenster
Stegerwaldstr. 39 Stegerwaldstr. 39
48565 Steinfurt 48565 Steinfurt
Germany Germany
Email: tuexen@fh-muenster.de Email: tuexen@fh-muenster.de
Full Copyright Statement Full Copyright Statement
Copyright (C) The IETF Trust (2006). Copyright (C) The IETF Trust (2007).
This document is subject to the rights, licenses and restrictions This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors contained in BCP 78, and except as set forth therein, the authors
retain all their rights. retain all their rights.
This document and the information contained herein are provided on an This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
 End of changes. 87 change blocks. 
316 lines changed or deleted 307 lines changed or added

This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/