Skip to content

[BUG]: Dynamo fails in IPv6-only environments — "ifa_prefixlen must be initialized" #7619

@huangxingningm-bit

Description

@huangxingningm-bit

Describe the Bug

Environment

Dynamo version: v1.0.0 (pip installed via ai-dynamo[trtllm])
OS: Ubuntu 24.04 container (pure IPv6 networking, no IPv4 on any interface except loopback)
CUDA: 13.1.0
Python: 3.12

Network configuration

The container has no IPv4 addresses on any interface except lo (127.0.0.1):
Here is the error message:
ERROR dynamo_llm::kv_router::prefill_router: Failed to activate prefill router
error=Local IP Address Error: An error occurred executing the underlying strategy error.
ifa_prefixlen must be initialized

Steps to Reproduce

boot on ipv6 only server

Expected Behavior

load model successfully

Actual Behavior

Report Error:ERROR dynamo_llm::kv_router::prefill_router: Failed to activate prefill router
error=Local IP Address Error: An error occurred executing the underlying strategy error.
ifa_prefixlen must be initialized

Environment

Dynamo version: v1.0.0 (pip installed via ai-dynamo[trtllm])
OS: Ubuntu 24.04 container (pure IPv6 networking, no IPv4 on any interface except loopback)
CUDA: 13.1.0
Python: 3.12
The container has no IPv4 addresses on any interface except lo (127.0.0.1):

Additional Context

I have my claude

Screenshots

1. local-ip-address crate v0.6.3 (linux.rs)
local_ip() (IPv4) follows this path:
local_ip_impl_route(Inet) → sends RTM_GETROUTE to 192.0.2.0 → kernel returns ENETUNREACH → correctly mapped to Error::LocalIpAddressNotFound
Falls back to local_ip_impl_addr(Inet) → sends RTM_GETADDR → the neli library fails to deserialize the Netlink response in the pure IPv6 environment, throwing StrategyError("ifa_prefixlen must be initialized") instead of LocalIpAddressNotFound
2. Dynamo tcp/server.rs (line ~152)

let resolved_ip = resolver.local_ip().or_else(|err| match err {
Error::LocalIpAddressNotFound => resolver.local_ipv6(), // only catches this variant
_ => Err(err), // StrategyError propagates here — IPv6 fallback never executes
});

match resolved_ip {
Ok(addr) => addr,
Err(Error::LocalIpAddressNotFound) => IpAddr::from([127, 0, 0, 1]),
Err(err) => {
return Err(PipelineError::Generic(format!( // ← service fails to start
"Failed to resolve local IP address: {err}"
)));
}
}

The or_else only catches LocalIpAddressNotFound to fall back to local_ipv6(). But the actual error from the crate is StrategyError, so the IPv6 fallback is never triggered. The same pattern exists in ip_resolver.rs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions