1*d6eebaa4SHervé Poussineau #ifndef LWIP_HDR_TCP_HELPER_H
2*d6eebaa4SHervé Poussineau #define LWIP_HDR_TCP_HELPER_H
31734f297SVictor Perevertkin 
41734f297SVictor Perevertkin #include "../lwip_check.h"
51734f297SVictor Perevertkin #include "lwip/arch.h"
61734f297SVictor Perevertkin #include "lwip/tcp.h"
71734f297SVictor Perevertkin #include "lwip/netif.h"
81734f297SVictor Perevertkin 
91734f297SVictor Perevertkin /* counters used for test_tcp_counters_* callback functions */
101734f297SVictor Perevertkin struct test_tcp_counters {
111734f297SVictor Perevertkin   u32_t recv_calls;
121734f297SVictor Perevertkin   u32_t recved_bytes;
131734f297SVictor Perevertkin   u32_t recv_calls_after_close;
141734f297SVictor Perevertkin   u32_t recved_bytes_after_close;
151734f297SVictor Perevertkin   u32_t close_calls;
161734f297SVictor Perevertkin   u32_t err_calls;
171734f297SVictor Perevertkin   err_t last_err;
181734f297SVictor Perevertkin   char* expected_data;
191734f297SVictor Perevertkin   u32_t expected_data_len;
201734f297SVictor Perevertkin };
211734f297SVictor Perevertkin 
221734f297SVictor Perevertkin struct test_tcp_txcounters {
231734f297SVictor Perevertkin   u32_t num_tx_calls;
241734f297SVictor Perevertkin   u32_t num_tx_bytes;
251734f297SVictor Perevertkin   u8_t  copy_tx_packets;
261734f297SVictor Perevertkin   struct pbuf *tx_packets;
271734f297SVictor Perevertkin };
281734f297SVictor Perevertkin 
29*d6eebaa4SHervé Poussineau extern const ip_addr_t test_local_ip;
30*d6eebaa4SHervé Poussineau extern const ip_addr_t test_remote_ip;
31*d6eebaa4SHervé Poussineau extern const ip_addr_t test_netmask;
32*d6eebaa4SHervé Poussineau #define TEST_REMOTE_PORT    0x100
33*d6eebaa4SHervé Poussineau #define TEST_LOCAL_PORT     0x101
34*d6eebaa4SHervé Poussineau 
351734f297SVictor Perevertkin /* Helper functions */
361734f297SVictor Perevertkin void tcp_remove_all(void);
371734f297SVictor Perevertkin 
381734f297SVictor Perevertkin struct pbuf* tcp_create_segment(ip_addr_t* src_ip, ip_addr_t* dst_ip,
391734f297SVictor Perevertkin                    u16_t src_port, u16_t dst_port, void* data, size_t data_len,
401734f297SVictor Perevertkin                    u32_t seqno, u32_t ackno, u8_t headerflags);
411734f297SVictor Perevertkin struct pbuf* tcp_create_rx_segment(struct tcp_pcb* pcb, void* data, size_t data_len,
421734f297SVictor Perevertkin                    u32_t seqno_offset, u32_t ackno_offset, u8_t headerflags);
431734f297SVictor Perevertkin struct pbuf* tcp_create_rx_segment_wnd(struct tcp_pcb* pcb, void* data, size_t data_len,
441734f297SVictor Perevertkin                    u32_t seqno_offset, u32_t ackno_offset, u8_t headerflags, u16_t wnd);
45*d6eebaa4SHervé Poussineau void tcp_set_state(struct tcp_pcb* pcb, enum tcp_state state, const ip_addr_t* local_ip,
46*d6eebaa4SHervé Poussineau                    const ip_addr_t* remote_ip, u16_t local_port, u16_t remote_port);
471734f297SVictor Perevertkin void test_tcp_counters_err(void* arg, err_t err);
481734f297SVictor Perevertkin err_t test_tcp_counters_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* p, err_t err);
491734f297SVictor Perevertkin 
501734f297SVictor Perevertkin struct tcp_pcb* test_tcp_new_counters_pcb(struct test_tcp_counters* counters);
511734f297SVictor Perevertkin 
521734f297SVictor Perevertkin void test_tcp_input(struct pbuf *p, struct netif *inp);
531734f297SVictor Perevertkin 
541734f297SVictor Perevertkin void test_tcp_init_netif(struct netif *netif, struct test_tcp_txcounters *txcounters,
55*d6eebaa4SHervé Poussineau                          const ip_addr_t *ip_addr, const ip_addr_t *netmask);
561734f297SVictor Perevertkin 
571734f297SVictor Perevertkin 
581734f297SVictor Perevertkin #endif
59