diff options
| author | luwenpeng <[email protected]> | 2024-11-05 16:14:02 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-11-05 16:14:02 +0800 |
| commit | 8ddef31bb58c529763d565674ba5036584323921 (patch) | |
| tree | 3095f86a78522ed5b7f96c22bdda11de5ead65e4 /infra | |
| parent | 7f81e465226e60caa516ae82556c9411339e77cd (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.c | 4 | ||||
| -rw-r--r-- | infra/session_manager/session_manager.c | 4 | ||||
| -rw-r--r-- | infra/session_manager/session_manager_rte.c | 10 | ||||
| -rw-r--r-- | infra/stellar_core.c | 2 |
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); |
