bugfix: call duplicated packet filter too many times

This commit is contained in:
luwenpeng
2024-04-17 17:53:42 +08:00
parent 3771b68873
commit d57c81697f
9 changed files with 88 additions and 60 deletions

View File

@@ -95,6 +95,11 @@ void tcp_reassembly_free(struct tcp_reassembly *assembler)
// return: -1: failed (no space)
int tcp_reassembly_push(struct tcp_reassembly *assembler, struct tcp_segment *seg, uint64_t now)
{
if (assembler == NULL)
{
return -1;
}
if (assembler->cur_seg_num >= assembler->max_seg_num)
{
TCP_REASSEMBLY_LOG_ERROR("assembler is full");
@@ -121,9 +126,12 @@ int tcp_reassembly_push(struct tcp_reassembly *assembler, struct tcp_segment *se
struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler)
{
struct interval_tree_node *node;
if (assembler == NULL)
{
return NULL;
}
node = interval_tree_iter_first(&assembler->root, assembler->recv_next, assembler->recv_next);
struct interval_tree_node *node = interval_tree_iter_first(&assembler->root, assembler->recv_next, assembler->recv_next);
if (node == NULL)
{
return NULL;
@@ -167,6 +175,11 @@ struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler)
struct tcp_segment *tcp_reassembly_expire(struct tcp_reassembly *assembler, uint64_t now)
{
if (assembler == NULL)
{
return NULL;
}
if (list_empty(&assembler->list))
{
return NULL;
@@ -188,6 +201,11 @@ struct tcp_segment *tcp_reassembly_expire(struct tcp_reassembly *assembler, uint
void tcp_reassembly_inc_recv_next(struct tcp_reassembly *assembler, uint32_t offset)
{
if (assembler == NULL)
{
return;
}
assembler->recv_next += offset;
if (assembler->recv_next > UINT32_MAX)
{
@@ -197,10 +215,20 @@ void tcp_reassembly_inc_recv_next(struct tcp_reassembly *assembler, uint32_t off
void tcp_reassembly_set_recv_next(struct tcp_reassembly *assembler, uint32_t seq)
{
if (assembler == NULL)
{
return;
}
assembler->recv_next = seq;
}
uint32_t tcp_reassembly_get_recv_next(struct tcp_reassembly *assembler)
{
if (assembler == NULL)
{
return 0;
}
return assembler->recv_next;
}