OmniSCEF Troubleshooting
Problem/resolution guidance for common OmniSCEF operational issues. For the underlying flows, see NIDD and Monitoring Events; for parameters, see the Configuration Reference.
Table of Contents
- MME Cannot Connect Over T6a
- Connection Rejected With USER_UNKNOWN (5001)
- Downlink Delivery Fails
- Uplink Data Not Reaching the Application Server
- Group Downlink Reaches No Devices
- Monitoring Reports Not Delivered
- T8 API Returns 404 for a Valid Endpoint
- T8 Endpoint Will Not Start
MME Cannot Connect Over T6a
Symptoms: The MME cannot establish a Diameter connection to OmniSCEF; no capabilities exchange completes.
Possible causes:
- Firewall blocking the Diameter port (default 3868).
- Transport mismatch — the MME uses SCTP while only TCP is reachable, or vice versa.
- Peer authorisation is restricted and the MME is not a configured peer.
- Origin-Host / realm mismatch between what the MME expects and what OmniSCEF advertises.
Resolution:
- Confirm the firewall allows the configured
listen_porton both TCP and SCTP — OmniSCEF listens on both. See Listeners. - Verify the MME's configured transport matches. Both TCP and SCTP listeners are always started.
- If
allow_undefined_peers_to_connectisfalse, add the MME topeerswith its exact Origin-Host. See Peers. - Confirm OmniSCEF's
hostandrealmmatch what the MME is provisioned to talk to. Check thelog_unauthorized_peer_connection_attemptslog output for rejected attempts.
Connection Rejected With USER_UNKNOWN (5001)
Symptoms: The MME establishes the Diameter connection, but a NIDD connection request (CMR) is
answered with DIAMETER_ERROR_USER_UNKNOWN (5001).
Possible causes:
- No NIDD configuration exists for that subscriber's IMSI.
- The Application Server created a configuration using an external identity that does not resolve to the subscriber's IMSI.
Resolution:
- Confirm the Application Server has created a NIDD configuration for the device before the UE attaches.
- Verify the device's
externalId/msisdnresolves to the correct IMSI in the identity map. - Confirm the IMSI in the identity map matches the IMSI the MME presents in the CMR.
Downlink Delivery Fails
Symptoms: A POST to downlink-data-deliveries returns a delivery whose deliveryStatus is a
FAILURE_* value, or a 404.
Possible causes:
- No active T6a connection exists for the device (
404 NIDD_CONFIGURATION_NOT_AVAILABLE) — the UE has not attached, or its connection was released. - The UE is unreachable (
FAILURE_UE_NOT_REACHABLE). - The MME / serving node rejected the request (
FAILURE_REMOTE_FAILURE). - The
datafield is missing or not valid base64 (400 DATA_MISSING).
Resolution:
- Confirm the device is attached and its connection is established (a prior CMR was accepted).
- Check the
datafield is present and base64-encoded. - For an idle UE, expect the MME to buffer and page; the delivery reports success once the MME takes responsibility. See Mobile-Terminated Data.
- For
FAILURE_REMOTE_FAILURE, inspect the MME/serving-node side for the rejection cause.
Uplink Data Not Reaching the Application Server
Symptoms: The UE sends uplink data, but the Application Server's callback is not invoked.
Possible causes:
- The device has no NIDD configuration (so no callback is known).
- The
notificationDestinationURL is unreachable from OmniSCEF, or returns a non-2xx status. - No active binding exists for the
{IMSI, EBI}presented on the uplink.
Resolution:
- Confirm a NIDD configuration exists for the device and carries a reachable
notificationDestination. - Verify network connectivity from OmniSCEF to the callback URL, including TLS trust if it is HTTPS.
- Confirm the callback returns a 2xx status; a non-2xx is treated as a delivery failure.
- Confirm the device attached (a CMR was accepted) before sending uplink data.
Group Downlink Reaches No Devices
Symptoms: A downlink to a group configuration returns
404 NIDD_CONFIGURATION_NOT_AVAILABLE, or reaches fewer devices than expected.
Possible causes:
- The
externalGroupIdis not present in the group map, or maps to no members. - No group member currently has an active T6a connection.
Resolution:
- Confirm the
externalGroupIdis defined in the group map and lists the expected member IMSIs. - Confirm at least one member device is attached — only members with an active connection receive the delivery. The aggregate status reflects the worst per-member outcome. See Group NIDD.
Monitoring Reports Not Delivered
Symptoms: A monitoring subscription is created, but the Application Server receives no notifications.
Possible causes:
- The event was never armed in the network (no monitoring destination configured, and no other path armed it).
- The report's SCEF-Reference-ID does not match a live subscription (for example, after a restart — subscription state is in-memory).
- The subscription's
notificationDestinationis unreachable.
Resolution:
- If OmniSCEF should arm the event, configure a monitoring destination so the CIR is sent.
- Recreate subscriptions after an OmniSCEF restart — subscription and reference-ID state is volatile and does not survive a restart.
- Verify connectivity from OmniSCEF to the subscription callback.
T8 API Returns 404 for a Valid Endpoint
Symptoms: A request to a documented T8 path returns 404, and the endpoint does not appear in
the OpenAPI document at /api/schema.
Possible causes:
- The route table was changed but the API layer was not recompiled, so the new route is not registered.
- The request omits the
/apiprefix that all T8 routes are mounted under.
Resolution:
- Confirm the request path includes the
/apiprefix (e.g./api/3gpp-nidd/v1/{scsAsId}/configurations). - If the route table was modified, the API dependency must be
recompiled so the new routes register (
mix deps.compile api_ex --force), then the service restarted.
T8 Endpoint Will Not Start
Symptoms: OmniSCEF fails to start the T8 HTTPS endpoint.
Possible causes:
- The TLS certificate or key file is missing or unreadable.
- The configured
portis already in use.
Resolution:
- Confirm
tls_cert_pathandtls_key_pathpoint to valid, readable PEM files. See T8 API Endpoint. - Confirm nothing else is bound to the configured
porton thelisten_ipinterface. - To run without TLS in a controlled environment, set
enable_tls: false— but production deployments should always terminate TLS at or before OmniSCEF.