The Osmocom project has released new version 202407 of the CNI (Cellular Network Infrastructure) software, including OsmoTRX, OsmoBTS, OsmoPCU, OsmoBSC, OsmoMGW, OsmoMSC, OsmoHLR, OsmoSGSN, OsmoGGSN, OsmoSTP, OsmoSIPConnector, and others.
Those new tagged/released versions contain 10 months of work since the previous versions released during mid September 2023.
You can find pre-compiled binary packages of our latest release for a variety of Debian and Ubuntu GNU/Linux versions at Latest_Builds.
Versions¶
Noteworthy Changes¶
Common¶
osmo_io and io_uring¶
The most notable improvement of these releases is the addition of osmo_io
to libosmocore, as well as adjusting several components to use it (libosmocore, libosmogb ns2, libosmo-netif, libosmo-sigtran, libosmo-mgcp-client). osmo_io
is a new way of how we do I/O operation in Osmocom projects. It moves from a raw select/poll abstraction (where every application performs its own read/write once the fd becomes readble/writable) to a submission/completion model, where the actual I/O is performed by the library, an the application just submits write requests (as struct msgb
) and receives write-completion and read-completion call-backs.
Apart from having more code reuse and a cleaner split between application and I/O library, this has the added advantage that the underlying operating system I/O mechanism can be swapped out without touching each and every application. Specifically, we now have the following two back-ends implemented in libosmocore:
- POLL: classic osmo_fd based implementation using
poll(2)
(default)
- IO_URING: a backend using the Linux kernel
io_uring(7)
API (new)
The choice of back-end is done via setting the LIBOSMO_IO_BACKEND
environment variable. If you set it to IO_URING
when starting an Osmocom program, all sub-systems / interfaces ported over to the osmo_io API will make use of the io_uring(7)
API (via liburing).
The main advantage of io_uring is performance. Benchmarking has shown that a classic, poll-based production osmo-bsc loaded with 400 TRX is spending about 40% of its CPU cycles in the system call overhad (sock_poll, tcp_poll and do_sys_poll) and a lot of system call entry/exit in general, due to the many small read/write/recvmsg/sendmsg/recfrom/sendto and poll calls.
For more information, see:
Misc¶
- Systemd files have been updated to run services as
osmocom
user instead of root
- Uniform log format in default configs
- RPM spec files have been removed from almost all repositories (more)
- core: Add software UART implementation
- Add a GSM RLP decoder and encoder
- libosmosim: Support Microsoft smart card discovery process
- libosmosim: class_tables: improvements to GlobalPlatform
- isdn: initial implementation of the V.110 TA
- LAPD/LAPDm: Add support for RTS based polling
- Add TW-TS specific BSSMAP IEs and BTS feature flags
- Add the jhash implementation from the linux kernel
- Add a VTY command to generate FSM state graphs
- codec: make osmo_hr_check_sid() more efficient
- socket: new API osmo_sock_sctp_get_peer_addr_info(), reimplement osmo_sock_init2_multiaddr()
- GSUP: extend for osmo-epdg (new IE for PCO, new message type for CEAI interface)
- coding: fix artificial bit errors for PDTCH CS2 and CS3
- gsup: Convert PDP-Type IE to PDP-Address IE
- logging: fix nul octets in log output
- Lots of small fixes and improvements
- Add support for sending and receiving Sa bits, as well as some line signals
- Various TRAU <> RTP related fixes
- trau_rtp_conv: add support for HRv1 in 8k format
- TRAU->RTP: add support for TW-TS-001 & TW-TS-002
- Build config: add --disable-ortp option
- Logging improvements
- Support osmo_io
- stream: Add client-side (segmentation) support for IPA
- Several docs improvements
- Fix issue on truncated USB transfer
- Add option to reset receive buffer, when clock drifts too far away
- Support of setting and indication of Sa bits in time slot 0 of multi frames
- LOS/AIS/RAI/LOF are indicated and sent to client
- Fix of some memory leaks / double free
- Add support to configure CRC4 mode for TX/RX
- Fixes some issues at channelized mux process
Many minor and cosmetic fixes and improvements.
Most notable new changes are:
- Add 3k1_AUDIO and FAX_G3 bearer cap
- Force rate adaptation mode for CSD calls to V.110
- ASCI: Reject TERMINATION, if MS is not the originator
- Fix VTY setting for SGs counter
- Add section about the SGs interface
- Fix codec mapping for GSM-HR
- Various fixes on SDP parsing and codec matching
- GSUP: set default ipa-name at application level
- SMS-over-GSUP: set Source Name IE for all messages
- SMS-over-GSUP: set log context in gsm411_gsup_rx()
- Add LLC and HLC information forwarding to MNCC interface
- Never page for TMSI with 'no assign-tmsi'
- Various fixes to deb and rpm package contribution
- Add timer X36 for delaying LU connections
OsmoHLR (and libosmo-gsup-client)¶
- SMS over GSUP: implement forwarding of SMS
- ctrl: add subscriber.by-*.imsi GET-able variable
OsmoMGW (and libosmo-mgcp-client)¶
- ASCI: Add GSM-R support
- VTY and log: Also show local port for RTP conns
- mgcp_parse_audio_port_pt(): fix buffer overflow
- Improve err logging
- IuUP: Allow Initialization from any address if not yet set
- IuUP: Allow Initialization with set rem IP address and unset remote port
- mgcp-client: Transmit remote IP addr in CRCX if known and port=0
- Various fixes on codec handling
- Convert mgcp_client from osmo_wqueue to osmo_io
- Convert RTP/RTCP/OSMUX I/O from osmo_fd to osmo_io
- Do not fail MGCP on codec mismatch
- Remove unused transcoding process code
- ms: add demod test tool and data
- ms: various small improvements
- doc: Introduce documentation for osmo-trx-ipc and its IPC interface
- ASCI: Add GSM-R support
- Add GSMTAP encapsulation of RLP frames in CSD NT mode
- common: Add RTP related rate counters
- common: add support for TW-TS-001
- osmo-bts-{oc2g,lc15}: signal CBCH support to BSC
- oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES
- Transmit invalid AMR speech blocks instead of dummy FACCH
- pcuif_proto: signal BTS model via PCUIF
- Various small fixes and improvements for CSD and more
- Improve User Manual:
- List supported Gb dialects
- Add diagram with code architecte
- Fix potential memory leak
- Avoid resending TXT.ind (PCU version) over PCUIF
- ASCI: Add GSM-R support
- recover BORKEN lchans for missing ACK scenarios
- sccplite: Support multiple MGW in MGW pool
- add support for RTP extensions via TW-TS-003
- oml: ipacc: GPRS Cell attributes related improvements
- CTRL and VTY: various new commands and other improvements
- Many small fixes and improvements
- ASCI: Add GSM-R support
- manuals: add section about the SGs interface
- Various codec handling improvements
- CSD related fixes
- VTY improvements
- Many small fixes and improvements
OsmoSTP (and libosmo-sigtran)¶
- Introduced support for M3UA-over-TCP
- ipa,xua: New set of APIs to do TCP & SCTP I/O in OSMO_IO mode
- ipa: Use pseudo-random number for SLS in IPA->M3UA direction
- VTY: New "cs7 instance <0-15> asp NAME disconnect" command
- VTY: rename 'sctp-role' to 'transport-role' (old naming kept for compat but deprecated)
- Some minor logging improvements
- cbc-apitool: Make character set configurable
- SBcAP: Update as1nc skeleton and generated code
Compatibility note: OsmoHNBGW used to CRCX in loopback mode, to trigger a legacy IuUP hack. CRCX is no longer in loopback mode now, so older osmo-mgw may fail to respond to IuUP Initialization.
- Fix several asserts being hit aborting the process
- Fix potential use-after-free after FSM termination
- Increase default X31 val from 5 to 15 seconds
- VTY: New "timer hnbgw X35" command (Clean up all hNodeB persistent state after HNB disconnected for a while)
- Fix forwarding of CS RAB Assignment Request without RTP info
- Assume HNB's RTP IP address equals Iuh IP address when initially setting up MGW endpoint connection
- Support forwarding RTP IP address changes between HNB and MGW.
- Do not start MGW endpointer in loopback mode
- Improve some RUA ctx tear down scenarios
- Support per-HNB persistent static configuration in VTY
- New per-HNB rate_ctr/stats: uptime, rua/ranap/dtap messages, RAB act/deact/modify, CS RAB duration, paging attempts, release causes
- New per-HNB GTP-U traffic counters via nft
- Avoid forwarding paging requests to HNB's not yet registered
- Improved handling of HNBAP HNB-REGISTER-REQ errors and improved rejection.
- Fixes for 3-digit MNC
- Drop list of HNBAP UE Context
- Several logging improvements
- Several PFCP fixes/improvements:
- Wrong FAR ID was being modified
- Added VTY tests for PFCP
- Implement Tx of Network Instances IEs
libgtpnl¶
- Add IPv6 support
- New QEMU tests
- kernel-gtp: support IPv6
- libgtp: move includes to osmocom/include/gtp
- set state-dir to /var/lib/osmocom/osmo-ggsn
- Forward SDP between SIP and MNCC
- Use 'iuh/local-ip' as local IP for RTP sockets
- llsk: Add APIs to interact with llsk->link
- Close LLSK during shutdown procedure