libosmocore/src
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
..
codec Bump version: 0.11.0.91-9d4a3-dirty → 0.12.0 2018-07-27 17:31:47 +02:00
coding coding: Always initialize bit counters in gsm0503_pdtch_egprs_decode(). 2018-09-05 16:08:34 +03:00
ctrl ctrl: use #define for TRAP id 2018-12-03 21:42:51 +00:00
gb Work around bogus gcc-8.2 array-bounds warning/error 2019-01-22 14:53:54 +00:00
gsm GSUP: deprecate osmo_gsup_get_err_msg_type() 2019-02-04 10:42:12 +00:00
pseudotalloc Fix embedded (arm-none-eabi) builds 2018-06-28 10:30:34 +02:00
sim Bump version: 0.10.2.284-bc47-dirty → 0.11.0 2018-05-03 15:47:11 +02:00
vty add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
Makefile.am add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
application.c fix logging talloc ctx: add osmo_init_logging2() 2018-03-28 19:06:16 +02:00
backtrace.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
bitcomp.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
bits.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
bitvec.c Don't call abort() directly, always use osmo_panic() 2018-06-28 10:57:42 +02:00
conv.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
conv_acc.c conv_acc: Our code requires SSSE3, not just SSE3 2017-11-17 11:44:22 +01:00
conv_acc_generic.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
conv_acc_sse.c conv_acc: Our code requires SSSE3, not just SSE3 2017-11-17 11:44:22 +01:00
conv_acc_sse_avx.c conv_acc: Our code requires SSSE3, not just SSE3 2017-11-17 11:44:22 +01:00
conv_acc_sse_impl.h Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
counter.c counters: add osmo_counters_count() returns the amount of counters 2017-12-05 16:06:27 +01:00
crc16.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
crcXXgen.c.tpl Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
fsm.c add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
gsmtap_util.c gsmtap_util: make sure SO_REUSEADDR is applied for GSMTAP 2018-08-24 10:31:18 +00:00
isdnhdlc.c isdnhdlc: Port from kernel to userspace 2018-05-11 21:57:46 +02:00
logging.c Allow log_init() with NULL log_info 2018-12-06 15:52:28 +01:00
logging_gsmtap.c logging/gsmtap: fix buffer overflow in _gsmtap_raw_output() 2018-12-28 23:58:07 +01:00
logging_syslog.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
loggingrb.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
macaddr.c osmo_get_macaddr: Fix buffer read out of bounds 2018-04-18 08:57:56 +00:00
msgb.c msgb: fix debug print 2019-01-09 12:19:44 +00:00
msgfile.c memleak: osmo_config_list_parse: getline() needs free also on error 2017-11-18 10:30:57 +00:00
panic.c osmo_panic(): Annotate as __attribute__ ((noreturn)) 2018-06-29 20:32:57 +02:00
plugin.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
prbs.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
prim.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
rate_ctr.c rate_ctr: Improve logging 2018-07-21 08:22:57 +00:00
rbtree.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
select.c timerfd_create(): Fix error handling of osmo_fd_register() 2018-10-21 13:46:07 +02:00
sercomm.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
serial.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
signal.c signal: Introduce API osmo_signal_talloc_ctx_init 2018-08-16 21:03:32 +02:00
socket.c socket: add define for socket name length 2019-01-17 17:46:08 +01:00
stat_item.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
stats.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
stats_statsd.c stats_statsd: Send all stat_items as gauges 2018-10-24 16:37:05 +02:00
strrb.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
tdef.c add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
timer.c timer: fixup whitespace issues 2017-12-22 16:48:14 +01:00
timer_clockgettime.c Fix embedded (arm-none-eabi) builds 2018-06-28 10:30:34 +02:00
timer_gettimeofday.c timer: Document osmo_gettimeofday API 2018-03-01 12:33:03 +00:00
utils.c add osmo_hexdump_buf() and test 2019-01-28 23:58:53 +00:00
write_queue.c Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00