Add tcp reassembly test case

This commit is contained in:
luwenpeng
2024-03-25 17:30:48 +08:00
parent 2ad811f68d
commit 5b92d6d8de
9 changed files with 1389 additions and 596 deletions

View File

@@ -13,30 +13,55 @@ extern "C"
#define TCP_REASSEMBLE_DEBUG(format, ...) LOG_DEBUG("tcp_reassembly", format, ##__VA_ARGS__)
#define TCP_REASSEMBLE_ERROR(format, ...) LOG_ERROR("tcp_reassembly", format, ##__VA_ARGS__)
struct tcp_reassembly_stat
{
uint64_t packets; // current packets
uint64_t bytes; // current bytes
uint64_t tcp_segement_timout; // total tcp segment timeout
};
/*
* If retransmission or overlap occurs, the old data packet may have been consumed by the upper-layer plug-in,
* so the old data packet takes priority and the new data packet will be bypassed.
*/
struct tcp_reassembly *tcp_reassembly_new(bool enable, uint32_t max_timeout, uint32_t max_packets, uint32_t max_bytes);
void tcp_reassembly_init(struct tcp_reassembly *assembler, uint32_t c2s_init_seq, uint32_t s2c_init_seq);
void tcp_reassembly_free(struct tcp_reassembly *assembler);
void tcp_reassembly_expire(struct tcp_reassembly *assembler, uint64_t now);
struct tcp_reassembly_options
{
bool enable;
uint32_t max_timeout;
uint32_t max_segments;
uint32_t max_bytes;
};
// direction: 1 C2S; 2: S2C
void tcp_reassembly_update(struct tcp_reassembly *assembler, int direction, uint32_t offset, const char *payload, uint32_t len, uint64_t now);
const char *tcp_reassembly_peek(struct tcp_reassembly *assembler, int direction, uint32_t *len);
void tcp_reassembly_consume(struct tcp_reassembly *assembler, int direction, uint32_t len);
struct tcp_reassembly_stat
{
uint64_t curr_segments;
uint64_t curr_bytes;
struct tcp_reassembly_stat *tcp_reassembly_get_stat(struct tcp_reassembly *assembler);
uint64_t insert_segments;
uint64_t insert_bytes;
uint64_t remove_segments;
uint64_t remove_bytes;
uint64_t consume_segments;
uint64_t consume_bytes;
uint64_t retrans_bypass_segments;
uint64_t retrans_bypass_bytes;
uint64_t overload_bypass_segments;
uint64_t overload_bypass_bytes;
uint64_t timeout_discard_segments;
uint64_t timeout_discard_bytes;
};
struct tcp_reassembly *tcp_reassembly_new(struct tcp_reassembly_options *opts);
void tcp_reassembly_free(struct tcp_reassembly *assy);
void tcp_reassembly_init(struct tcp_reassembly *assy, uint32_t syn_seq);
void tcp_reassembly_expire(struct tcp_reassembly *assy, uint64_t now);
void tcp_reassembly_insert(struct tcp_reassembly *assy, uint32_t seq, const char *payload, uint32_t len, uint64_t now);
const char *tcp_reassembly_peek(struct tcp_reassembly *assy, uint32_t *len);
void tcp_reassembly_consume(struct tcp_reassembly *assy, uint32_t len);
struct tcp_reassembly_stat *tcp_reassembly_get_stat(struct tcp_reassembly *assy);
void tcp_reassembly_print_stat(struct tcp_reassembly *assy);
#ifdef __cpluscplus
}