sctp

package module
v0.0.0-...-74b9faf Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2024 License: Apache-2.0 Imports: 13 Imported by: 1

README

Stream Control Transmission Protocol (SCTP)

Examples

See example/sctp.go

$ cd example
$ go build
$ # run example SCTP server
$ ./example -server -port 1000 -ip 10.10.0.1,10.20.0.1
$ # run example SCTP client
$ ./example -port 1000 -ip 10.10.0.1,10.20.0.1

Documentation

Index

Constants

View Source
const (
	SOL_SCTP = 132

	SCTP_BINDX_ADD_ADDR = 0x01
	SCTP_BINDX_REM_ADDR = 0x02

	MSG_NOTIFICATION = 0x8000
)
View Source
const (
	SCTP_RTOINFO = iota
	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_SENT_PARAM
	SCTP_EVENTS
	SCTP_I_WANT_MAPPED_V4_ADDR
	SCTP_MAXSEG
	SCTP_STATUS
	SCTP_GET_PEER_ADDR_INFO
	SCTP_DELAYED_ACK_TIME
	SCTP_DELAYED_ACK  = SCTP_DELAYED_ACK_TIME
	SCTP_DELAYED_SACK = SCTP_DELAYED_ACK_TIME

	SCTP_SOCKOPT_BINDX_ADD = 100
	SCTP_SOCKOPT_BINDX_REM = 101
	SCTP_SOCKOPT_PEELOFF   = 102
	SCTP_GET_PEER_ADDRS    = 108
	SCTP_GET_LOCAL_ADDRS   = 109
	SCTP_SOCKOPT_CONNECTX  = 110
	SCTP_SOCKOPT_CONNECTX3 = 111
)
View Source
const (
	SCTP_EVENT_DATA_IO = 1 << iota
	SCTP_EVENT_ASSOCIATION
	SCTP_EVENT_ADDRESS
	SCTP_EVENT_SEND_FAILURE
	SCTP_EVENT_PEER_ERROR
	SCTP_EVENT_SHUTDOWN
	SCTP_EVENT_PARTIAL_DELIVERY
	SCTP_EVENT_ADAPTATION_LAYER
	SCTP_EVENT_AUTHENTICATION
	SCTP_EVENT_SENDER_DRY

	SCTP_EVENT_ALL = SCTP_EVENT_DATA_IO | SCTP_EVENT_ASSOCIATION | SCTP_EVENT_ADDRESS | SCTP_EVENT_SEND_FAILURE | SCTP_EVENT_PEER_ERROR | SCTP_EVENT_SHUTDOWN | SCTP_EVENT_PARTIAL_DELIVERY | SCTP_EVENT_ADAPTATION_LAYER | SCTP_EVENT_AUTHENTICATION | SCTP_EVENT_SENDER_DRY
)
View Source
const (
	SCTP_SN_TYPE_BASE = SCTPNotificationType(iota + (1 << 15))
	SCTP_ASSOC_CHANGE
	SCTP_PEER_ADDR_CHANGE
	SCTP_SEND_FAILED
	SCTP_REMOTE_ERROR
	SCTP_SHUTDOWN_EVENT
	SCTP_PARTIAL_DELIVERY_EVENT
	SCTP_ADAPTATION_INDICATION
	SCTP_AUTHENTICATION_INDICATION
	SCTP_SENDER_DRY_EVENT
)
View Source
const (
	SCTP_CMSG_INIT = iota
	SCTP_CMSG_SNDRCV
	SCTP_CMSG_SNDINFO
	SCTP_CMSG_RCVINFO
	SCTP_CMSG_NXTINFO
)
View Source
const (
	SCTP_UNORDERED = 1 << iota
	SCTP_ADDR_OVER
	SCTP_ABORT
	SCTP_SACK_IMMEDIATELY
	SCTP_EOF
)
View Source
const (
	SCTP_COMM_UP = SCTPState(iota)
	SCTP_COMM_LOST
	SCTP_RESTART
	SCTP_SHUTDOWN_COMP
	SCTP_CANT_STR_ASSOC
)
View Source
const (
	SCTP_MAX_STREAM = 0xffff
)

Variables

This section is empty.

Functions

func SCTPBind

func SCTPBind(fd int, addr *SCTPAddr, flags int) error

func SCTPConnect

func SCTPConnect(fd int, addr *SCTPAddr) (int, error)

func SetsockoptInt

func SetsockoptInt(conn *SCTPConn, optname, optval int) error

Types

type AssocInfo

type AssocInfo struct {
	AssocID SCTPAssocID
	// maximum retransmission attempts to make for the association
	AsocMaxRxt uint16
	// number of destination addresses that the peer has
	NumberPeerDestinations uint16
	// current value of the peer's rwnd (reported in the last selective acknowledgment (SACK)) minus any outstanding data
	PeerRwnd uint32
	// the last reported rwnd that was sent to the peer
	LocalRwnd uint32
	// the association's cookie life value used when issuing cookies
	CookieLife uint32
}

Association Parameters defined in RFC 6458 8.1

type EventSubscribe

type EventSubscribe struct {
	DataIO          uint8
	Association     uint8
	Address         uint8
	SendFailure     uint8
	PeerError       uint8
	Shutdown        uint8
	PartialDelivery uint8
	AdaptationLayer uint8
	Authentication  uint8
	SenderDry       uint8
}

type GetAddrsOld

type GetAddrsOld struct {
	AssocID int32
	AddrNum int32
	Addrs   uintptr
}

type InitMsg

type InitMsg struct {
	NumOstreams    uint16
	MaxInstreams   uint16
	MaxAttempts    uint16
	MaxInitTimeout uint16
}

type Notification

type Notification interface {
	Type() SCTPNotificationType
	Flags() uint16
	Length() uint32
}

type NotificationHandler

type NotificationHandler func([]byte) error

type NotificationHeader

type NotificationHeader struct {
	Type   uint16
	Flags  uint16
	Length uint32
}

type RtoInfo

type RtoInfo struct {
	SrtoAssocID int32
	SrtoInitial uint32
	SrtoMax     uint32
	StroMin     uint32
}

Retransmission Timeout Parameters defined in RFC 6458 8.1

type SCTPAddr

type SCTPAddr struct {
	IPAddrs []net.IPAddr
	Port    int
}

func ResolveSCTPAddr

func ResolveSCTPAddr(network, addrs string) (*SCTPAddr, error)

func (*SCTPAddr) Network

func (a *SCTPAddr) Network() string

func (*SCTPAddr) String

func (a *SCTPAddr) String() string

func (*SCTPAddr) ToRawSockAddrBuf

func (a *SCTPAddr) ToRawSockAddrBuf() []byte

type SCTPAssocChangeEvent

type SCTPAssocChangeEvent struct {
	// contains filtered or unexported fields
}

SCTPAssocChangeEvent is an implementation of Notification interface

func (*SCTPAssocChangeEvent) AssocID

func (s *SCTPAssocChangeEvent) AssocID() SCTPAssocID

func (*SCTPAssocChangeEvent) Flags

func (s *SCTPAssocChangeEvent) Flags() uint16

func (*SCTPAssocChangeEvent) InboundStreams

func (s *SCTPAssocChangeEvent) InboundStreams() uint16

func (*SCTPAssocChangeEvent) Info

func (s *SCTPAssocChangeEvent) Info() []uint8

func (*SCTPAssocChangeEvent) Length

func (s *SCTPAssocChangeEvent) Length() uint32

func (*SCTPAssocChangeEvent) OutboundStreams

func (s *SCTPAssocChangeEvent) OutboundStreams() uint16

func (*SCTPAssocChangeEvent) State

func (s *SCTPAssocChangeEvent) State() SCTPState

func (*SCTPAssocChangeEvent) Type

type SCTPAssocID

type SCTPAssocID int32

type SCTPConn

type SCTPConn struct {
	// contains filtered or unexported fields
}

func DialSCTP

func DialSCTP(net string, laddr, raddr *SCTPAddr) (*SCTPConn, error)

DialSCTP - bind socket to laddr (if given) and connect to raddr

func DialSCTPExt

func DialSCTPExt(network string, laddr, raddr *SCTPAddr, options InitMsg, rtoInfo *RtoInfo, assocInfo *AssocInfo) (*SCTPConn, error)

DialSCTPExt - same as DialSCTP but with given SCTP options

func NewSCTPConn

func NewSCTPConn(fd int, handler NotificationHandler) *SCTPConn

func (*SCTPConn) Close

func (c *SCTPConn) Close() error

func (*SCTPConn) GetAssocInfo

func (c *SCTPConn) GetAssocInfo() (*AssocInfo, error)

func (*SCTPConn) GetDefaultSentParam

func (c *SCTPConn) GetDefaultSentParam() (*SndRcvInfo, error)

func (*SCTPConn) GetReadBuffer

func (c *SCTPConn) GetReadBuffer() (int, error)

func (*SCTPConn) GetRtoInfo

func (c *SCTPConn) GetRtoInfo() (*RtoInfo, error)

func (*SCTPConn) GetWriteBuffer

func (c *SCTPConn) GetWriteBuffer() (int, error)

func (*SCTPConn) LocalAddr

func (c *SCTPConn) LocalAddr() net.Addr

func (*SCTPConn) PeelOff

func (c *SCTPConn) PeelOff(id int) (*SCTPConn, error)

func (*SCTPConn) Read

func (c *SCTPConn) Read(b []byte) (int, error)

func (*SCTPConn) RemoteAddr

func (c *SCTPConn) RemoteAddr() net.Addr

func (*SCTPConn) SCTPGetPrimaryPeerAddr

func (c *SCTPConn) SCTPGetPrimaryPeerAddr() (*SCTPAddr, error)

func (*SCTPConn) SCTPLocalAddr

func (c *SCTPConn) SCTPLocalAddr(id int) (*SCTPAddr, error)

func (*SCTPConn) SCTPRead

func (c *SCTPConn) SCTPRead(b []byte) (int, *SndRcvInfo, Notification, error)

SCTPRead use syscall.Recvmsg to receive SCTP message and return sctp sndrcvinfo/notification if need

func (*SCTPConn) SCTPRemoteAddr

func (c *SCTPConn) SCTPRemoteAddr(id int) (*SCTPAddr, error)

func (*SCTPConn) SCTPWrite

func (c *SCTPConn) SCTPWrite(b []byte, info *SndRcvInfo) (int, error)

func (*SCTPConn) SetAssocInfo

func (c *SCTPConn) SetAssocInfo(info AssocInfo) error

func (*SCTPConn) SetDeadline

func (c *SCTPConn) SetDeadline(t time.Time) error

func (*SCTPConn) SetDefaultSentParam

func (c *SCTPConn) SetDefaultSentParam(info *SndRcvInfo) error

func (*SCTPConn) SetInitMsg

func (c *SCTPConn) SetInitMsg(numOstreams, maxInstreams, maxAttempts, maxInitTimeout int) error

func (*SCTPConn) SetNonBlock

func (c *SCTPConn) SetNonBlock(nonBlock bool) error

func (*SCTPConn) SetReadBuffer

func (c *SCTPConn) SetReadBuffer(bytes int) error

func (*SCTPConn) SetReadDeadline

func (c *SCTPConn) SetReadDeadline(t time.Time) error

func (*SCTPConn) SetReadTimeout

func (c *SCTPConn) SetReadTimeout(tv syscall.Timeval) error

func (*SCTPConn) SetRtoInfo

func (c *SCTPConn) SetRtoInfo(rtoInfo RtoInfo) error

func (*SCTPConn) SetWriteBuffer

func (c *SCTPConn) SetWriteBuffer(bytes int) error

func (*SCTPConn) SetWriteDeadline

func (c *SCTPConn) SetWriteDeadline(t time.Time) error

func (*SCTPConn) SetWriteTimeout

func (c *SCTPConn) SetWriteTimeout(tv syscall.Timeval) error

func (*SCTPConn) SubscribeEvents

func (c *SCTPConn) SubscribeEvents(flags int) error

func (*SCTPConn) SubscribedEvents

func (c *SCTPConn) SubscribedEvents() (int, error)

func (*SCTPConn) Write

func (c *SCTPConn) Write(b []byte) (int, error)

type SCTPListener

type SCTPListener struct {
	// contains filtered or unexported fields
}

func ListenSCTP

func ListenSCTP(net string, laddr *SCTPAddr) (*SCTPListener, error)

ListenSCTP - start listener on specified address/port

func ListenSCTPExt

func ListenSCTPExt(network string, laddr *SCTPAddr, options InitMsg, rtoInfo *RtoInfo, assocInfo *AssocInfo) (*SCTPListener, error)

ListenSCTPExt - start listener on specified address/port with given SCTP options

func (*SCTPListener) Accept

func (ln *SCTPListener) Accept() (net.Conn, error)

Accept waits for and returns the next connection connection to the listener.

func (*SCTPListener) AcceptSCTP

func (ln *SCTPListener) AcceptSCTP() (*SCTPConn, error)

AcceptSCTP waits for and returns the next SCTP connection to the listener. it will use EpollWait to wait for a incoming connection then call syscall.Accept4 to accept

func (*SCTPListener) Addr

func (ln *SCTPListener) Addr() net.Addr

func (*SCTPListener) Close

func (ln *SCTPListener) Close() error

type SCTPNotificationType

type SCTPNotificationType int

type SCTPShutdownEvent

type SCTPShutdownEvent struct {
	// contains filtered or unexported fields
}

SCTPShutdownEvent is an implementation of Notification interface

func (*SCTPShutdownEvent) AssocID

func (s *SCTPShutdownEvent) AssocID() SCTPAssocID

func (*SCTPShutdownEvent) Flags

func (s *SCTPShutdownEvent) Flags() uint16

func (*SCTPShutdownEvent) Length

func (s *SCTPShutdownEvent) Length() uint32

func (*SCTPShutdownEvent) Type

type SCTPSndRcvInfoWrappedConn

type SCTPSndRcvInfoWrappedConn struct {
	// contains filtered or unexported fields
}

func NewSCTPSndRcvInfoWrappedConn

func NewSCTPSndRcvInfoWrappedConn(conn *SCTPConn) *SCTPSndRcvInfoWrappedConn

func (*SCTPSndRcvInfoWrappedConn) Close

func (c *SCTPSndRcvInfoWrappedConn) Close() error

func (*SCTPSndRcvInfoWrappedConn) GetReadBuffer

func (c *SCTPSndRcvInfoWrappedConn) GetReadBuffer() (int, error)

func (*SCTPSndRcvInfoWrappedConn) GetWriteBuffer

func (c *SCTPSndRcvInfoWrappedConn) GetWriteBuffer() (int, error)

func (*SCTPSndRcvInfoWrappedConn) LocalAddr

func (c *SCTPSndRcvInfoWrappedConn) LocalAddr() net.Addr

func (*SCTPSndRcvInfoWrappedConn) Read

func (c *SCTPSndRcvInfoWrappedConn) Read(b []byte) (int, error)

func (*SCTPSndRcvInfoWrappedConn) RemoteAddr

func (c *SCTPSndRcvInfoWrappedConn) RemoteAddr() net.Addr

func (*SCTPSndRcvInfoWrappedConn) SetDeadline

func (c *SCTPSndRcvInfoWrappedConn) SetDeadline(t time.Time) error

func (*SCTPSndRcvInfoWrappedConn) SetReadBuffer

func (c *SCTPSndRcvInfoWrappedConn) SetReadBuffer(bytes int) error

func (*SCTPSndRcvInfoWrappedConn) SetReadDeadline

func (c *SCTPSndRcvInfoWrappedConn) SetReadDeadline(t time.Time) error

func (*SCTPSndRcvInfoWrappedConn) SetWriteBuffer

func (c *SCTPSndRcvInfoWrappedConn) SetWriteBuffer(bytes int) error

func (*SCTPSndRcvInfoWrappedConn) SetWriteDeadline

func (c *SCTPSndRcvInfoWrappedConn) SetWriteDeadline(t time.Time) error

func (*SCTPSndRcvInfoWrappedConn) Write

func (c *SCTPSndRcvInfoWrappedConn) Write(b []byte) (int, error)

type SCTPState

type SCTPState uint16

type SndInfo

type SndInfo struct {
	SID     uint16
	Flags   uint16
	PPID    uint32
	Context uint32
	AssocID int32
}

type SndRcvInfo

type SndRcvInfo struct {
	Stream uint16
	SSN    uint16
	Flags  uint16

	PPID    uint32
	Context uint32
	TTL     uint32
	TSN     uint32
	CumTSN  uint32
	AssocID int32
	// contains filtered or unexported fields
}

type SocketConfig

type SocketConfig struct {
	// If Control is not nil it is called after the socket is created but before
	// it is bound or connected.
	Control func(network, address string, c syscall.RawConn) error

	// InitMsg is the options to send in the initial SCTP message
	InitMsg InitMsg

	// RtoInfo
	RtoInfo *RtoInfo

	// AssocInfo (RFC 6458)
	AssocInfo *AssocInfo
}

SocketConfig contains options for the SCTP socket.

func (*SocketConfig) Dial

func (cfg *SocketConfig) Dial(net string, laddr, raddr *SCTPAddr) (*SCTPConn, error)

func (*SocketConfig) Listen

func (cfg *SocketConfig) Listen(net string, laddr *SCTPAddr) (*SCTPListener, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL