OpenStack Error Guide: 'neutron-l3-agent router namespace missing' connectivity loss
L3 router namespace qrouter-<id> missing and tenants lost external connectivity? Diagnose dead l3-agent, OVS bridge gaps, and namespace recreation step by step.
- #openstack
- #troubleshooting
- #errors
- #neutron
Exact Error Message
2026-06-27 11:42:33.901 8 ERROR neutron.agent.l3.agent [-] Failed to process compatible router:
9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0
2026-06-27 11:42:33.901 8 ERROR neutron.agent.l3.agent Traceback (most recent call last):
2026-06-27 11:42:33.901 8 ERROR neutron.agent.l3.agent File ".../neutron/agent/l3/agent.py", line 706, in _process_router_update
2026-06-27 11:42:33.901 8 ERROR neutron.agent.l3.agent ip = ip_lib.IPWrapper(namespace=ns_name)
2026-06-27 11:42:33.901 8 ERROR neutron.agent.l3.agent neutron.privileged.agent.linux.ip_lib.NetworkNamespaceNotFound:
Network namespace qrouter-9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 could not be found.
You may also see, from a host shell:
# ip netns exec qrouter-9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 ip a
Cannot open network namespace "qrouter-9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0": No such file or directory
What the Error Means
Neutron’s L3 agent realizes each routed network as a Linux network namespace named qrouter-<router-id>. That namespace holds the router’s internal (qr-) and external (qg-) interfaces, the iptables NAT rules for floating IPs, and the default route to the external gateway. When the agent tries to program a router but the qrouter- namespace does not exist on the node, every operation against it fails and tenants behind that router lose north-south connectivity.
The namespace can vanish for several reasons: the l3-agent died and the namespace was cleared, a node rebooted and the agent has not yet rebuilt state, the OVS integration/external bridge is missing so interface plugging fails, or the router was rescheduled to a different agent and the old node still references it. The error is a symptom — the real question is why the agent cannot (re)create or find the namespace.
Common Causes
- l3-agent is down or wedged — without a running agent the namespaces are never (re)created after a reboot.
- Node reboot before agent resync — namespaces are not persistent; the agent must rebuild them on startup and may be mid-resync.
- Missing OVS bridge (
br-intorbr-ex) — the agent cannot plugqr-/qg-interfaces, so namespace setup aborts. - Router rescheduled / agent removed — the router was moved to another L3 agent (or its agent was deleted), leaving stale references.
- External network / gateway misconfiguration — the
qg-interface cannot attach tobr-ex, leaving the router half-built. neutron-ovs-cleanupor manualip netns deleteran and wiped the namespace out from under the agent.- DVR mismatch — on a Distributed Virtual Router setup, the namespace lives on compute nodes (
snat-/qrouter-), and you are looking on the wrong node.
How to Reproduce the Error
In a lab, the cleanest reproduction is to delete the namespace while leaving the router configured:
- Create a router with an external gateway and an attached subnet; confirm
ip netns listshowsqrouter-<id>on the network node. - Stop the l3-agent so it cannot immediately rebuild.
- Delete the namespace by hand to simulate a reboot or cleanup race.
The next time the agent processes that router (or you run any ip netns exec qrouter-<id> ...), the NetworkNamespaceNotFound error appears. Restarting the agent with a missing br-ex reproduces the bridge-plug variant.
Diagnostic Commands
All read-only. Start with the agent and router state from the API:
# Is the L3 agent alive and which router lives where?
openstack network agent list --agent-type l3
openstack network agent show <l3-agent-id>
openstack router show 9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 -c admin_state_up -c status -c external_gateway_info
openstack network agent list --router 9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0
On the node hosting the agent, inspect namespaces, bridges, and logs:
# Kolla-Ansible
docker exec neutron_l3_agent ip netns list | grep qrouter
docker exec openvswitch_vswitchd ovs-vsctl list-br
docker logs neutron_l3_agent 2>&1 | grep -i "NetworkNamespaceNotFound\|Failed to process" | tail
# Traditional packages
ip netns list | grep qrouter
ovs-vsctl list-br
journalctl -u neutron-l3-agent | grep -i "NetworkNamespaceNotFound\|Failed to process" | tail
br-int
br-ex
br-tun
If br-ex is missing from ovs-vsctl list-br, the external interface cannot be plugged — that is your root cause.
Step-by-Step Resolution
-
Verify the L3 agent is up and alive. If
openstack network agent listshows the agentXXX(down), bring it back first:docker restart neutron_l3_agent # Kolla-Ansible systemctl restart neutron-l3-agent # TraditionalA healthy agent rebuilds missing
qrouter-namespaces automatically on its next sync. -
Confirm the router is scheduled to this agent. Use
openstack network agent list --router <id>. If it is on a different agent, you are debugging the wrong node — switch to the host that actually owns the router. -
Check that
br-intandbr-exexist. Ifbr-exis missing, recreate it and re-add the provider uplink per your deployment’s bridge mapping, then restart the agent so it can plug theqg-interface. -
Force a clean reschedule if the namespace still will not build. Remove the router from the stuck agent and let Neutron reschedule it:
openstack network agent remove router <l3-agent-id> 9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 openstack network agent add router <healthy-l3-agent-id> 9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 -
Validate the namespace and connectivity once rebuilt:
# Kolla-Ansible docker exec neutron_l3_agent ip netns exec qrouter-9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 ip a # Traditional ip netns exec qrouter-9c4f1a2b-7d33-4e10-bb21-8a2c1d4e55f0 ip routeYou should see the
qr-andqg-interfaces and a default route via the external gateway. -
For DVR deployments, remember the
snat-namespace lives on the centralized/network node whileqrouter-namespaces also appear on compute nodes. Check the correct node before assuming the namespace is truly gone.
Prevention and Best Practices
- Run at least two L3 agents and use HA routers so a single agent death does not strand tenant traffic.
- Monitor
openstack network agent listand alert when any L3 agent reports down — that is the leading indicator of namespaces about to disappear. - Avoid running
neutron-ovs-cleanuporip netns deleteon a live network node; reserve them for maintenance windows with the agent stopped. - Verify bridge mappings (
br-exand provider bridges) survive reboots by pinning them in your OVS/host configuration, not just creating them at runtime. - After any node reboot, confirm the L3 agent finished its resync before declaring the host healthy.
Related Errors
NetworkNamespaceNotFound: Network namespace qdhcp-<id> could not be found— the DHCP-agent equivalent forqdhcp-namespaces.Failed to process compatible routerwithout a traceback — often an OVS bridge plug failure rather than a missing namespace.Router <id> is not hosted by any L3 agent— scheduling failure, see our /categories/openstack/ networking guides.qg- interface not found— the external gateway port was never plugged intobr-ex.
Frequently Asked Questions
Will restarting the l3-agent fix the missing namespace?
Usually yes. The agent rebuilds qrouter- namespaces from the database on startup, provided the OVS bridges it needs (br-int, br-ex) exist. If a bridge is missing, fix that first.
Do I lose all tenant connectivity when the namespace is gone? North-south (external/floating-IP) traffic for routers in that namespace stops. East-west traffic that does not transit the router may continue.
Why does the namespace disappear after a reboot? Network namespaces are not persistent across reboots. They are recreated by the agent at startup, so a brief gap during resync is expected — a permanent gap means the agent is unhealthy.
On DVR, why do I not see the namespace on the network node?
With DVR, routing is distributed: qrouter- namespaces live on each compute node hosting affected VMs, and only the snat- namespace is centralized. Check the compute node hosting the workload.
Is it safe to delete a stale qrouter namespace manually? Only with the agent stopped and after confirming the router is rescheduled elsewhere. Deleting it under a live agent invites a race that recreates the same error.
Download the Free 500-Prompt DevOps AI Toolkit
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.