Browse Source

etcp: show which specific link went DOWN + always use registry node_name

1. etcp_on_down: add down_link param — log the specific lost link + remaining
   Connection DOWN — link 192.168.40.247:2122 lost, remaining: [::1]:6669, [::2]:9970
   Connection DOWN — closing, links: ... (for reinit/close)

2. etcp_on_link_down: pass the triggering link through to etcp_on_down

3. etcp_update_log_name: always check registry for node_name
   (n_5a1b... → SM-A525F when name is available in registry)
topo_upd
evgeny 2 months ago
parent
commit
d296074330
  1. 22
      src/transport_layer/etcp.c
  2. 2
      src/transport_layer/etcp.h
  3. 4
      src/transport_layer/etcp_connections.c

22
src/transport_layer/etcp.c

@ -336,13 +336,19 @@ static void etcp_on_up(struct ETCP_CONN* etcp) {
etcp->crypto_ctx.peer_public_key[2], etcp->crypto_ctx.peer_public_key[3]);
}
static void etcp_on_down(struct ETCP_CONN* etcp) {
static void etcp_on_down(struct ETCP_CONN* etcp, struct ETCP_LINK* down_link) {
char links_str[256] = {0}; int pp = 0;
for (struct ETCP_LINK* l = etcp->links; l; l = l->next) {
if (l == down_link) continue;
if (pp) pp += snprintf(links_str + pp, sizeof(links_str) - pp, ", ");
pp += snprintf(links_str + pp, sizeof(links_str) - pp, "%s", sockaddr_storage_to_str(&l->remote_addr).str);
}
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] Connection DOWN — links: %s", etcp->log_name, pp ? links_str : "(none)");
if (down_link)
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] Connection DOWN — link %s lost%s%s",
etcp->log_name, sockaddr_storage_to_str(&down_link->remote_addr).str,
pp > 0 ? ", remaining: " : "", links_str);
else
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] Connection DOWN — closing, links: %s", etcp->log_name, pp ? links_str : "(none)");
etcp_cbk_fire(etcp, ETCP_CBK_EVENT_DOWN);
etcp_fire_conn_status(etcp, ETCP_CONN_STATUS_DOWN);
}
@ -398,7 +404,7 @@ void etcp_connection_close(struct ETCP_CONN* etcp) {
// === PHASE 1: detach from external world ===
if (etcp->links_up != 0) { etcp->links_up = 0; etcp_on_down(etcp); }
if (etcp->links_up != 0) { etcp->links_up = 0; etcp_on_down(etcp, NULL); }
// Cancel active timers
if (etcp->retrans_timer) { uasync_cancel_timeout(etcp->instance->ua, etcp->retrans_timer); etcp->retrans_timer = NULL; }
@ -561,7 +567,7 @@ void etcp_conn_reset(struct ETCP_CONN* etcp) {
etcp_on_up(etcp);
} else {
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "reset conn: set link down/up");
etcp_on_down(etcp);
etcp_on_down(etcp, NULL);
etcp_on_up(etcp);
}
} else {
@ -569,7 +575,7 @@ void etcp_conn_reset(struct ETCP_CONN* etcp) {
if (etcp->links_up) {
etcp->links_up=0;
etcp->setup_start_tb = get_time_tb();
etcp_on_down(etcp);
etcp_on_down(etcp, NULL);
}
}
@ -690,7 +696,7 @@ void etcp_update_log_name(struct ETCP_CONN* etcp) {
uint16_t local_id = etcp->instance->node_id;
uint16_t peer_id = etcp->peer_node_id;
const char* name = etcp->name ? etcp->name : EMPTY_NAME;
if (!name[0] && etcp->instance->topo_groups && peer_id) {
if (etcp->instance->topo_groups && peer_id) {
struct TOPO_NODE* ni = topo_node_registry_find(etcp->instance->topo_groups, etcp->peer_node_id);
if (ni && ni->node_name && ni->node_name[0]) name = ni->node_name;
}
@ -982,7 +988,7 @@ static void send_ack_req_cb(struct ll_queue* q, void* arg) {// etcp->ack_q data
if (etcp->tx_state==ETCP_TX_STATE_DATA_WAIT) queue_resume_callback(etcp->ack_q);
}
*/
void etcp_on_link_down(struct ETCP_CONN* etcp) {
void etcp_on_link_down(struct ETCP_CONN* etcp, struct ETCP_LINK* down_link) {
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "");
int up=0;
struct ETCP_LINK* link = etcp->links;
@ -994,7 +1000,7 @@ void etcp_on_link_down(struct ETCP_CONN* etcp) {
etcp->links_up = up;
if (up == 0 && was_up != 0) {
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "All links fall down");
etcp_on_down(etcp);
etcp_on_down(etcp, down_link);
}
}

2
src/transport_layer/etcp.h

@ -318,7 +318,7 @@ void etcp_update_log_name(struct ETCP_CONN* etcp);
// Вызывается стеком etcp когда соединение установлено (можно передавать данные)
void etcp_conn_ready(struct ETCP_CONN* conn);
void etcp_on_link_down(struct ETCP_CONN* etcp);
void etcp_on_link_down(struct ETCP_CONN* etcp, struct ETCP_LINK* down_link);
void etcp_update_mtu(struct ETCP_CONN* etcp);

4
src/transport_layer/etcp_connections.c

@ -240,7 +240,7 @@ void etcp_link_enter_reinit(struct ETCP_LINK* link) {
int old_state = link->link_state;
link->link_state = 2; // reconnect
etcp_fire_link_status_cbk(link, old_state, link->link_status);
etcp_on_link_down(link->etcp);
etcp_on_link_down(link->etcp, link);
if (link->is_server != 0) return;
etcp_conn_reinit(link->etcp, "link recovery");
etcp_link_send_init(link,1,0);
@ -344,7 +344,7 @@ static void keepalive_timer_cb(void* arg) {
int old_link_status = link->link_status;
link->link_status = 0;
etcp_fire_link_status_cbk(link, link->link_state, old_link_status);
etcp_on_link_down(link->etcp);
etcp_on_link_down(link->etcp, link);
if (old_link_status) {
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] Link %d down: addr=%s ka=%d remote_ka=%d state=%d init=%d tmo: %llu>%llu els=%llums", link->etcp->log_name, link->local_link_id, sockaddr_storage_to_str(&link->remote_addr).str, link->recv_keepalive, link->remote_keepalive, link->link_state, link->initialized, (unsigned long long)timeout_units, (unsigned long long)elapsed, (unsigned long long)(elapsed/10));
}

Loading…
Cancel
Save