OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

neutron-vpnaas — Errors

Errors — neutron-vpnaas — branch stable/2026.2

Branch stable/2026.2 @ 6ce5da102cf1 — repository https://opendev.org/openstack/neutron-vpnaas — analysed on 2026-10-29. neutron-lib: = neutron-lib stable/2026.2 @ 1ee72052251a; neutron: = neutron stable/2026.2 @ eef1a0f7ee36.

Exception → HTTP translation

neutron-vpnaas defines few exceptions of its own; most come from neutron-lib:neutron_lib/exceptions/vpn.py. All derive from NeutronException. Neutron's resource wrapper maps them with FAULT_MAP (neutron-lib:neutron_lib/api/faults.py:19-29): NotFound → 404, Conflict → 409, **InUse → 409**, BadRequest (and InvalidInput) → 400, ServiceUnavailable → 503, NotAuthorized and PolicyNotAuthorized → 403, netaddr.AddrFormatError → 400. Anything else (AttributeError, DB errors, oslo_policy check failures) becomes a 500 with a generic message.

The body is always:

{"NeutronError": {"type": "<exception class name>", "message": "<formatted message>", "detail": ""}}

type is the class name (or HTTPBadRequest for attribute-map validation, PolicyNotAuthorized for a policy refusal, HTTPNotFound when the policy hides a resource). Every row marked observed below was produced by _rewrite/tools/vpnaas_capture.py through the real WSGI pipeline; the full list with messages is _rewrite/observed-errors_stable-2026.2.md.

Policy refusals: a create/update/delete refused by policy → 403 PolicyNotAuthorized (rule:create_ikepolicy is disallowed by policy, observed); a get of a resource of another project, or by a user without the member role, → 404 (the resource is hidden; observed for a reader).

Catalogue

Validation errors produced by the attribute map (400)

Message (template)SituationRaised atSeen by the client as
Invalid input for <attr>. Reason: <value> is not in valid_values.value outside the effective lists (01 § Effective attribute validation), e.g. sha1, 3des, **aes-128-ctr**, group1neutron-lib:neutron_lib/api/definitions/vpn_no_sha1_3des.py:44-89 (lists), neutron:neutron/api/v2/base.py (check)400 HTTPBadRequest (observed)
Invalid input for lifetime. Reason: '59' is too small - must be at least '60'.lifetime.value < 60neutron-lib:neutron_lib/api/definitions/vpn.py:228400 (observed)
Invalid input for lifetime. Reason: kilobytes is not in valid_values.lifetime.units other than seconds (the DB enum also has kilobytes, neutron_vpnaas/db/vpn/vpn_models.py:79-81)neutron-lib:neutron_lib/api/definitions/vpn.py:129-131400 (observed)
Unrecognized attribute(s) '<name>'unknown key in the bodyNeutron base controller400 (observed)
Cannot update read-only attribute <attr>PUT of endpoints, type, router_id, vpnservice_id, policies' ids…attribute map allow_put: false400 (observed)

VPN exceptions (neutron-lib)

ExceptionHTTPMessage (template)SituationRaised atSeen by the client as
VPNServiceNotFound404VPNService %(vpnservice_id)s could not be foundthe service does not exist or belongs to another project (GET/PUT/DELETE, or vpnservice_id of a new connection)neutron_vpnaas/db/vpn/vpn_db.py:81404
IPsecSiteConnectionNotFound404ipsec_site_connection %(ipsec_site_conn_id)s not foundsame for connectionsneutron_vpnaas/db/vpn/vpn_db.py:72404
IKEPolicyNotFound404IKEPolicy %(ikepolicy_id)s could not be foundunknown or foreign IKE policy, also ikepolicy_id of a new connectionneutron_vpnaas/db/vpn/vpn_db.py:76404 (observed)
IPsecPolicyNotFound404IPsecPolicy %(ipsecpolicy_id)s could not be foundsame for IPsec policiesneutron_vpnaas/db/vpn/vpn_db.py:78404
VPNEndpointGroupNotFound404Endpoint group %(endpoint_group_id)s could not be foundunknown group (GET/PUT/DELETE, or referenced by a connection)neutron_vpnaas/db/vpn/vpn_db.py:83404
IPsecSiteConnectionDpdIntervalValueError400ipsec_site_connection %(attr)s is equal to or less than dpd_intervaldpd.timeout ≤ dpd.intervalneutron_vpnaas/db/vpn/vpn_validator.py:59400 (observed)
IPsecSiteConnectionMtuError400ipsec_site_connection MTU %(mtu)d is too small for ipv%(version)sMTU < 68 (IPv4) or < 1280 (IPv6)neutron_vpnaas/db/vpn/vpn_validator.py:64400 (observed)
IPsecSiteConnectionPeerCidrError400ipsec_site_connection peer cidr %(peer_cidr)s is invalid CIDRlegacy mode, a peer_cidrs entry is not a CIDR (normally caught earlier by the attribute map)neutron_vpnaas/db/vpn/vpn_validator.py:145400
IKEPolicyInUse409IKEPolicy %(ikepolicy_id)s is in use by existing IPsecSiteConnection and can't be updated or deletedPUT or DELETE of an IKE policy referenced by a connectionneutron_vpnaas/db/vpn/vpn_db.py:351, neutron_vpnaas/db/vpn/vpn_db.py:368409 (observed)
IPsecPolicyInUse409IPsecPolicy %(ipsecpolicy_id)s is in use by existing IPsecSiteConnection and can't be updated or deletedsame for IPsec policiesneutron_vpnaas/db/vpn/vpn_db.py:435, neutron_vpnaas/db/vpn/vpn_db.py:453409 (observed)
VPNServiceInUse409VPNService %(vpnservice_id)s is still in useDELETE of a service that still has connectionsneutron_vpnaas/db/vpn/vpn_db.py:542409 (observed)
SubnetInUseByVPNService409Subnet %(subnet_id)s is used by VPNService %(vpnservice_id)sremove_router_interface of the subnet a legacy service is bound toneutron_vpnaas/db/vpn/vpn_db.py:583 (callback neutron_vpnaas/db/vpn/vpn_db.py:779-781)409 on PUT /v2.0/routers/{id}/remove_router_interface (observed)
SubnetInUseByIPsecSiteConnection409Subnet %(subnet_id)s is used by ipsec site connection %(ipsec_site_connection_id)sremove_router_interface of a subnet listed in a connection's local endpoint groupneutron_vpnaas/db/vpn/vpn_db.py:606409 on the router API (observed)
SubnetInUseByEndpointGroup409Subnet %(subnet_id)s is used by endpoint group %(group_id)sDELETE /v2.0/subnets/{id} of a subnet in a subnet endpoint groupneutron_vpnaas/db/vpn/vpn_db.py:622 (callback neutron_vpnaas/db/vpn/vpn_db.py:793-799)wrapped by Neutron into 409 SubnetInUse Unable to complete operation on subnet …: Callback neutron_vpnaas.db.vpn.vpn_db.subnet_callback-<n> failed with "…" (observed)
VPNStateInvalidToUpdate400Invalid state %(state)s of vpnaas resource %(id)s for updatingPUT of a service or connection in PENDING_CREATE (or any PENDING_*)neutron_vpnaas/db/vpn/vpn_db.py:92400 (observed, service and connection)
DeviceDriverImportError500Can not load driver :%(device_driver)sagent start: a [vpnagent] vpn_device_driver class cannot be importedneutron_vpnaas/services/vpn/vpn_service.py:44agent fails to start (log)
SubnetIsNotConnectedToRouter400Subnet %(subnet_id)s is not connected to Router %(router_id)sservice subnet_id, or a local endpoint-group subnet, has no port on the routerneutron_vpnaas/db/vpn/vpn_validator.py:287400 (observed)
RouterIsNotExternal400Router %(router_id)s has no external network gateway setPOST vpnservice on a router without gatewayneutron_vpnaas/db/vpn/vpn_validator.py:278400 (observed)
VPNPeerAddressNotResolved400Peer address %(peer_address)s cannot be resolvedpeer_address is neither an IP nor a resolvable FQDN on the API serverneutron_vpnaas/db/vpn/vpn_validator.py:92400 (observed)
VPNPeerAddressNotResolved (agent)—sameLibreswan _get_nexthop would set the connection ERROR and raise when the FQDN cannot be resolved — but no code calls _get_nexthop (dead code)neutron_vpnaas/services/vpn/device_drivers/libreswan_ipsec.py:274never
ExternalNetworkHasNoSubnet400Router's %(router_id)s external network has no %(ip_version)s subnetthe router gateway has no fixed IP of the peer's IP versionneutron_vpnaas/db/vpn/vpn_validator.py:78400 (observed)
InvalidEndpointInEndpointGroup400Endpoint '%(endpoint)s' is invalid for group type '%(group_type)s': %(why)sduplicate endpoint (Endpoints have to be unique), invalid CIDR (Invalid CIDR), non-UUID subnet (Invalid UUID)neutron_vpnaas/db/vpn/vpn_validator.py:352, neutron_vpnaas/db/vpn/vpn_validator.py:310, neutron_vpnaas/db/vpn/vpn_validator.py:319400 (observed for the first two)
MissingEndpointForEndpointGroup400No endpoints specified for endpoint group '%(group)s'empty endpoints; %(group)s is the whole request dictneutron_vpnaas/db/vpn/vpn_validator.py:337400 (observed)
NonExistingSubnetInEndpointGroup400Subnet %(subnet)s in endpoint group does not exista subnet endpoint is not a visible subnetneutron_vpnaas/db/vpn/vpn_validator.py:325400 (observed)
MixedIPVersionsForIPSecEndpoints400Endpoints in group %(group)s do not have the same IP version, as required for IPSec site-to-site connectiona local or peer group mixes IPv4 and IPv6neutron_vpnaas/db/vpn/vpn_validator.py:123, neutron_vpnaas/db/vpn/vpn_validator.py:136400
MixedIPVersionsForPeerCidrs400Peer CIDRs do not have the same IP version, as required for IPSec site-to-site connectionlegacy peer_cidrs mix versionsneutron_vpnaas/db/vpn/vpn_validator.py:154400
MixedIPVersionsForIPSecConnection400IP versions are not compatible between peer and local endpointslocal side and peer side differneutron_vpnaas/db/vpn/vpn_validator.py:164400 (observed)
InvalidEndpointGroup400Endpoint group%(suffix)s %(which)s cannot be specified, when VPN Service has subnet specifiedendpoint group given for a legacy (subnet) serviceneutron_vpnaas/db/vpn/vpn_validator.py:190400
WrongEndpointGroupType400Endpoint group %(which)s type is '%(group_type)s' and should be '%(expected)s'local group not subnet, or peer group not cidrneutron_vpnaas/db/vpn/vpn_validator.py:100, neutron_vpnaas/db/vpn/vpn_validator.py:109400 (observed)
PeerCidrsInvalid400Peer CIDRs cannot be specified, when using endpoint groupspeer_cidrs given for an endpoint-group service (POST or PUT)neutron_vpnaas/db/vpn/vpn_validator.py:194400 (observed)
MissingPeerCidrs400Missing peer CIDRs for IPsec site-to-site connectionlegacy service, no peer_cidrsneutron_vpnaas/db/vpn/vpn_validator.py:181400 (observed)
MissingRequiredEndpointGroup400Missing endpoint group%(suffix)s %(which)s for IPSec site-to-site connectionendpoint-group service, a group missingneutron_vpnaas/db/vpn/vpn_validator.py:203400 (observed)
EndpointGroupInUse400Endpoint group %(group_id)s is in use and cannot be deletedDELETE of a group referenced by a connection — a BadRequest, unlike the other "in use" errors (409)neutron_vpnaas/db/vpn/vpn_db.py:693400 (observed)
IpsecValidationFailure400IPSec does not support %(resource)s attribute %(key)s with value '%(value)s'legacy driver: connection with an ah-esp IPsec policy. Raised from the local class neutron_vpnaas/services/vpn/service_drivers/ipsec_validator.py:21, not the neutron-lib one (neutron-lib:neutron_lib/exceptions/vpn.py:174)neutron_vpnaas/services/vpn/service_drivers/ipsec_validator.py:37400 (observed, legacy); never on OVN
FlavorsPluginNotLoaded / NoProviderFoundForFlavor (neutron-lib copies)404—not raised: neutron-vpnaas raises its own copies, belowneutron-lib:neutron_lib/exceptions/vpn.py:165-170—

Exceptions defined in neutron-vpnaas

ExceptionHTTPMessage (template)SituationRaised atSeen by the client as
RouteInUseByVPN (InUse)409Route(s) to %(destinations)s are used for VPNOVN: router update or remove_extraroutes that removes a route whose destination is a VPN peer CIDR (PRECOMMIT_UPDATE callback)neutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:154 (class neutron_vpnaas/extensions/vpnaas.py:29)409 on the router API (observed)
VPNGatewayNotReady (BadRequest)(retried)VPN gateway not readyOVN: another request is creating or deleting the router's VPN gateway; wrapped in RetryRequest, so oslo.db retries the transaction (neutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:369)class neutron_vpnaas/extensions/vpnaas.py:37normally invisible; 400 after the retries are exhausted [inferred]
VPNGatewayInError (Conflict)409VPN gateway is in ERROR state. Please remove all errored VPN services and try again.OVN: the router's vpn_ext_gws row is ERROR (a previous gateway setup or cleanup failed)neutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:363409; the service row is kept with ERROR
NoVPNAgentAvailable (ServiceUnavailable)503No VPN agent availableOVN: the scheduler returned None (another server bound the router concurrently)neutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:377503; service row kept with ERROR
RouterIsNotVPNExternal (BadRequest)400Router %(router_id)s has no VPN external network gateway setOVN: the VPN gateway has no gateway port / fixed IPs when the service IPs are computedneutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:332 (class neutron_vpnaas/db/vpn/vpn_ext_gw_db.py:41)400, service row kept with ERROR
RouterHasVPNExternal (BadRequest)400Router %(router_id)s already has VPN external network gatewaynever raised (dead code)neutron_vpnaas/db/vpn/vpn_ext_gw_db.py:45—
VPNNetworkInUse (NetworkInUse → InUse)409Network %(network_id)s is used by VPN serviceOVN: DELETE /v2.0/networks/{id} of a transit network still referenced by an active VPN gatewayneutron_vpnaas/db/vpn/vpn_ext_gw_db.py:165409 on the network API
ServicePortInUse (neutron-lib)409Port %(port_id)s cannot be deleted directly via the port API: %(reason)s with reason has device owner network:vpn_router_gateway / network:vpn_namespaceOVN: DELETE /v2.0/ports/{id} of a VPN gateway or namespace portneutron_vpnaas/db/vpn/vpn_ext_gw_db.py:138409 (observed)
SubnetInUse (neutron-lib)409Unable to complete operation on subnet …: Subnet is used by VPN serviceOVN: DELETE /v2.0/subnets/{id} of a transit subnetneutron_vpnaas/db/vpn/vpn_ext_gw_db.py:152409
RouterInUse (neutron-lib l3)409Router %(router_id)s is currently used by VPN service%(plural)s (%(services)s)legacy only: clearing the router gateway (ROUTER_GATEWAY BEFORE_DELETE) or migrating the router (ROUTER BEFORE_UPDATE) while a VPN service uses it. On OVN check_router_in_use is a no-op (neutron_vpnaas/services/vpn/ovn_plugin.py:53-54) and the gateway can be cleared (observed 200)neutron_vpnaas/db/vpn/vpn_db.py:571409 legacy (observed)
FlavorsPluginNotLoaded (NotFound)404Flavors plugin not foundflavor_id given but the flavors plugin is absentneutron_vpnaas/services/vpn/plugin.py:132 (class neutron_vpnaas/extensions/vpn_flavors.py:23)404
InvalidServiceType (neutron-lib)400Invalid service type %(service_type)s.the flavor is not a VPN flavorneutron_vpnaas/services/vpn/plugin.py:136400
FlavorDisabled (neutron-lib)503Flavor is not enabled.the flavor is disabledneutron_vpnaas/services/vpn/plugin.py:139503
NoProviderFoundForFlavor (NotFound)404No service provider found for flavor %(flavor_id)sthe flavor's first provider is not a configured VPN driverneutron_vpnaas/services/vpn/plugin.py:144 (class neutron_vpnaas/extensions/vpn_flavors.py:27)404
FlavorNotFound (neutron-lib, via the flavors plugin)404Flavor %(flavor_id)s could not be found.unknown flavor_idflavors plugin get_flavor (called at neutron_vpnaas/services/vpn/plugin.py:134)404 (observed)
InvalidVPNAgent (AgentNotFound)404Agent %(id)s is not a VPN Agent or has been disabledPOST /agents/{id}/vpn-routers with a non-VPN agentneutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:139 (class neutron_vpnaas/extensions/vpn_agentschedulers.py:145)404 (observed)
RouterHostedByVPNAgent (Conflict)409The VPN service of router %(router_id)s has been already hosted by the VPN Agent %(agent_id)s.manual binding of a router already hosted by another agentneutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:160409
RouterSchedulingFailed (Conflict)409Failed scheduling router %(router_id)s to the VPN Agent %(agent_id)s.manual binding: INSERT failed (duplicate or router deleted concurrently)neutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:203409
RouterReschedulingFailed (Conflict)409Failed rescheduling router %(router_id)s: No eligible VPN agent found.(a) OVN POST vpnservices with no live VPN agent; (b) dead-agent rescheduling with no candidate; (c) vpnservice_added_to_agent failed after a rescheduleneutron_vpnaas/scheduler/vpn_agent_scheduler.py:114, neutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:283(a) 409 + service kept with ERROR (observed); (b, c) log only
PolicyCheckError (oslo.policy, via Neutron)500Failed to check policy project_id:%(project_id)s because Unable to verify match:%(project_id)s as the parent resource: project was not found.non-admin calls a vpn-routers/vpn-agents operation: no rule registered, default = admin_or_owner evaluated on an empty targetneutron_vpnaas/extensions/vpn_agentschedulers.py:52500 (observed) instead of 403
HTTPInternalServerError500Request Failed: internal server error while processing your request.the six scheduler routes generated by Routes without a controller method (01 § Summary)neutron_vpnaas/extensions/vpn_agentschedulers.py:40 (controller without show/update)500 (observed)
AttributeError (vpnaas.VPNStateInvalidToUpdate)500—set_vpnservice_status on a pending service without updated_pending_status refers to a class that does not exist in neutron_vpnaas.extensions.vpnaasneutron_vpnaas/db/vpn/vpn_db.py:522500 [inferred: unreachable with the current single caller]
SystemExit—Delete associated vpnservices %(vpnservices)s before removing providers %(providers)s.server start: a VPN service is associated with a provider that is no longer configuredneutron_vpnaas/services/vpn/plugin.py:111neutron-server does not start

Asynchronous errors

These never reach the API caller; they show up as statuses, logs or missing tunnels.

SituationWhereVisible as
The agent cannot render or start the daemon (RuntimeError from a command)neutron_vpnaas/services/vpn/device_drivers/ipsec.py:342-364LOG.exception("Failed to enable vpn process on router %s"); the status stays as reported (usually DOWN)
ipsec status / whack --status exits 1 or 3 (daemon not running)neutron_vpnaas/services/vpn/device_drivers/ipsec.py:388-390 (Libreswan pattern), neutron_vpnaas/services/vpn/device_drivers/strongswan_ipsec.py:196-198every connection DOWN, service DOWN
A connection disappears from the daemon output (admin down, deleted) while the cache knew itneutron_vpnaas/services/vpn/device_drivers/ipsec.py:738-752that connection reported DOWN with updated_pending_status=True
update_status RPC fails (server down, timeout)neutron_vpnaas/services/vpn/device_drivers/ipsec.py:808-811MessagingTimeout after rpc_response_timeout in the looping call; the local cache was already updated before the call (neutron_vpnaas/services/vpn/device_drivers/ipsec.py:801-806), so the change is not re-sent unless the status changes again [inferred from the order of statements]
update_status for a deleted serviceneutron_vpnaas/db/vpn/vpn_db.py:753-759LOG.warning('vpnservice %s in db is already deleted'), ignored
update_status for a deleted connectionneutron_vpnaas/db/vpn/vpn_db.py:293-296silently ignored
Dead VPN agent with no live replacement (OVN)neutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:106-113LOG.exception("Failed to reschedule vpn services for router %s"); binding already deleted, router unhosted [inferred: reschedule_router deletes the binding before scheduling, inside one transaction rolled back by the exception]
Any exception in the rescheduling loopneutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:114-118LOG.exception("Exception encountered during vpn service rescheduling."); retried next period
OVN VPN gateway creation fails (port, subnet, router interface)neutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:390-401vpn_ext_gws.status = ERROR, service ERROR, API error returned; blocks later services on that router (VPNGatewayInError)
OVN VPN gateway cleanup failsneutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:418-423LOG.exception("Cleanup of VPN gateway for router %s failed."), gateway ERROR
OVN agent cannot plug a portneutron_vpnaas/services/vpn/device_drivers/ovn_ipsec.py:136-138, neutron_vpnaas/services/vpn/device_drivers/ovn_ipsec.py:169-171LOG.exception('plug external port %s failed') / ('plug internal port %s failed'); the sync continues without the interface [inferred: tunnel DOWN]
netns wrapper refuses a commandneutron_vpnaas/services/vpn/common/netns_wrapper.py:106-109exit code EPERM (1), Unauthorized command: … (no filter matched); the agent sees RuntimeError
netns wrapper run outside a namespaceneutron_vpnaas/services/vpn/common/netns_wrapper.py:136-139exit EINVAL, Cannot run without netns, exiting
vpnservice_added_to_agent call fails twiceneutron_vpnaas/api/rpc/agentnotifiers/vpn_rpc_agent_api.py:50-52manual binding: exception → 500 [inferred]; reschedule: binding removed + RouterReschedulingFailed

Key log messages

LevelMessageSituationWhere
ERROR (exception)Delete associated vpnservices %(vpnservices)s before removing providers %(providers)s.provider removed from configneutron_vpnaas/services/vpn/plugin.py:110
INFOVPN plugin using service drivers: %(service_drivers)s, default: %(default_driver)sserver startneutron_vpnaas/services/vpn/plugin.py:70
INFOAssociating VPN services %(unasso_vpnservices)s to default provider %(default_provider)s.upgrade from an old schemaneutron_vpnaas/services/vpn/plugin.py:119
WARNINGvpnservice %s in db is already deletedstatus report for a deleted serviceneutron_vpnaas/db/vpn/vpn_db.py:757
ERROR (exception)Setting up the VPN gateway for router %s failed.OVN create failureneutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:429
ERROR (exception)Cleanup of VPN gateway for router %s failed.OVN delete failureneutron_vpnaas/services/vpn/service_drivers/ovn_ipsec.py:419
WARNINGRescheduling vpn services for router %(router)s from agent %(agent)s because the agent is not alive.dead OVN VPN agentneutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:101
ERROR (exception)Failed to reschedule vpn services for router %sreschedule failureneutron_vpnaas/db/vpn/vpn_agentschedulers_db.py:112
WARNINGNo active VPN agentsscheduling with no candidateneutron_vpnaas/scheduler/vpn_agent_scheduler.py:90
WARNINGNo unscheduled routers compatible with VPN agent configuration on host %sAZ scheduler auto-scheduleneutron_vpnaas/scheduler/vpn_agent_scheduler.py:79
ERROR (exception)Failed to enable vpn process on router %s / Failed to disable vpn process on router %sagent command failureneutron_vpnaas/services/vpn/device_drivers/ipsec.py:351, neutron_vpnaas/services/vpn/device_drivers/ipsec.py:361
WARNINGServer appears to still be running, restart of router %s may failLibreswan restart, pluto still alive after the retriesneutron_vpnaas/services/vpn/device_drivers/libreswan_ipsec.py:256
ERRORProcess %(pid)s exists with command line %(cmd_line)s.Libreswan, pluto still running (logged at ERROR although informational)neutron_vpnaas/services/vpn/device_drivers/libreswan_ipsec.py:194
INFOConnection to OVSDB established, doing a full syncOVN agent: own Chassis_Private re-created (ovn-controller restart / reconnection)neutron_vpnaas/agent/ovn/vpn/agent.py:61
INFOprocess %s is destroyedOVN agent destroys a namespaceneutron_vpnaas/services/vpn/device_drivers/ovn_ipsec.py:264
ERRORUnauthorized command: %(cmd)s (no filter matched)netns wrapper rootwrap filterneutron_vpnaas/services/vpn/common/netns_wrapper.py:107
INFO / ERROR%(new_path)s has been bind-mounted in %(path)s / Failed to bind-mount %(new_path)s in %(path)snetns wrapperneutron_vpnaas/services/vpn/common/netns_wrapper.py:149, neutron_vpnaas/services/vpn/common/netns_wrapper.py:153

Errors that are not exceptions

  • **ipsec binary exit codes**: ipsec status (strongSwan) and ipsec whack --status (Libreswan) are run with extra_ok_codes=[1, 3] (neutron_vpnaas/services/vpn/device_drivers/strongswan_ipsec.py:196-198, neutron_vpnaas/services/vpn/device_drivers/libreswan_ipsec.py:239-241); the netns wrapper prints Command: … Exit code: N … (neutron_vpnaas/services/vpn/common/netns_wrapper.py:66-71), and that line is matched by STATUS_NOT_RUNNING_RE to mean "daemon not running". Any other non-zero code raises RuntimeError in the agent.
  • Resource statuses: ERROR on services (OVN create failure); connections only get ERROR if an agent reports it, which no reachable code path does (neutron_vpnaas/services/vpn/device_drivers/libreswan_ipsec.py:272 is in dead code); DOWN for every non-established tunnel.
  • Timeouts: vpnservice_added_to_agent is a call retried twice (neutron_vpnaas/api/rpc/agentnotifiers/vpn_rpc_agent_api.py:21-23), so a dead agent blocks the API request up to ~2 × rpc_response_timeout (60 s by default). The agent's get_vpn_services_on_host and update_status calls raise MessagingTimeout after the same timeout.

Source: reverse-spec-neutron-vpnaas/02-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.