Commit Graph

3471 Commits

Author SHA1 Message Date
Neels Hofmeyr 6d744989e2 doc tweaks for osmo_float_str_to_int(), osmo_int_to_float_str*()
Drop nonexistent arg from api doc, fix "factor of a million", and explain a bit
more.

Change-Id: I131e839b6b7dd601b859313b358d346904c0e145
2020-10-09 19:23:34 +00:00
Vadim Yanitskiy a07f25e3ba gprs_ns2: make struct osmo_sockaddr pointers const
Using the 'const' qualifier allows the compiler to spot some
programming errors and further optimize the code.

Change-Id: I0df6a00ac1830bd64a10b9336b827e113fa772bb
2020-10-09 15:24:09 +00:00
Vadim Yanitskiy def5a407c1 socket: make the arguments of osmo_sockaddr_cmp() const
Change-Id: Ibfdfdd40c52709b32ac934974cc78ee821fa83ba
2020-10-09 15:22:49 +00:00
Harald Welte 36be9d890e gprs_ns2: Fix parsing of SNS-{ADD,DEL,CHANGE_WEIGHT}
Change-Id: I94c12986f8255e4373b13b1a8fae3df08004ad96
Related: OS#4791
2020-10-09 16:12:01 +02:00
Pau Espin aa83d4110b gprs_ns2_udp: Avoid dangling freed struct in list if binding fails
Change-Id: Ic54434b7cfc40136788257e768cae7a2b5d5bc79
2020-10-09 14:20:13 +02:00
Harald Welte cb11a60d25 osmo_float_str_to_int: When using strtoll(), use LLONG_{MAX,MIN}
When we use strtoll(), the return type is "long long" and we cannot
compare against LONG_MAX and LONG_MIN but must compare against LLONG_MAX
and LLONG_MIN.

Change-Id: I9c18ac237b4aacd56639d1faffa6841c8ad7b8da
Closes: OS#4787
2020-10-09 10:10:07 +02:00
Harald Welte f445150c57 bssmap_le/bsslap tests: We must use %td for ptrdiff_t printing
Otherwise we get (valid!) format string warnings like these on 32bit
targets:

[  372s] bssmap_le/bssmap_le_test.c: In function 'test_bssmap_le_enc_dec':
[  372s] bssmap_le/bssmap_le_test.c:141:15: warning: format '%ld' expects argument of type 'long int', but argument 2 has type 'int' [-Wformat=]
[  372s]     printf("[%ld] %s: ERROR: failed to encode pdu\n", (pdu - bssmap_le_test_pdus),
[  372s]                ^

Closes: OS#4786
Change-Id: Ib1c16b8adc5c8c0a2b418db51d12089f9b49a844
2020-10-09 09:55:53 +02:00
Philipp Maier a5218ea9b3 command: add library command attribute for libosmo-abis
Change-Id: I0efc57f2cb54798ba207ae6fef9af4771d96bfa9
Related: SYS#4937, OS#1601
2020-10-08 19:08:17 +02:00
Harald Welte bd771a9576 bssgp: Don't include RA-ID in BVC-RESET for BVCI=0 (signalling)
3GPP TS 48.018 is quite clear: The RA-ID must only be included
when a PTP-BVCI is being reset [and only if the sender is the BSS].

Before this patch, osmo-pcu is including the RA-ID in BVC-RESET
for BVCI=0.

Change-Id: Ie87820537d6d616da4fd4bbf73eab06e28fda5e1
2020-10-08 07:18:39 +00:00
Neels Hofmeyr 5b214e2847 add BSSMAP coding for Location Services
BSSMAP: add A-interface messages between MSC and BSC:
- Perform Location Request
- Perform Location Response
- Perform Location Abort

Change-Id: I4d7302a4853518916b6b425e710c10568eb2ffe5
2020-10-07 15:37:50 +02:00
Neels Hofmeyr 02de87bd5c add BSSMAP-LE coding for Location Services
BSSMAP-LE: add Lb-interface messages between BSC and SMLC:
- Reset
- Reset Acknowledge
- Perform Location Request, possibly containing BSSLAP TA Layer3
- Perform Location Response
- Perform Location Abort
- Connection Oriented Information containing any BSSLAP APDU

Add encoding and decoding tests.

Change-Id: I271e59b794bafc0a7ae0eabbf58918f6d7df431d
2020-10-07 15:37:50 +02:00
Neels Hofmeyr c6848f4145 add BSSLAP coding for Location Services
BSSLAP: there are APDUs transferred in BSSMAP-LE Connection Oriented
Information messages on Lb between BSC and SMLC.
Add BSSLAP coding for these APDU messages:
- TA Layer3
- TA Request
- TA Response, possibly containing Location Estimate coded in GAD
- Reject
- Reset (for intra-BSS handover during TA Request)
- Abort (for inter-BSS handover)

Add encoding and decoding tests.

Change-Id: I6409c4bcac402dc7626a3afce9081c59cd715fe8
2020-10-07 15:19:43 +02:00
Neels Hofmeyr 086bd33f18 add GAD coding for Location Services
GAD, Universal Geographical Area Description:
- raw coding for all GAD elements.
- SI-units encoding and decoding for Ellipsoid point with uncertainty circle,
  which I presume is the typical "at most N meters away from cell tower located
  at X,Y", which corresponds to the TA positioning currently being implemented.
- other SI-units GAD element encodings are so far not implemented.

Add encoding and decoding tests.

In gsm/protocol/gsm_23_032.h are the raw coding structs as defined in 3GPP TS
23.032.

In gsm/gad.h are structs carrying consistent units based on meters and degrees,
for convenient / less error prone handling of GAD data, and for human readable
representations of the GAD data.

The separation of the two is desirable because OsmoBSC will receive GAD data
from OsmoSMLC on the Lb interface, and pass on this data to the MSC via the A
interface. It is better to pass the GAD data as-is without de/encoding.

Change-Id: I7a9dd805a91b1ebb6353bde0cd169218acbf223c
2020-10-07 11:39:46 +00:00
Neels Hofmeyr 87c3afb5a9 add osmo_float_str_to_int() and osmo_int_to_float_str_*()
This will be useful to handle latitude and longitude numbers for GAD, which is
the location estimate representation used for LCS (Location Services).

The OsmoSMLC VTY user interface will provide floating-point strings like
"23.456" while GAD stores them as micro-degress 23456000. The osmo_gad_to_str*
will also convert latitude and longitude to floating-point string.

There was code review concerns against adding this API, upon which I tried to
use floating point string formats. But I encountered various problems with
accuracy and trailing zeros. For global positioning data (latitude and
longitude), even inaccuracy on the sixth significant decimal digit causes
noticeable positional shift. To achieve sufficient accuracy on the least
significant end, I need to use double instead of float. To remove trailing
zeros, the idea was to use '%.6g' format, but that can cause rounding. '%.6f'
on a double looks ok, but always includes trailing zeros. A test program shows:

 %.6g of ((double)(int32_t)23230100)/1e6 = "23.2301"     <-- good
 %.6g of ((double)(int32_t)42419993)/1e6 = "42.42"       <-- bad rounding
 %.6g of ((double)(int32_t)23230199)/1e6 = "23.2302"     <-- bad rounding

 %.6f of ((double)(int32_t)23230100)/1e6 = "23.230100"   <-- trailing zeros
 %.6f of ((double)(int32_t)42419993)/1e6 = "42.419993"   <-- good
 %.6f of ((double)(int32_t)23230199)/1e6 = "23.230199"   <-- good

It looks like when accepting that there will be trailing zeros, using double
with '%.6f' would work out, but in the end I am not certain enough that there
aren't more hidden rounding / precision glitches. Hence I decided to reinforce
the need to add this API: it is glitch free in sufficient precision for
latitude and longitude data, because it is based on integer arithmetic.

The need for this precision is particular to the (new) OsmoSMLC vty
configuration, where reading and writing back user config must not modify the
values the user entered. Considering to add these functions to osmo-smlc.git,
we might as well add them here to libosmocore utils, and also use them in
osmo_gad_to_str_*() functions.

Change-Id: Ib9aee749cd331712a4dcdadfb6a2dfa4c26da957
2020-10-07 11:39:46 +00:00
Alexander Couzens d745a0e7f3 gprs_ns2_vty_create: remove bind pointer check
The bind pointer can't be NULL because gprs_ns2_ip_bind()
is either return 0 and bind is valid or != 0 and returning.

Found-by: Coverity
Fixes: CID#214854
Change-Id: I11d86c9cb36226701e51942f14d7a6412c3eff26
2020-10-07 10:16:40 +00:00
Vadim Yanitskiy f1fc9d3af5 vty: fix vty_dump_element(): do not print empty <attributes>
Some attributes like CMD_ATTR_LIB_COMMAND are not being printed
to the XML VTY reference (despite being set), so we should not
print empty "<attributes scope='global'></attributes>".

Change-Id: Ie7e53b080c10564bfef6f0e8ddeb470e46fad387
Related: SYS#4937
2020-10-07 14:17:02 +07:00
Vadim Yanitskiy ef4c597b4a vty/command: restrict the use of '.', '!', and '@' as flags
Change-Id: Icb4acbab0a15de2b0ed7b88fb0e227675317146a
Related: SYS#4937
2020-10-07 14:17:02 +07:00
Vadim Yanitskiy 7e1a78fb03 vty/command: assign flags to CMD_ATTR_{IMMEDIATE,NODE_EXIT}
Change-Id: I77c1ef7ca4c667c769cc53c7ac65c3be5c7e1c86
Related: SYS#4937
2020-10-07 14:17:02 +07:00
Vadim Yanitskiy 9a28d3c599 tests/vty: verify 'show vty-attributes' / 'list' commands
Change-Id: I397cf642b323a9a99b2406aabaa67a7786dc2a50
Related: SYS#4937
2020-10-07 12:18:10 +07:00
Vadim Yanitskiy 75fec3a419 vty/command: print attribute flags in the output of 'list'
Here is an example:

  OsmoAPP(config-foo)# list with-flags
    ...  help
    ...  list
    ...  show running-config
    ...  exit
    ..F  lib-command foo (one|two|three)
    ZB.  lib-command bar [zoo]
    .bf  app-command foo-bar
    z..  app-command zoo .TEXT
    ...  app-command nope

A dot indicates that the associated attribute is not set.

Note that there is no strict relation between rows and index values
of the attributes.  In the example above there could be one or more
hidden flag rows corresponding to attributes that are not assigned
to any of the commands within 'config-foo' node.

If neither of the commands belonging to the current node (where
'list' command is executed) has attributes, the output would
not contain empty dot-rows.

Global attributes (such as CMD_ATTR_IMMEDIATE) are not yet displayed
because we still have not agreed on what kind of symbols to assign
them.  This will be implemented later.

Change-Id: I71cef3ec0fab44c7e11fc353b8bc42268a4ee8f0
Related: SYS#4937
2020-10-07 12:18:10 +07:00
Vadim Yanitskiy 44c4d17d40 vty/command: introduce a command to list attributes
Here is an example of listing all attributes:

  OsmoBSC# show vty-attributes
    Global attributes:
      .  This command is deprecated
      .  This command is hidden
      .  This command applies immediately
      .  This command applies on VTY node exit
    Library specific attributes:
      (no attributes)
    Application specific attributes:
      o  This command applies on A-bis OML link (re)establishment
      r  This command applies on A-bis RSL link (re)establishment

or only a specific kind of attributes:

  OsmoBSC# show vty-attributes application
    Application specific attributes:
      o  This command applies on A-bis OML link (re)establishment
      r  This command applies on A-bis RSL link (re)establishment

Change-Id: I561114d7416e30cc06b7d49c0bc1217a76039c99
Related: SYS#4937
2020-10-07 04:01:48 +07:00
Vadim Yanitskiy e566bddaff vty: introduce and use VTY_CMD_USR_ATTR_NUM
Change-Id: Ib4327835f5be264ef67a01d8f4733dd2d091eaf1
Related: SYS#4937
2020-10-06 21:01:08 +00:00
Philipp Maier 608b1a40ff command: add library command attribute for libosmo-sccp
Change-Id: I4439a414af05700cb1ccff7e7e5927ffc194d171
Related: SYS#4937, OS#1601
2020-10-06 16:42:58 +02:00
Vadim Yanitskiy c0745ebc28 vty/command: introduce API for the library specific attributes
See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.

Change-Id: I15184569635b3ef7dfe9eeddcc19bf16cc358f66
Related: SYS#4937
2020-10-06 00:22:26 +07:00
Vadim Yanitskiy 8e7c49649e vty: use install_lib_element() and install_lib_element_ve()
See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.

Change-Id: Ic541126ffd4975daf87199abfafb465e2055e44f
Related: SYS#4937
2020-10-06 00:22:22 +07:00
Vadim Yanitskiy 99d5c2d721 vty/command: add CMD_ATTR_LIB_COMMAND and install() API wrappers
This new attribute would allow to distinguish commands provided
by libraries from commands registered by the application itself,
so vty_dump_element() would print proper description for the
library specific attributes.

All VTY commands defined by the libraries need to use the new API:

  - install_lib_element(), and
  - install_lib_element_ve,

instead of the old functions (respectively):

  - install_element(), and
  - install_element_ve().

See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.

Change-Id: I8baf31ace93c536421893c2aa4e3d9d298dcbcc6
Related: SYS#4937
2020-10-06 00:22:06 +07:00
Vadim Yanitskiy ceb3b39440 vty/command: add global command attribute CMD_ATTR_NODE_EXIT
Change-Id: I56306f4886a72a3525b60225721aa2fcf7c57213
Related: SYS#4937
2020-10-06 00:20:37 +07:00
Vadim Yanitskiy f94355dc68 vty: check for reserved flags in application specific attributes
We agreed to reserve uppercase flag letters for libraries.

Change-Id: If0c332f7c86ff26a4060a14b947445d194a6702e
Related: SYS#4937
2020-10-06 00:14:18 +07:00
Alexander Couzens 22f34710d9 ns2: vty: on `show ns` add information of NS binds
Change-Id: I6cef42749555e577d5573f2ed8b8bce4cf842a98
2020-10-05 14:23:33 +00:00
Alexander Couzens 1fac6f7452 ns2: vty: allow the users (pcu/sgsn) to set a default bind
The SGSN will always bind to 0.0.0.0 in difference the PCU bind is depending
on the info indication. Allow to the user to define a default bind
address.

Change-Id: I2a9dcd14f4ad16211c0f6d98812ad4a13e910c2a
2020-10-05 14:23:33 +00:00
Vadim Yanitskiy 024e1957cc vty: check for duplicate flags in application specific attributes
This would facilitate detecting duplicates on early development stages.

Change-Id: I4e27d6e89d3f851b5ea4f00da01e7093afa537b2
Related: SYS#4937
2020-10-04 20:55:39 +00:00
Vadim Yanitskiy 68c2e7305a tests: do not ignore stderr of vty_test, also match it
This change is needed for I4e27d6e89d3f851b5ea4f00da01e7093afa537b2.

Change-Id: Ia601ecd2e69aeb6669e0e2e5dd60135a751611e7
2020-10-04 20:55:39 +00:00
Alexander Couzens a3373e3394 ns2: vty: show all nse
Don't stop after dumping the first nse

Change-Id: I0ca1807692854b23b77ca9042768529df3f80289
2020-10-03 07:19:59 +00:00
Alexander Couzens da0a285612 ns2: status ind: add additional flags (first and persistent)
Both flags are required to allow the NS user to sent BVC RESET for persistent NSE.
On persistent NSE with persistent NS alive configuration (no RESET/UNBLOCK/BLOCK) the
PCU can't detect if the SGSN has restartet or crashed.

Change-Id: Iaad7b53d44338e5dd81dc2202f23bdcb715af804
2020-10-03 07:19:48 +00:00
Alexander Couzens bf95f0fb2e ns2: refactor ns2_prim_status_ind()
Replace parameters nsi + nsei with a single nse pointer.

Change-Id: I35f6381110ba7ba1e013f21120e971362bdff55b
2020-10-03 07:17:54 +00:00
Alexander Couzens 477ffb0e72 ns2: parse the return code of gprs_ns2_ip_bind
Fixes a crash when the bind fails.

Change-Id: I96c8e871a350f8f7b9ba2450bb37b90b535f42e2
2020-10-01 19:33:00 +02:00
Neels Hofmeyr 6b5f1de06d osmo_use_count_to_str: make robust against unused use_count
A use_count struct gets properly initialized once the first use count is added.
Normally, this happens directly at object allocation. Still make sure
osmo_use_count_to_str_*() don't crash on a yet unused struct use_count.

Change-Id: I47b1acc7f13f2557c78e2cbe67d4690709ce795e
2020-09-30 18:48:12 +00:00
Alexander Couzens e9069ebfec gsm_12_21: add osmo_oml_nsvc_address_type for OML NM_ATT_OSMO_NS_LINK_CFG
The NM_ATT_OSMO_NS_LINK_CFG is used for NSVC configuration of osmocom based BTS to support
IPv6 NSVCs.

Change-Id: I9e279bb20940c66eea5196f281184cb4f8a5cc5f
2020-09-30 11:59:28 +00:00
Harald Welte a8b1b2175c logging: Introduce MAX_LOG_SIZE for the magic number 4096
Change-Id: Ia9645098dffecd29242857de8f1aea6b9aca5918
2020-09-29 19:06:22 +02:00
Harald Welte e4d9a2c5eb logging_vty: set osmo_stderr_target to NULL on "no log stderr"
We cannot keep a reference to the old log_target around if we
just destroyed/deleted it.

Change-Id: I98a801cf83347a4422534d020d5ed5e2d1eb5482
2020-09-29 16:58:22 +00:00
Harald Welte c433889bba write_queue: Re-enqueue msgb if write_cb returns -EAGAIN
By adding this functionality, the write_cb() handler can "un-dequeue"
the msgb in case of some error.  The msgb might have been modified
meanwhile, e.g. due to a partial write already pulling some data off
the head of the msgb.

Change-Id: I97bb0d64ec991adf5dd0b3708e0c7cf029e03b5f
2020-09-29 16:58:11 +00:00
Harald Welte f44937834f write_queue: use msgb_{en,de}queue_count()
The write_queue.c implemetation predates the msgb_*queue_count()
functions for maintaining a count alongside witha msgb queue. Let's
migrate over to those implementations.

Change-Id: I0ebd42a50f239dd7e9f663ce4c42824a5c1b3ce7
2020-09-29 16:30:56 +00:00
Harald Welte 66138ccab5 write_queue: Add osmo_wqueue_enqueue_quiet()
Same as osmo_wqueue_enqueue() but without logging queue overruns.

Change-Id: Ic082eb39795b08631284eeb421fef3c28f2e90dc
2020-09-29 16:30:56 +00:00
Vadim Yanitskiy 7f6c87da2f vty/command: reflect global attributes in the XML reference
Given that commands with either/both of the following attributes:

  - CMD_ATTR_DEPRECATED,
  - CMD_ATTR_HIDDEN,

never end up in the XML reference, only CMD_ATTR_IMMEDIATE would
be reflected for commands taking effect immediately as follows:

  <command id='foo'>
    <!-- Global attributes -->
    <attributes scope='global'>
      <attribute doc='This command applies immediately' />
    </attributes>

    <!-- Application specific attributes -->
    <attributes scope='application'>
      <!-- ... -->
    </attributes>

    <params>
      <!-- ... -->
    </params>
  </command>

Change-Id: I8476c1163c23a9a52641987acf3df0b8c49d8f7b
Related: SYS#4937
2020-09-28 13:03:52 +07:00
Vadim Yanitskiy 4a96b7c7b9 vty/command: introduce new attribute CMD_ATTR_IMMEDIATE
This attribute indicates that a VTY command applies immediately.

Change-Id: Ia185dfd0c89214dc893af70736ff01dca3a7627e
Related: SYS#4937
2020-09-28 12:44:33 +07:00
Pau Espin 470cc12447 cosmetic: Fix typo in API doc
Change-Id: I2c8f61768f96eda8d9f3e9b867a7e9625f4f6078
2020-09-27 12:58:23 +02:00
Alexander Couzens 772ca6195e ns2: fix a msg leak when receiving REJECTED messages
Change-Id: I7edc53c29c3dd09c395a275ceb8648b8eb19c06c
2020-09-26 19:58:50 +00:00
Daniel Willmann 4fb27a80d2 gprs_ns2: Make reason const
Change-Id: Ia0db18703d9fd137a5c5fe4474e2d76868a9af9d
2020-09-25 15:39:46 +02:00
Alexander Couzens 1301012837 ns2: refactor handle_nsip_read/handle_nsfrgre_read
Might be more readable.

Change-Id: Ib2dbcae55a8c7a973cfa1123784f509708de7f3b
2020-09-25 09:46:31 +00:00
Alexander Couzens 1f0625f214 ns2: vty: fix behavior of vtyvc_by_nsei when vtyvc isn't found
Fixes the parsing of persistent nsvcs.

Change-Id: I297409f557f17df680ac76018b4202eb99713021
2020-09-25 09:45:24 +00:00