transport: support one-way authenticated NAT probes
This commit is contained in:
1 parent
1dc26bf715
commit
df80c5745d
2 files changed
+9
No files matched your search
@@ -1797,6 +1797,10 @@ static int handle_ping(struct ETCP_SOCKET* e_sock, struct ETCP_DGRAM* pkt, const
|
||||
if ((flags & ETCP_PING_FLAG_OBSERVE) && (flags & ETCP_PING_FLAG_ADDRESS_CHECK)) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_NAT, "UDP probe has incompatible flags=%02x", flags); return 7;
|
||||
}
|
||||
if ((flags & ETCP_PING_FLAG_NO_REPLY) &&
|
||||
(!(flags & (ETCP_PING_FLAG_OBSERVE | ETCP_PING_FLAG_ADDRESS_CHECK)) || ulen != ROUTE_OBSERVE_TAG_SIZE + 9)) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_NAT, "One-way NAT probe has invalid flags=%02x tag_size=%u", flags, ulen); return 7;
|
||||
}
|
||||
if (!nat_detection_ping_allowed(e_sock->instance->nat_det, e_sock, decrypted_pubkey, addr, flags, udata, ulen)) {
|
||||
memory_pool_free(e_sock->instance->pkt_pool, pkt); return 0;
|
||||
}
|
||||
@@ -1806,6 +1810,10 @@ static int handle_ping(struct ETCP_SOCKET* e_sock, struct ETCP_DGRAM* pkt, const
|
||||
if ((flags & ETCP_PING_FLAG_ADDRESS_CHECK) && e_sock->instance->nat_det)
|
||||
nat_detection_receive_ingress(e_sock->instance->nat_det, e_sock, decrypted_pubkey, addr, udata, ulen);
|
||||
|
||||
if (flags & ETCP_PING_FLAG_NO_REPLY) {
|
||||
memory_pool_free(e_sock->instance->pkt_pool, pkt); return 0;
|
||||
}
|
||||
|
||||
if ((flags & ETCP_PING_FLAG_SEND_RTT) && ulen >= 2) {
|
||||
uint16_t rtt_val = wire_read16(udata);
|
||||
topo_node_ping_update_rtt(e_sock->instance->topo_groups, peer_id, rtt_val);
|
||||
|
||||
@@ -49,6 +49,7 @@ extern "C" {
|
||||
#define ETCP_PING_FLAG_SEND_RTT 0x02 // в PING: несу RTT для получателя
|
||||
#define ETCP_PING_FLAG_OBSERVE 0x04 // PONG несёт фактически наблюдаемый IP:port
|
||||
#define ETCP_PING_FLAG_ADDRESS_CHECK 0x08 // прямое входящее испытание endpoint
|
||||
#define ETCP_PING_FLAG_NO_REPLY 0x10 // NAT-проба: результат через router, без автоматического UDP-ответа
|
||||
|
||||
/* Адаптивный keepalive */
|
||||
#define KA_PERIOD_MIN_MS 200
|
||||
|
||||
Reference in new issue
Block a user