nat: retry partial ingress measurements and keep known-IP anchor replies available
This commit is contained in:
1 parent
8158d6a435
commit
38447da5e8
2 files changed
+7
-1
No files matched your search
@@ -626,6 +626,7 @@ static void owner_apply(struct nat_socket *state, uint8_t mapping, uint8_t inbou
|
||||
(unsigned long long)state->observer, (unsigned long long)state->helper, state->filter_clean,
|
||||
nat_check_reason_name(partial_reason));
|
||||
owner_finish(state, NAT_REASON_NONE); state->reason = partial_reason;
|
||||
if (!profile.inbound && mapping != ADDRESS_MAP_DEPENDENT) state->due = get_time_tb() + NAT_RETRY_TB;
|
||||
}
|
||||
|
||||
static int owner_run(struct nat_socket *state, uint8_t step) {
|
||||
@@ -1365,6 +1366,8 @@ int nat_detection_ping_allowed(struct NAT_DETECTION *detector, struct ETCP_SOCKE
|
||||
socket->name, (unsigned long long)peer, sockaddr_storage_to_str(source).str);
|
||||
return 0;
|
||||
}
|
||||
history_load(state);
|
||||
if (contacted(state, source)) return 1; /* Уже известный IP не может испортить испытание незнакомого входа. */
|
||||
if (!tag || length != ROUTE_OBSERVE_TAG_SIZE || memcmp(tag, "NAT4UDP!", 8)) return 1;
|
||||
uint64_t group_id = read64(tag + 25), round = read64(tag + 17), owner = peer;
|
||||
if (state->phase && state->group_id == group_id && state->round == round && (state->helper == peer || state->observer == peer)) return 1;
|
||||
|
||||
Reference in new issue
Block a user