RFC 793 Transmission Control Protocol. More...
|   | 
| 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 | 
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.
| #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, | |
| b | |||
| ) | ((a>b)?b:a) | 
Definition at line 80 of file tcputil.c.
Referenced by NutTcpCalcRtt().
| #define max | ( | a, | |
| b | |||
| ) | ((a>b)?a:b) | 
Definition at line 81 of file tcputil.c.
Referenced by ADCEnableChannel(), and NutTcpCalcRtt().
Process incoming TCP segments from IP layer.
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().

| int NutTcpStatePassiveOpenEvent | ( | TCPSOCKET * | sock | ) | 
Initiated by the application.
| sock | Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket(). | 
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().

| int NutTcpStateActiveOpenEvent | ( | TCPSOCKET * | sock | ) | 
Initiated by the application.
The caller must make sure, that the socket is in closed state.
| sock | Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket(). | 
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().

| 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.
| sock | Socket 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().

| int NutTcpStateWindowEvent | ( | TCPSOCKET * | sock | ) | 
Initiated by the application.
| sock | Socket 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().

| int NutTcpStateRetranTimeout | ( | TCPSOCKET * | sock | ) | 
Retransmit a segment after ACK timeout.
This function is called by the TCP timer.
| sock | Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket(). | 
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().

| NutTcpSm | ( | void * | arg | ) | 
TCP state machine thread.
The TCP state machine serves two purposes: It processes incoming TCP segments and handles TCP timers.
Definition at line 1671 of file tcpsm.c.
References __tcp_trf, __tcp_trs, ip::ip_src, _NETBUF::nb_next, _NETBUF::nb_nw, _NETBUF::nb_tp, NutDumpTcpHeader(), NutEventWait(), NutGetMillis(), NutTcpDestroySocket(), NutTcpFindSocket(), NutTcpOutput(), NutTcpReject(), NutTcpStateRetranTimeout(), NutThreadSetPriority(), SO_ACK, SO_FORCE, tcp_socket::so_next, tcp_socket::so_retran_time, tcp_socket::so_rtto, tcp_socket::so_state, tcp_socket::so_time_wait, tcp_socket::so_tx_flags, tcp_socket::so_tx_nbq, tcp_in_nbq, tcp_in_rdy, TCPS_FIN_WAIT_2, TCPS_LISTEN, TCPS_SYN_RECEIVED, TCPS_TIME_WAIT, tcphdr::th_dport, tcphdr::th_sport, and _NBDATA::vp.
Referenced by NutTcpInitStateMachine().

| 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.
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().

| int NutTcpInitStateMachine | ( | void | ) | 
Start TCP state machine.
The socket interface will automatically call this routine as soon as the first socket is created.
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().

Closes socket with error.
Aborts any socket activity and sets last error.
| sock | Socket descriptor. | 
| last_error | Error number to report | 
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().

| 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.

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().