Common library for all Osmocom projects (libosmocore, libosmogsm, libosmovty, libosmogb, libosmosim, libosmousb, ...) https://osmocom.org/projects/libosmocore
Go to file
Neels Hofmeyr 0fd615fd7b add osmo_tdef API, originally adopted from osmo-bsc T_def
Move T_def from osmo-bsc to libosmocore as osmo_tdef. Adjust naming to be more
consistent. Upgrade to first class API:
- add timer grouping
- add generic vty support
- add mising API doc
- add C test
- add VTY transcript tests, also as examples for using the API

From osmo_fsm_inst_state_chg() API doc, cross reference to osmo_tdef API.

The root reason for moving to libosmocore is that I want to use the
mgw_endpoint_fsm in osmo-msc for inter-MSC handover, and hence want to move the
FSM to libosmo-mgcp-client. This FSM uses the T_def from osmo-bsc. Though the
mgw_endpoint_fsm's use of T_def is minimal, I intend to use the osmo_tdef API
in osmo-msc (and probably elsewhere) as well. libosmocore is the most sensible
place for this.

osmo_tdef provides:

- a list of Tnnnn (GSM) timers with description, unit and default value.
- vty UI to allow users to configure non-default timeouts.
- API to tie T timers to osmo_fsm states and set them on state transitions.

- a few standard units (minute, second, millisecond) as well as a custom unit
  (which relies on the timer's human readable description to indicate the
  meaning of the value).
- conversion for standard units: for example, some GSM timers are defined in
  minutes, while our FSM definitions need timeouts in seconds. Conversion is
  for convenience only and can be easily avoided via the custom unit.

By keeping separate osmo_tdef arrays, several groups of timers can be kept
separately. The VTY tests in tests/tdef/ showcase different schemes:

- tests/vty/tdef_vty_test_config_root.c:
  Keep several timer definitions in separately named groups: showcase the
  osmo_tdef_vty_groups*() API. Each timer group exists exactly once.

- tests/vty/tdef_vty_test_config_subnode.c:
  Keep a single list of timers without separate grouping.
  Put this list on a specific subnode below the CONFIG_NODE.
  There could be several separate subnodes with timers like this, i.e.
  continuing from this example, sets timers could be separated by placing
  timers in specific config subnodes instead of using the global group name.

- tests/vty/tdef_vty_test_dynamic.c:
  Dynamically allocate timer definitions per each new created object.
  Thus there can be an arbitrary number of independent timer definitions, one
  per allocated object.

T_def was introduced during the recent osmo-bsc refactoring for inter-BSC
handover, and has proven useful:

- without osmo_tdef, each invocation of osmo_fsm_inst_state_chg() needs to be
  programmed with the right timeout value, for all code paths that invoke this
  state change. It is a likely source of errors to get one of them wrong.  By
  defining a T timer exactly for an FSM state, the caller can merely invoke the
  state change and trust on the original state definition to apply the correct
  timeout.

- it is helpful to have a standardized config file UI to provide user
  configurable timeouts, instead of inventing new VTY commands for each
  separate application of T timer numbers.

Change-Id: Ibd6b1ed7f1bd6e1f2e0fde53352055a4468f23e5
2019-02-04 18:52:16 +01:00
contrib jenkins distcheck: enable external tests 2019-01-29 01:03:25 +01:00
debian Bump version: 1.0.0 → 1.0.1 2019-01-21 17:40:34 +00:00
doc merge_doc.xsl: move to osmo-gsm-manuals.git 2018-11-12 14:07:05 +01:00
include add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
m4 conv_acc: Our code requires SSSE3, not just SSE3 2017-11-17 11:44:22 +01:00
src add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
tests add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
utils gsm: Deprecate buggy gsm_arfcn2band API and introduce gsm_arfcn2band_rc 2018-11-20 16:56:28 +00:00
.gitignore Revert "osmo-config-merge: Add manual page" 2018-09-29 01:43:14 +02:00
.gitreview add .gitreview 2016-05-19 06:39:13 +00:00
.mailmap Add .mailmap file for mapping mail addresses in shortlog 2016-08-08 13:12:17 +02:00
COPYING add GPL to project source 2010-02-21 09:21:30 +01:00
Doxyfile.codec.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.coding.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.core.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.ctrl.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.gb.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.gsm.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Doxyfile.vty.in doxygen: enable cross referencing everywhere 2019-02-04 16:43:57 +00:00
Makefile.am doxygen: allow manual 'make apidoc' even if --disable-doxygen 2019-02-04 16:43:57 +00:00
README.md README.md: Make sure all hyperlinks use <> 2017-03-17 21:31:42 +01:00
TODO-RELEASE Bump version: 0.12.0.128-8dfde → 1.0.0 2019-01-19 22:07:56 +01:00
configure.ac configure.ac: check clock_gettime for glib < 2.17 2018-12-03 13:52:29 +00:00
git-version-gen add git-version-gen magic to automatically generate package version 2010-03-23 00:30:19 +08:00
libosmocodec.pc.in codec: Add the missing bits for include to install and pkgconfig to work 2010-10-24 18:23:10 +02:00
libosmocoding.pc.in libosmocoding: migrate transcoding routines from OsmoBTS 2017-03-07 01:06:38 +07:00
libosmocore.pc.in talloc: Untested change to unbreak build 2015-12-10 19:50:29 +01:00
libosmoctrl.pc.in remove our internal copy of talloc, use system libtalloc 2015-12-05 23:38:18 +01:00
libosmogb.pc.in remove our internal copy of talloc, use system libtalloc 2015-12-05 23:38:18 +01:00
libosmogsm.pc.in remove our internal copy of talloc, use system libtalloc 2015-12-05 23:38:18 +01:00
libosmosim.pc.in remove our internal copy of talloc, use system libtalloc 2015-12-05 23:38:18 +01:00
libosmovty.pc.in remove our internal copy of talloc, use system libtalloc 2015-12-05 23:38:18 +01:00
osmo-release.mk Fixup severe build performance issues 2017-10-04 16:26:37 +02:00
osmo-release.sh osmo-release.sh: Add checks to help avoid libversion debian major mismatch 2018-08-30 14:07:11 +02:00

README.md

libosmocore - set of Osmocom core libraries

This repository contains a set of C-language libraries that form the core infrastructure of many Osmocom Open Source Mobile Communications projects.

Historically, a lot of this code was developed as part of the OpenBSC project, but which are of a more generic nature and thus useful to (at least) other programs that we develop in the sphere of Free Software / Open Source mobile communications.

There is no clear scope of it. We simply move all shared code between the various Osmocom projects in this library to avoid code duplication.

The libosmcoore.git repository build multiple libraries:

  • libosmocore contains some general-purpose functions like select-loop abstraction, message buffers, timers, linked lists
  • libosmovty contains routines related to the interactive command-line interface called VTY
  • libosmogsm contains definitions and helper code related to GSM protocols
  • libosmoctrl contains a shared implementation of the Osmocom control interface
  • libosmogb contains an implementation of the Gb interface with its NS/BSSGP protocols
  • libosmocodec contains an implementation of GSM voice codecs
  • libosmocoding contains an implementation of GSM channel coding
  • libosmosim contains infrastructure to interface SIM/UICC/USIM cards
  • libosmotrau contains encoding/decoding functions for A-bis TRAU frames

Homepage

The official homepage of the project is https://osmocom.org/projects/libosmocore/wiki/Libosmocore

GIT Repository

You can clone from the official libosmocore.git repository using

git clone git://git.osmocom.org/libosmocore.git

There is a cgit interface at http://git.osmocom.org/libosmocore/

Documentation

Doxygen-generated API documentation is generated during the build process, but also available online for each of the sub-libraries at http://ftp.osmocom.org/api/latest/libosmocore/

Mailing List

Discussions related to libosmocore are happening on the openbsc@lists.osmocom.org mailing list, please see https://lists.osmocom.org/mailman/listinfo/openbsc for subscription options and the list archive.

Please observe the Osmocom Mailing List Rules when posting.

Contributing

Our coding standards are described at https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards

We us a gerrit based patch submission/review process for managing contributions. Please see https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit for more details

The current patch queue for libosmocore can be seen at https://gerrit.osmocom.org/#/q/project:libosmocore+status:open