fix(native): delay relay ACK behind cloud NAT reply

This commit is contained in:
冰朔 2026-08-06 20:05:33 +08:00
commit a995d3660c
3 changed files with 11 additions and 0 deletions

View file

@ -123,6 +123,7 @@ def main() -> None:
parser.add_argument("--resident-pipeline", action="store_true")
parser.add_argument("--native-relay", action="store_true")
parser.add_argument("--allowed-source")
parser.add_argument("--native-ack-delay", type=float, default=0.25)
args = parser.parse_args()
if args.retry_interval < 1.0:
raise SystemExit("--retry-interval must be at least 1 second")
@ -130,6 +131,8 @@ def main() -> None:
0 <= args.resume_resident_count <= 10
):
raise SystemExit("--resume-resident-count must be between 0 and 10")
if not 0.0 <= args.native_ack_delay <= 2.0:
raise SystemExit("--native-ack-delay must be between 0 and 2 seconds")
if sum(
(
args.resident,
@ -181,6 +184,10 @@ def main() -> None:
continue
if source != allowed_source:
continue
# The public-cloud NAT path is established by the host kernel's
# ordinary echo reply. Delay the authenticated ACK long enough for
# the native guest to discard that reply and repost its RX buffer.
time.sleep(args.native_ack_delay)
peer.sendto(native_ack_reply(packet), address)
acknowledged.add(sequence)
sources.add(source)
@ -197,6 +204,7 @@ def main() -> None:
"status: PASS_100\n"
"handshake_direction: NATIVE_INITIATED_OUTBOUND_ICMP\n"
"native_ack_marker: HLDP-NATIVE-ACK!\n"
f"native_ack_delay_seconds: {args.native_ack_delay:g}\n"
"acknowledged_sequences: 1-16\n"
f"observed_nat_sources: {','.join(sorted(sources))}\n"
"login_reply_count: 3\n"

View file

@ -88,6 +88,7 @@ native_network:
gateway_ipv4: 172.16.0.1
relay_ipv4: 43.153.193.169
handshake_direction: NATIVE_INITIATED_OUTBOUND_ICMP
native_ack_delay_seconds: 0.25
public_nat_address_recorded_in_world: false
gestational_continuity:
id: GLS-0845

View file

@ -14,6 +14,8 @@ handshake:
direction: NATIVE_INITIATED_OUTBOUND_ICMP
request_magic_source: CURRENT_HLDP_COMMAND
response_marker: HLDP-NATIVE-ACK!
response_delay_seconds: 0.25
response_delay_reason: ALLOW_KERNEL_NAT_REPLY_THEN_NATIVE_RX_REPOST
expected_sequences: 1-16
ordinary_echo_action: IGNORE
stale_sequence_action: IGNORE_WITHOUT_STATE_ADVANCE