diff --git a/doc/node_snapshot.md b/doc/node_snapshot.md index d9e9a6ff..5ed661bb 100644 --- a/doc/node_snapshot.md +++ b/doc/node_snapshot.md @@ -78,8 +78,8 @@ Bootstrap-адреса не перекрывают подписанную зап удерживает один handle на клиента, независимо от количества его адресов. Включение конфигурационного пира в UTUN-группу выполняет callback NCD UP. -Транспортный UP и наличие callback старого `etcp_connect` больше не включают -соединение в UTUN-группу автоматически. Входящий JOIN остаётся явным запросом +Само событие транспортного UP не включает соединение в UTUN-группу автоматически. +Входящий JOIN остаётся явным запросом участия. При пересоздании UTUN-группы учитываются её конфигурационные handles. Удаление клиента отправляет `LEAVE_GROUP` и освобождает удержание UTUN-группы с обеих сторон. Другие владельцы NCD сохраняют транспорт. Поздние NODEINFO и diff --git a/tests/test_merkle_sync.c b/tests/test_merkle_sync.c index b9d4a9ab..bf74c3d8 100644 --- a/tests/test_merkle_sync.c +++ b/tests/test_merkle_sync.c @@ -564,15 +564,16 @@ static void _intg_timeout(void* arg) { (void)arg; printf(" GLOBAL TIMEOUT\n"); static int _cond_links_up(void) { if (!i_a || !i_b) return 0; - int links = 0; - struct ll_entry* e = i_a->connections->head; - while (e) { - struct conn_queue_entry* ce = (struct conn_queue_entry*)e->data; - struct ETCP_LINK* l = ce->conn->links; - while (l) { if (l->initialized) links++; l = l->next; } - e = e->next; + struct UTUN_INSTANCE* peers[] = {i_b, i_c}; + for (unsigned i = 0; i < sizeof(peers) / sizeof(peers[0]); i++) { + if (!peers[i]) continue; + struct ETCP_CONN* local = instance_find_conn(i_a, peers[i]->node_id); + struct ETCP_CONN* remote = instance_find_conn(peers[i], i_a->node_id); + if (!local || !remote || !local->initialized || !remote->initialized || !local->links_up || !remote->links_up || + local->session_required || remote->session_required || local->reinit_pending || remote->reinit_pending || + local->close_requested || remote->close_requested) return 0; } - return links >= (i_c ? 2 : 1); + return 1; } static int _wait_for(const char* desc, int (*cond)(void), int timeout_tb) {