Nut/OS  4.10.3
API Reference
TCP

RFC 793 Transmission Control Protocol. More...

Collaboration diagram for TCP:

Defines

#define TCP_COLLECT_INADV   8
#define TCP_COLLECT_SLIMIT   256
#define TCP_BACKLOG_MAX   8
#define TCP_BACKLOG_TIME   5
#define TCP_RTTO_MIN   200
#define TCP_RTTO_MAX   20000
#define min(a, b)   ((a>b)?b:a)
#define max(a, b)   ((a>b)?a:b)

Functions

int NutTcpInput (NUTDEVICE *dev, NETBUF *nb)
 Process incoming TCP segments from IP layer.
int NutTcpStatePassiveOpenEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateActiveOpenEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateCloseEvent (TCPSOCKET *sock)
 Socket close by application.
int NutTcpStateWindowEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateRetranTimeout (TCPSOCKET *sock)
 Retransmit a segment after ACK timeout.
void NutTcpSm (void *arg)
 TCP state machine thread.
void NutTcpStateMachine (NETBUF *nb)
 Process incoming TCP segments.
int NutTcpInitStateMachine (void)
 Start TCP state machine.
int NutTcpAbortSocket (TCPSOCKET *sock, uint16_t last_error)
 Closes socket with error.
void NutTcpCalcRtt (TCPSOCKET *sock)

Variables

HANDLE tcp_in_rdy
NETBUF *volatile tcp_in_nbq

Detailed Description

RFC 793 Transmission Control Protocol.

TCP provides reliable, in-sequence delivery of a full-duplex stream of octets. It is used by applications which need a reliable, connection-oriented data transport.

Applications should call the TCP Socket API when using this protocol.

Todo:
Use an indirect call for NutTcpInput(). Right now, the whole TCP code is linked to any application, even if only UDP is used.

Define Documentation

#define TCP_COLLECT_INADV   8

Definition at line 155 of file tcpsm.c.

#define TCP_COLLECT_SLIMIT   256

Definition at line 159 of file tcpsm.c.

#define TCP_BACKLOG_MAX   8

Definition at line 163 of file tcpsm.c.

#define TCP_BACKLOG_TIME   5

Definition at line 168 of file tcpsm.c.

#define TCP_RTTO_MIN   200

Definition at line 74 of file tcputil.c.

Referenced by NutTcpCalcRtt().

#define TCP_RTTO_MAX   20000

Definition at line 77 of file tcputil.c.

Referenced by NutTcpCalcRtt().

#define min (   a,
 
)    ((a>b)?b:a)

Definition at line 80 of file tcputil.c.

Referenced by NutTcpCalcRtt().

#define max (   a,
 
)    ((a>b)?a:b)

Definition at line 81 of file tcputil.c.

Referenced by ADCEnableChannel(), and NutTcpCalcRtt().


Function Documentation

int NutTcpInput ( NUTDEVICE dev,
NETBUF nb 
)

Process incoming TCP segments from IP layer.

Warning:
The caller must take care not to pass broadcast or multicast segments.
Note:
This routine is called by the IP layer on incoming TCP segments. Applications typically do not call this function.

Definition at line 148 of file tcpin.c.

References _NETBUF::nb_ap, _NETBUF::nb_flags, _NETBUF::nb_tp, NBAF_UNICAST, NutNetBufFree(), NutTcpStateMachine(), _NBDATA::sz, tcphdr::th_off, and _NBDATA::vp.

Referenced by NutTcpCreateSocket().

Here is the call graph for this function:

int NutTcpStatePassiveOpenEvent ( TCPSOCKET sock)

Initiated by the application.

Parameters:
sockSocket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
0 if granted, error code otherwise.

Definition at line 803 of file tcpsm.c.

References EISCONN, ETIMEDOUT, NutEventWait(), tcp_socket::so_last_error, tcp_socket::so_local_port, tcp_socket::so_pc_tq, tcp_socket::so_read_to, tcp_socket::so_state, TCPS_CLOSED, and TCPS_LISTEN.

Referenced by NutTcpAccept().

Here is the call graph for this function:

int NutTcpStateActiveOpenEvent ( TCPSOCKET sock)

Initiated by the application.

The caller must make sure, that the socket is in closed state.

Parameters:
sockSocket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
0 if granted, -1 otherwise.

Definition at line 847 of file tcpsm.c.

References NutEventWait(), tcp_socket::so_ac_tq, tcp_socket::so_state, TCPS_CLOSE_WAIT, TCPS_ESTABLISHED, and TCPS_SYN_SENT.

Referenced by NutTcpConnect().

Here is the call graph for this function:

int NutTcpStateCloseEvent ( TCPSOCKET sock)

Socket close by application.

If socket is in state SYN_RECEIVED or ESTABLISHED, it is changed to FINWAIT1.

No further data sending is accepted. Receiving is still allowed.

Parameters:
sockSocket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().

Definition at line 879 of file tcpsm.c.

References EALREADY, ENOTCONN, NutTcpDestroySocket(), NutThreadYield(), tcp_socket::so_last_error, tcp_socket::so_state, TCPS_CLOSE_WAIT, TCPS_CLOSED, TCPS_CLOSING, TCPS_ESTABLISHED, TCPS_FIN_WAIT_1, TCPS_FIN_WAIT_2, TCPS_LAST_ACK, TCPS_LISTEN, TCPS_SYN_RECEIVED, TCPS_SYN_SENT, and TCPS_TIME_WAIT.

Referenced by NutTcpCloseSocket().

Here is the call graph for this function:

int NutTcpStateWindowEvent ( TCPSOCKET sock)

Initiated by the application.

Parameters:
sockSocket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().

Definition at line 934 of file tcpsm.c.

References NutTcpOutput(), SO_ACK, SO_FORCE, and tcp_socket::so_tx_flags.

Referenced by NutTcpReceive().

Here is the call graph for this function:

int NutTcpStateRetranTimeout ( TCPSOCKET sock)

Retransmit a segment after ACK timeout.

This function is called by the TCP timer.

Parameters:
sockSocket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
Nonzero if socket was aborted due to reach of retransmit limit or network error.

Definition at line 959 of file tcpsm.c.

References __tcp_trf, __tcp_trs, ENETDOWN, ETIMEDOUT, IPPROTO_TCP, _NETBUF::nb_next, NutDumpTcpHeader(), NutGetMillis(), NutIpOutput(), NutTcpAbortSocket(), tcp_socket::so_remote_addr, tcp_socket::so_retran_time, tcp_socket::so_retransmits, tcp_socket::so_tx_nbq, and TCP_RETRIES_MAX.

Referenced by NutTcpSm().

Here is the call graph for this function:

void NutTcpStateMachine ( NETBUF nb)

Process incoming TCP segments.

All incoming TCP packets are passed to this routine. They will be added to a global queue and processed by the TCP state machine, which is running on a separate thread.

Note:
This routine is called by the IP layer on incoming TCP segments. Applications typically do not call this function.

Definition at line 1786 of file tcpsm.c.

References _NETBUF::nb_ap, _NETBUF::nb_next, _NETBUF::nb_nw, _NETBUF::nb_tp, NutEventPost(), NutHeapAvailable, NutNetBufFree(), NutTcpReject(), _NBDATA::sz, and tcp_in_rdy.

Referenced by NutTcpInput().

Here is the call graph for this function:

int NutTcpInitStateMachine ( void  )

Start TCP state machine.

The socket interface will automatically call this routine as soon as the first socket is created.

Returns:
0 on success, -1 otherwise.

Definition at line 1828 of file tcpsm.c.

References NUT_THREAD_STACK_ADD, NUT_THREAD_STACK_MULT, NUT_THREAD_TCPSMSTACK, NutTcpSm(), and NutThreadCreate().

Referenced by NutTcpCreateSocket().

Here is the call graph for this function:

int NutTcpAbortSocket ( TCPSOCKET sock,
uint16_t  last_error 
)

Closes socket with error.

Aborts any socket activity and sets last error.

Parameters:
sockSocket descriptor.
last_errorError number to report
Note:
This routine is called internally by Nut/Net. Applications typically do not call this function.
Returns:
0 on success, -1 otherwise.

Definition at line 1849 of file tcpsm.c.

References NutEventBroadcast(), NutTcpDiscardBuffers(), tcp_socket::so_ac_tq, tcp_socket::so_last_error, tcp_socket::so_pc_tq, tcp_socket::so_retran_time, tcp_socket::so_rx_tq, tcp_socket::so_state, tcp_socket::so_time_wait, tcp_socket::so_tx_tq, TCPS_CLOSED, TCPS_FIN_WAIT_1, and TCPS_TIME_WAIT.

Referenced by NutTcpStateRetranTimeout().

Here is the call graph for this function:

void NutTcpCalcRtt ( TCPSOCKET sock)

Definition at line 86 of file tcputil.c.

References max, min, NutGetMillis(), tcp_socket::so_retran_time, tcp_socket::so_rtto, TCP_RTTO_MAX, and TCP_RTTO_MIN.

Here is the call graph for this function:


Variable Documentation

Definition at line 149 of file tcpsm.c.

Referenced by NutTcpSm(), and NutTcpStateMachine().

NETBUF* volatile tcp_in_nbq

Definition at line 150 of file tcpsm.c.

Referenced by NutTcpSm().