ReactOS 0.4.16-dev-297-gc569aee
tcp_helper.c File Reference
#include "tcp_helper.h"
#include "lwip/priv/tcp_priv.h"
#include "lwip/stats.h"
#include "lwip/pbuf.h"
#include "lwip/inet.h"
#include "lwip/inet_chksum.h"
#include "lwip/ip_addr.h"
Include dependency graph for tcp_helper.c:

Go to the source code of this file.

Functions

static void tcp_remove (struct tcp_pcb *pcb_list)
 
void tcp_remove_all (void)
 
static struct pbuftcp_create_segment_wnd (ip_addr_t *src_ip, ip_addr_t *dst_ip, u16_t src_port, u16_t dst_port, void *data, size_t data_len, u32_t seqno, u32_t ackno, u8_t headerflags, u16_t wnd)
 
struct pbuftcp_create_segment (ip_addr_t *src_ip, ip_addr_t *dst_ip, u16_t src_port, u16_t dst_port, void *data, size_t data_len, u32_t seqno, u32_t ackno, u8_t headerflags)
 
struct pbuftcp_create_rx_segment (struct tcp_pcb *pcb, void *data, size_t data_len, u32_t seqno_offset, u32_t ackno_offset, u8_t headerflags)
 
struct pbuftcp_create_rx_segment_wnd (struct tcp_pcb *pcb, void *data, size_t data_len, u32_t seqno_offset, u32_t ackno_offset, u8_t headerflags, u16_t wnd)
 
void tcp_set_state (struct tcp_pcb *pcb, enum tcp_state state, const ip_addr_t *local_ip, const ip_addr_t *remote_ip, u16_t local_port, u16_t remote_port)
 
void test_tcp_counters_err (void *arg, err_t err)
 
static void test_tcp_counters_check_rxdata (struct test_tcp_counters *counters, struct pbuf *p)
 
err_t test_tcp_counters_recv (void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
 
struct tcp_pcb * test_tcp_new_counters_pcb (struct test_tcp_counters *counters)
 
void test_tcp_input (struct pbuf *p, struct netif *inp)
 
static err_t test_tcp_netif_output (struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr)
 
void test_tcp_init_netif (struct netif *netif, struct test_tcp_txcounters *txcounters, const ip_addr_t *ip_addr, const ip_addr_t *netmask)
 

Variables

const ip_addr_t test_local_ip = IPADDR4_INIT_BYTES(192, 168, 1, 1)
 
const ip_addr_t test_remote_ip = IPADDR4_INIT_BYTES(192, 168, 1, 2)
 
const ip_addr_t test_netmask = IPADDR4_INIT_BYTES(255, 255, 255, 0)
 

Function Documentation

◆ tcp_create_rx_segment()

struct pbuf * tcp_create_rx_segment ( struct tcp_pcb *  pcb,
void data,
size_t  data_len,
u32_t  seqno_offset,
u32_t  ackno_offset,
u8_t  headerflags 
)

Create a TCP segment usable for passing to tcp_input

  • IP-addresses, ports, seqno and ackno are taken from pcb
  • seqno and ackno can be altered with an offset

Definition at line 130 of file tcp_helper.c.

132{
133 return tcp_create_segment(&pcb->remote_ip, &pcb->local_ip, pcb->remote_port, pcb->local_port,
134 data, data_len, pcb->rcv_nxt + seqno_offset, pcb->lastack + ackno_offset, headerflags);
135}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
struct pbuf * tcp_create_segment(ip_addr_t *src_ip, ip_addr_t *dst_ip, u16_t src_port, u16_t dst_port, void *data, size_t data_len, u32_t seqno, u32_t ackno, u8_t headerflags)
Definition: tcp_helper.c:117

Referenced by START_TEST(), test_tcp_recv_ooseq_double_FINs(), and test_tcp_tx_full_window_lost().

◆ tcp_create_rx_segment_wnd()

struct pbuf * tcp_create_rx_segment_wnd ( struct tcp_pcb *  pcb,
void data,
size_t  data_len,
u32_t  seqno_offset,
u32_t  ackno_offset,
u8_t  headerflags,
u16_t  wnd 
)

Create a TCP segment usable for passing to tcp_input

  • IP-addresses, ports, seqno and ackno are taken from pcb
  • seqno and ackno can be altered with an offset
  • TCP window can be adjusted

Definition at line 142 of file tcp_helper.c.

144{
145 return tcp_create_segment_wnd(&pcb->remote_ip, &pcb->local_ip, pcb->remote_port, pcb->local_port,
146 data, data_len, pcb->rcv_nxt + seqno_offset, pcb->lastack + ackno_offset, headerflags, wnd);
147}
static struct pbuf * tcp_create_segment_wnd(ip_addr_t *src_ip, ip_addr_t *dst_ip, u16_t src_port, u16_t dst_port, void *data, size_t data_len, u32_t seqno, u32_t ackno, u8_t headerflags, u16_t wnd)
Definition: tcp_helper.c:52

Referenced by START_TEST(), test_tcp_tx_full_window_lost(), and test_tcp_zwp_timeout_impl().

◆ tcp_create_segment()

struct pbuf * tcp_create_segment ( ip_addr_t src_ip,
ip_addr_t dst_ip,
u16_t  src_port,
u16_t  dst_port,
void data,
size_t  data_len,
u32_t  seqno,
u32_t  ackno,
u8_t  headerflags 
)

Create a TCP segment usable for passing to tcp_input

Definition at line 117 of file tcp_helper.c.

120{
121 return tcp_create_segment_wnd(src_ip, dst_ip, src_port, dst_port, data,
122 data_len, seqno, ackno, headerflags, TCP_WND);
123}
#define TCP_WND
Definition: lwipopts.h:48

Referenced by START_TEST(), and tcp_create_rx_segment().

◆ tcp_create_segment_wnd()

static struct pbuf * tcp_create_segment_wnd ( ip_addr_t src_ip,
ip_addr_t dst_ip,
u16_t  src_port,
u16_t  dst_port,
void data,
size_t  data_len,
u32_t  seqno,
u32_t  ackno,
u8_t  headerflags,
u16_t  wnd 
)
static

Create a TCP segment usable for passing to tcp_input

Definition at line 52 of file tcp_helper.c.

55{
56 struct pbuf *p, *q;
57 struct ip_hdr* iphdr;
58 struct tcp_hdr* tcphdr;
59 u16_t pbuf_len = (u16_t)(sizeof(struct ip_hdr) + sizeof(struct tcp_hdr) + data_len);
60 LWIP_ASSERT("data_len too big", data_len <= 0xFFFF);
61
62 p = pbuf_alloc(PBUF_RAW, pbuf_len, PBUF_POOL);
64 /* first pbuf must be big enough to hold the headers */
65 EXPECT_RETNULL(p->len >= (sizeof(struct ip_hdr) + sizeof(struct tcp_hdr)));
66 if (data_len > 0) {
67 /* first pbuf must be big enough to hold at least 1 data byte, too */
68 EXPECT_RETNULL(p->len > (sizeof(struct ip_hdr) + sizeof(struct tcp_hdr)));
69 }
70
71 for(q = p; q != NULL; q = q->next) {
72 memset(q->payload, 0, q->len);
73 }
74
75 iphdr = (struct ip_hdr*)p->payload;
76 /* fill IP header */
77 iphdr->dest.addr = ip_2_ip4(dst_ip)->addr;
78 iphdr->src.addr = ip_2_ip4(src_ip)->addr;
79 IPH_VHL_SET(iphdr, 4, IP_HLEN / 4);
80 IPH_TOS_SET(iphdr, 0);
81 IPH_LEN_SET(iphdr, htons(p->tot_len));
82 IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN));
83
84 /* let p point to TCP header */
85 pbuf_header(p, -(s16_t)sizeof(struct ip_hdr));
86
87 tcphdr = (struct tcp_hdr*)p->payload;
88 tcphdr->src = htons(src_port);
89 tcphdr->dest = htons(dst_port);
90 tcphdr->seqno = htonl(seqno);
91 tcphdr->ackno = htonl(ackno);
92 TCPH_HDRLEN_SET(tcphdr, sizeof(struct tcp_hdr)/4);
93 TCPH_FLAGS_SET(tcphdr, headerflags);
94 tcphdr->wnd = htons(wnd);
95
96 if (data_len > 0) {
97 /* let p point to TCP data */
98 pbuf_header(p, -(s16_t)sizeof(struct tcp_hdr));
99 /* copy data */
100 pbuf_take(p, data, (u16_t)data_len);
101 /* let p point to TCP header again */
102 pbuf_header(p, sizeof(struct tcp_hdr));
103 }
104
105 /* calculate checksum */
106
107 tcphdr->chksum = ip_chksum_pseudo(p,
108 IP_PROTO_TCP, p->tot_len, src_ip, dst_ip);
109
110 pbuf_header(p, sizeof(struct ip_hdr));
111
112 return p;
113}
#define NULL
Definition: types.h:112
#define LWIP_ASSERT(message, assertion)
Definition: debug.h:116
#define IP_PROTO_TCP
Definition: ip.h:50
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLfloat GLfloat p
Definition: glext.h:8902
uint16_t u16_t
Definition: arch.h:127
int16_t s16_t
Definition: arch.h:128
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
Definition: pbuf.c:224
err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)
Definition: pbuf.c:1227
@ PBUF_POOL
Definition: pbuf.h:167
@ PBUF_RAW
Definition: pbuf.h:111
u16_t inet_chksum(const void *dataptr, u16_t len)
Definition: inet_chksum.c:555
u16_t ip_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, const ip_addr_t *src, const ip_addr_t *dest)
Definition: inet_chksum.c:379
#define TCPH_HDRLEN_SET(phdr, len)
Definition: tcp.h:89
#define TCPH_FLAGS_SET(phdr, flags)
Definition: tcp.h:90
#define EXPECT_RETNULL(x)
Definition: lwip_check.h:14
#define htons(x)
Definition: module.h:215
#define htonl(x)
Definition: module.h:214
u8_t pbuf_header(struct pbuf *p, s16_t header_size_increment)
Definition: pbuf.c:649
#define IPH_VHL_SET(hdr, v, hl)
Definition: ip4.h:117
#define IPH_LEN_SET(hdr, len)
Definition: ip4.h:119
#define IP_HLEN
Definition: ip4.h:64
#define IPH_CHKSUM_SET(hdr, chksum)
Definition: ip4.h:124
#define IPH_TOS_SET(hdr, tos)
Definition: ip4.h:118
#define memset(x, y, z)
Definition: compat.h:39
struct define * next
Definition: compiler.c:65
Definition: ip4.h:73
Definition: pbuf.h:186
Definition: tcp.h:56
Definition: tcpdef.h:22
__u16 dest
Definition: tcpdef.h:24

Referenced by tcp_create_rx_segment_wnd(), and tcp_create_segment().

◆ tcp_remove()

static void tcp_remove ( struct tcp_pcb *  pcb_list)
static

Remove all pcbs on the given list.

Definition at line 20 of file tcp_helper.c.

21{
22 struct tcp_pcb *pcb = pcb_list;
23 struct tcp_pcb *pcb2;
24
25 while(pcb != NULL) {
26 pcb2 = pcb;
27 pcb = pcb->next;
28 if (pcb2->state == LISTEN) {
29 tcp_close(pcb2);
30 } else {
31 tcp_abort(pcb2);
32 }
33 }
34}
void tcp_close(struct sock *sk, long timeout)

Referenced by tcp_remove_all().

◆ tcp_remove_all()

void tcp_remove_all ( void  )

Remove all pcbs on listen-, active- and time-wait-list (bound- isn't exported).

Definition at line 38 of file tcp_helper.c.

39{
40 tcp_remove(tcp_listen_pcbs.pcbs);
41 tcp_remove(tcp_bound_pcbs);
42 tcp_remove(tcp_active_pcbs);
43 tcp_remove(tcp_tw_pcbs);
44 fail_unless(MEMP_STATS_GET(used, MEMP_TCP_PCB) == 0);
45 fail_unless(MEMP_STATS_GET(used, MEMP_TCP_PCB_LISTEN) == 0);
46 fail_unless(MEMP_STATS_GET(used, MEMP_TCP_SEG) == 0);
47 fail_unless(MEMP_STATS_GET(used, MEMP_PBUF_POOL) == 0);
48}
static int used
Definition: adh-main.c:39
#define MEMP_STATS_GET(x, i)
Definition: stats.h:409
static void tcp_remove(struct tcp_pcb *pcb_list)
Definition: tcp_helper.c:20

Referenced by tcp_oos_setup(), tcp_oos_teardown(), tcp_setup(), tcp_state_setup(), tcp_state_teardown(), and tcp_teardown().

◆ tcp_set_state()

void tcp_set_state ( struct tcp_pcb *  pcb,
enum tcp_state  state,
const ip_addr_t local_ip,
const ip_addr_t remote_ip,
u16_t  local_port,
u16_t  remote_port 
)

Safely bring a tcp_pcb into the requested state

Definition at line 151 of file tcp_helper.c.

153{
154 u32_t iss;
155
156 /* @todo: are these all states? */
157 /* @todo: remove from previous list */
158 pcb->state = state;
159
160 iss = tcp_next_iss(pcb);
161 pcb->snd_wl2 = iss;
162 pcb->snd_nxt = iss;
163 pcb->lastack = iss;
164 pcb->snd_lbb = iss;
165
166 if (state == ESTABLISHED) {
167 TCP_REG(&tcp_active_pcbs, pcb);
168 ip_addr_copy(pcb->local_ip, *local_ip);
169 pcb->local_port = local_port;
170 ip_addr_copy(pcb->remote_ip, *remote_ip);
171 pcb->remote_port = remote_port;
172 } else if(state == LISTEN) {
173 TCP_REG(&tcp_listen_pcbs.pcbs, pcb);
174 ip_addr_copy(pcb->local_ip, *local_ip);
175 pcb->local_port = local_port;
176 } else if(state == TIME_WAIT) {
177 TCP_REG(&tcp_tw_pcbs, pcb);
178 ip_addr_copy(pcb->local_ip, *local_ip);
179 pcb->local_port = local_port;
180 ip_addr_copy(pcb->remote_ip, *remote_ip);
181 pcb->remote_port = remote_port;
182 } else {
183 fail();
184 }
185}
static int state
Definition: maze.c:121
uint32_t u32_t
Definition: arch.h:129
#define ip_addr_copy(dest, src)
Definition: ip_addr.h:360

◆ test_tcp_counters_check_rxdata()

static void test_tcp_counters_check_rxdata ( struct test_tcp_counters counters,
struct pbuf p 
)
static

Definition at line 197 of file tcp_helper.c.

198{
199 struct pbuf* q;
201 if(counters->expected_data == NULL) {
202 /* no data to compare */
203 return;
204 }
205 EXPECT_RET(counters->recved_bytes + p->tot_len <= counters->expected_data_len);
206 received = counters->recved_bytes;
207 for(q = p; q != NULL; q = q->next) {
208 char *data = (char*)q->payload;
209 for(i = 0; i < q->len; i++) {
210 EXPECT_RET(data[i] == counters->expected_data[received]);
211 received++;
212 }
213 }
214 EXPECT(received == counters->recved_bytes + p->tot_len);
215}
r received
Definition: btrfs.c:3005
GLint GLint GLsizei GLuint * counters
Definition: glext.h:11114
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define EXPECT(x)
Definition: lwip_check.h:11
#define EXPECT_RET(x)
Definition: lwip_check.h:12

Referenced by test_tcp_counters_recv().

◆ test_tcp_counters_err()

void test_tcp_counters_err ( void arg,
err_t  err 
)

Definition at line 188 of file tcp_helper.c.

189{
191 EXPECT_RET(arg != NULL);
192 counters->err_calls++;
193 counters->last_err = err;
194}
#define err(...)

Referenced by test_tcp_new_counters_pcb().

◆ test_tcp_counters_recv()

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

Definition at line 218 of file tcp_helper.c.

219{
222 EXPECT_RETX(pcb != NULL, ERR_OK);
224
225 if (p != NULL) {
226 if (counters->close_calls == 0) {
227 counters->recv_calls++;
229 counters->recved_bytes += p->tot_len;
230 } else {
231 counters->recv_calls_after_close++;
232 counters->recved_bytes_after_close += p->tot_len;
233 }
234 pbuf_free(p);
235 } else {
236 counters->close_calls++;
237 }
238 EXPECT(counters->recv_calls_after_close == 0 && counters->recved_bytes_after_close == 0);
239 return ERR_OK;
240}
@ ERR_OK
Definition: err.h:55
u8_t pbuf_free(struct pbuf *p)
Definition: pbuf.c:727
#define EXPECT_RETX(x, y)
Definition: lwip_check.h:13
static void test_tcp_counters_check_rxdata(struct test_tcp_counters *counters, struct pbuf *p)
Definition: tcp_helper.c:197

Referenced by test_tcp_new_counters_pcb().

◆ test_tcp_init_netif()

void test_tcp_init_netif ( struct netif netif,
struct test_tcp_txcounters txcounters,
const ip_addr_t ip_addr,
const ip_addr_t netmask 
)

Definition at line 305 of file tcp_helper.c.

307{
308 struct netif *n;
309 memset(netif, 0, sizeof(struct netif));
310 if (txcounters != NULL) {
311 memset(txcounters, 0, sizeof(struct test_tcp_txcounters));
312 netif->state = txcounters;
313 }
316 ip_addr_copy_from_ip4(netif->netmask, *ip_2_ip4(netmask));
317 ip_addr_copy_from_ip4(netif->ip_addr, *ip_2_ip4(ip_addr));
318 for (n = netif_list; n != NULL; n = n->next) {
319 if (n == netif) {
320 return;
321 }
322 }
323 netif->next = NULL;
325}
GLdouble n
Definition: glext.h:7729
#define NETIF_FLAG_LINK_UP
Definition: netif.h:93
#define NETIF_FLAG_UP
Definition: netif.h:84
struct netif * netif_list
Definition: netif.c:113
Definition: netif.h:269
u8_t flags
Definition: netif.h:354
void * state
Definition: netif.h:332
struct netif * next
Definition: netif.h:272
static err_t test_tcp_netif_output(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr)
Definition: tcp_helper.c:280

Referenced by START_TEST(), tcp_state_setup(), test_tcp_recv_ooseq_double_FINs(), test_tcp_rto_timeout_impl(), test_tcp_rto_timeout_syn_sent_impl(), test_tcp_tx_full_window_lost(), and test_tcp_zwp_timeout_impl().

◆ test_tcp_input()

void test_tcp_input ( struct pbuf p,
struct netif inp 
)

Calls tcp_input() after adjusting current_iphdr_dest

Definition at line 259 of file tcp_helper.c.

260{
261 struct ip_hdr *iphdr = (struct ip_hdr*)p->payload;
262 /* these lines are a hack, don't use them as an example :-) */
263 ip_addr_copy_from_ip4(*ip_current_dest_addr(), iphdr->dest);
264 ip_addr_copy_from_ip4(*ip_current_src_addr(), iphdr->src);
265 ip_current_netif() = inp;
266 ip_data.current_ip4_header = iphdr;
267 ip_data.current_input_netif = inp;
268
269 /* since adding IPv6, p->payload must point to tcp header, not ip header */
270 pbuf_header(p, -(s16_t)sizeof(struct ip_hdr));
271
272 tcp_input(p, inp);
273
277 ip_data.current_ip4_header = NULL;
278}
#define ip_current_src_addr()
Definition: ip.h:223
#define ip_current_dest_addr()
Definition: ip.h:225
#define ip_current_netif()
Definition: ip.h:146
struct ip_globals ip_data
#define ip_addr_set_zero(ipaddr)
Definition: ip_addr.h:365

Referenced by START_TEST(), test_rst_generation_with_incoming_packet(), test_tcp_recv_ooseq_double_FINs(), test_tcp_tx_full_window_lost(), and test_tcp_zwp_timeout_impl().

◆ test_tcp_netif_output()

static err_t test_tcp_netif_output ( struct netif netif,
struct pbuf p,
const ip4_addr_t *  ipaddr 
)
static

Definition at line 280 of file tcp_helper.c.

282{
283 struct test_tcp_txcounters *txcounters = (struct test_tcp_txcounters*)netif->state;
284 LWIP_UNUSED_ARG(ipaddr);
285 if (txcounters != NULL)
286 {
287 txcounters->num_tx_calls++;
288 txcounters->num_tx_bytes += p->tot_len;
289 if (txcounters->copy_tx_packets) {
290 struct pbuf *p_copy = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM);
291 err_t err;
292 EXPECT(p_copy != NULL);
293 err = pbuf_copy(p_copy, p);
294 EXPECT(err == ERR_OK);
295 if (txcounters->tx_packets == NULL) {
296 txcounters->tx_packets = p_copy;
297 } else {
298 pbuf_cat(txcounters->tx_packets, p_copy);
299 }
300 }
301 }
302 return ERR_OK;
303}
#define LWIP_UNUSED_ARG(x)
Definition: arch.h:373
s8_t err_t
Definition: err.h:96
void pbuf_cat(struct pbuf *h, struct pbuf *t)
Definition: pbuf.c:855
err_t pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from)
Definition: pbuf.c:959
@ PBUF_RAM
Definition: pbuf.h:152
@ PBUF_LINK
Definition: pbuf.h:102
struct pbuf * tx_packets
Definition: tcp_helper.h:26

Referenced by test_tcp_init_netif().

◆ test_tcp_new_counters_pcb()

struct tcp_pcb * test_tcp_new_counters_pcb ( struct test_tcp_counters counters)

Allocate a pcb and set up the test_tcp_counters_* callbacks

Definition at line 244 of file tcp_helper.c.

245{
246 struct tcp_pcb* pcb = tcp_new();
247 if (pcb != NULL) {
248 /* set up args and callbacks */
249 tcp_arg(pcb, counters);
251 tcp_err(pcb, test_tcp_counters_err);
252 pcb->snd_wnd = TCP_WND;
253 pcb->snd_wnd_max = TCP_WND;
254 }
255 return pcb;
256}
STREAM tcp_recv(STREAM s, uint32 length)
Definition: tcp.c:344
void test_tcp_counters_err(void *arg, err_t err)
Definition: tcp_helper.c:188
err_t test_tcp_counters_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
Definition: tcp_helper.c:218

Referenced by create_listening_pcb(), START_TEST(), test_tcp_recv_ooseq_double_FINs(), test_tcp_rto_timeout_impl(), test_tcp_rto_timeout_syn_sent_impl(), test_tcp_tx_full_window_lost(), and test_tcp_zwp_timeout_impl().

Variable Documentation

◆ test_local_ip

◆ test_netmask

const ip_addr_t test_netmask = IPADDR4_INIT_BYTES(255, 255, 255, 0)

Definition at line 16 of file tcp_helper.c.

◆ test_remote_ip

const ip_addr_t test_remote_ip = IPADDR4_INIT_BYTES(192, 168, 1, 2)