Commit Graph

4478 Commits

Author SHA1 Message Date
Neels Hofmeyr d2d44883ac fix gsm0808_sc_cfg <-> gsm48_mr_cfg conversion
Deprecate
 gsm0808_sc_cfg_from_gsm48_mr_cfg() and
 gsm48_mr_cfg_from_gsm0808_sc_cfg(),
and add new functions
 gsm0808_sc_cfg_from_amr_modes() and
 gsm0808_sc_cfg_get_best_amr_modes()
to fix the behavior as follows:

When the mr_cfg enables a specific rate, do not include all AMR
configurations that feature this rate. Instead, enable only those
configurations that are a subset of the mr_cfg.
For example, in the old functions, setting only m4_75 = 1 would result
in enabling all of S0, S8, S9, S10, S12, S14. S14 would allow all of
4.75k, 5.9k, 7.95k, 12.2k, instead of limiting to 4.75k only.

In the new functions, do not modify the .version and .icmi members, act
only on the AMR rates.

Changes from old behavior to new behavior is clearly shown in
tests/gsm0808/gsm0808_test.ok.

Keep the deprecated functions unchanged, yielding incorrect behavior,
and let the API users decide when and how to upgrade to the more sane
behavior.
For example, changing the behavior of existing functions in-place would
have repercussions on osmo-bsc installations, where now only those AMR
modes listed in the config would be used -- we are becoming stricter.
Possibly this would deteriorate or break sites alone from upgrading
libosmocore -- i.e. those sites that fail to list an essential AMR rate
for matching with peers, but where that essential AMR rate was
erratically allowed by the old behavior.

The old behavior, by example of osmo-bsc:
- Picking rates in osmo-bsc.cfg has non-obvious effects, often
  including rates that are configured as 'forbidden'.
- If any of 4.75, 5.90, 7.40, 12.2 is enabled in osmo-bsc.cfg, the
  configuration S1 ends up enabled in s15_s0
  (gsm0808_sc_cfg_from_gsm48_mr_cfg()).
- In gsm48_mr_cfg_from_gsm0808_sc_cfg() used during channel activation,
  if S1 is present, the four rates from S1 are returned.
- In summary, in the vast majority of cases, the S1 set will be used --
  even if only one of its AMR rates is originally present in mr_cfg.
- Configurations above S7 are ignored.

The new behavior, assuming osmo-bsc moved to the more sane
implementation introduced in this patch:
- Only one of the rate combinations defined by S0..S15 is going to be
  used.
  This is mainly because AMR rate selections are sent to the MSC and
  back from the MSC in the somewhat limited S0..S15 bit form.
  Enabling one or more of these combinations of rates in osmo-bsc.cfg
  makes sense:
  - 4.75, 5.90, 7.40, 12.2 (S1)
  - 4.75, 5.90 (S8)
  - 4.75, 5.90, 6.70 (S9)
  - 4.75, 5.90, 6.70, 7.40 (S10)
  - 4.75, 5.90, 6.70, 10.2 (S12)
  - 4.75, 5.90, 7.95, 12.2 (S14)
- e.g. if only 4.75 is enabled, only 4.75 is used (S0).
- e.g. in case of 6.70=allowed + 7.75=allowed + 10.2=allowed,
  we have to choose between "only 6.70", "only 7.75", "only 10.2".
  On FR we'd pick S6 = "only 10.2", because it is the highest rate.
  So osmo-bsc.cfg should rather choose rates exactly matching a specific
  Sn bit, e.g. all rates of S12, to obtain a flexible variety of AMR
  rates.

3GPP TS 48.008 3.2.2.103 'Speech Codec List' says to this:

 NOTE: One of these Codec Configurations, "Config-NB-Code 1" = S1, is
 recommended for TrFO [Transcoder Free Operation].

S14 also seems a good choice, it is like S1 but with 7k95 instead of
7k40; 7k95 is the highest possible AMR-HR rate. It is not clear at this
point why S1 seems to be preferred over S14.

Ironically, the old behavior would usually end up selecting exactly S1
in almost every case, which is what 3GPP TS 48.008 3.2.2.103 recommends.
This is, however, not obvious to the caller / the site admin.

Related: SYS#5066
Change-Id: I900fda192742fa8f6dd54e9131ef1704b14cc41a
2023-03-09 04:08:58 +01:00
Harald Welte a41bd22349 gsm_08_58: Document IPAC RTP CSD modes in at least a few words
Let's clarify what those modes mean

Change-Id: I77fc7b24ccd387f54a7c7edad666737252af6bd9
2023-03-08 20:43:15 +01:00
Harald Welte c4cfb802df gsm: TS 44.021 modified V.110 frame encoding/decoding support
3GPP TS 44.021 specifies the format for modified V.110 frames as used
on the GSM air (radio) interface.  Implement encoders and decoders for
this modified V.110 format.

Related: OS#1572
Change-Id: I60a2f2690459359437df20cf4da9043fa7c3ad11
2023-03-08 20:43:15 +01:00
Harald Welte 065dab866e isdn: Add V.110 encoder/decoder
V.110 defines a B-channel protocol for transmission of synchronous and
asynchronous serial data of V-series interfaces via terminal adapters
over ISDN.

Let's add (unoptimized but easy to debug) functions for encoding and
decoding of V.110 frames for various bit-rates.

Related: OS#1572
Change-Id: I1b5fd3847d3bfb0a0f763e0574893962ec699680
2023-03-08 20:43:15 +01:00
Eric Wild 8c505c12b2 logging: remove log_initialized(void)
This function does not exist, and was apparently accidentally added (?)
to the header.

Change-Id: I479ef8484506ff27918df9fbf6cbeda8b304bbaa
2023-03-07 14:27:59 +01:00
Eric Wild 573f2fa1b3 fix _thread order
As per gnu extension doc ->
https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Thread-Local.html :
".. When used with extern or static, __thread must appear immediately
after the other storage class specifier."

Change-Id: Ied1d3cf3ad2ff424bd0a2682aff29a8939b419b8
2023-03-07 14:27:59 +01:00
Vadim Yanitskiy c657a5028e gsm0502: add burst length definitions from chapter 5.2
Change-Id: I1c38ccc2b64ba9046bb3b1221d99cc55ec493802
Related: OS#1572
2023-03-07 13:25:36 +00:00
Harald Welte c9527763c2 Makefile.am: Make libraries depend on .map files
Without this, an update to the .map file doesn't re-trigger a re-link of
the library.

Change-Id: If0ea6f41730a28b04562d45efa6ca376abaf3f6b
2023-03-06 17:07:48 +00:00
Pau Espin 3e5609ade6 gsm: gsm_gsmtime2fn(): constify param
Change-Id: Ib29d5a8e7dcf50fb086f967857b0afa076573163
2023-03-06 13:59:40 +01:00
Harald Welte d4d78bce7b libosmocore.map: Add two missing entries for gsmtap*2() API
Those functions were introduced in I51b3604ba79e42c474aa17007e7e308a12afcea8
but the recent introduction of libosmocore.map didn't list them

Change-Id: I4ac14aae13ff60c110444da989761cd1e86f8925
Fixes: I13169c00a59fb59513dfc598de5a71d094492422
2023-03-05 18:25:07 +01:00
Oliver Smith 1447100476 gsm0808: make CSD enum values consistent with RSL
Use the same 32k0, 29k0, 14k4, … notation for GSM0808_DATA_RATE, as
it is already used in RSL_CMOD_CSD. As GSM0808_DATA_RATE enumes were
just added to libosmocore and aren't used yet, don't add backwards
compatible defines.

Related: OS#4393
Change-Id: Ia965cdd9f53af756e5ffaff9b8f389b5ad629969
2023-03-03 11:14:06 +01:00
Oliver Smith 341d9e1c6b rsl: RSL_CMOD_CSD_T: make enum values consistent
Use the 32k0, 29k0, 14k4, … notation instead of 32000, 29000, 14400 etc
to make transparent data enums with non-transparent data enums where
this notation is already used.

Related: OS#4393
Change-Id: I7b7c8f175f349811b17a3db68a57577bd3f1d2df
2023-03-03 11:14:06 +01:00
Oliver Smith 9d92c6e52f rsl: put values for Channel Mode into enums
Related: OS#4393
Change-Id: I25bfd02aa1428a35492b20376a31635a442e545f
2023-03-03 10:13:45 +00:00
Daniel Willmann 45ae1c5400 Add osmo_sockaddr_size() to return the size of the variant used
Change-Id: I952b6bb752441fe019fc18f89bce4bbfbe58994a
2023-03-02 09:47:41 +00:00
Neels Hofmeyr f2c0fccb58 improve test output for gsm0808_sc_cfg_from_gsm48_mr_cfg()
Improve the test output to make it easier to confirm that the fix in an
upcoming patch (I900fda192742fa8f6dd54e9131ef1704b14cc41a) is indeed
correct.

Spell out each S0-S15 mode along with the bitmask.
Rejigger the format of printing the mr_cfg flags, so that the AMR modes
line up vertically with the S0-S15 modes.

This clearly shows that the mr_cfg <-> s15_s0 conversion is wrong.
For example, in this test only 4k75 is enabled, yet we allow configs
featuring 6 other rates:

 Input:
  cfg.smod=0 spare=0 icmi=0 nscb=0 ver=0
      m4_75=1 ------- ------- ------- ------- ------- ------- -------
 Result (fr):
  S15-S0 = 0x5701 = 0b0101011100000001
  S0   4.75
  S8   4.75            5.90
  S9   4.75            5.90    6.70
  S10  4.75            5.90    6.70    7.40
  S12  4.75            5.90    6.70                    10.2
  S14  4.75            5.90                    7.95            12.2
 Result (hr):
  S15-S0 = 0x0701 = 0b0000011100000001
  S0   4.75
  S8   4.75            5.90
  S9   4.75            5.90    6.70
  S10  4.75            5.90    6.70    7.40

In this test, an s15_s0 featuring a configuration with 6k70 allowed does
not result in m6_70 == 1:

 Input:
  S15-S0 = 0x0c12 = 0b0000110000010010
  S1   4.75            5.90            7.40                    12.2
  S4                                   7.40
  S10  4.75            5.90    6.70    7.40
  S11  4.75            5.90    6.70    7.40
 Output:
  cfg.smod=0 spare=0 icmi=1 nscb=0 ver=1
      m4_75=1 ------- m5_90=1 ------- m7_40=1 ------- ------- m12_2=1

Almost every conversion contains errors like this.

Related: I900fda192742fa8f6dd54e9131ef1704b14cc41a
Change-Id: Iec7c491d9fadd37d9e43fbaac8e709c2029f8a8e
2023-02-28 23:00:45 +00:00
Neels Hofmeyr 593d20d637 add gsm0808_amr_modes_from_cfg
Provide the definitions from 3GPP TS 28.062, Table 7.11.3.1.3-2 as
generally usable API.

Likely users:
- upcoming patch to improve conversion between S0-S15 and MultiRate
  config, I900fda192742fa8f6dd54e9131ef1704b14cc41a
- osmo-msc to figure out conversion between SDP AMR mode-set and 3GPP TS
  48.008 Permitted Speech S0-S15.
- osmo-bsc to choose AMR modes for channel activation from cfg /
  permitted speech from MSC.

Related: SYS#5066
Change-Id: Icef7dd626d3d4641c66b8dd87e2047fc0ab547d1
2023-02-28 23:00:45 +00:00
Vadim Yanitskiy 64277a0217 doxygen: fix various typos in commands \param and \returns
Change-Id: If87cec3739449c6a54e24fb2cb81e746d8244da2
2023-02-28 18:48:56 +00:00
Vadim Yanitskiy 2a0b121f48 doxygen: remove documentation for non-existent params
Change-Id: I8b1be37c8fdaa824637d306bdb40a3b78616f614
2023-02-28 18:48:56 +00:00
Vadim Yanitskiy ed501d3172 contrib/struct_endianness.py: simplify file extension check
Change-Id: Iaf7194fdfc3772973f9a9c806d375a9a56ff57c8
2023-02-28 18:48:56 +00:00
Oliver Smith 5566b2ea65 libosmocore.map: add tall_{ctr/msgb}_ctx
These should not be used, but add them for backwards compatibility with
building older versions of osmo-bsc, osmo-iuh, osmo-pcap against current
libosmocore.

Fixes: 213fc420 ("Add libosmocore.map")
Change-Id: I4cfccf3622844d0923818bb8d8ce206f70e44a0d
2023-02-28 11:33:10 +01:00
Max edb5f3374f GSMTAP: add missing parameter docstrings
Change-Id: I774b89e0358bdcf7c71c7fd9c9940f634a7d3822
2023-02-28 09:00:47 +00:00
Daniel Willmann 213fc420e0 Add libosmocore.map
Generated with:
nm src/core/.libs/libosmocore.so --defined-only  |grep " T \| D \| B " | cut -c 20-  >> src/core/libosmocore.map

Change-Id: I13169c00a59fb59513dfc598de5a71d094492422
2023-02-27 17:11:08 +00:00
Oliver Smith 57d4fae832 gsm0808_enc/dec_channel_type: fix transparent flag
According to 3GPP TS 48.008 3.2.2.11, it is inverted.

0: Transparent service
1: Non-transparent service

Change-Id: I2e5786ad053ee871079b4a8d95caccd6b03b59b6
2023-02-27 13:49:34 +00:00
Harald Welte 6345333fb1 Interleaving for CSD
This patch adds the [de]interleaving for CSD (circuit switched data),
nominally for TCH/F 9.6, but the same is also used for TCH/F 4.8,
TCH/H 4.8, TCH/F 2.4 and TCH/F 14.4.

Related: OS#4396, OS#1572
Change-Id: I6b16c2d0d7febf3883da662b2c7fec543335de12
2023-02-27 13:34:43 +00:00
Vadim Yanitskiy 94e0af0a6d doxygen: also generate documentation for libosmo{sim,usb}
We do have API documentation for all libraries, excepte these two.

Change-Id: I2ec5803bc219b9ceaf0d52d41a03ab78f580e689
2023-02-27 11:14:40 +00:00
Vadim Yanitskiy 85e24a6410 debian/control: fix typo
Change-Id: Ia9f99016dcf2a9584b59a253d19f391e8f5e5abb
2023-02-27 11:14:40 +00:00
Vadim Yanitskiy dbd61f077f debian/control: make libosmocore-doc depend on libosmo{ctrl,gb}-doc
Change-Id: Icd84afcd035bdca9aabb4ea2b91c1227c4786da7
2023-02-27 11:14:40 +00:00
Vadim Yanitskiy 7184511754 gsm: use OSMO_ASSERT() in osmo_iuup_msgb_alloc_c()
This patch is a preparation for the upcoming change making use of
the built-in static_assert(), which is available since C11.

When using built-in static_assert(), gcc v12.2.1 fails:

iuup.c: In function 'osmo_iuup_msgb_alloc_c':
iuup.c:194:33: error: expression in static assertion is not constant
  194 |         osmo_static_assert(size > IUUP_MSGB_HEADROOM_MIN_REQUIRED, iuup_msgb_alloc_headroom_bigger);
../../include/osmocom/core/utils.h:86:24: note: in definition of macro 'osmo_static_assert'
   86 |         static_assert((exp), "(" #exp ") failed")
      |                        ^~~

This one is not really a *static* assert(), because it operates on the
user supplied argument 'size', which is not guaranteed to be an integer
literal.  Neither it triggers a compilation failure as expected, nor
does it abort at run-time.  It simply does nothing.

Change-Id: I53db679728250e0c60ed277efb18142073ffe9c4
2023-02-27 09:58:46 +00:00
Vadim Yanitskiy 22ade291ad msgb: use OSMO_ASSERT in msgb_alloc_headroom[_c]()
This patch is a preparation for the upcoming change making use of
the built-in static_assert(), which is available since C11.

When using built-in static_assert(), gcc v12.2.1 fails:

include/osmocom/core/msgb.h: In function 'msgb_alloc_headroom_c':
include/osmocom/core/msgb.h:532:33: error: expression in static assertion is not constant
  532 |         osmo_static_assert(size >= headroom, headroom_bigger);
include/osmocom/core/utils.h:86:24: note: in definition of macro 'osmo_static_assert'
   86 |         static_assert((exp), "(" #exp ") failed")
      |                        ^~~
include/osmocom/core/msgb.h: In function 'msgb_alloc_headroom':
include/osmocom/core/msgb.h:554:33: error: expression in static assertion is not constant
  554 |         osmo_static_assert(size >= headroom, headroom_bigger);
include/osmocom/core/utils.h:86:24: note: in definition of macro 'osmo_static_assert'
   86 |         static_assert((exp), "(" #exp ") failed")
      |                        ^~~

These are not really *static* assert()s, because they operate on the
user supplied arguments 'size' and 'headroom', which are not guaranteed
to be integer literals.  Neither they trigger compilation failures
as expected, nor do they abort at run-time.  They simply do nothing.

Change-Id: I17ef4f3283ce20a5b452b7874c826acfb02a0123
2023-02-27 09:58:46 +00:00
Harald Welte 65e0edc73f convolutional coding for CSD
This patch adds the convolutional code definitions for CSD (circuit
switched data) on TCH/F channels with user bit rates of 2400, 4800, 9600
and 14400 bps.

Related: OS#4396, OS#1572
Change-Id: I412131d7ee2e676402bf8d88394af17c4447b664
2023-02-25 19:37:44 +01:00
Vadim Yanitskiy 7b9b3074a2 gsm/{bsslap,bssmap_le}: zero-initialize structs using memset()
In the unit tests we're using memcmp() to compare decoding results
against the expected results.  This is a reasonable approach, but
there is a pitfall: not only the struct fields are compared, but
also the padding bytes preceding/following them.

When using gcc's extension zero-initializer {} or even the standard
approved { 0 } zero-initializer, padding bytes are not guaranteed
to be zeroed.  Even worse, according to [1], the init behavior is
inconsistent between gcc and clang and optimization levels.

All decoding functions in {bsslap,bssmap_le}.c currently use gcc's
extension zero-initializer {}.  This is not a problem when building
with CC=gcc, but with CC=clang the bssmap_le_test fails due to
mismatch of padding bytes in struct lcs_cause_ie:

  [4] PERFORM LOCATION RESPONSE: ERROR: decoded PDU != encoded PDU
  [5] PERFORM LOCATION RESPONSE: ERROR: decoded PDU != encoded PDU
  [6] PERFORM LOCATION ABORT: ERROR: decoded PDU != encoded PDU

Out of the known struct initialization methods, only the memset()
has consistent behavior and sets all bytes to zero, including the
padding ones.  Using it fixes the bssmap_le_test for CC=clang.

[1] https://interrupt.memfault.com/blog/c-struct-padding-initialization

Change-Id: Ib16964b16eb04315efc416164ed46c15b5dc7254
Fixes: OS#5923
2023-02-25 08:15:11 +00:00
Philipp Maier 6b69b554f7 i460_mux: add define constant for maximum number of subchannels
Lets get rid of the magic number in struct osmo_i460_timeslot and
replace it with a define constant.

Change-Id: Id3a3782927c7dcbc873223d56129f291c04fee26
Related: OS#5198
2023-02-24 13:38:22 +00:00
Vadim Yanitskiy 82001ebc2a gsm: ensure completeness of osmo_bts_features_{descs,names}[]
It already happened several times [1][2] that new features were added
to enum osmo_bts_features, but the osmo_bts_features_{descs,names}[]
were left unchanged.  Let's add static_assert()s to prevent this.

Change-Id: I8e3b7d3996e9f3e16c6d4e0d1d406fa538d5e9be
Related: [1] f4f5d54ea2
Related: [2] 18c6a8183f
2023-02-24 17:06:21 +07:00
Vadim Yanitskiy f4f5d54ea2 gsm: add missing features to osmo_bts_features_names[]
Change-Id: I0ff47a79d611cd1c2d23ac5b4d53dca27e402821
Fixes: 812dfbf3a7
2023-02-24 16:28:05 +07:00
Neels Hofmeyr ba1e20055f add osmo_prim_operation_name()
Also remove the explicit array dimension from the .h file.

Change-Id: I9f43428af654a5674ac3035fe4db1394aac7a7af
2023-02-22 16:45:14 +00:00
Harald Welte 9b7c9ae6ca Rename OSMO_AUTH_ALG_XOR to OSMO_AUTH_ALG_XOR_3G
Let's disambiguate.  Our existing OSMO_AUTH_ALG_XOR was always only
the XOR-3G algorithm.  Now that we recently introduced XOR-2G,
let's rename (with backwards compatibility #define).

Change-Id: I446e54d0ddf4a18c46ee022b1249af73552e3ce1
2023-02-22 09:45:15 +01:00
Harald Welte 4cc60a166c New unit test for XOR-2G authentication
Let's test if the XOR-2G algorithm does what it's supposed to do.

Change-Id: I7014258751624ff18c51912b6348c3cd876bb23f
2023-02-22 09:45:11 +01:00
Harald Welte e93c5e99b6 Implement the XOR-2G authentication algorithm
We've so far only been supporting XOR-3G algorithm as specified
in TS 34.108 (in both 3G and 2G-derivation mode).

However, XOR-3G used for 2G auth is different from the XOR-2G algorithm
as defined in Annex A of TS 51.010-1.  Let's add support for that one,
too.

Change-Id: I0ee0565382c1e4515d44ff9b1752685c0a66ae39
2023-02-21 22:25:04 +01:00
Oliver Smith 8d9ed738a7 tests: add test_gsm0808_enc_dec_channel_type_sign
Verify that we have the spare byte when encoding the signalling type.

Related: OS#5911
Change-Id: Ied6e451d2e884412104cd9d530d0cd1b39f17f27
2023-02-21 08:17:42 +00:00
Oliver Smith dcaab85795 gsm0808_dec_channel_type: fix dec of ch_rate_type
According to 3GPP TS 48.008 V16.0.0 § 3.2.2.11, the "Channel and rate
type" fills the whole octet 4, so don't cut it off.

This fixes decoding of e.g. GSM0808_SIGN_FULL_PREF_NO_CHANGE, which I
noticed while writing a test.

Related: OS#5911
Change-Id: Ib5fba18eb82736c4f52f315ae1197159b7090e69
2023-02-21 08:17:42 +00:00
Pau Espin 2bb8a1219c libosmogb.pc.in: Fix missing dependency on libosmogsm
Change-Id: I5efa04d1c5cabc65b42de624b26fdbf9ebe746b1
2023-02-20 12:21:30 +01:00
Pau Espin 0158b05337 Move libosmogsm TS 44.060 declarations under include/osmocom/gsm/
Currently there's a big mess where include dir osmocom/gprs/ is used by
both libosmogsm and libosmogb.
Most of the header files under osmocom/gprs/ are actually all the
headers of libosmogb (there's no osmocom/gb/ dir). But a couple files
are actually RLC/MAC (TS 44.060) related are are also stored in there.
Those files have no relation/use in Gb, and are actually interused with
GSM (eg System Information 13 Rest Octets).
Hence, it makes sense to have the RLC/MAC related parts inside
osmocom/gsm/ as they should be in libosmogsm (and they actually are,
see gprs_rlc.h function implemented in src/gsm/gsm48_rest_octets.c).

The fact that some libosmogsm headers were placed in osmocom/gprs
instead of osmocom/gsm already created some issues, like
libosmocore.spec.in putting "%_includedir/%name/osmocom/gprs/" under
libosmogb, which is wrong.

As a first step to fix the mess, we move the 2 RLC/MAC headers currently
under osmocom/gprs/{gprs_rlc,protocol/gsm_04_60}.h under a single header
gsm/protocol/gsm_44_060.h
The two old headers are left existing for backward compatibility and now
simply include the new libosmogsm header, plus a warning asking users to
switch to the new header so we can eventually get rid of them.
This means libosmogb depends on libosmogsm, which is fine and was
already the case beforehand (libosmogb using functions like
gsm48_encode_ra() and linking against it in src/gb/Makefile.am).

Change-Id: I70cc21bf25a7081070738abacb409ed19094c3b2
2023-02-20 12:21:30 +01:00
Philipp Maier ce4a86525c gsmtap_util: remove whitespace at the end of line
Change-Id: Ib7afbfb1f7a95beab16fed11d07ae244b4fcfcdc
2023-02-20 11:03:27 +00:00
Max a747d36166 GSMTAP: add gsmtap_source_init*2()
Those allow selecting source host:port for UDP socket sending GSMTAP data.
It's handy when you have several GSMTAP sources operating simultaneously.

Change-Id: I51b3604ba79e42c474aa17007e7e308a12afcea8
2023-02-20 11:03:05 +00:00
Matan Perelman 310b107284 gsm0808_enc_channel_type: Add spare byte
Related: OS#5911
Change-Id: I6e05e4989924b2258122113eb134e946e9cf0107
2023-02-20 10:57:54 +00:00
Oliver Smith 48706d64e4 Run struct_endianness.py
Ensure there is no diff to prepare to run this in CI.

Related: OS#5884
Change-Id: I194f3affeb969d485348c46a6dabbe5f8e47e780
2023-02-20 10:54:13 +00:00
Pau Espin 66188dc3c2 gsm_04_60.h: Better describe origin of enum osmo_gprs_nmo
Change-Id: Ied6c11aa92ea5a2e18a6045cefddfd4e40108174
2023-02-20 10:16:09 +00:00
Max ef5d3bcb79 GSMTAP: fix typo
Change-Id: I152c605a01069117563d9502046fa5540fa148d9
2023-02-20 09:44:59 +00:00
Vadim Yanitskiy 2617815ffc gsm: fix invalid check in gsm48_decode_ssversion()
Change-Id: I648a4b052d0ec7af97d513630aa4279884436dda
Fixes: OS#5910
2023-02-19 16:18:32 +07:00
Philipp Maier 54e1782e71 i460_mux: make osmo_i460_subchan_count public
There may be situations where we must check if there are still I.460
subchannels active, so lets make the function osmo_i460_subchan_count
public

Change-Id: I0454ffe5809f21504c1e263a781c06596d452d4b
Related: OS#5198
2023-02-18 08:38:00 +00:00