|
|
|
|
@ -189,6 +189,7 @@ static void write_configs(const char* dir) {
|
|
|
|
|
/* ── чистые проверки (без опроса) ── */ |
|
|
|
|
|
|
|
|
|
static int conn_up(struct UTUN_INSTANCE* inst, uint64_t nid) { |
|
|
|
|
if (!inst) return 0; |
|
|
|
|
struct ETCP_CONN* c = instance_find_conn(inst, nid); |
|
|
|
|
return c && c->initialized && c->links_up; |
|
|
|
|
} |
|
|
|
|
@ -517,12 +518,13 @@ static void dm_tick(void* arg) {
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (t->result) { uasync_stop(t->ua); return; } |
|
|
|
|
if (t->phase == P_DONE) { t->result = 1; uasync_stop(t->ua); return; } |
|
|
|
|
|
|
|
|
|
if (++t->ticks > MAX_TICKS) { |
|
|
|
|
fprintf(stderr, "test: timeout in phase %d (A_conn=%d C_conn=%d B_conn=%d)\n", |
|
|
|
|
(int)t->phase, |
|
|
|
|
conn_up(A, nc), conn_up(C, na), B ? conn_up(B, nc) : -1); |
|
|
|
|
conn_up(t->inst[IDX_A], nc), conn_up(t->inst[IDX_C], na), conn_up(t->inst[IDX_B], nc)); |
|
|
|
|
t->result = 2; |
|
|
|
|
uasync_stop(t->ua); |
|
|
|
|
return; |
|
|
|
|
@ -635,12 +637,13 @@ static void dm2_tick(void* arg) {
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (t->result) { uasync_stop(t->ua); return; } |
|
|
|
|
if (t->phase == S2_DONE) { t->result = 1; uasync_stop(t->ua); return; } |
|
|
|
|
|
|
|
|
|
if (++t->ticks > MAX_TICKS) { |
|
|
|
|
fprintf(stderr, "s2: timeout in phase %d (A_conn=%d C_conn=%d B_conn=%d)\n", |
|
|
|
|
(int)t->phase, |
|
|
|
|
conn_up(A, nc), conn_up(C, na), B ? conn_up(B, nc) : -1); |
|
|
|
|
conn_up(t->inst[IDX_A], nc), conn_up(t->inst[IDX_C], na), conn_up(t->inst[IDX_B], nc)); |
|
|
|
|
t->result = 2; |
|
|
|
|
uasync_stop(t->ua); |
|
|
|
|
return; |
|
|
|
|
|