cimport libc
from libc cimport __u8, __u16, __u32, __s8, __s16, __s32
# <netinet/sctp.h>
# this defines the kernel SCTP -> userspace API extensions, such as structure types etc.
cdef extern from "netinet/sctp.h" :
## types
ctypedef __s32 sctp_assoc_t
## constants
# sockapi
enum :
SOL_SCTP
IPPROTO_SCTP
# sockopts
enum :
SCTP_RTOINFO
SCTP_ASSOCINFO
SCTP_INITMSG
SCTP_NODELAY
SCTP_AUTOCLOSE
SCTP_SET_PEER_PRIMARY_ADDR
SCTP_PRIMARY_ADDR
SCTP_ADAPTATION_LAYER
SCTP_DISABLE_FRAGMENTS
SCTP_PEER_ADDR_PARAMS
SCTP_DEFAULT_SEND_PARAM
SCTP_EVENTS
SCTP_I_WANT_MAPPED_V4_ADDR
SCTP_MAXSEG
SCTP_STATUS
SCTP_GET_PEER_ADDR_INFO
SCTP_DELAYED_ACK_TIME
SCTP_CONTEXT
SCTP_FRAGMENT_INTERLEAVE
SCTP_PARTIAL_DELIVERY_POINT
SCTP_MAX_BURST
## send/recv-msg cmsghdr's
struct sctp_initmsg :
__u16 sinit_num_ostreams
__u16 sinit_max_instreams
__u16 sinit_max_attempts
__u16 sinit_max_init_timeo
struct sctp_sndrcvinfo :
__u16 sinfo_stream
__u16 sinfo_ssn
__u16 sinfo_flags
__u32 sinfo_ppid
__u32 sinfo_context
__u32 sinfo_timetolive
__u32 sinfo_tsn
__u32 sinfo_cumtsn
sctp_assoc_t sinfo_assoc_id
# sctp_sndrcvinfo.sinfo_flags values
enum sctp_sinfo_flags :
SCTP_UNORDERED # Send/receive message unordered
SCTP_ADDR_OVER # Override the primary destination
SCTP_ABORT # Send an ABORT message to the peer
SCTP_EOF # Initiate graceful shutdown process
## notifications
struct sctp_assoc_change :
__u16 sac_type
__u16 sac_flags
__u32 sac_length
__u16 sac_state
__u16 sac_error
__u16 sac_outbound_streams
__u16 sac_inbound_streams
sctp_assoc_t sac_assoc_id
__u8 sac_info[0]
# sctp_assoc_change.sac_state
enum sctp_sac_state :
SCTP_COMM_UP
SCTP_COMM_LOST
SCTP_RESTART
SCTP_SHUTDOWN_COMP
SCTP_CANT_STR_ASSOC
struct sctp_paddr_change :
__u16 spc_type
__u16 spc_flags
__u32 spc_length
libc.sockaddr_storage spc_aaddr
int spc_state
int spc_error
sctp_assoc_t spc_assoc_id
enum sctp_spc_state :
SCTP_ADDR_AVAILABLE
SCTP_ADDR_UNREACHABLE
SCTP_ADDR_REMOVED
SCTP_ADDR_ADDED
SCTP_ADDR_MADE_PRIM
SCTP_ADDR_CONFIRMED
struct sctp_remote_error :
__u16 sre_type
__u16 sre_flags
__u32 sre_length
__u16 sre_error
sctp_assoc_t sre_assoc_id
__u8 sre_data[0]
struct sctp_send_failed :
__u16 ssf_type
__u16 ssf_flags
__u32 ssf_length
__u32 ssf_error
sctp_sndrcvinfo ssf_info
sctp_assoc_t ssf_assoc_id
__u8 ssf_data[0]
enum sctp_ssf_flags :
SCTP_DATA_UNSENT
SCTP_DATA_SENT
struct sctp_shutdown_event :
__u16 sse_type
__u16 sse_flags
__u32 sse_length
sctp_assoc_t sse_assoc_id
struct sctp_adaptation_event :
__u16 sai_type
__u16 sai_flags
__u32 sai_length
__u32 sai_adaptation_ind
sctp_assoc_t sai_assoc_id
struct sctp_pdapi_event :
__u16 pdapi_type
__u16 pdapi_flags
__u32 pdapi_length
__u32 pdapi_indication
sctp_assoc_t pdapi_assoc_id
enum :
SCTP_PARTIAL_DELIVERY_ABORTED
struct sctp_event_subscribe :
__u8 sctp_data_io_event
__u8 sctp_association_event
__u8 sctp_address_event
__u8 sctp_send_failure_event
__u8 sctp_peer_error_event
__u8 sctp_shutdown_event
__u8 sctp_partial_delivery_event
__u8 sctp_adaptation_layer_event
struct sn_header :
__u16 sn_type
__u16 sn_flags
__u32 sn_length
union sctp_notification :
sn_header sn_header
sctp_assoc_change sn_assoc_change
sctp_paddr_change sn_paddr_change
sctp_remote_error sn_remote_error
sctp_send_failed sn_send_failed
sctp_shutdown_event sn_shutdown_event
sctp_adaptation_event sn_adaptation_event
sctp_pdapi_event sn_pdapi_event
enum sctp_sn_type :
SCTP_SN_TYPE_BASE
SCTP_ASSOC_CHANGE
SCTP_PEER_ADDR_CHANGE
SCTP_SEND_FAILED
SCTP_REMOTE_ERROR
SCTP_SHUTDOWN_EVENT
SCTP_PARTIAL_DELIVERY_EVENT
SCTP_ADAPTATION_INDICATION
enum sctp_sn_error :
SCTP_FAILED_THRESHOLD
SCTP_RECEIVED_SACK
SCTP_HEARTBEAT_SUCCESS
SCTP_RESPONSE_TO_USER_REQ
SCTP_INTERNAL_ERROR
SCTP_SHUTDOWN_GUARD_EXPIRES
SCTP_PEER_FAULTY
ctypedef sctp_sn_error sctp_sn_error_t
## sctp_bindx
enum :
SCTP_BINDX_ADD_ADDR
SCTP_BINDX_REM_ADDR
int c_sctp_bindx "sctp_bindx" (int sd, libc.sockaddr *addrs, int addrcnt, int flags)
# XXX: missing return-sctp_assoc_t-id argument!
int c_sctp_connectx "sctp_connectx" (int sd, libc.sockaddr *addrs, int addrcnt)