diff --git a/src/routing_layer/topo_node_sqlite.c b/src/routing_layer/topo_node_sqlite.c index ac5f27cc..ce7962c5 100644 --- a/src/routing_layer/topo_node_sqlite.c +++ b/src/routing_layer/topo_node_sqlite.c @@ -915,6 +915,8 @@ int topo_node_sqlite_nodeinfo_updated(sqlite3* db, uint64_t node_id) { void topo_node_sqlite_update_rtt(sqlite3* db, uint64_t node_id, uint16_t rtt) { if (!db) return; + DEBUG_TRACE(DEBUG_CATEGORY_BGP, "RTT sample: node=%016llx rtt_ms=%.1f; updating address and membership tables", + (unsigned long long)node_id, rtt / 10.0); { sqlite3_stmt* s = NULL; @@ -923,19 +925,26 @@ void topo_node_sqlite_update_rtt(sqlite3* db, uint64_t node_id, uint16_t rtt) { -1, &s, NULL) == SQLITE_OK) { sqlite3_bind_int(s, 1, (int)rtt); sqlite3_bind_int64(s, 2, (sqlite3_int64)node_id); - sqlite3_step(s); + if (sqlite3_step(s) != SQLITE_DONE) DEBUG_ERROR(DEBUG_CATEGORY_BGP, + "RTT persistence failed: table=node_addresses node=%016llx: %s", + (unsigned long long)node_id, sqlite3_errmsg(db)); sqlite3_finalize(s); - } + } else DEBUG_ERROR(DEBUG_CATEGORY_BGP, "RTT query preparation failed: table=node_addresses node=%016llx: %s", + (unsigned long long)node_id, sqlite3_errmsg(db)); } { sqlite3_stmt* s = NULL; if (sqlite3_prepare_v2(db, "SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'peers\\_%' ESCAPE '\\'", - -1, &s, NULL) != SQLITE_OK) return; + -1, &s, NULL) != SQLITE_OK) { + DEBUG_ERROR(DEBUG_CATEGORY_BGP, "RTT cannot enumerate membership tables: node=%016llx: %s", + (unsigned long long)node_id, sqlite3_errmsg(db)); return; + } char sql[256]; - while (sqlite3_step(s) == SQLITE_ROW) { + int rc; + while ((rc = sqlite3_step(s)) == SQLITE_ROW) { const char* tbl = (const char*)sqlite3_column_text(s, 0); snprintf(sql, sizeof(sql), "UPDATE \"%s\" SET node_RTT=? WHERE node_id=?", tbl); @@ -943,14 +952,16 @@ void topo_node_sqlite_update_rtt(sqlite3* db, uint64_t node_id, uint16_t rtt) { if (sqlite3_prepare_v2(db, sql, -1, &u, NULL) == SQLITE_OK) { sqlite3_bind_int(u, 1, (int)rtt); sqlite3_bind_int64(u, 2, (sqlite3_int64)node_id); - sqlite3_step(u); sqlite3_finalize(u); - } + if (sqlite3_step(u) != SQLITE_DONE) DEBUG_ERROR(DEBUG_CATEGORY_BGP, + "RTT persistence failed: table=%s node=%016llx: %s", tbl, (unsigned long long)node_id, sqlite3_errmsg(db)); + sqlite3_finalize(u); + } else DEBUG_ERROR(DEBUG_CATEGORY_BGP, "RTT query preparation failed: table=%s node=%016llx: %s", + tbl, (unsigned long long)node_id, sqlite3_errmsg(db)); } + if (rc != SQLITE_DONE) DEBUG_ERROR(DEBUG_CATEGORY_BGP, "RTT table enumeration failed: node=%016llx: %s", + (unsigned long long)node_id, sqlite3_errmsg(db)); sqlite3_finalize(s); } - - DEBUG_DEBUG(DEBUG_CATEGORY_BGP, "sqlite_update_rtt: node=%016llx rtt=%u", - (unsigned long long)node_id, (unsigned)rtt); } uint64_t topo_node_sqlite_snapshot_timestamp(sqlite3* db, uint64_t node_id) { diff --git a/src/transport_layer/etcp_connections.c b/src/transport_layer/etcp_connections.c index 967f7ba2..efa21285 100644 --- a/src/transport_layer/etcp_connections.c +++ b/src/transport_layer/etcp_connections.c @@ -1549,8 +1549,11 @@ int etcp_send_ping_to_socket(struct UTUN_INSTANCE* instance, struct ETCP_SOCKET* return -1; } if (e_sock->is_tcp || e_sock->fd == SOCKET_INVALID) { - DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "ping on non-UDP socket name=%s is_tcp=%d fd=%d", - e_sock->name, e_sock->is_tcp, (int)e_sock->fd); + DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "UDP reachability probe rejected: selected socket is %s; " + "socket_name=%s fd=%d local=%s target=%s peer=%016llx timeout_ms=%d", + e_sock->is_tcp ? "TCP (UDP socket required)" : "closed", e_sock->name, (int)e_sock->fd, + sockaddr_storage_to_str(&e_sock->local_addr).str, sockaddr_storage_to_str(addr).str, + (unsigned long long)sc_derive_node_id_from_pubkey(peer_pubkey_bin), timeout_ms); return -2; } if (user_data_len > PACKET_DATA_SIZE - 24 - 2 - SC_PUBKEY_ENC_SIZE) {