SAMV71 Xplained Ultra Software Package 1.3

tcp.c File Reference

#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/snmp.h"
#include "lwip/tcp.h"
#include "lwip/debug.h"
#include "lwip/stats.h"
#include <string.h>

Go to the source code of this file.

Defines

#define TCP_LOCAL_PORT_RANGE_START   4096
#define TCP_LOCAL_PORT_RANGE_END   0x7fff

Functions

void tcp_tmr (void)
err_t tcp_close (struct tcp_pcb *pcb)
void tcp_abandon (struct tcp_pcb *pcb, int reset)
err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
struct tcp_pcbtcp_listen_with_backlog (struct tcp_pcb *pcb, u8_t backlog)
u32_t tcp_update_rcv_ann_wnd (struct tcp_pcb *pcb)
void tcp_recved (struct tcp_pcb *pcb, u16_t len)
err_t tcp_connect (struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, err_t(*connected)(void *arg, struct tcp_pcb *tpcb, err_t err))
void tcp_slowtmr (void)
void tcp_fasttmr (void)
u8_t tcp_segs_free (struct tcp_seg *seg)
u8_t tcp_seg_free (struct tcp_seg *seg)
void tcp_setprio (struct tcp_pcb *pcb, u8_t prio)
struct tcp_segtcp_seg_copy (struct tcp_seg *seg)
err_t tcp_recv_null (void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
struct tcp_pcbtcp_alloc (u8_t prio)
struct tcp_pcbtcp_new (void)
void tcp_arg (struct tcp_pcb *pcb, void *arg)
void tcp_recv (struct tcp_pcb *pcb, err_t(*recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err))
void tcp_sent (struct tcp_pcb *pcb, err_t(*sent)(void *arg, struct tcp_pcb *tpcb, u16_t len))
void tcp_err (struct tcp_pcb *pcb, void(*errf)(void *arg, err_t err))
void tcp_accept (struct tcp_pcb *pcb, err_t(*accept)(void *arg, struct tcp_pcb *newpcb, err_t err))
void tcp_poll (struct tcp_pcb *pcb, err_t(*poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval)
void tcp_pcb_purge (struct tcp_pcb *pcb)
void tcp_pcb_remove (struct tcp_pcb **pcblist, struct tcp_pcb *pcb)
u32_t tcp_next_iss (void)
u16_t tcp_eff_send_mss (u16_t sendmss, struct ip_addr *addr)
const char * tcp_debug_state_str (enum tcp_state s)

Variables

const char * tcp_state_str []
u32_t tcp_ticks
const u8_t tcp_backoff [13]
const u8_t tcp_persist_backoff [7] = { 3, 6, 12, 24, 48, 96, 120 }
struct tcp_pcbtcp_bound_pcbs
union tcp_listen_pcbs_t tcp_listen_pcbs
struct tcp_pcbtcp_active_pcbs
struct tcp_pcbtcp_tw_pcbs
struct tcp_pcbtcp_tmp_pcb

Detailed Description

Transmission Control Protocol for IP

This file contains common functions for the TCP implementation, such as functinos for manipulating the data structures and the TCP timer functions. TCP functions related to input and output is found in tcp_in.c and tcp_out.c respectively.

Definition in file tcp.c.


Function Documentation

void tcp_abandon ( struct tcp_pcb pcb,
int  reset 
)

Abandons a connection and optionally sends a RST to the remote host. Deletes the local protocol control block. This is done when a connection is killed because of shortage of memory.

Parameters:
pcb the tcp_pcb to abort
reset boolean to indicate whether a reset should be sent

Definition at line 213 of file tcp.c.

Here is the call graph for this function:

void tcp_accept ( struct tcp_pcb pcb,
err_t(*)(void *arg, struct tcp_pcb *newpcb, err_t err)  accept 
)

Used for specifying the function that should be called when a LISTENing connection has been connected to another host.

Parameters:
pcb tcp_pcb to set the accept callback
accept callback function to call for this pcb when LISTENing connection has been connected to another host

Definition at line 1160 of file tcp.c.

struct tcp_pcb* tcp_alloc ( u8_t  prio  )  [read]

Allocate a new tcp_pcb structure.

Parameters:
prio priority for the new pcb
Returns:
a new tcp_pcb that initially is in state CLOSED

Definition at line 1005 of file tcp.c.

Here is the call graph for this function:

void tcp_arg ( struct tcp_pcb pcb,
void *  arg 
)

Used to specify the argument that should be passed callback functions.

Parameters:
pcb tcp_pcb to set the callback argument
arg void pointer argument to pass to callback functions

Definition at line 1102 of file tcp.c.

err_t tcp_bind ( struct tcp_pcb pcb,
struct ip_addr ipaddr,
u16_t  port 
)

Binds the connection to a local portnumber and IP address. If the IP address is not given (i.e., ipaddr == NULL), the IP address of the outgoing network interface is used instead.

Parameters:
pcb the tcp_pcb to bind (no check is done whether this pcb is already bound!)
ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind to any local address
port the local port to bind to
Returns:
ERR_USE if the port is already in use ERR_OK if bound

Definition at line 276 of file tcp.c.

err_t tcp_close ( struct tcp_pcb pcb  ) 

Closes the connection held by the PCB.

Listening pcbs are freed and may not be referenced any more. Connection pcbs are freed if not yet connected and may not be referenced any more. If a connection is established (at least SYN received or in a closing state), the connection is closed, and put in a closing state. The pcb is then automatically freed in tcp_slowtmr(). It is therefore unsafe to reference it.

Parameters:
pcb the tcp_pcb to close
Returns:
ERR_OK if connection has been closed another err_t if closing failed and pcb is not freed

Definition at line 127 of file tcp.c.

Here is the call graph for this function:

err_t tcp_connect ( struct tcp_pcb pcb,
struct ip_addr ipaddr,
u16_t  port,
err_t(*)(void *arg, struct tcp_pcb *tpcb, err_t err)  connected 
)

Connects to another host. The function given as the "connected" argument will be called when the connection has been established.

Parameters:
pcb the tcp_pcb used to establish the connection
ipaddr the remote ip address to connect to
port the remote tcp port to connect to
connected callback function to call when connected (or on error)
Returns:
ERR_VAL if invalid arguments are given ERR_OK if connect request has been sent other err_t values if connect request couldn't be sent

Definition at line 514 of file tcp.c.

Here is the call graph for this function:

u16_t tcp_eff_send_mss ( u16_t  sendmss,
struct ip_addr addr 
)

Calcluates the effective send mss that can be used for a specific IP address by using ip_route to determin the netif used to send to the address and calculating the minimum of TCP_MSS and that netif's mtu (if set).

Definition at line 1304 of file tcp.c.

Here is the call graph for this function:

void tcp_err ( struct tcp_pcb pcb,
void(*)(void *arg, err_t err)  errf 
)

Used to specify the function that should be called when a fatal error has occured on the connection.

Parameters:
pcb tcp_pcb to set the err callback
errf callback function to call for this pcb when a fatal error has occured on the connection

Definition at line 1145 of file tcp.c.

void tcp_fasttmr ( void   ) 

Is called every TCP_FAST_INTERVAL (250 ms) and process data previously "refused" by upper layer (application) and sends delayed ACKs.

Automatically called from tcp_tmr().

Definition at line 817 of file tcp.c.

struct tcp_pcb* tcp_listen_with_backlog ( struct tcp_pcb pcb,
u8_t  backlog 
) [read]

Set the state of the connection to be LISTEN, which means that it is able to accept incoming connections. The protocol control block is reallocated in order to consume less memory. Setting the connection to LISTEN is an irreversible process.

Parameters:
pcb the original tcp_pcb
backlog the incoming connections queue limit
Returns:
tcp_pcb used for listening, consumes less memory.
Note:
The original tcp_pcb is freed. This function therefore has to be called like this: tpcb = tcp_listen(tpcb);

Definition at line 366 of file tcp.c.

Here is the call graph for this function:

struct tcp_pcb* tcp_new ( void   )  [read]

Creates a new TCP protocol control block but doesn't place it on any of the TCP PCB lists. The pcb is not put on any list until binding using tcp_bind().

Definition at line 1089 of file tcp.c.

Here is the call graph for this function:

u32_t tcp_next_iss ( void   ) 

Calculates a new initial sequence number for new connections.

Returns:
u32_t pseudo random sequence number

Definition at line 1289 of file tcp.c.

void tcp_pcb_purge ( struct tcp_pcb pcb  ) 

Purges a TCP PCB. Removes any buffered data and frees the buffer memory (pcb->ooseq, pcb->unsent and pcb->unacked are freed).

Parameters:
pcb tcp_pcb to purge. The pcb itself is not deallocated!

Definition at line 1191 of file tcp.c.

Here is the call graph for this function:

void tcp_pcb_remove ( struct tcp_pcb **  pcblist,
struct tcp_pcb pcb 
)

Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first.

Parameters:
pcblist PCB list to purge.
pcb tcp_pcb to purge. The pcb itself is NOT deallocated!

Definition at line 1256 of file tcp.c.

Here is the call graph for this function:

void tcp_poll ( struct tcp_pcb pcb,
err_t(*)(void *arg, struct tcp_pcb *tpcb)  poll,
u8_t  interval 
)

Used to specify the function that should be called periodically from TCP. The interval is specified in terms of the TCP coarse timer interval, which is called twice a second.

Definition at line 1175 of file tcp.c.

void tcp_recv ( struct tcp_pcb pcb,
err_t(*)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)  recv 
)

Used to specify the function that should be called when a TCP connection receives data.

Parameters:
pcb tcp_pcb to set the recv callback
recv callback function to call for this pcb when data is received

Definition at line 1116 of file tcp.c.

err_t tcp_recv_null ( void *  arg,
struct tcp_pcb pcb,
struct pbuf p,
err_t  err 
)

Default receive callback that is called if the user didn't register a recv callback for the pcb.

Definition at line 925 of file tcp.c.

Here is the call graph for this function:

void tcp_recved ( struct tcp_pcb pcb,
u16_t  len 
)

This function should be called by the application when it has processed the data. The purpose is to advertise a larger window when the data has been processed.

Parameters:
pcb the tcp_pcb for which data is read
len the amount of bytes that have been read by the application

Definition at line 438 of file tcp.c.

Here is the call graph for this function:

struct tcp_seg* tcp_seg_copy ( struct tcp_seg seg  )  [read]

Returns a copy of the given TCP segment. The pbuf and data are not copied, only the pointers

Parameters:
seg the old tcp_seg
Returns:
a copy of seg

Definition at line 905 of file tcp.c.

Here is the call graph for this function:

u8_t tcp_seg_free ( struct tcp_seg seg  ) 

Frees a TCP segment (tcp_seg structure).

Parameters:
seg single tcp_seg to free
Returns:
the number of pbufs that were deallocated

Definition at line 868 of file tcp.c.

Here is the call graph for this function:

u8_t tcp_segs_free ( struct tcp_seg seg  ) 

Deallocates a list of TCP segments (tcp_seg structures).

Parameters:
seg tcp_seg list of TCP segments to free
Returns:
the number of pbufs that were deallocated

Definition at line 849 of file tcp.c.

Here is the call graph for this function:

void tcp_sent ( struct tcp_pcb pcb,
err_t(*)(void *arg, struct tcp_pcb *tpcb, u16_t len)  sent 
)

Used to specify the function that should be called when TCP data has been successfully delivered to the remote host.

Parameters:
pcb tcp_pcb to set the sent callback
sent callback function to call for this pcb when data is successfully sent

Definition at line 1130 of file tcp.c.

void tcp_setprio ( struct tcp_pcb pcb,
u8_t  prio 
)

Sets the priority of a connection.

Parameters:
pcb the tcp_pcb to manipulate
prio new priority

Definition at line 891 of file tcp.c.

void tcp_slowtmr ( void   ) 

Called every 500 ms and implements the retransmission timer and the timer that removes PCBs that have been in TIME-WAIT for enough time. It also increments various timers such as the inactivity timer in each PCB.

Automatically called from tcp_tmr().

Definition at line 577 of file tcp.c.

Here is the call graph for this function:

void tcp_tmr ( void   ) 

Called periodically to dispatch TCP timers.

Definition at line 100 of file tcp.c.

Here is the call graph for this function:

u32_t tcp_update_rcv_ann_wnd ( struct tcp_pcb pcb  ) 

Update the state that tracks the available window space to advertise.

Returns how much extra window would be advertised if we sent an update now.

Definition at line 408 of file tcp.c.


Variable Documentation

List of all TCP PCBs that are in a state in which they accept or send data.

Definition at line 86 of file tcp.c.

const u8_t tcp_backoff[13]
Initial value:
    { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}

Definition at line 73 of file tcp.c.

List of all TCP PCBs bound but not yet (connected || listening)

Definition at line 81 of file tcp.c.

List of all TCP PCBs in LISTEN state

Definition at line 83 of file tcp.c.

const char* tcp_state_str[]
Initial value:
 {
  "CLOSED",      
  "LISTEN",      
  "SYN_SENT",    
  "SYN_RCVD",    
  "ESTABLISHED", 
  "FIN_WAIT_1",  
  "FIN_WAIT_2",  
  "CLOSE_WAIT",  
  "CLOSING",     
  "LAST_ACK",    
  "TIME_WAIT"   
}

Definition at line 57 of file tcp.c.

List of all TCP PCBs in TIME-WAIT state

Definition at line 88 of file tcp.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines