LTE MBMS Gateway version 2025-09-10*This document is based on the latest test release.
Features may not be present in your current installed software. You may check their availability in change history or in your release documentation.
If you require an up to date release, ask for it in a ticket.
Features may not be present in your current installed software. You may check their availability in change history or in your release documentation.
If you require an up to date release, ask for it in a ticket.
Table of Contents
1 Introduction
LTEMBMSGW is a LTE MBMS Gateway. It can easily be used with the Amarisoft LTE eNodeB to build an LTE MBMS test system.
2 Features
- User configurable list of service and multicast components.
- M2AP protocol support.
- Generate one stream per service over the M1 interface (GTP + SYNC protocols).
- Built-in test RTP packet generator.
- Remote API using WebSocket.
3 Requirements
3.1 Hardware requirements
- LTEMBMSGW can run on the same PC as the Amarisoft eNodeB if a simple and compact solution is needed. Otherwise, any reasonnably recent PC with at least one Gigabit Ethernet port is acceptable.
3.2 Software requirements
- A 64 bit Linux distribution. Fedora 39 is the officially supported distribution.
The following distributions are known as compatible:- Fedora 22 to 39
- Cent OS 7
- Ubuntu 14 to 24
Your system requires at least GLIBC 2.17.
4 Installation
We assume that the Fedora distribution is running and that the network access thru the Gigabit Ethernet port is correctly configured.
LTEMBMSGW can be run directly from the directory when it was unpacked. No need for explicit installation.
4.1 Linux setup
4.1.1 Packages
LTEMBMSGW uses the SCTP protocol for which the necessary packages are not usually installed. In order to install them, do as root user:
- Fedora
dnf install lksctp-tools kernel-modules-extra
- Ubuntu
sudo apt-get install lksctp-tools linux-image-extra-3.13.0-24-generic
Note that linux-image-extra package name may differ depending on your kernel version.
To verify that SCTP kernel module is running, do as root user:
checksctp
If it reports that the protocol is not supported,
- check if you have a /etc/modprobe.d/sctp-blacklist.conf file
- edit it to comment the ’blacklist sctp’ line
Then reboot the PC in case the Linux kernel was upgraded too.
4.1.2 OpenSSL
LTEMBMSGW has been compiled against openssl version 1.1.1w.
If your system does not have compatible version installed you may have this error message at startup:
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
To overcome this problem, you may:
- Copy libssl.so.1.1 and libcrypto.so.1.1 from
libs
subdirectory of your release tarball.
If you have installed software with automatic install script, this should have been done automatically. - Compile and install proper openssl version yourself
In case of persisting issue, raise a ticket from our support site at https://support.amarisoft.com/ with the information provided by below commands executed in LTEMBMSGW directory:
uname -a ls -l ldd ./ltembmsgw openssl version
4.2 License key installation
LTEMBMSGW needs a LTEMME
license key to run.
Please refer to the ltemme
documentation.
4.3 Initial testing
- Start the eNodeB with the example MBMS configuration:
./lteenb config/enb-mbms.cfg
- Start the program as root with the default configuration. This configuration contains several MBMS services. For each service, RTP dummy streams are generated:
./ltembmsgw config/mbmsgw.cfg
- Verify that the MBMS GTP data is correctly received by the eNodeB with the
mbms
command in the eNodeB monitor. You should see a non zero bitrate for each service and zero packet error. - Verify that you can receive the corresponding services on your LTE device. The exact setup depend on your device.
When this basic test work, you can customize the eNodeB and MBMS Gateway configuration to use your own generated multicast services.
5 Configuration reference
5.1 Configuration file syntax
The main configuration file uses a syntax very similar to the Javascript Object Notation (JSON) with an extension to support complex numbers and a few mathematical operations. The supported types are:
- - Numbers (64 bit floating point). Notation:
13.4
- - Complex numbers. Notation:
1.2+3*I
- - Strings. Notation:
"string"
- - Booleans. Notation:
true
orfalse
. - - Objects. Notation:
{ field1: value1, field2: value2, .... }
- - Arrays. Notation:
[ value1, value2, .... ]
The basic operations +
, -
, *
and /
are
supported with numbers and complex numbers.
The numbers 0
and 1
are accepted as synonyms for the
boolean values false
and true
.
5.2 Properties
log_filenamelog_filename
-
String. Set the log filename. If no leading
/
, it is relative to the configuration file path. See Log file format. log_optionslog_options
-
String. Set the logging options as a comma separated list of assignments.
- layer.level=verbosity. For each layer, the log verbosity can be set
to
none
,error
,info
ordebug
. In debug level, the content of the transmitted data is logged. - layer.max_size=n. When dumping data content, at
most
n
bytes are shown in hexa. For ASN.1, NAS or Diameter content, show the full content of the message ifn > 0
. - layer.payload=[0|1]. Dump ASN.1, NAS, SGsAP or Diameter payload in hexadecimal.
- layer.key=[0|1]. Dump security keys (NAS and RRC layers).
- layer.crypto=[0|1]. Dump plain and ciphered data (NAS and PCDP layers).
- time=[sec|short|full]. Display the time as seconds, time only or full date and time (default = time only).
- time.us=[0|1]. Dump time with microseconds precision.
- file=cut. Close current file log and open a new one.
- file.rotate=now. Move and rename to the same directory or to the directory pointed by
file.path
and open a new log file (Headers are kept). - file.rotate=size. Every time log file size reaches size bytes,
move and rename to the same directory or to the directory pointed by
file.path
, and open a new log file (Headers are kept).
Size is an integer and can be followed by K, M or G. - file.rotate=#count. Everytime number of logs in log file reaches count,
move and rename to the same directory or to the directory pointed by
file.path
, and open a new log file (Headers are kept).
Size is an integer and can be followed by K, M or G. - file.path=path. When log rotation is enabled (
file.rotate
set), rename and move current log to this path instead of initial log path. - append=[0|1]. (default=0). If 0, truncate the log file when opening it. Otherwise, append to it.
Available layers are:
gtpu
,m2ap
- layer.level=verbosity. For each layer, the log verbosity can be set
to
log_synclog_sync
Optional boolean (default = false). If true, logs will be synchronously dumped to file.
Warning, this may lead to performances decrease.com_addrcom_addr
Optional string. Address of the WebSocket server remote API. See Remote API.
If set, the WebSocket server for remote API will be enabled and bound to this address.
Default port is 9004.
Setting IP address to [::] will make remote API reachable through all network interfaces.com_namecom_name
Optional string. Sets server name. MBMSGW by default
com_ssl_certificatecom_ssl_certificate
Optional string. If set, forces SSL for WebSockets. Defines CA certificate filename.
com_ssl_keycom_ssl_key
Optional string. Mandatory if com_ssl_certificate is set. Defines CA private key filename.
com_ssl_peer_verifycom_ssl_peer_verify
Optional boolean (default is false). If true, server will check client certificate.
com_ssl_cacom_ssl_ca
Optional string. Set CA certificate. In case of peer verification with self signed certificate, you should use the client certificate.
com_log_lockcom_log_lock
Optional boolean (default is false). If true, logs configuration can’t be changed via
config_set
remote API.com_log_uscom_log_us
Optional boolean (default is false). If true, logs sent by
log_get
remote API response will have atimestamp_us
parameters instead oftimestamp
com_authcom_auth
Optional object. If set, remote API access will require authentication.
Authentication mechanism is describe in Remote API Startup section.
passfilecom_auth.passfile
Optional string. Defines filename where password is stored (plaintext).
If not set,password
must be setpasswordcom_auth.password
Optional string. Defines password.
If not set,passfile
must be set.unsecurecom_auth.unsecure
Optional boolean (default false). If set, allow password to be sent plaintext.
NB: you should set it to true if you access it from a Web Browser (Ex: Amarisoft GUI) without SSL (https) as your Web Browser may prevent secure access to work.
com_log_countcom_log_count
Optional number (Default = 8192). Defines number of logs to keep in memory before dropping them.
Must be between 4096 and 2097152).sim_eventssim_events
Array of object. Each element defines a remote API request (Remote API) except that
message
field is replaced byevent
.
sim_events_loop_countsim_events_loop_count
If set, will define
loop_count
for each event ofsim_events
, See loop_count.sim_events_loop_delaysim_events_loop_delay
If set, will define
loop_delay
for each event ofsim_events
, See loop_delay.license_serverlicense_server
Configuration of the Amarisoft license server to use.
Object with following properties:server_addrlicense_server.server_addr
String. IP address of the license server.
namelicense_server.name
Optional string. Text to be displayed inside server monitor or remote API.
taglicense_server.tag
Optional string. If set, server will only allow license with same tag.
Example:
license_server: { server_addr: "192.168.0.20", name: "My license" }
gtp_bind_addrgtp_bind_addr
-
String. Set source IP address (and an optional port) of the GTP-U packets. The default value is
"0.0.0.0:2152"
.Syntax:
- - "1.2.3.4" (use default port)
- - "1.2.3.4:5678" (use explicit port)
- - "2001:db8:0:85a3::ac1f:8001" (IPv6 address and default port)
- - "[2001:db8:0:85a3::ac1f:8001]:5678" (IPv6 address and explicit port)
m2ap_bind_addrm2ap_bind_addr
-
Optional string. IP address and optional port on which the M2AP SCTP connection is bound. The default port is 36443.
mce_idmce_id
Integer. Range: 0 to 65535. Global MCE Identifier used in M2 signaling.
enb_time_offsetenb_time_offset
-
Optional integer (default = 0). Offset in ms applied to the MBMSGW International Atomic Time (TAI) so as to generate a time that should match the eNB RF time. The current value can be retrieved by typing the
time
monitor command in eNB or MBMSGW prompt. This is used to synchronize the two components so as to have meaningful timestamps in the SYNC packets (indicating the start of the MCH Scheduling Periods).Note: the MBMSGW derives the TAI from the UTC OS clock and the
right/UTC
OS time zone. time_offsettime_offset
-
Integer. Default time offset in ms added to all the SYNC timestamps. Can be overridden by the
time_offset
property of each service. It is recommended to set it to at least 2 MCH Scheduling Period to avoid having the eNB dropping SYNC packets due to a timestamp equal to the current MCH Scheduling Period.Note: the MBMS Gateway uses the system real time clock as clock source. If synchronous transmission is needed, it should be synchronized to the eNodeB RF time.
servicesservices
-
Array of objects. Contain the definition of each service.
Property of each service:
tmgiservices.tmgi
Object. Service identifier (only used for error reporting). Contain the following fields:
plmnservices.tmgi.plmn
String (5 or 6 digits). PLMN identity of the service.
service_idservices.tmgi.service_id
Integer. 24 bit service identity.
service_area_idservices.service_area_id
Integer. Range: 0 to 65535. MBMS service area identifier for this service.
session_idservices.session_id
Optional integer. Range: 0 to 255. MBMS session identifier for this service.
gtp_addrservices.gtp_addr
String. IP address (and optional port) to which the GTP packets are sent. It is normally a multicast address. Several services can share the same IP address if they have a different TEID.
gtp_teidservices.gtp_teid
32 bit integer. GTP TEID on which the GTP packets are sent.
autostartservices.autostart
Optional boolean (default = true). Indicates if service is automatically started when the eNB connects to the MBMS Gateway or if it should be manually launched with the service_start command.
scheduling_periodservices.scheduling_period
Range: from 4 to 1024. Must be a power of two. Duration of the scheduling period in 10 ms units. Must match the corresponding MCH scheduling period configured in the eNodeB.
time_offsetservices.time_offset
Optional integer. Time offset in ms added to the SYNC timestamps. If not provided, the default time offset is used.
forward_modeservices.forward_mode
Optional boolean (default = false). If set, gateway won’t add sync headers and only forward packet to the eNB.
tosservices.tos
Optional integer (default = 0). IPv4 header TOS field (6 bits DSCP + 2 bits ECN).
traffic_classservices.traffic_class
Optional integer (default = 0). IPv6 header traffic class field (6 bits DSCP + 2 bits ECN).
ttlservices.ttl
Optional integer (default = 64). IP header TTL field.
componentsservices.components
Array of object. A service contains several components. Each component is the data coming from a given IP address (usually multicast).
Component properties:
ip_addrservices.components.ip_addr
String. Destination IPv4/v6 address and port for the component.
if_addrservices.components.if_addr
Optional string (default =
"0.0.0.0"
). IP address of the network interface for the multicast join.simservices.components.sim
Optional boolean (default = false). If true, RTP packets coming from
ip_addr
are generated using a RTP payload ofrtp_payload_len
bytes and a bitrate ofbitrate
.rtp_payload_lenservices.components.rtp_payload_len
Optional integer. Only meaningful if sim = true. RTP payload length in bytes (default = 1460 for IPv4 of 1440 for IPv6).
bitrateservices.components.bitrate
Optional integer. Only meaningful if sim = true. Bitrate in bit/s of the generated RTP stream. The bitrate includes the size of the IP, UDP and RTP headers.
area_info_listarea_info_list
Array of object. Each object defines the parameters of one MBSFN area:
area_idarea_info_list.area_id
Range: 0 to 255. Area identifier.
non_mbsfn_region_lengtharea_info_list.non_mbsfn_region_length
Enumeration: 1, 2. Number of CCH symbols. For 1.4 MHz downlink, only
2
is allowed.mcch_configarea_info_list.mcch_config
Object. MCCH configuration:
mcch_repetition_periodarea_info_list.mcch_config.mcch_repetition_period
Range: 32 to 256, power of two. MCCH repetition period (in 10 ms frames).
mcch_offsetarea_info_list.mcch_config.mcch_offset
Range: 0 to 10. MCCH offset.
mcch_modification_periodarea_info_list.mcch_config.mcch_modification_period
Enumeration: 512, 1024. (in 10 ms frames).
mcch_sf_allocarea_info_list.mcch_config.mcch_sf_alloc
Bit string. Length = 6 (1 frame). In FDD, the bits correspond to subframes 1, 2, 3, 6, 7, 8. In TDD, the bits correspond to subframes 3, 4, 7, 8, 9.
signalling_mcsarea_info_list.mcch_config.signalling_mcs
Enumeration: 2, 7, 13, 19. MCS for MCCH and MCHSI transmission. MCCH and MCHSI are critical to decode the MBMS data (MTCH), so their MCS should be lower than the one of the data.
mbsfn_area_configurationarea_info_list.mbsfn_area_configuration
Object. MBSFN area configuration. Most of the content of this object is transmitted in the MCCH.
common_sf_allocarea_info_list.mbsfn_area_configuration.common_sf_alloc
Array of object. Defines the subframes dedicated to this MBSFN area. Each object has the following fields:
radio_frame_allocation_periodarea_info_list.mbsfn_area_configuration.common_sf_alloc.radio_frame_allocation_period
Range: 1 to 32, power of two. Allocation period (in 10 ms frames).
radio_frame_allocation_offsetarea_info_list.mbsfn_area_configuration.common_sf_alloc.radio_frame_allocation_offset
Range: 0 to 7. offset in the allocation period (in 10 ms frames).
subframe_allocationarea_info_list.mbsfn_area_configuration.common_sf_alloc.subframe_allocation
Bit string. Length = 6 (1 frame) or 24 (4 frames). In FDD, the bits correspond to subframes 1, 2, 3, 6, 7, 8. In TDD, the bits correspond to subframes 3, 4, 7, 8, 9.
common_sf_alloc_periodarea_info_list.mbsfn_area_configuration.common_sf_alloc_period
Range: 4 to 256, power of two. Common subframe allocation period (in 10 ms frames). The PMCH are allocated consecutively during this period.
pmch_info_listarea_info_list.mbsfn_area_configuration.pmch_info_list
Array of objects. List of PMCH. Each PMCH has the following properties:
pmch_configarea_info_list.mbsfn_area_configuration.pmch_info_list.pmch_config
Object. PMCH physical parameters.
sf_alloc_countarea_info_list.mbsfn_area_configuration.pmch_info_list.pmch_config.sf_alloc_count
Integer >= 1. Number of subframes allocated to this PMCH per common period.
data_mcsarea_info_list.mbsfn_area_configuration.pmch_info_list.pmch_config.data_mcs
Range: 0 to 28. MCS used for the MBMS data (MTCH).
data_mcs2area_info_list.mbsfn_area_configuration.pmch_info_list.pmch_config.data_mcs2
Optional integer. Range: 0 to 27. If provided,
data_mcs
is ignored and an alternate MCS table is used to allow 256QAM MBMS. Note: 256QAM MBMS is an optional release 12 feature, so not all UEs can receive a PMCH usingdata_mcs2
.mch_scheduling_periodarea_info_list.mbsfn_area_configuration.pmch_info_list.pmch_config.mch_scheduling_period
Range: 4 to 1024, power of two. Scheduling period (in 10 ms frames) for the MCH. MCHSI is transmitted with this periodicity. Must be >= common_sf_alloc_period. For the first PMCH, must be <= mcch_repetition_period. Note: only release 12 UEs support the value 4, so the effective range to support all UEs is 8 to 1024.
mbms_session_info_listarea_info_list.mbsfn_area_configuration.pmch_info_list.mbms_session_info_list
Array of objects. List of sessions in this PMCH. Each session has the following properties:
tmgiarea_info_list.mbsfn_area_configuration.pmch_info_list.mbms_session_info_list.tmgi
Object. Temporary Mobile Group Identity.
plmnarea_info_list.mbsfn_area_configuration.pmch_info_list.mbms_session_info_list.tmgi.plmn
String (5 or 6 digits). PLMN identity.
service_idarea_info_list.mbsfn_area_configuration.pmch_info_list.mbms_session_info_list.tmgi.service_id
24 bit integer. Service identity.
logical_channel_identityarea_info_list.mbsfn_area_configuration.pmch_info_list.mbms_session_info_list.logical_channel_identity
Range: 0 to 28. MAC logical channel identity. Must be different for each session in the PMCH. 0 is reserved for the MCCH in the first PMCH.
6 Remote API
You can access LTEMBMSGW via a remote API.
Protocol used is WebSocket as defined in RFC 6455
(https://tools.ietf.org/html/rfc6455).
Note that Origin header is mandatory for the server to accept connections.
This behavior is determined by the use of nopoll
library.
Any value will be accepted.
To learn how to use it, you can refer to our the following tutorial.
6.1 Messages
Messages exchanged between client and LTEMBMSGW server are in strict JSON
format.
Each message is represented by an object. Multiple message can be sent to
server using an array of message objects.
Time and delay values are floating number in seconds.
There are 3 types of messages:
- Request
Message sent by client.
Common definition:messagerequest.message
String. Represent type of message. This parameter is mandatory and depending on its value, other parameters will apply.
message_idrequest.message_id
Optional any type. If set, response sent by the server to this message will have same message_id. This is used to identify response as WebSocket does not provide such a concept.
start_timerequest.start_time
Optional float. Represent the delay before executing the message.
If not set, the message is executed when received.
absolute_timerequest.absolute_time
Optional boolean (default = false). If set,
start_time
is interpreted as absolute.
You can get current clock of system usingtime
member of any response.standalonerequest.standalone
Optional boolean (default = false). If set, message will survive WebSocket disconnection, else, if socket is disconnected before end of processing, the message will be cancelled.
loop_countrequest.loop_count
Optional integer (default = 0, max = 1000000). If set, message will be repeated
loop_count
time(s) afterloop_delay
(From message beginning of event).
Response will have aloop_index
to indicate iteration number.loop_delayrequest.loop_delay
Optional number (min = 0.1, max = 86400). Delay in seconds to repeat message from its
start_time
. Mandatory whenloop_count
is set > 0.
- Response
Message sent by server after any request message as been processed.
Common definition:messageresponse.message
String. Same as request.
message_idresponse.message_id
Optional any type. Same as in request.
timeresponse.time
Number representing time in seconds since start of the process.
Usefull to send command with absolute time.utcresponse.utc
Number representing UTC seconds.
- Events
Message sent by server on its own initiative.
Common definition:messageevent.message
String. Event name.
timeevent.time
Number representing time in seconds.
Usefull to send command with absolute time.
6.2 Startup
When WebSocket connections is setup, LTEMBMSGW will send a first message with
name set to com_name
and type set to MBMSGW.
If authentication is not set, message will be ready
:
{ "message": "ready", "type": "MBMSGW", "name": <com_name>, "version": <software version>, "product": <Amarisoft product name (optional)> }
If authentication is set, message will be authenticate
:
{ "message": "authenticate", "type": "MBMSGW", "name": <com_name>, "challenge": <random challenge> }
To authenticate, the client must answer with a authenticate
message
and a res
parameter where:
res = HMAC-SHA256( "<type>:<password>:<name>", "<challenge>" )
res
is a string and HMAC-SHA256 refers to the standard algorithm
(https://en.wikipedia.org/wiki/HMAC)
If the authentication succeeds, the response will have a ready
field
set to true
.
{ "message": "authenticate", "message_id": <message id>, "ready": true }
If authentication fails, the response will have an error
field and will
provide a new challenge.
{ "message": "authenticate", "message_id": <message id>, "error": <error message>, "type": "MBMSGW", "name: <name>, "challenge": <new random challenge> }
If any other message is sent before authentication succeeds,
the error "Authentication not done"
will be sent as a response.
6.3 Errors
If a message produces an error, response will have an error string field representing the error.
6.4 Sample nodejs program
You will find in this documentation a sample program: ws.js
.
It is located in doc
subdirectory.
This is a nodejs program that allow to send message to LTEMBMSGW.
It requires nodejs to be installed:
dnf install nodejs npm npm install nodejs-websocket
Use relevant package manager instead of NPM depending on your Linux distribution.
Then simply start it with server name and message you want to send:
./ws.js 127.0.0.1:9004 '{"message": "config_get"}'
6.5 Common messages
config_get
Retrieve current config.
Response definition:
typeconfig_get.type
Always "MBMSGW"
nameconfig_get.name
String representing server name.
logsconfig_get.logs
Object representing log configuration.
With following elements:layersconfig_get.logs.layers
Object. Each member of the object represent a log layer configuration:
layer name
Object. The member name represent log layer name and parameters are:
levelconfig_get.logs.layers.root.level
See log_options
max_sizeconfig_get.logs.layers.root.max_size
See log_options
keyconfig_get.logs.layers.root.key
See log_options
cryptoconfig_get.logs.layers.root.crypto
See log_options
payloadconfig_get.logs.layers.root.payload
See log_options
countconfig_get.logs.count
Number. Number of bufferizer logs.
rotateconfig_get.logs.rotate
Optional number. Max log file size before rotation.
rotate_countconfig_get.logs.rotate_count
Optional number. Max log count before rotation.
pathconfig_get.logs.path
Optional string. Log rotation path.
bcchconfig_get.logs.bcch
Boolean. True if BCCH dump is enabled (eNB only).
mibconfig_get.logs.mib
Boolean. True if MIB dump is enabled (eNB only).
lockedconfig_get.locked
Optional boolean. If
true
, logs configuration can’t be changed withconfig_set
API.
config_set
Change current config.
Each member is optional.
Message definition:logsconfig_set.logs
Optional object. Represent logs configuration. Same structure as config_get (See config_get logs member).
All elements are optional.
Layer name can be set toall
to set same configuration for all layers.
If set and logs are locked, response will havelogs
property set tolocked
.
log_get
Get logs.
This API has a per connection behavior. This means that the response will depend on previous calls to this API within the same WebSocket connection.
In practice, logs that have been provided in a response won’t be part of subsequent request unless connection is reestablished. To keep on receiving logs, client should send a newlog_get
request as soon as the previous response has been received.
If a request is sent before previous request has been replied, previous request will be replied right now without considering specific min/max/timeout conditions.Message definition:
minlog_get.min
Optional number (default = 1). Minimum amount of logs to retrieve.
Response won’t be sent until this limit is reached (Unless timeout occurs).maxlog_get.max
Optional number (default = 4096). Maximum logs sent in a response.
timeoutlog_get.timeout
Optional number (default = 1). If at least 1 log is available and no more logs have been generated for this time, response will be sent.
allow_emptylog_get.allow_empty
Optional boolean (default = false). If set, response will be sent after timeout, event if no logs are available.
rntilog_get.rnti
Optional number. If set, send only logs matching rnti.
ue_idlog_get.ue_id
Optional number. If set, send only logs with matching ue_id.
layerslog_get.layers
Optional Object. Each member name represents a log layer and values must be string representing maximum level. See log_options.
If layers is not set, all layers level will be set to debug, else it will be set to none.
Note also the logs is also limited by general log level. See log_options.
shortlog_get.short
Optional boolean (default = false). If set, only first line of logs will be dumped.
headerslog_get.headers
Optional boolean. If set, send log file headers.
start_timestamplog_get.start_timestamp
Optional number. Is set, filter logs older than this value in milliseconds.
end_timestamplog_get.end_timestamp
Optional number. Is set, filter logs more recent than this value in milliseconds.
max_sizelog_get.max_size
Optional number (default = 1048576, i.e. 1MB). Maximum size in bytes of the generated JSON message. If the response exceeds this size, the sending of logs will be forced independently from other parameters.
Response definition:
logslog_get.logs
Array. List of logs. Each item is a an object with following members:
datalog_get.logs.data
Array. Each item is a string representing a line of log.
timestamplog_get.logs.timestamp
Number. Milliseconds since January 1st 1970. Not present if
com_log_us
is set in configuration.
timestamp_uslog_get.logs.timestamp_us
Number. Microseconds since January 1st 1970. Only present if
com_log_us
is set in configuration.
layerlog_get.logs.layer
String. Log layer.
levellog_get.logs.level
String. Log level: error, warn, info or debug.
dirlog_get.logs.dir
Optional string. Log direction: UL, DL, FROM or TO.
ue_idlog_get.logs.ue_id
Optional number. UE_ID.
celllog_get.logs.cell
Optional number (only for PHY layer logs). Cell ID.
rntilog_get.logs.rnti
Optional number (only for PHY layer logs). RNTI.
framelog_get.logs.frame
Optional number (only for PHY layer logs). Frame number (Subframe is decimal part).
channellog_get.logs.channel
Optional string (only for PHY layer logs). Channel name.
srclog_get.logs.src
String. Server name.
idxlog_get.logs.idx
Integer. Log index.
headerslog_get.logs.headers
Optional array. Array of strings.
discontinuitylog_get.discontinuity
Optional number. If set, this means some logs have been discarded due to log buffer overflow.
microsecondslog_get.microseconds
Optional boolean. Present and set to true if
com_log_us
is set in configuration file.
log_set
Add log.
Message definition:loglog_set.log
Optional string. Log message to add. If set, layer and level are mandatory.
layerlog_set.layer
String. Layer name. Only mandatory if log is set.
levellog_set.level
String. Log level: error, warn, info or debug. Only mandatory if log is set.
dirlog_set.dir
Optional string. Log direction: UL, DL, FROM or TO.
ue_idlog_set.ue_id
Optional number. UE_ID.
flushlog_set.flush
Optional boolean (default = false). If set, flushes fog file.
rotatelog_set.rotate
Optional boolean (default = false). If set, forces log file rotation.
cutlog_set.cut
Optional boolean (default = false). If set, forces log file reset.
log_reset
Resets logs buffer.
license
Retrieves license file information.
Response definition:
productslicense.products
String. List of products, separated by commas.
userlicense.user
String. License username.
validitylicense.validity
String. License end of validity date.
idlicense.id
Optional string. License ID.
id_typelicense.id_type
Optional string. License ID type. Can be
host_id
ordongle_id
uidlicense.uid
Optional string. License unique ID.
filenamelicense.filename
Optional string. License filename.
serverlicense.server
Optional string. License server URL.
server_idlicense.server_id
Optional string. License server ID.
quit
Terminates ltembmsgw.
help
Provides list of available messages in messages array of strings and events to register in events array of strings.
stats
Report statistics for LTEMBMSGW.
Every time this message is received by server, statistics are reset.
Warning, calling this message from multiple connections simultaneously will modify the statistics sampling time.Response definition:
cpustats.cpu
Object. Each member name defines a type and its value cpu load in % of one core.
instance_idstats.instance_id
Number. Constant over process lifetime. Changes on process restart.
6.6 LTE messages
service_start
Start a service.
Message definition:service_idservice_start.service_id
Integer. Identifier of service to start.
service_stop
Stop a service.
Message definition:service_idservice_stop.service_id
Integer. Identifier of service to stop.
7 Log file format
7.1 M2AP and GTP-U layers
When a message is dumped, the format is:
time layer - message
When a data PDU is dumped (debug level), the format is:
time layer dir ip_address short_content long_content
time
Time using the selected format.
layer
Indicate the layer (
[M2AP]
or[GTPU]
here).dir
Direction:
TO
orFROM
.ip_address
source or destination IP address, depending on the
dir
field.short_content
Single line content.
long_content
- M2AP: full ASN.1 content of the M2AP message if
layer.max_size > 0
. - GTPU: hexadecimal dump of the message if
layer.max_size > 0
.
- M2AP: full ASN.1 content of the M2AP message if
8 Change history
8.1 Version 2024-09-13
- added
license
remote API -
com_logs_lock
parameter is renamed tocom_log_lock
.com_logs_lock
is still supported for backward compatibility - added
com_log_us
parameter
8.2 Version 2024-06-14
- OpenSSL library is upgraded to 1.1.1w
8.3 Version 2023-12-15
- added
loop_count
andloop_delay
to remote API messages - added
sim_events
,sim_events_loop_count
andsim_events_loop_delay
- added
com_ssl_ca
parameter for SSL verification
8.4 Version 2023-06-10
-
com_logs_lock
parameter added to disable logs configuration change via remote API
8.5 Version 2023-03-17
-
com_addr
parameter now uses [::] address instead of 0.0.0.0 in the delivered configuration file to allow IPv6 connection
8.6 Version 2022-12-16
-
utc
parameter is added to remote API response messages
8.7 Version 2022-06-17
- OpenSSL library is upgraded to 1.1.1n
-
m2ap_bind_addr
parameter description is added -
start_timestamp
andend_timestamp
are added tolog_get
API
8.8 Version 2021-12-17
-
license
monitor command is added
8.9 Version 2021-09-17
- the minimum GLIBC version is now 2.17
- logs can be displayed with microseconds precision
9 License
ltembmsgw
is copyright (C) 2012-2025 Amarisoft. Its redistribution
without authorization is prohibited.
ltembmsgw
is available without any express or implied warranty. In
no event will Amarisoft be held liable for any damages arising from
the use of this software.
For more information on licensing, please refer to license terms.
Abbreviations
- MBMS
Multimedia Broadcast Multicast Service
- SYNC
MBMS synchronisation protocol
- TMGI
Temporary Mobile Group Identity