Commit Graph

7804 Commits

Author SHA1 Message Date
Pau Espin 8eed8c2039 WIP: Avoid autofilling neigh list if no neigh is configured
This piece of code was still in osmo-bsc in order to keep backward
compatibility with older deployments from the time where configuring
neighbours was not possible.
We have support to configure neighbors since a long time ago now, and
this backward-compatible behavior has more drawbacks than benefits:
* It is totally acceptable for a cell to have no neighbors, so currently
  there's no way to enfore it.
* If ANR is in use, a usual case is that each cell starts with no
  neighbors and then dynamic ones are added after ANR procedure runs.

So let's drop this behavior and avoid autofilling the list if no
neighbor is selected.

Related: SYS#5303
Change-Id: Iff1c7245250e8cca81743f6540d3d317ba09e35c
2021-07-07 10:22:15 +02:00
Pau Espin 0309f4a5ff Introduce ANR support
See doc/manuals/chapters/anr.adoc introduced in this commit for a full
description.

Related: SYS#5303
Change-Id: I21beb4e5c101157cd0977fd9a607c2fe5350befe
2021-07-07 09:48:26 +02:00
Pau Espin 52b9912ef9 Support SDCCH8 in osmo dyn ts
This feature signals support to configure Osmocom Dynamic Timeslot type
as SDCCH8, on top of historically supported TCH/H and TCH/F.
The idea is that when unneeded, the TS is configured as PDCH, and as
soon as there's need for an SDCCH and there's none available, the TS is
dynamically reconfigured to SDCCH8. Once all logical channels in the
dynamic TS are released and hence becomes free, the BSC will reconfigure
it to PDCH.

Related: SYS#5309
Depends: libosmocore.git Change-Id Ifc0ca8916bd3e93e5a60a7dd7391d2588fdb5532
Change-Id: I29ac8b90168dba3ac309daeb0b6cfdbbcb8e9172
2021-07-06 07:16:15 +00:00
Pau Espin cc75145131 Rename osmo dyn ts enums to contain SDCCH8
They will gain support to be activated as SDCCH/8 soon too.

Related: OS#5309
Depends: libosmocore.git I56dcfe4d17899630b17f80145c3ced72f1e91e68
Change-Id: Id5b89fe589a52ff88486435ac43809edb4b80f98
2021-07-06 07:16:15 +00:00
Pau Espin cf65c9b297 assignment_fsm: Add assert to guard ptr access
Let's make sure the null pointer is caught by the assert if ever code
ends up here with conn->lchan being NULL.

Change-Id: I404df638da6a93caa535f10fd330ea24a775bfc3
2021-07-05 17:21:42 +02:00
Pau Espin 60bcba3bcf assignment_fsm: Fix null pointer dereference rx ASSIGNMENT_EV_LCHAN_ERROR
gsm_lchan_name always expects a valid lchan pointer.

This patch fixes a crash seen:
"""
<000f> lchan_fsm.c:99 lchan(12-2-5-TCH_H-1)[0x559b880f2980]{WAIT_RLL_RTP_ESTABLISH}: (type=TCH_H) Signalling Assignment FSM of error (lchan allocation failed in state WAIT_RLL_RTP_ESTABLISH: Timeout)
Assert failed lchan ../../include/osmocom/bsc/gsm_data.h:1034
"""

Related: SYS#5392
Change-Id: I23a337d411e857954008c6f8ae60be714509d351
2021-07-05 17:21:42 +02:00
Vadim Yanitskiy 997a257f8d power_control: constrain BS power reduction on BCCH carrier
BS Power Control is not allowed on the BCCH/CCCH carrier, unless
the BTS is operating in the BCCH carrier power reduction mode.

Allow constrained BS power reduction (up to 6 dB) on active logical
channels iff BCCH carrier power reduction mode is enabled.

Take into account that the maximum power difference between a timeslot
used for BCCH/CCCH and the timeslot preceding it shall not exceed 3 dB.

Change-Id: I2cc6a86731984f586ef35b43a8d3de631f7d8a2f
Related: SYS#4919, SYS#4918
2021-07-05 12:17:59 +00:00
Vadim Yanitskiy ced29cf94c power_control: implement BCCH carrier power reduction operation
The BCCH carrier (sometimes called C0) of a BTS shall maintain
discontinuous Downlink transmission at full power in order to
stay 'visible' to the mobile stations.  Because of that, early
versions of 3GPP TS 45.008 prohibited BS power reduction on C0.

However, starting from version 13.0.0 (2015-11) there is a feature
called 'BCCH carrier power reduction operation'.  This is a special
mode of operation, where the variation of RF level for some
timeslots is relaxed for the purpose of energy saving.

In BCCH carrier power reduction operation, for timeslots on the
C0 carrier, except timeslots carrying BCCH/CCCH, the output power
may be lower than the output power used for timeslots carrying
BCCH/CCCH.  In this case the maximum allowed difference in output
power actually transmitted by the BTS is 6 dB.

Introduce a VTY command to turn on and off the BCCH carrier power
reduction operation.  Also introduce a CTRL command.  On the
A-bis/RSL, abuse the BS POWER CONTROL message by setting
the Channel Number IE to 0x80 (RSL_CHAN_BCCH).

Currently, only osmo-bts-trx is supported.  A value greater than
zero makes it reduce the power on *inactive* timeslots of the
BCCH carrier.  Sending zero disables the BCCH power reduction
mode completely.

For more details, see 3GPP TS 45.008, section 7.1, and 3GPP TR 45.926.

Change-Id: I047fce33d4d3e4c569dd006ba17858467a2f4783
Related: SYS#4919
2021-07-05 12:17:59 +00:00
Neels Hofmeyr a4de0fea51 vty: add vty doc test for 'nri null' commands
Change-Id: I2782dc547ce9751e5f1039aab9a2d36cf1be3fde
2021-07-03 17:32:09 +02:00
Neels Hofmeyr f15d236e3e vty: fix doc: default value for 'nri bitlen'
The constant is called OSMO_NRI_BITLEN_DEFAULT, NRI_BITLEN_DEFAULT does
not exist and got rendered as "NRI_BITLEN_DEFAULT" in the vty doc.

Add missing vty test for 'nri bitlen'.

Change-Id: I8af840a4589f47eaca6bf10e37e0859f9ae53dfa
2021-07-03 17:26:35 +02:00
Vadim Yanitskiy 419d8a296b power_control: omit BS Power Parameters IE if the maximum is 0 dB
If BS Power Parameters IE is present in the channel activation
message, the BTS shall employ dynamic BS power control for that
logical channel and interpret BS Power IE as the maximum value.

If the maximum value is 0 dB, then it does not make sense to send
BS Power Parameters IE to the BTS, because the power control loop
would never exceed the maximum.

Change-Id: If8507992dfd90ade1edda99b72bf2420a702ccd5
Related: SYS#4918, SYS#4919
2021-06-30 11:01:20 +00:00
Pau Espin eab874256e lchan-select: Avoid setting variable for no reason
That variable is never used after being set. Furthermore, it is being
set to the same value already stored, so there's no use in setting it
and it creates confusion.

Change-Id: Ib6ee28aa9a449992f5d3dea6df7dd2b7e30e73c9
2021-06-30 08:13:52 +00:00
Pau Espin a23eebb9a2 Support proto IPAC_PROTO_EXT_PCU BSC<->PCU
Related: SYS#5303
Change-Id: I4b3919f3098b9468e5e024db1e45427af24c1ad4
2021-06-30 08:13:37 +00:00
Neels Hofmeyr c44a27c672 hodec2: fix low rxqual tch/h<->tch/f oscillation
Related: SYS#5198
Change-Id: I96cd5a494e661ba3bb0b6d22d25a9968d2a6813c
2021-06-29 22:24:24 +02:00
Neels Hofmeyr 4011c54620 handover_decision_2.c: add current_rxqual()
Pre-empt code dup: this will be also used by an upcoming patch, so first
put it in a function.

Change-Id: I0d5bdaa9605f2bd4241cdd47ccf1ce1c697818a8
2021-06-29 22:24:24 +02:00
Neels Hofmeyr 4cff729353 hodec2: fix low rxlev tch/h<->tch/f oscillation
Related: SYS#5365
Change-Id: Ibc3ac7ce6190b4e854fa42d5376a7038ddfbd6e5
2021-06-29 22:24:24 +02:00
Neels Hofmeyr 26ce6b3aa4 handover_decision_2.c: add is_low_rxlev()
Remove code dup. Also this will be used another time by an upcoming
patch.

Change-Id: I4aaeb8bc35a142962ac8ca6401a76b0733f7979e
2021-06-29 22:24:24 +02:00
Neels Hofmeyr e00bbc6f67 hodec2: add test case showing low rxqual tch/h<->tch/f oscillation
Related: SYS#5198
Change-Id: I43726c5563c9c31389600ef0ff6855add5af3a03
2021-06-29 22:24:24 +02:00
Neels Hofmeyr fa3cb5a932 hodec2: add test case showing low rxlev tch/h<->tch/f oscillation
Related: SYS#5365
Change-Id: Iee2d4b9eaf902ba7fb546a9bb261324b2f7d1fc7
2021-06-29 22:24:24 +02:00
Vadim Yanitskiy 38a839e120 gsm_data.h: remove declaration of non-existing ts_pchan()
Change-Id: I2471d0f2825661e60539d9504632fc80145c603d
2021-06-29 15:10:30 +02:00
Neels Hofmeyr b7646e25b1 vty: allow 5 encryption algo entries
follow-up to
0256c89187
Icac06ed554fd61bf7c4bfb1d5c3739a01f2915a4

Previous patch increased the range, but let's also allow one more
argument so that the A5 mask can be fully enabled.

Change-Id: Ie8cd753e4425d7d51397e4dddc24108fa0392de4
2021-06-25 08:18:30 +00:00
Pau Espin 883f067e62 pcuif_proto.h: Add new container messages
Related: SYS#5303
Change-Id: Icc50f903a7fe1464549537a24b2bd2befaf6f7e1
2021-06-25 08:17:21 +00:00
Philipp Maier 78ad200cf6 control.adoc: add doc for apply-config-file
apply-config-file is not documented in the manual.

Change-Id: I469e3925c1079e45eea246e599bcd50ba3fc9dd3
Related: SYS#5369
2021-06-24 10:15:49 +02:00
Philipp Maier b9930bdf09 bsc_ctrl_commands: add command to write vty config
we recently added control commands to apply vty config files during
runtime using the control interface. However, there is no command that
allows us to store the config file modifications.

Change-Id: If17095bb86f82dd8feb86eb72c4133ea3aa1c3b3
Related: SYS#5369
2021-06-24 10:15:49 +02:00
Neels Hofmeyr 2644cd2d95 use osmo_select_shutdown to get rid of SIGTERM sleep
Change-Id: I9a4a629805c49240b8be412e9def298cdf5bc996
2021-06-23 23:45:52 +00:00
Vadim Yanitskiy e87f20f621 abis_rsl: fix rsl_rx_ccch_load(): properly check the message length
msg->data_len is the total number of bytes available in the buffer,
not the actual length of the payload.  Use msgb_length().

Change-Id: I35bf0827ff14e84a755c1aa24a6efc06bc7b9f9b
2021-06-23 11:44:43 +00:00
Vadim Yanitskiy d5db754514 PCUIF protocol: add message definition for interference report
Change-Id: I4bd5d4de695a1f9f202870cfd7e43caac9ce6d48
Related: SYS#5313, OS#1569
2021-06-22 16:56:54 +02:00
Neels Hofmeyr 68536ccf8b support A5/4 in inter-BSC Handover
inter-BSC into this BSC: from BSSMAP Handover Request, parse and store
Kc128. All else is already implemented: depending on the chosen
encryption algorithm, Kc128 will end up in the Channel Activation.

inter-BSC out of this BSC: nothing is needed to support A5/4, the BSSMAP
Handover Required message does not contain any encryption related
information. The MSC already knows the chosen algorithm.

Related: SYS#5324
Change-Id: I7e9590e8c96aa50086148863ad9a2741b978e614
2021-06-22 05:56:09 +00:00
Vadim Yanitskiy 5ec7b65eed VTY: fix typo in a command description: s/send/sent/
Change-Id: Idb2fda4c2bd8a4e7ee6c4d7c7dc08a7d4f20d00d
2021-06-21 04:21:57 +02:00
Neels Hofmeyr 498e55a9a4 implement A5/4 in Ciphering Mode procedure
Receive and store the Kc128 key from MSC, and use as key sent to BTS if
A5/4 is the chosen encryption algorithm.

(A5/4 in handover will follow in a separate patch)

Related: SYS#5324
Change-Id: I7c458c8a7350f34ff79531b3c891e1b367614469
2021-06-18 23:31:31 +02:00
Eric Wild 0256c89187 vty: allow A5/4 encryption in config
Add A5/4 to the internal mask of allowed algorithms.

(Not actually working yet, A5/4 implementation follows in other
patches.)

Related: SYS#5324
Change-Id: Icac06ed554fd61bf7c4bfb1d5c3739a01f2915a4
2021-06-18 23:31:31 +02:00
Neels Hofmeyr 230b88ab65 dissolve gsm0808_cipher_mode() into bssmap_handle_cipher_mode()
An upcoming patch for A5/4 would need to add a kc128 arg and reject
cause rc to gsm0808_cipher_mode(). Instead prepare for less cruft by
just having a single function.

Related: SYS#5324
Change-Id: I7f7c635943990a251ae28ae7a0d69cc3a239a154
2021-06-18 23:31:31 +02:00
Neels Hofmeyr 0022ca6453 rewire build_encr_info() to return errors
In build_encr_info(), validate the algorithm and key presence and return
negative if errors are encountered.

At all callers, handle the error case.

An upcoming patch will add handling of Kc128 for A5/4 encryption and
also wants to return error codes. This is a preparation for that patch:
I7c458c8a7350f34ff79531b3c891e1b367614469

Notice that osmo-bsc does send the key along even if A5/0 is chosen,
this patch keeps that behavior unchanged.

Related: SYS#5324
Change-Id: I125d8aabceddd5b34cb98978cee9b6d2fc8fd0f2
2021-06-18 23:31:23 +02:00
Neels Hofmeyr ca08701681 rsl_lchan_lookup: drop redundant condition
'vamos' is only set to true for osmobts types, hence no need to check
that condition again.

fixup for commit d37dcb9f68
'RSL: rx and tx VAMOS Channel Number cbits for VAMOS lchans'
I957eff0d2c33ec795eda75a4bff21965b0179f73

Related: CID#236318
Related: SYS#5315 OS#4940
Change-Id: I4d9afc2996d95fdc15ee1a04e31d781b595023e3
2021-06-18 09:58:14 +00:00
Neels Hofmeyr 14e043fbcf rsl_data_request() check lchan pointer before access
fixup for commit 43aeeaf05a
'RSL chan_nr: replace OSMO_ASSERT with error handling'
I71ed6437c403a3f9336e17a94b4948fca295d853

Related: CID#236319
Related: SYS#5315 OS#4940
Change-Id: I873c1a27f9449a56c525984ea50bfcf6daa4b5f8
2021-06-18 09:58:14 +00:00
Neels Hofmeyr 56c91b09b1 hodec2: don't apply AFS bias to same-cell lchans
The AFS bias actually should not apply to local cell lchans, because it
makes no sense for intra-cell considerations:

- same-cell lchans obviously have identical rxlev;
- any nonzero AFS bias thus always raises the TCH/F above the TCH/H;
- for intra-cell reassignment, the power budget hysteresis is,
  naturally, not applied.

So, before this patch, setting AFS bias even to only 1 would
unconditionally move all (AMR) TCH/H lchans over to free TCH/F lchans in
the same cell.

Recent patch Id40d1cf8b58410c7d4eb87407fe8b8106e352438 implements
explicit upgrade from TCH/H to TCH/F *if* the TCH/H is experiencing low
rxqual or low rxlev, as a proper replacement for intra-cell AFS bias.

Related: SYS#5198 SYS#5365
Change-Id: I315f24123ae016887ab91666870ce252e096f90f
2021-06-18 09:40:27 +00:00
Pau Espin f274976df3 Introduce counters to track SRVCC procedures
Related: SYS#5337
Change-Id: I5c20da56d465dbcf4366130394f7c42635a24cc7
2021-06-17 14:05:40 +00:00
Pau Espin b9a6263823 Introduce VTY command to disable srvcc fast-return on target BTS
Related: SYS#5337
Change-Id: I2ac91b5dffc9b6de60576aabe21a15f24fea38cb
2021-06-17 14:05:40 +00:00
Philipp Maier 35b6b25433 handover_cfg: add missing VTY_CMD_PREFIX in comment
The comment that explains HO_CFG_ONE_MEMBER lacks VTY_CMD_PREFIX
in the sample macro definistion.

Change-Id: I80db198178cfd1e8669589eb3b468766f0c30ea2
2021-06-16 14:54:46 +02:00
Neels Hofmeyr 293076d9d1 vty: reassign: add missing check for valid target lchan
Make sure that the target lchan has been initialized before attempting
to reassign.

I ran into this in the VAMOS tests, forgetting to set the BTS_FEAT_VAMOS
in osmo-bts-omldummy: the vty command from ttcn attempts to reassign to
a non-initialized lchan, and aborts osmo-bsc.

Change-Id: Ia77a3312dde0e4b8df9ad2f33339266bae06439d
2021-06-15 00:31:25 +02:00
Neels Hofmeyr 519294d563 fixup for vamos: fix wrong cbits in rsl_lchan_lookup()
The RSL_CHAN_OSMO_VAMOS_MASK mask applies to the chan_nr,
but the cbits variable in rsl_lchan_lookup() is chan_nr >> 3.
So the mask didn't do its job. Now it does.

A bit embarrassing how i took the suggestion to use this mask and put it
into code without testing it. It looked good enough...

Change-Id: I005c5f319bb6f14651aeb613cdff52e79f761913
2021-06-15 00:31:24 +02:00
Neels Hofmeyr a32431972d hodec2: implement upgrade TCH/H -> TCH/F (without AFS bias)
Pass flag into find_alternative_lchan() indicating that a TCH/H channel
has low ratings (rxqual or rxlev, doesn't matter).

Heed this flag in the last round, the requirement A check, and allow
candidates that have equal rxlev, if they result in an upgrade from
TCH/H to TCH/F. This allows intra-cell upgrades to TCH/F.

An important point is that this patch allows upgrade to TCH/F *without*
the AFS bias setting. See also I315f24123ae016887ab91666870ce252e096f90f.

Related: SYS#5198 SYS#5365
Change-Id: Id40d1cf8b58410c7d4eb87407fe8b8106e352438
2021-06-13 15:55:03 +00:00
Neels Hofmeyr b96ea3c97f gsm_data.h: add comments about immutable activ/modif/assign request info
Change-Id: I7997b802d997073ae6a05db2f40e82cb8e83764f
2021-06-10 16:15:35 +02:00
Neels Hofmeyr f1b0bf5b2f lchan_fsm: lchan_fail() strings should not have a terminating newline
Change-Id: I063fd5598add75c39338d90798189c10a0714094
2021-06-10 16:15:35 +02:00
Neels Hofmeyr 95ec269f0a RSL: set default TEI according to TRX number
Change-Id: I3c500f7a5afc9143d4ea7102ab96e52aeb67b4b6
2021-06-10 16:15:35 +02:00
Neels Hofmeyr dc2bcdacdd cosmetic loop simplification in gsm48_multirate_config()
Change-Id: I52424ad6a0bf499fe040cf0a1de00e636a0a40fe
2021-06-10 16:15:35 +02:00
Neels Hofmeyr 6ca1c28d9c get_any_lchan(): reduce minor code dup
Change-Id: I304a7333adc265e156f04b42a10bac6912f58ad2
2021-06-10 16:15:35 +02:00
Neels Hofmeyr 9de7717243 clarify bts_chan_load
Change-Id: I9bd80a08472018e69360ac5739979c7056d4f063
2021-06-10 16:15:35 +02:00
Neels Hofmeyr b3695df6ab log: assignment_fsm: tweak err msg for incompatible chan
Related: SYS#5315 OS#4940
Change-Id: Ifd8790923d54a27061708ff8077d509238b9c7dd
2021-06-10 16:15:35 +02:00
Neels Hofmeyr 236e3b048c log: assignment_fsm: drop newline from assignment_fail
Drop terminating newline from an assignment_fail() call which causes an
erratic line feed in logging.

Change-Id: Ib56e1f6a45c7e2c235f8ef0c8dea7151481677ab
2021-06-10 16:15:35 +02:00