Commit Graph

7267 Commits

Author SHA1 Message Date
Andreas Eversberg a560e6e5bc Add LLC and HLC information to MNCC interface definiton
low/high layer compatibility are used for capability checking between
caller and called entitiy.

The information is added to the end of struct gsm_mncc increases, so
that the version number needs not to be incremented.

Related: OS#6152
Change-Id: I15f5afcf069ee6c1c4641108ceacc837bee311b5
2023-12-19 15:08:55 +01:00
Andreas Eversberg c9801ed14a Use uniform log format for default config files
Related: OS#6272
Change-Id: Ic710873f9203414b343b216097785cef36ca05a9
2023-12-01 12:48:30 +01:00
Neels Hofmeyr d7d3eced56 call_leg: silence some false errors
"[ESTABLISHED] transition to state ESTABLISHED not permitted"

i.e. don't complain when we already are in the established state.

Change-Id: I9b1fd63ed1ee7ed2877a4b2059386354598f4ea4
2023-11-23 00:12:25 +01:00
Neels Hofmeyr ed226ed6e6 fix codec mapping for GSM-HR
The cfg bits are for AMR-HR, not GSM-HR. The function
gsm0808_enc_speech_codec_list2() will return -EINVAL when it encounters
GSM-HR with non-zero cfg bits.

It appears this mapping was never used before, and my testing of call
re-assignment to match MT's codecs (it allows more than just the
assigned codec, because it can re-assign) has uncovered this bug
via MSC_Tests.TC_ho_inter_msc_out. I don't fully understand all the
details why we didn't see this before; anyway, the fix is obvious.

Change-Id: I19cff847a0f618ad000d12c1df54c55ef2f79699
2023-11-17 04:38:09 +01:00
Philipp Maier 1759ed5709 manuals: add section about the SGs interface.
The SGs interface is currently only casually mentioned in the chapter
running, even though the SGs interface is a prominent and often
requested feature. Let's give the SGs interface its own section so that
users can find the info about it quicker.

Related: OS#6008
Change-Id: Ic7c17511ee19cb7f6d5069b27beb661ecb4b0be8
2023-10-30 17:51:33 +01:00
Philipp Maier 656354b818 vlr_sgs: fix VTY setting for SGs counter.
When trying to modify the value of an SGs counter (eg. ns11), then the
setting is never stored. The reason for this is that OsmoMSC uses the
wrong string table to compare the user input.

Related: OS#6008
Change-Id: I0358c1ec0026c37fda6db1f3af3145393df25cfd
2023-10-30 17:12:46 +01:00
Andreas Eversberg 1d3e48febf ASCI: Reject TERMINATION, if MS is not the originator
Only the originator may terminate the VGCS/VBS call. This will not
happen in real life, because the UI of the MS should not allow
termination of a recevied VGCS call.

Change-Id: Ibe289920fa3ea50dd3e7d5c1371456dca9b72604
Related: OS#4854
2023-10-19 13:18:06 +02:00
Manawyrm 2984235454 csd_bs: force rate adaptation mode for CSD calls to V.110
Certain calls (seen on very old Nokias) won't have the rate adaptation flag
set on "analog" CSD calls. The field for the intermediate rate (after RA) is
still filled correctly.
Workaround this by setting the RA to V.110 whenever the RA is unset but an
intermediate rate is specified.

Change-Id: I5b3e5649fe071636f1becddfbfee06f9175a5f17
2023-10-17 11:25:59 +00:00
Manawyrm 1ed12eac93 libmsc: add 3k1_AUDIO and FAX_G3 bearer cap
Bearer capability 3k1_AUDIO and FAX_G3 are only important
for the interworking function, the MSC should handle
these calls the same as CSD calls with unrestricted digital
bearer capability.

Change-Id: I198aa867a8f236b8ddd05d3b2356f64b876fd4c1
2023-10-14 17:23:04 +02:00
Oliver Smith 1792ba92c1 Bump version: 1.11.0.7-dbe88 → 1.11.1
Change-Id: Ia7a90b7c192702bb71ee55df92cb05030fe5dd03
2023-09-28 13:53:08 +02:00
Mychaela N. Falconia dbe8889120 SMS over GSUP: set source_name in GSUP reply messages
For MO-forwardSM and MT-forwardSM request messages, OsmoHLR applies
routing based on the SMSC address for MO or based on the IMSI for MT.
However, reply messages following these requests are routed passively
based on the destination_name IE.  This passive message routing path
requires the source_name IE to be set as well - implement this
source_name setting.

Related: OS#6135
Change-Id: I0b7f4760bdce8a38d43d3860086c6dfb7b390701
2023-09-25 05:20:02 +00:00
Mychaela N. Falconia 02c49373f3 SMS over GSUP: correctly route GSUP responses to MT SMS
When OsmoMSC is used with OsmoHLR rather than a GSUP-to-MAP gateway,
MT-forwardSM.req GSUP messages delivering MT SMS will be coming from
a separate SMSC relayed via OsmoHLR, rather than from OsmoHLR itself.
When we reply to these messages, in order for these replies to reach
the MT-sending SMSC via OsmoHLR, we need to save source_name from
the request and regurgitate it into destination_name in our response
messages.  Implement this logic.

Related: OS#6135
Change-Id: I436e333035b8f6e27f86a49fe293ea48ea07a013
2023-09-25 05:13:49 +00:00
Mychaela N. Falconia 8de4ea6567 gsup_client_mux: set destination_name in error reply function
If the GSUP request message to which we are replying is an MT SMS
delivery from an SMSC relayed via OsmoHLR, we must set destination_name
in our reply - otherwise our reply won't make it back to the SMSC.

Related: OS#6135
Change-Id: I892fe87a733a78ed9d5761a8ce238caa135dea1e
2023-09-24 18:14:16 +00:00
Andreas Eversberg 2d4f0eaa76 ASCI: Remove duplicated CLEAR COMMAND from VGCS/VBS channel handling
Change-Id: I5e4891091c2ce56d4fd4a7f5f67156a94ade852d
Related: OS#4854
2023-09-24 17:47:26 +00:00
Mychaela N. Falconia 9b7de7480f CC: don't start guard timer on mid-call MNCC messages
The intent of the guard timer is to clear hung or stuck states
during call setup or teardown.  However, there are some MNCC
messages that will be exchanged between OsmoMSC (passing CC
messages to and from the MS) and the external MNCC agent during
the active call state, not related to setup or teardown: DTMF
start and stop, plus call hold and retrieve operations for call
waiting.  Unpatched OsmoMSC restarts the guard timer on every
received MNCC message, even those that pass through to CC without
affecting any state, and the result is breakage for users.

Consider the case of an IVR where you have to press some DTMF keys
before you can be transferred to a human operator.  You press the
needed keys, get the human operator, and start talking.  Then
3 minutes into your conversion (default guard timer duration)
your call unceremoniously disconnects without any warning.

Fix: look at the MNCC message type, and skip the call to start
the guard timer for known-benign MNCC messages.

Change-Id: Ibe2dd53f8e9e06d175b64df67d2a2e3e2d4155aa
2023-09-16 19:49:56 +00:00
Neels Hofmeyr e80f556cd4 make two functions static
Change-Id: I1de0f35f1606c997777f34bbf4033e069aadbc64
2023-09-15 04:30:32 +02:00
Neels Hofmeyr b5fe9732c5 fix codecs in internal call bridge
This is a fixup for the patch
'3G: decapsulate IuUP to AMR at the MGW; allow 3G<-AMR->2G'
I386a6a426c318040b019ab5541689c67e94672a1

After above patch, osmo-msc intelligently decides which codecs to run on
which legs of the RTP streams. In the meantime, it seems the necessary
matching changes to call_leg_local_bridge() had been lost somehow.

Testing 3G to 3G voice now, I noticed that call_leg_local_bridge()
overwrites the intelligent choices made earlier.

The history of an MGW endpoint that should convert from IUFP to plain
AMR, extracted from a pcap, looks like this:

    <- CRCX None None
    -> CRCX-OK audio 4050 RTP/AVP 112 None
    <- MDCX audio 4056 RTP/AVP 112 AMR
    -> MDCX-OK audio 4050 RTP/AVP 112 AMR
    <- MDCX audio 4056 RTP/AVP 96 VND.3GPP.IUFP
    -> MDCX-OK audio 4050 RTP/AVP 96 VND.3GPP.IUFP

So after call_leg_local_bridge(), there is an extra MDCX + MDCX-OK that
switches the codec from 112 AMR back to 96 IUFP.

That is because call_leg_local_bridge() copies the *RAN* side's codec to
both CN sides, which used to be ok when RAN and CN codecs were always
identical.

Instead, adjust only the CN sides of the MGW endpoints, and adjust them
so that both CN sides are identical. osmo-mgw should then be able to
trivially translate the codecs appropriately.

Change-Id: I130bcd77ec57e332370c487a11b0b973b6e1089d
2023-09-15 04:27:25 +02:00
Pau Espin 7eefae4b01 Bump version: 1.10.0.125-92caa-dirty → 1.11.0
Change-Id: Ifc4bfe8b4154fa892a4d15d54cee34b501038c20
2023-09-12 16:46:12 +02:00
Oliver Smith 92caa1cd6d gsm48_cc_tx_call_proc_…: verify bcap.transfer
Fail if MNCC tries to switch the Information Transfer Capability from
CSD to speech, so it is obvious that something is wrong here. I ran into
this while writing a test.

Related: OS#4394
Change-Id: Ibb76d08cad1ac3bc3320391c89766150a2e605c3
2023-08-23 17:16:02 +02:00
Oliver Smith f3941518dc msc_a_up_call_assignment_complete: check CSD codec
Reject any other codec than GSM0808_SCT_CSD in Assignment Complete from
RAN, if OsmoMSC is preparing a CSD call.

Related: OS#4394
Change-Id: I94de84df41bcd050d0e7b4e4fea1c6a6551ef7d3
2023-08-23 17:15:58 +02:00
Oliver Smith cfa37cb70b msc_ho_send_handover_request: support CSD
Related: OS#4394
Change-Id: I5fea299bdc19d2979b5c222d8dd265dac2068307
2023-08-23 16:42:24 +02:00
Oliver Smith 6de3d6cbae csd_bs_list_to_gsm0808_ct: assert -> ret -EINVAL
Instead of asserting on an empty list of bearer services, return
-EINVAL. This makes the function more similar to
sdp_audio_codecs_to_gsm0808_channel_type which also doesn't assert if
an empty list of codecs is passed.

Related: OS#4394
Change-Id: I15a389e1f7a9d3d17b6531c9836d3d5f9d148267
2023-08-23 16:42:24 +02:00
Oliver Smith e355d948f8 Cosmetic: fix typo
Change-Id: Ib707fa66ae789abfa8795b4e521a16e24c77647d
2023-08-23 16:42:24 +02:00
Pau Espin 7521a5877b trans_lcls_compose(): Set PLMN fron cell currently in use
The MS in general provides the Selected PLMN ID (IE) in the Complete
Layer 3 Information message. osmo-msc handles that message in
msc_a_ran_dec_from_msc_i() and stores the information of the PLMN in
msc_a->via_cell. If no PLMN information is provided in the message, then
at that same place the PLMN configured in the VTY is taken as an implicit
default.

This patch changes trans_lcls_compose() to use the PLMN stored in
msc_a->via_cell instead of the VTY configured one, meaning the PLMN
provided by the MS (through the RAN in use) is used if available
(otherwise the VTY-configure one is still used, as before).

With this patch the PLMN VTY config option use is relegated to a single
point of use in msc_a_ran_dec_from_msc_i() where the Complete Layer 3
Information is used. As a result, it becomes clear now that the VTY
config is only applied in the scenario where no PLMN is provided at that
time.

Related: SYS#6360
Change-Id: Ibad0005a1d7cef64dd8fefa3e554ba99a06c3666
2023-08-08 16:12:53 +02:00
Pau Espin aecf85705c Tx Loc UPD ACC: Use PLMN provided by subscr
The MS in general provides the Selected PLMN ID (IE) in the Complete
Layer 3 Information message. osmo-msc handles that message in
msc_a_ran_dec_from_msc_i() and stores the information of the PLMN in
msc_a->via_cell. If no PLMN information is provided in the message, then
at that same place the PLMN configured in the VTY is taken as an implicit
default.

The PLMN information stored in msc_a->via_cell is then finally stored
into vsub->cgi in evaluate_acceptance_outcome().

This patch changes gsm0408_loc_upd_acc() to avoid re-applying the PLMN
configured at the VTY again, and instead use whatever is already in
vsub->cgi. This is more correct since the PLMN provided by the MS takes
precedence over the implicitly configured one, meaning several PLMNs can
be handled. Otherwise, the code is always overwriting the PLMN announced
by the network on a specific RAN with the one in the MSC, which may end
up with unexpected results.

Related: SYS#6360
Change-Id: I421bd63a264db2bf6e1c4a4eea976f389e87b332
2023-08-08 16:04:04 +02:00
Andreas Eversberg 1c98031203 ASCI: Add missing transaction ID to SET PARAMETER message
Change-Id: I1b692cee894826a306885253a53a351f952d52dc
Related: OS#4854
2023-07-28 15:21:57 +02:00
Andreas Eversberg cc7b7b8548 ASCI: Add debugging and error logging to VGCS/VBS call control
Change-Id: I3fbce71e47e9670f58e46e7c2a0f26a1bbc1a46e
Related: OS#4854
2023-07-28 15:21:57 +02:00
Vadim Yanitskiy fc4bc785ff csd_bs_list_to_bearer_cap(): add default branch for safety
Otherwise we may fail to initialize cap->data.{user,interm}_rate.

Change-Id: Ibfb71d1ece502585b55db0f28069a6aa0666b9df
Related: OS#6110, OS#4394
2023-07-26 03:01:15 +07:00
Vadim Yanitskiy ab2845ac87 csd_bs_list_to_bearer_cap(): properly initialize bcap fields
Currently this function fails to initialize all bcap fields properly,
so the resulting CC Setup message generated by osmo-msc has some
fields set to reserved/invalid values.

With these changes I am able to establish a data call on TCH/F9.6:

* cap->{mode,coding}: assign default values explicitly;
* cap->radio: value 0 is reserved, set GSM48_BCAP_RRQ_FR_ONLY;
* cap->data.sig_access: value 0 is reserved, set GSM48_BCAP_SA_I440_I450;
* cap->data.transp: this is not a bool, set GSM48_BCAP_TR_{TRANSP,RLP};
* cap->data.{nr_{data,stop}_bits,parity}: set 8N1 by default;
* cap->data.modem_type: explicitly assign default value;
* cap->data.interm_rate: value 0 is reserved, set GSM48_BCAP_IR_{8k,16k}.

The related libosmocore.git patch additionally fixes encoding of the
"Connection element (octet 6c)", so that bcap->data.transp is used.

Change-Id: If49c89e4f867bac92ad062c062b9f36bab2b4531
Related: libosmocore.git I7339908864e8a2aef6f2b48a108650167e413c7f
Related: OS#6110, OS#4394
2023-07-26 02:47:24 +07:00
Vadim Yanitskiy 9145531d7f codec_mapping: codec_map[]: add missing speech codec for CLEARMODE
Without the gsm0808_speech_codec functions:

* codec_mapping_by_gsm0808_speech_codec_type(), and
* codec_mapping_by_gsm0808_speech_codec()

fail to find the codec mapping for CLEARMODE.

Change-Id: I87b3aedaf7ff7bbbcb381e94158566dc765e3ae6
Related: OS#6110, OS#4394
2023-07-25 18:56:20 +07:00
Vadim Yanitskiy cc8743c05b ran_a_channel_type_to_speech_codec_list(): set PI/PT for CSD
As per 3GPP TS 48.008, section 3.2.2.103, the Codec Type is valid if
at least one of FI, PI or PT is set to '1'.  Otherwise the Speech
Codec Element is considered invalid and shall be ignored.

Change-Id: Ibc452d37d4215c961a7946eef3ba2e7efdba078b
Related: OS#6110, OS#4394
2023-07-25 18:55:58 +07:00
Vadim Yanitskiy 9d69655729 ran_a_mgcp_codec_from_sc(): map GSM0808_SCT_CSD to CODEC_CLEARMODE
Change-Id: I4095124be8ffb293863f35bea440cd465048a9fd
Related: OS#6110, OS#4394
2023-07-25 04:43:46 +07:00
Vadim Yanitskiy 803ab19ad3 ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks
Change-Id: I23d94c2d81c929deb819c02f4ddac3a702a3867d
Related: OS#6110, OS#4394
2023-07-25 04:43:10 +07:00
Keith Whyte c54ce6a4b5 SMPP: Fix Memory leaks
Whenever we call build_tlv() we must
call destroy_tlv() after we are finished with it.

Similarly, smpp34_unpack() makes calls to smpp34_malloc()
and these need to be free'd by us later.

Change-Id: Ic2abcbe78cf7cf7b6ce36fe09aa9b4f8daee973f
2023-07-21 21:11:14 +01:00
Andreas Eversberg 482f0bd5a1 ASCI: Point to correct state machine when calling ran_encode_and_send()
Fixes: CID#322139
Change-Id: I8de1fce76ba36a06384581e3a1af706b41cad1fe
2023-07-21 11:16:16 +00:00
Andreas Eversberg b865c62d33 ASCI: Fix Null pointer dereference bug in gsm44068_bcc_gcc_trans_free()
Fixes: CID#322142
Change-Id: Iab0b66dfcfdb870eaec4611720ce3a5f2089bd21
2023-07-21 11:16:16 +00:00
Andreas Eversberg 33a433a561 ASCI: Check if codec mapping exists for given codec
Fixes: CID#322143
Change-Id: I65cdf2b7feaa72167c8002cd4d47183f99cab761
2023-07-21 11:16:16 +00:00
Andreas Eversberg d63776051e ASCI: Fix wrong check for Null pointer in vgcs_cell_fsm_null()
Fixes: CID#322145, CID#322141
Change-Id: Iec0820f612450cde772076131b07fe7819d35790
2023-07-21 11:16:16 +00:00
Andreas Eversberg 7e65ed9091 ASCI: Null pointer bug fix in trans_create_bcc_gcc
Fixes: CID#322147
Change-Id: I1676d3cbf844930a6a433253f055a3f8fe3c210b
2023-07-21 11:16:16 +00:00
Andreas Eversberg 23b53e544f ASCI: Receive messages from MSC-A role related to VGCS/VBS
Voice group call and voice broadcast call messages as well as assignment
result are forwarded to VGCS/VBS call control.

Change-Id: Ie68eedb8fcb064a55cd71b58630d7a8c8b5f29ad
Related: OS#4854
2023-07-21 11:16:16 +00:00
Vadim Yanitskiy 57b36e58cb msc_vty: support spaces in short/long network name
Change-Id: If55c92669f06f0d038e8d90088a6bd76133055a2
2023-07-21 11:06:27 +00:00
Andreas Eversberg b265247171 ASCI: Clear VGCS call and channel on BSSMAP reset message
When sending or receiving BSSMAP reset msg, the ongoing VGCS/VBS SCCP
connections are cleared. E.g. this happens if the BSC is restarted and
there is an ongoing VGCS/VBS call at this BSC.

Change-Id: Ib0b309150b82148098d05cfb1fb18767283e654e
Related: OS#4854
2023-07-21 12:28:06 +02:00
Andreas Eversberg 06497197ad ASCI: Add reception of UPLINK RELEASE on dedicated channel
When the calling phone releases the uplink before it has been assigned
to the group channel, it will send an UPLINK RELEASE message on the
dedicated channel.

This message is forwarded to VGCS state machine to handle the release
there.

Change-Id: Ie8f7338da18eaaefbb022c09b96f18a3d78f8a95
Related: OS#4854
2023-07-21 12:28:05 +02:00
Andreas Eversberg f8ac734849 ASCI: Add VTY to configure GCR (Group Call Register)
Change-Id: I5bd034a62fc8b483f550d29103c2f7587198f590
Related: OS#4854
2023-07-21 12:28:03 +02:00
Andreas Eversberg e2a4088619 ASCI: Remove check for trans->msc_a to be set in _assign_complete()
trans->msc_a is always set when ASSIGNMENT COMPLETE is received.

Fixes: CID#322144
Change-Id: I0fe16e59959b48d08d95aefa6d4415f78dcf1eb4
2023-07-19 17:17:21 +02:00
Andreas Eversberg cc72929fad ASCI: Check return code of osmo_mobile_identity_decode()
Fixes: CID#322146
Change-Id: I15a6cf97a901cbb6c99ec2269051a351b504d338
2023-07-19 17:14:54 +02:00
Andreas Eversberg cd8bd45b3b ASCI: Add option to switch on or off ASCI support
Switching ASCI support is controled via VTY. This added in a later
patch. (Chg-Id: I5bd034a62fc8b483f550d29103c2f7587198f590)

Change-Id: Id68deb69f7395f0f8f50b3820e9d51052a34f753
Related: OS#4854
2023-07-19 08:23:23 +00:00
Andreas Eversberg 6c8db1d27c ASCI: Add function to receive VGCS/VBS messages from BSS
A voice group/broadcast call has no SCCP connection that is related 1:1
to a calling or called subscriber. Instead there are multiple connections
between MSC and BSS. Some of them control the uplink for each BSS and
some of them assign the channels for each BTS.

SCCP connections are maintained by the VGCS call control. Message from the
RAN are directly forwarded to the VGCS call control.

Change-Id: Ie4a2f19ba75140a6f2de02b709597239c01f02a2
Related: OS#4854
2023-07-19 08:23:23 +00:00
Oliver Smith 80654ed67d csd_bs_to_gsm0808: add T 300 / proper ch_rate_type
There is no GSM0808_DATA_RATE_TRANSP_300 (not in libosmocore and not in
3GPP TS 48.008 § 3.2.11 on which the enum is based). As I understand it,
we need to use GSM0808_DATA_RATE_TRANSP_600.

As pointed out in review, either TCH/H2.4 or TCH/F2.4 would work for
rates below 9600, so use GSM0808_DATA_FULL_PREF.

Use GSM0808_DATA_FULL_BM instead of GSM0808_SPEECH_FULL_BM. The value is
0x8 for both, but this is the correct name.

Related: OS#4394
Change-Id: I7297cc481fbe36355b5231ca800cf566a1ee93c0
2023-07-18 11:14:48 +02:00
Andreas Eversberg f7c6f1424f ASCI: Add decoder for VGCS/VBS messages to msc_a.c
VGCS/VBS messages from BSS are decoded and a receiver funktion for
the GCC/BCC (VGCS/VBS call control) is selected.

Change-Id: Ief6259ba3914eeaceb063b562a0bcbc48349ce60
Related: OS#4854
2023-07-17 12:29:42 +00:00