-
Notifications
You must be signed in to change notification settings - Fork 961
Description
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.