lwIP 2.0.0
lwIP 2.0.0
LightweightIPstack
|
#include "lwip/opt.h"
#include "lwip/priv/tcp_priv.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/ip_addr.h"
#include "lwip/netif.h"
#include "lwip/inet_chksum.h"
#include "lwip/stats.h"
#include "lwip/ip6.h"
#include "lwip/ip6_addr.h"
#include <string.h>
Macros | |
#define | TCP_CHECKSUM_ON_COPY_SANITY_CHECK 0 |
#define | TCP_OVERSIZE_CALC_LENGTH(length) ((length) + TCP_OVERSIZE) |
Functions | |
err_t | tcp_send_fin (struct tcp_pcb *pcb) |
err_t | tcp_write (struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags) |
err_t | tcp_enqueue_flags (struct tcp_pcb *pcb, u8_t flags) |
err_t | tcp_send_empty_ack (struct tcp_pcb *pcb) |
err_t | tcp_output (struct tcp_pcb *pcb) |
void | tcp_rst (u32_t seqno, u32_t ackno, const ip_addr_t *local_ip, const ip_addr_t *remote_ip, u16_t local_port, u16_t remote_port) |
void | tcp_rexmit_rto (struct tcp_pcb *pcb) |
void | tcp_rexmit (struct tcp_pcb *pcb) |
void | tcp_rexmit_fast (struct tcp_pcb *pcb) |
err_t | tcp_keepalive (struct tcp_pcb *pcb) |
err_t | tcp_zero_window_probe (struct tcp_pcb *pcb) |
Transmission Control Protocol, outgoing traffic
The output functions of TCP.
#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK 0 |
Define this to 1 for an extra check that the output checksum is valid (usefule when the checksum is generated by the application, not the stack)
#define TCP_OVERSIZE_CALC_LENGTH | ( | length | ) | ((length) + TCP_OVERSIZE) |
The size of segment pbufs created when TCP_OVERSIZE is enabled
Enqueue TCP options for transmission.
Called by tcp_connect(), tcp_listen_input(), and tcp_send_ctrl().
pcb | Protocol control block for the TCP connection. |
flags | TCP header flags to set in the outgoing segment. |
Send keepalive packets to keep a connection active although no data is sent over it.
Called by tcp_slowtmr()
pcb | the tcp_pcb for which to send a keepalive packet |
Find out what we can send and send it
pcb | Protocol control block for the TCP connection to send data |
void tcp_rexmit | ( | struct tcp_pcb * | pcb | ) |
Requeue the first unacked segment for retransmission
Called by tcp_receive() for fast retramsmit.
pcb | the tcp_pcb for which to retransmit the first unacked segment |
void tcp_rexmit_fast | ( | struct tcp_pcb * | pcb | ) |
Handle retransmission after three dupacks received
pcb | the tcp_pcb for which to retransmit the first unacked segment |
void tcp_rexmit_rto | ( | struct tcp_pcb * | pcb | ) |
Requeue all unacked segments for retransmission
Called by tcp_slowtmr() for slow retransmission.
pcb | the tcp_pcb for which to re-enqueue all unacked segments |
void tcp_rst | ( | u32_t | seqno, |
u32_t | ackno, | ||
const ip_addr_t * | local_ip, | ||
const ip_addr_t * | remote_ip, | ||
u16_t | local_port, | ||
u16_t | remote_port | ||
) |
Send a TCP RESET packet (empty segment with RST flag set) either to abort a connection or to show that there is no matching local connection for a received segment.
Called by tcp_abort() (to abort a local connection), tcp_input() (if no matching local pcb was found), tcp_listen_input() (if incoming segment has ACK flag set) and tcp_process() (received segment in the wrong state)
Since a RST segment is in most cases not sent for an active connection, tcp_rst() has a number of arguments that are taken from a tcp_pcb for most other segment output functions.
seqno | the sequence number to use for the outgoing segment |
ackno | the acknowledge number to use for the outgoing segment |
local_ip | the local IP address to send the segment from |
remote_ip | the remote IP address to send the segment to |
local_port | the local TCP port to send the segment from |
remote_port | the remote TCP port to send the segment to |
Send an ACK without data.
pcb | Protocol control block for the TCP connection to send the ACK |
Called by tcp_close() to send a segment including FIN flag but not data.
pcb | the tcp_pcb over which to send a segment |
Write data for sending (but does not send it immediately).
It waits in the expectation of more data being sent soon (as it can send them more efficiently by combining them together). To prompt the system to send data now, call tcp_output() after calling tcp_write().
pcb | Protocol control block for the TCP connection to enqueue data for. |
arg | Pointer to the data to be enqueued for sending. |
len | Data length in bytes |
apiflags | combination of following flags :
|
Send persist timer zero-window probes to keep a connection active when a window update is lost.
Called by tcp_slowtmr()
pcb | the tcp_pcb for which to send a zero-window probe packet |