summaryrefslogtreecommitdiff
path: root/infra
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-11-05 16:14:02 +0800
committerluwenpeng <[email protected]>2024-11-05 16:14:02 +0800
commit8ddef31bb58c529763d565674ba5036584323921 (patch)
tree3095f86a78522ed5b7f96c22bdda11de5ead65e4 /infra
parent7f81e465226e60caa516ae82556c9411339e77cd (diff)
bugfix: if miss TCP SYN packet, use TCP SYN-ACK packet init C2S tcp reassembly recv_next
Diffstat (limited to 'infra')
-rw-r--r--infra/packet_manager/packet_manager.c4
-rw-r--r--infra/session_manager/session_manager.c4
-rw-r--r--infra/session_manager/session_manager_rte.c10
-rw-r--r--infra/stellar_core.c2
4 files changed, 14 insertions, 6 deletions
diff --git a/infra/packet_manager/packet_manager.c b/infra/packet_manager/packet_manager.c
index 0238ec0..46153cb 100644
--- a/infra/packet_manager/packet_manager.c
+++ b/infra/packet_manager/packet_manager.c
@@ -5,8 +5,6 @@
#include "packet_manager.h"
#include "fieldstat/fieldstat_easy.h"
-
-
#define PACKET_MANAGER_LOG_ERROR(format, ...) STELLAR_LOG_ERROR(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
#define PACKET_MANAGER_LOG_FATAL(format, ...) STELLAR_LOG_FATAL(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
#define PACKET_MANAGER_LOG_INFO(format, ...) STELLAR_LOG_INFO(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
@@ -460,7 +458,7 @@ static void on_polling(struct module_manager *mod_mgr, void *args)
struct packet_manager *module_to_packet_manager(struct module *mod)
{
assert(mod);
- assert(strcmp(module_get_name(mod), PACKET_MANAGER_MODULE_NAME) == 0);
+ assert(strcmp(module_get_name(mod), PACKET_MANAGER_MODULE_NAME) == 0);
return (struct packet_manager *)module_get_ctx(mod);
}
diff --git a/infra/session_manager/session_manager.c b/infra/session_manager/session_manager.c
index d2f99cf..21fb779 100644
--- a/infra/session_manager/session_manager.c
+++ b/infra/session_manager/session_manager.c
@@ -525,14 +525,14 @@ void session_manager_clean(struct session_manager *sess_mgr, uint16_t thread_id)
struct session_manager *module_to_session_manager(struct module *mod)
{
assert(mod);
- assert(strcmp(module_get_name(mod), SESSION_MANAGER_MODULE_NAME) == 0);
+ assert(strcmp(module_get_name(mod), SESSION_MANAGER_MODULE_NAME) == 0);
return module_get_ctx(mod);
}
struct module *session_manager_on_init(struct module_manager *mod_mgr)
{
assert(mod_mgr);
- struct module *pkt_mgr_mod= module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
+ struct module *pkt_mgr_mod = module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
struct packet_manager *pkt_mgr = module_to_packet_manager(pkt_mgr_mod);
assert(pkt_mgr);
struct mq_schema *mq_sche = module_manager_get_mq_schema(mod_mgr);
diff --git a/infra/session_manager/session_manager_rte.c b/infra/session_manager/session_manager_rte.c
index 51e3cc7..e424faf 100644
--- a/infra/session_manager/session_manager_rte.c
+++ b/infra/session_manager/session_manager_rte.c
@@ -192,6 +192,16 @@ static void tcp_update(struct session_manager_rte *sess_mgr_rte, struct session
{
// len > 0 is SYN with data (TCP Fast Open)
tcp_reassembly_set_recv_next(half->tcp_reass, len ? half->seq : half->seq + 1);
+
+ if (unlikely(flags & TH_ACK))
+ {
+ // current packet is SYN-ACK (S2C), if C2S has not received SYN-ACK, set C2S recv_next
+ struct tcp_half *peer = &sess->tcp_halfs[FLOW_TYPE_C2S];
+ if (type == FLOW_TYPE_S2C && peer->history == 0 && tcp_reassembly_get_recv_next(peer->tcp_reass) == 0)
+ {
+ tcp_reassembly_set_recv_next(peer->tcp_reass, half->ack);
+ }
+ }
}
seg = tcp_reassembly_expire(half->tcp_reass, sess_mgr_rte->now_ms);
diff --git a/infra/stellar_core.c b/infra/stellar_core.c
index cbab9f5..bdb730e 100644
--- a/infra/stellar_core.c
+++ b/infra/stellar_core.c
@@ -53,7 +53,7 @@ static void *worker_thread(void *arg)
struct packet_io *pkt_io = st->pkt_io;
struct module_manager *mod_mgr = st->mod_mgr;
struct mq_runtime *mq_rt = mq_runtime_new(st->mq_schema);
- struct module *pkt_mgr_mod= module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
+ struct module *pkt_mgr_mod = module_manager_get_module(mod_mgr, PACKET_MANAGER_MODULE_NAME);
struct packet_manager *pkt_mgr = module_to_packet_manager(pkt_mgr_mod);
snprintf(thread_name, sizeof(thread_name), "stellar:%d", thread_id);