Browse Source

etcp: чистка — убрать мёртвый peer_id/guard reset_id, поправить комментарий STCP_HS

v2
evgeny 3 weeks ago
parent
commit
70a18c8be8
  1. 2
      src/transport_layer/etcp.c
  2. 2
      src/transport_layer/etcp.h
  3. 8
      src/transport_layer/etcp_connections.c
  4. 4
      src/transport_layer/stcp.h

2
src/transport_layer/etcp.c

@ -639,7 +639,7 @@ void etcp_conn_reinit_id(struct ETCP_CONN* etcp, const char* reason, uint64_t re
// Применение чужого reset_id (эпохи ресета пира). Симметрично:
// если uid пира изменился — сбрасываем своё состояние (свой uid сохраняем).
void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_id, uint64_t peer_reset_id) {
void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_reset_id) {
if (!conn) return;
if (peer_reset_id == conn->peer_reset_id) return; // uid пира не изменился
conn->peer_reset_id = peer_reset_id;

2
src/transport_layer/etcp.h

@ -258,7 +258,7 @@ void etcp_conn_reinit_id(struct ETCP_CONN* etcp, const char* reason, uint64_t re
// Фатальный ресет (normalizer desync / bad fragment size): генерит новую эпоху reset_id
void etcp_conn_fatal_reinit(struct ETCP_CONN* etcp, const char* reason);
// Применение чужого reset_id: при отличии — slave принимает эпоху пира и ресетится, master пересылает свою
void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_id, uint64_t peer_reset_id);
void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_reset_id);
void etcp_connection_ready(struct ETCP_CONN* etcp);// вызывается когда подключение инициализировано

8
src/transport_layer/etcp_connections.c

@ -1072,12 +1072,12 @@ void etcp_link_enter_ready_tcp(struct ETCP_LINK *link) {
if (link->tcp_link) {
uint8_t peer_gop = stcp_link_get_peer_got_initial_pkt(link->tcp_link);
uint64_t peer_rid = stcp_link_get_peer_reset_id(link->tcp_link);
if (etcp->got_initial_pkt == 1 && peer_gop == 0 && peer_rid != etcp->reset_id) {
if (etcp->got_initial_pkt == 1 && peer_gop == 0) {
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP ready: I'm dirty (gop=1) but peer clean (gop=0) → reinit",
etcp->log_name);
etcp_conn_reinit(etcp, "tcp peer clean");
}
etcp_conn_apply_peer_reset_id(etcp, etcp->peer_node_id, peer_rid);
etcp_conn_apply_peer_reset_id(etcp, peer_rid);
link->peer_device_type = stcp_link_get_peer_device_type(link->tcp_link);
{ uint16_t peer_ka = stcp_link_get_peer_keepalive_interval(link->tcp_link);
@ -1753,7 +1753,7 @@ static int handle_init_response_client(struct ETCP_SOCKET* e_sock, struct ETCP_D
uint64_t server_node_id = be64toh(*(uint64_t*)resp->node_id);
uint64_t resp_reset_id = be64toh(*(uint64_t*)resp->reset_id);
DEBUG_TRACE(DEBUG_CATEGORY_CONNECTION, "INIT_RESPONSE rid=%016llx", (unsigned long long)resp_reset_id);
etcp_conn_apply_peer_reset_id(link->etcp, server_node_id, resp_reset_id);
etcp_conn_apply_peer_reset_id(link->etcp, resp_reset_id);
link->mtu_remote = be16toh(*(uint16_t*)resp->mtu);
if (link->mtu_remote > PACKET_DATA_MAX_MTU) link->mtu_remote = PACKET_DATA_MAX_MTU;
link->mtu = link->mtu_local < link->mtu_remote ? link->mtu_local : link->mtu_remote;
@ -2280,7 +2280,7 @@ create_new_link:
memcpy(conn->peer_ed25519_pubkey, req->ed25519_pubkey, SC_PUBKEY_SIZE);
// Применяем эпоху ресета пира ПОСЛЕ всей reinit-логики
etcp_conn_apply_peer_reset_id(conn, peer_id, reset_id);
etcp_conn_apply_peer_reset_id(conn, reset_id);
send_init_response(e_sock, pkt, link, conn, req, &addr, send_reset, req_src_ip, req_src_port, pkt_len);
return;

4
src/transport_layer/stcp.h

@ -28,8 +28,8 @@ typedef void (*stcp_ping_cb)(int success, uint16_t rtt, void *arg);
#define STCP_HS_TIMEOUT 50000 // 5s in 0.1ms timebase units
#define STCP_CONNECT_TIMEOUT 100000 // 10s in 0.1ms timebase units
#define STCP_HS_CLIENT_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT) // 40+55=95
#define STCP_HS_SERVER_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_SERVER) // 40+55=95
#define STCP_HS_CLIENT_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT) // 40+51=91
#define STCP_HS_SERVER_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_SERVER) // 40+51=91
#define STCP_HS_ENC_CLIENT 51 // ed25519_pubkey(32) + got_initial_pkt(1) + reset_id(8) + padding_size(2) + device_type(1) + keepalive(2) + flags(1) + CRC32(4)
#define STCP_HS_ENC_SERVER 51 // ed25519_pubkey(32) + got_initial_pkt(1) + reset_id(8) + padding_size(2) + device_type(1) + keepalive(2) + flags(1) + CRC32(4)

Loading…
Cancel
Save