Functions | |
void | tcp_tmr (void) |
err_t | tcp_close (struct tcp_pcb *pcb) |
void | tcp_abort (struct tcp_pcb *pcb) |
err_t | tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) |
struct tcp_pcb * | tcp_listen_with_backlog (struct tcp_pcb *pcb, u8_t backlog) |
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_seg * | tcp_seg_copy (struct tcp_seg *seg) |
struct tcp_pcb * | tcp_alloc (u8_t prio) |
struct tcp_pcb * | tcp_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) |
void | tcp_debug_print (struct tcp_hdr *tcphdr) |
void | tcp_debug_print_state (enum tcp_state s) |
void | tcp_debug_print_flags (u8_t flags) |
void | tcp_debug_print_pcbs (void) |
s16_t | tcp_pcbs_sane (void) |
Variables | |
struct tcp_pcb * | tcp_bound_pcbs |
union tcp_listen_pcbs_t | tcp_listen_pcbs |
struct tcp_pcb * | tcp_active_pcbs |
struct tcp_pcb * | tcp_tw_pcbs |
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.
void tcp_abort | ( | struct tcp_pcb * | pcb | ) |
Aborts a connection by sending a RST to the remote host and deletes the local protocol control block. This is done when a connection is killed because of shortage of memory.
pcb | the tcp_pcb to abort |
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.
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 |
struct tcp_pcb* tcp_alloc | ( | u8_t | prio | ) | [read] |
Allocate a new tcp_pcb structure.
prio | priority for the new pcb |
void tcp_arg | ( | struct tcp_pcb * | pcb, | |
void * | arg | |||
) |
Used to specify the argument that should be passed callback functions.
pcb | tcp_pcb to set the callback argument | |
arg | void pointer argument to pass to callback functions |
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.
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 |
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.
pcb | the tcp_pcb to close |
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.
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) |
void tcp_debug_print | ( | struct tcp_hdr * | tcphdr | ) |
Print a tcp header for debugging purposes.
tcphdr | pointer to a struct tcp_hdr |
void tcp_debug_print_flags | ( | u8_t | flags | ) |
Print tcp flags for debugging purposes.
flags | tcp flags, all active flags are printed |
void tcp_debug_print_pcbs | ( | void | ) |
Print all tcp_pcbs in every list for debugging purposes.
void tcp_debug_print_state | ( | enum tcp_state | s | ) |
Print a tcp state for debugging purposes.
s | enum tcp_state to print |
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).
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.
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 |
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().
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.
pcb | the original tcp_pcb | |
backlog | the incoming connections queue limit |
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().
u32_t tcp_next_iss | ( | void | ) |
Calculates a new initial sequence number for new connections.
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).
pcb | tcp_pcb to purge. The pcb itself is not deallocated! |
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.
pcblist | PCB list to purge. | |
pcb | tcp_pcb to purge. The pcb itself is also deallocated! |
s16_t tcp_pcbs_sane | ( | void | ) |
Check state consistency of the tcp_pcb lists.
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.
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.
pcb | tcp_pcb to set the recv callback | |
recv | callback function to call for this pcb when data is received |
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.
pcb | the tcp_pcb for which data is read | |
len | the amount of bytes that have been read by the application |
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
seg | the old tcp_seg |
u8_t tcp_seg_free | ( | struct tcp_seg * | seg | ) |
Frees a TCP segment (tcp_seg structure).
seg | single tcp_seg to free |
u8_t tcp_segs_free | ( | struct tcp_seg * | seg | ) |
Deallocates a list of TCP segments (tcp_seg structures).
seg | tcp_seg list of TCP segments to free |
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.
pcb | tcp_pcb to set the sent callback | |
sent | callback function to call for this pcb when data is successfully sent |
void tcp_setprio | ( | struct tcp_pcb * | pcb, | |
u8_t | prio | |||
) |
Sets the priority of a connection.
pcb | the tcp_pcb to manipulate | |
prio | new priority |
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().
void tcp_tmr | ( | void | ) |
Called periodically to dispatch TCP timers.
struct tcp_pcb* tcp_active_pcbs |
List of all TCP PCBs that are in a state in which they accept or send data.
struct tcp_pcb* tcp_bound_pcbs |
List of all TCP PCBs bound but not yet (connected || listening)
union tcp_listen_pcbs_t tcp_listen_pcbs |
List of all TCP PCBs in LISTEN state
struct tcp_pcb* tcp_tw_pcbs |
List of all TCP PCBs in TIME-WAIT state