Skip to main content

E-SMLC Location Services Guide

OmniLCS implements an Evolved Serving Mobile Location Centre (E-SMLC) that provides UE positioning for LTE networks. The E-SMLC determines UE location using multiple positioning methods and communicates with the MME via the SLs interface using native LCS-AP over SCTP per 3GPP TS 29.171.

Location Services

Architecture

Positioning Methods

Cell ID

The simplest positioning method. Returns the geographic position of the serving cell from the cell database.

  • Accuracy: Cell radius (typically 100m - 5km depending on cell type)
  • Latency: Milliseconds (local database lookup)
  • UE Support Required: No
  • eNB Support Required: No

The engine first attempts to look up the serving cell in the local cell database. If not found, it sends an LPPA E-CID Measurement Initiation Request (with cell_id quantity only) to the eNB via the MME using LCS-AP Connection Oriented Information to obtain the cell identity.

Enhanced Cell ID (E-CID)

Uses LPPA to obtain radio measurements from the eNB, including timing advance and signal strength.

  • Accuracy: 50m - 500m
  • Latency: 1-5 seconds
  • UE Support Required: No
  • eNB Support Required: Yes (LPPA)

Measurement quantities requested:

QuantityDescription
Cell IDServing cell identity
Timing Advance Type 2UE-to-eNB propagation delay (distance estimate)
RSRPReference Signal Received Power
RSRQReference Signal Received Quality

GNSS / A-GPS

Requests the UE to report its GPS coordinates via the LPP protocol.

  • Accuracy: 5m - 50m
  • Latency: 5-30 seconds
  • UE Support Required: Yes (GNSS capability)
  • eNB Support Required: No

The E-SMLC sends an LPP Request Location Information message for GNSS to the UE through the MME via LCS-AP. The UE performs a GNSS fix and reports its coordinates back via LPP, relayed through the MME in a Connection Oriented Information message.

OTDOA

Observed Time Difference of Arrival. Uses multilateration from Positioning Reference Signal (PRS) measurements across multiple cells.

  • Accuracy: 10m - 100m
  • Latency: 5-15 seconds
  • UE Support Required: Yes (OTDOA capability)
  • eNB Support Required: Yes (PRS configured, LPPA)

OTDOA steps:

  1. Request OTDOA cell information from eNB via LPPA (relayed through LCS-AP Connection Oriented Information)
  2. Receive PRS configuration, cell IDs, EARFCNs for reference and neighbour cells
  3. Send PRS assistance data to UE via LPP (relayed through LCS-AP Connection Oriented Information)
  4. Request RSTD measurements from UE via LPP
  5. Receive RSTD measurements
  6. Run multilateration to compute position

SLs Interface -- LCS-AP over SCTP

SLs Interface

The E-SMLC communicates with the MME using the LCS Application Protocol (LCS-AP) over SCTP per 3GPP TS 29.171. OmniLCS initiates SCTP associations to each configured MME peer.

Transport Details

ParameterValue
ProtocolLCS-AP over SCTP
SCTP PPID29
Default port9082 (IANA registered)
Connection directionE-SMLC initiates to MME
EncodingASN.1 PER aligned

LCS-AP Procedures

ProcedureCodeDescription
Location Request / Location Response0E-SMLC requests MME to locate a UE
Connection Oriented Information1Relay LPPA/LPP PDUs (UE-associated, uses correlation_id)
Connectionless Information2Relay non-UE-associated LPPA PDUs
Location Abort3Abort an in-progress location procedure
Reset4Reset all location procedures

Correlation ID

Every UE-associated LCS-AP transaction uses a correlation ID -- a 4-byte binary value that ties together the Location Request, all Connection Oriented Information exchanges, and the Location Response for a single positioning session. The E-SMLC generates a random correlation ID at the start of each session using :crypto.strong_rand_bytes(4).

The correlation ID is included as an IE (ID 2) in:

  • Location Request (E-SMLC -> MME)
  • Location Response (MME -> E-SMLC)
  • Connection Oriented Information (both directions)
  • Location Abort (E-SMLC -> MME)

APDU Tunneling

LPP and LPPA PDUs are carried inside LCS-AP Connection Oriented Information messages. The payload type IE (ID 15) identifies the content:

Payload TypeValueDescription
:lPP0LPP PDU (UE positioning protocol, TS 36.355)
:lPPa1LPPa PDU (eNB positioning protocol, TS 36.455)

The APDU IE (ID 1) carries the binary LPP or LPPa PDU. The MME transparently relays these between the E-SMLC and the target eNB or UE.

Inbound Messages (MME -> E-SMLC)

Location Response (procedure code 0, successfulOutcome / unsuccessfulOutcome)

The MME sends a Location Response as the outcome of a Location Request.

IEIDCriticalityDescription
Correlation-ID2RejectCorrelation ID from the original Location Request
Location-Estimate12RejectGAD-encoded position (on success)
Positioning-Data16RejectPositioning method information (on success)
Velocity-Estimate21RejectVelocity of the UE (optional, on success)
Accuracy-Fulfilment-Indicator0RejectWhether requested accuracy was met (on success)
LCS-Cause11IgnoreFailure cause (on failure)

Connection Oriented Information (procedure code 1, initiatingMessage)

The MME relays LPPA/LPP PDUs from the eNB or UE back to the E-SMLC.

IEIDCriticalityDescription
Correlation-ID2RejectSession correlation
Payload-Type15Reject:lPP or :lPPa
APDU1RejectBinary LPP or LPPa PDU

Reset Request (procedure code 4, initiatingMessage)

The MME requests the E-SMLC to reset all active procedures. The E-SMLC responds with a Reset Acknowledge.

IEIDCriticalityDescription
LCS-Cause11IgnoreReason for reset

Outbound Messages (E-SMLC -> MME)

Location Request (procedure code 0, initiatingMessage)

The E-SMLC requests the MME to locate a UE.

IEIDCriticalityDescription
Correlation-ID2Reject4-byte session correlation ID
Location-Type13Rejectgeographic-Information, assistance-Information, or last-known-location
E-UTRAN-Cell-Id4IgnoreE-CGI of the UE serving cell
LCS-Client-Type8RejectType of LCS client (optional)
LCS-Priority9RejectLocation request priority (optional)
LCS-QoS10RejectQuality of service requirements (optional)
IMSI7IgnoreUE IMSI (optional)
IMEI6IgnoreUE IMEI (optional)
Include-Velocity5RejectRequest velocity estimate (optional)

Connection Oriented Information (procedure code 1, initiatingMessage)

The E-SMLC sends LPPA/LPP PDUs to the eNB or UE via the MME.

IEIDCriticalityDescription
Correlation-ID2RejectSession correlation
Payload-Type15Reject:lPP or :lPPa
APDU1RejectBinary LPP or LPPa PDU

Connectionless Information (procedure code 2, initiatingMessage)

The E-SMLC sends non-UE-associated LPPA PDUs (e.g., eNB position requests) through the MME.

IEIDCriticalityDescription
Source-Identity19RejectE-SMLC network element identity
Destination-Id3RejectTarget eNB network element identity
APDU1RejectBinary LPPa PDU

Location Session Lifecycle

Each session tracks:

FieldDescription
session_idUnique identifier (e.g., esmlc-1234567890-1)
imsiUE identifier
mme_hostMME that originated the request
methodPositioning method used
stateCurrent session state
created_atSession creation timestamp
updated_atLast state change timestamp
completed_atCompletion timestamp
lppa_transactionsList of LPPA PDUs exchanged
lpp_transactionsList of LPP PDUs exchanged
measurementsAccumulated measurement data
resultFinal location result

Sessions older than 1 hour can be cleaned up via LocationSession.cleanup_old_sessions/1.

Pending Transaction Correlation

The E-SMLC uses an ETS table (:pending_transactions) to correlate outgoing LCS-AP messages with their responses. When a positioning session sends a Connection Oriented Information message:

  1. The engine generates a 4-byte correlation ID
  2. Registers {correlation_id, {caller_pid, ref}} in the :pending_transactions table
  3. Sends the LCS-AP message via the SCTP transport
  4. Waits in a receive block for the response
  5. When the SLs handler receives a matching response, it looks up the pending transaction by correlation ID and sends the result to the waiting process

Cell Database Management

The cell database stores geographic positions and radio parameters for each cell site. It is used for Cell ID positioning and OTDOA calculations.

Cell Record Fields

FieldTypeRequiredDescription
cell_idanyYesUnique cell identifier
latitudefloatYesCell latitude in decimal degrees
longitudefloatYesCell longitude in decimal degrees
pciintegerNoPhysical Cell Identity (0-503)
earfcnintegerNoE-UTRA Absolute Radio Frequency Channel Number
radiusintegerNoCell coverage radius in meters (default: 1000)
azimuthfloatNoAntenna azimuth in degrees
heightfloatNoAntenna height in meters
prs_configmapNoPRS configuration for OTDOA

PRS Configuration Fields

FieldTypeDescription
bandwidthintegerPRS bandwidth in resource blocks (6, 15, 25, 50, 75, 100)
config_indexintegerPRS configuration index (0-4095)
num_dl_framesintegerNumber of consecutive DL subframes
cp_lengthatomCyclic prefix length (:normal or :extended)
num_antenna_portsintegerNumber of antenna ports (1, 2, or 4)

InfluxDB Cell Sync

Cell positions are periodically synchronized from InfluxDB:

ParameterValueDescription
Sync interval5 minutesAutomatic sync period
Initial delay10 secondsDelay before first sync after startup
Sync timeout60 secondsMaximum time for a sync operation

Sync can also be triggered manually via:

  • REST API: POST /api/cells/sync
  • LiveView UI: "Sync from InfluxDB" button on the Cells page

JSON Import

Cells can be imported from a JSON file:

[
{
"cell_id": "001-01-0001-01",
"latitude": 40.7128,
"longitude": -74.0060,
"pci": 100,
"earfcn": 1300,
"radius": 500,
"prs_config": {
"bandwidth": 50,
"config_index": 0,
"num_dl_frames": 1
}
}
]

The cell database supports geographic proximity queries using the Haversine formula for great-circle distance calculation. Query via REST API: GET /api/cells/nearby?lat=X&lon=Y&radius=R where radius is in kilometers.

OTDOA Calculation

The OTDOA calculator converts RSTD (Reference Signal Time Difference) measurements into a UE position using multilateration.

Algorithm

  1. RSTD to distance difference: dd = RSTD * Ts * c where Ts = 1/(15000 * 2048) seconds and c = speed of light
  2. Coordinate projection: Cell lat/lon coordinates are projected to a local meter-based coordinate system
  3. Iterative least squares: Solves the hyperbolic positioning equations using weighted least squares with Jacobian-based optimization
  4. Convergence: Iterates until position change is less than 1 meter or maximum 50 iterations
  5. Uncertainty estimation: Computed from measurement geometry and distance differences

Requirements

  • Minimum 2 neighbour cells (plus reference cell = 3 total) for a position estimate
  • 3 or more neighbours recommended for unambiguous 2D fix
  • All cells must have known positions in the cell database
  • Cell positions are resolved by PCI, ECGI, or cell_id

REST API Reference for Location

See REST API Reference for the full endpoint documentation. Key location endpoints:

EndpointMethodDescription
/api/locationPOSTRequest a new UE location
/api/locationGETList recent location fixes
/api/location/:imsiGETLast known location for an IMSI
/api/location/:imsi/historyGETLocation history for an IMSI
/api/location/:imsi/history/csvGETCSV export of location history

Troubleshooting

No SLs Peers Connected

  1. Verify the :sls configuration: local_ip must be reachable from the MME network
  2. Check that each mme_peers entry has the correct IP address and port (default 9082)
  3. Look for SCTP connection errors in the log: SLs: Failed to connect to MME
  4. Verify SCTP is not blocked by firewalls (IP protocol 132)
  5. Confirm the MME is listening for LCS-AP on port 9082

Location Request Returns "no_mme_host"

The E-SMLC cannot determine which MME to send LPPA/LPP messages to. Ensure:

  1. At least one SLs SCTP association is established
  2. For REST API requests, provide the mme_host parameter
  3. Check the SLs connection status on the Dashboard page

No LCS-AP Response from MME

  1. Verify the SCTP association is in :established state via SctpTransport.get_connections/0
  2. Check for SCTP heartbeat failures in the log
  3. Confirm the MME supports LCS-AP (TS 29.171)
  4. Check that the correlation ID is being correctly matched between request and response

Cell ID Positioning Returns No Coordinates

The cell database does not contain a matching cell. Actions:

  1. Trigger an InfluxDB sync: POST /api/cells/sync
  2. Add cells manually via the REST API or LiveView UI
  3. Import cells from a JSON file

OTDOA Timeout

The eNB did not respond with OTDOA information within the timeout period. Possible causes:

  1. eNB does not support LPPA OTDOA Information procedure
  2. PRS is not configured on the eNB
  3. Network path issue between MME and eNB

GNSS Timeout

The UE did not report GNSS coordinates within the timeout. Possible causes:

  1. UE does not support GNSS positioning
  2. UE is indoors (no satellite visibility)
  3. No GNSS assistance data provided (cold start takes longer)

3GPP References

SpecificationTitle
TS 29.171LCS Application Protocol (LCS-AP) between MME and E-SMLC (SLs interface)
TS 29.172EPC LCS Protocol between GMLC and MME (SLg Diameter interface)
TS 36.455LTE Positioning Protocol A (LPPa) between eNB and E-SMLC
TS 36.355LTE Positioning Protocol (LPP) between UE and E-SMLC
TS 23.032Universal Geographical Area Description (GAD encoding)