Browse Source

logging: explain failed probes and RTT persistence errors

master
evgeny 3 days ago
parent
commit
1bb885fd11
  1. 29
      src/routing_layer/topo_node_sqlite.c
  2. 7
      src/transport_layer/etcp_connections.c

29
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) {

7
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) {

Loading…
Cancel
Save