Browse Source

Reset NAT check status on etcp_conn_reinit when session_id changes

When peer's random session_id changes, etcp_conn_reinit() is called.
Previously NAT check status was not reset, so route_bgp_new_conn()
skipped NAT re-detection because nat_check_status was still
NAT_CHECK_IN_PROGRESS from the previous session.

Now etcp_conn_reinit():
- Cancels pending NAT-ping requests via route_ping_cancel_for_conn()
- Resets nat_type and nat_check_status to UNKNOWN/NONE for all links

This ensures NAT type is re-detected for all links after reinit.
congestion
Evgeny 5 months ago
parent
commit
72c6b6f197
  1. 14
      src/etcp.c

14
src/etcp.c

@ -5,6 +5,7 @@
#include "etcp_loadbalancer.h" #include "etcp_loadbalancer.h"
#include "routing.h" #include "routing.h"
#include "route_bgp.h" #include "route_bgp.h"
#include "route_ping.h"
#include "../lib/u_async.h" #include "../lib/u_async.h"
#include "../lib/ll_queue.h" #include "../lib/ll_queue.h"
#include "../lib/debug_config.h" #include "../lib/debug_config.h"
@ -351,6 +352,19 @@ void etcp_conn_reinit(struct ETCP_CONN* etcp) {// Если сбой в обме
etcp->initialized = 0;// еще раз придёт conn_ready_callback etcp->initialized = 0;// еще раз придёт conn_ready_callback
// Отменяем висящие NAT-ping'и для этого соединения
if (etcp->instance && etcp->instance->bgp) {
route_ping_cancel_for_conn(etcp->instance->bgp, etcp);
}
// Сбрасываем NAT-статус у всех линков этого соединения
struct ETCP_LINK* l = etcp->links;
while (l) {
l->nat_type = NAT_TYPE_UNKNOWN;
l->nat_check_status = NAT_CHECK_NONE;
l = l->next;
}
// Вызываем etcp_conn_reset для сброса состояния // Вызываем etcp_conn_reset для сброса состояния
etcp_conn_reset(etcp); etcp_conn_reset(etcp);

Loading…
Cancel
Save