Диагностика коллизии линков + детектор дубликата node_id + reality-конфиг autogen
This commit is contained in:
1 parent
c2882c533e
commit
d886a2ff84
10 files changed
+487
-24
No files matched your search
@@ -102,10 +102,21 @@ uint8_t cm_sock_v6_classify(const struct ETCP_SOCKET* s) {
|
||||
return cm_classify_v6_addr(a6);
|
||||
}
|
||||
|
||||
static void cm_warn_addr_busy(struct ETCP_CONN* conn, struct ETCP_SOCKET* s, struct sockaddr_storage* sa) {
|
||||
struct ETCP_LINK* st = etcp_link_find_by_addr(s, sa, 0);
|
||||
if (st && st->etcp != conn) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "conn_mgr: addr %s busy by [%s] state=%d init=%d up=%d (adding for [%s] state=%d)",
|
||||
sockaddr_storage_to_str(sa).str,
|
||||
st->etcp->log_name, st->etcp->state, st->etcp->initialized, st->etcp->links_up,
|
||||
conn->log_name, conn->state);
|
||||
}
|
||||
}
|
||||
|
||||
void cm_add_v4_link(struct ETCP_CONN* conn, const uint8_t* addr, uint16_t port, struct ETCP_SOCKET* s) {
|
||||
struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET;
|
||||
memcpy(&sin.sin_addr.s_addr, addr, 4); sin.sin_port = port;
|
||||
struct sockaddr_storage sa; memcpy(&sa, &sin, sizeof(sin));
|
||||
cm_warn_addr_busy(conn, s, &sa);
|
||||
etcp_link_new(conn, s, &sa, 0);
|
||||
}
|
||||
|
||||
@@ -114,6 +125,7 @@ void cm_add_v6_link(struct ETCP_CONN* conn, const uint8_t addr[16], uint16_t por
|
||||
memcpy(&sin6.sin6_addr, addr, 16); sin6.sin6_port = htons(port);
|
||||
if (cm_classify_v6_addr(addr) == CM_V6_LL) sin6.sin6_scope_id = s->netif_index;
|
||||
struct sockaddr_storage sa; memcpy(&sa, &sin6, sizeof(sin6));
|
||||
cm_warn_addr_busy(conn, s, &sa);
|
||||
etcp_link_new(conn, s, &sa, 0);
|
||||
}
|
||||
|
||||
@@ -555,6 +567,7 @@ static void cm_direct_add_links(struct ETCP_CONN* conn, struct CONN_MGR_ENTRY* e
|
||||
if (m->id != a->socket_id) continue;
|
||||
struct ETCP_SOCKET* s = entry->mgr->instance->etcp_sockets;
|
||||
while (s) { if (cm_nat_compatible(s, m->config_type, m->nat_type) && s->local_addr.ss_family == AF_INET) {
|
||||
cm_warn_addr_busy(conn, s, &sa);
|
||||
if (etcp_link_new(conn, s, &sa, 0)) { any = 1; v4_cnt++; } } s = s->next; }
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user