Measure owned endpoint mapping and inbound reachability separately

This commit is contained in:
evgeny committed 2026-10-12 00:01:40 +02:00
1 parent b54307a0df
commit ff69552a61
51 files changed
+2620 -2483

No files matched your search

+11 -5
View File
@@ -294,7 +294,7 @@ static void t8(void* arg) {
memcpy(ni->public_key, pubkey_b, SC_PUBKEY_SIZE);
struct TOPO_SOCKMETA4* sm = memory_pool_alloc(g_a->topo_groups->v4_sock_meta_pool);
if (sm) { sm->id = 0; sm->config_type = CFG_SERVER_TYPE_PUBLIC; sm->nat_type = NAT_TYPE_UNKNOWN; sm->next = ni->v4_sock_meta; ni->v4_sock_meta = sm; }
if (sm) { sm->id = 0; sm->config_type = CFG_SERVER_TYPE_PUBLIC; sm->address_profile = (struct address_profile){0}; sm->next = ni->v4_sock_meta; ni->v4_sock_meta = sm; }
struct TOPO_ADDR4* addr = memory_pool_alloc(g_a->topo_groups->v4_addr_pool);
if (addr) { addr->addr[0]=127; addr->addr[1]=0; addr->addr[2]=0; addr->addr[3]=1; addr->port=1; addr->type=TOPO_ADDR_INTERFACE; addr->socket_id=0; addr->protocol=TOPO_PROTO_UDP; addr->next=ni->v4_addrs; ni->v4_addrs=addr; }
@@ -343,7 +343,7 @@ static int inject_node(struct UTUN_INSTANCE* inst, uint64_t nid, const uint8_t p
ni->group_ref_count = 0; ni->node_id = nid; ni->ver = 0;
memcpy(ni->public_key, pk, SC_PUBKEY_SIZE);
struct TOPO_SOCKMETA4* sm = memory_pool_alloc(inst->topo_groups->v4_sock_meta_pool);
if (sm) { sm->id = 0; sm->config_type = CFG_SERVER_TYPE_PUBLIC; sm->nat_type = NAT_TYPE_UNKNOWN; sm->next = ni->v4_sock_meta; ni->v4_sock_meta = sm; }
if (sm) { sm->id = 0; sm->config_type = CFG_SERVER_TYPE_PUBLIC; sm->address_profile = (struct address_profile){0}; sm->next = ni->v4_sock_meta; ni->v4_sock_meta = sm; }
struct TOPO_ADDR4* addr = memory_pool_alloc(inst->topo_groups->v4_addr_pool);
if (addr) { addr->addr[0]=127; addr->addr[1]=0; addr->addr[2]=0; addr->addr[3]=1; addr->port=port; addr->type=TOPO_ADDR_INTERFACE; addr->socket_id=0; addr->protocol=TOPO_PROTO_UDP; addr->next=ni->v4_addrs; ni->v4_addrs=addr; }
if (!topo_node_registry_store(inst->topo_groups, ni)) { u_free(ni); return -1; }
@@ -377,13 +377,19 @@ static void test_compatibility(void) {
interface->sin_addr.s_addr = htonl(UINT32_C(0x08080808));
uint8_t saved_cfg = peer->v4_sock_meta->config_type, saved_self = self->v4_sock_meta->config_type;
peer->v4_sock_meta->config_type = CFG_SERVER_TYPE_LOCAL;
int reverse = node_conn_direct_compatible(g_a, nid_b);
int local = node_conn_direct_compatible(g_a, nid_b);
self->v4_sock_meta->config_type = CFG_SERVER_TYPE_LOCAL;
int local_both = node_conn_direct_compatible(g_a, nid_b);
uint8_t saved_protocol = peer->v4_addrs->protocol;
peer->v4_addrs->protocol = 0;
int incompatible = node_conn_direct_compatible(g_a, nid_b);
peer->v4_addrs->protocol = saved_protocol;
peer->v4_sock_meta->config_type = saved_cfg; self->v4_sock_meta->config_type = saved_self;
socket->interface_addr = saved_interface;
if (!reverse || incompatible || instance_find_conn(g_a, nid_b)) { fail("reverse/local compatibility or read-only contract"); return; }
fprintf(stderr, "[PASS] compatibility: direct, reverse-only, incompatible local and no transport mutation\n");
if (!local || !local_both || incompatible || instance_find_conn(g_a, nid_b)) {
fail("LAN candidate, unsupported protocol, or read-only compatibility contract"); return;
}
fprintf(stderr, "[PASS] compatibility: direct/LAN candidates, unsupported protocol and no transport mutation\n");
}
static void cleanup(void) { test_unlink(ca); test_unlink(cb); test_rmdir(tdir); }