2014-11-10 10:21:32 +00:00
|
|
|
/* (C) 2008-2010 by Harald Welte <laforge@gnumonks.org>
|
|
|
|
*
|
|
|
|
* All Rights Reserved
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2019-01-28 02:52:14 +00:00
|
|
|
#include <osmocom/core/tdef.h>
|
2020-05-26 01:58:14 +00:00
|
|
|
#include <osmocom/gsm/gsm23236.h>
|
2019-01-28 02:52:14 +00:00
|
|
|
|
2017-09-04 13:15:32 +00:00
|
|
|
#include <osmocom/bsc/osmo_bsc.h>
|
2018-07-24 14:18:15 +00:00
|
|
|
#include <osmocom/bsc/gsm_04_08_rr.h>
|
HO prep: introduce per-BTS handover config, with defaults on net node
It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.
Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.
This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
any running BTS.
- network node defaults *must* be issued before the bts sections in the config
file.
- when writing a config back to file, we would copy all net node defaults to
each BTS node, making the network node configs pointless.
Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)
Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.
This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.
On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.
Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.
For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.
Review the VTY online help strings.
Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.
(Needs recent addition of '... !' wildcard to osmo_interact_common.py.)
I considered leaving parts of this more readable, but in the end decided for
heavy use of macros to define and declare the API, because more values will be
added in upcoming patches and I want to prevent myself from messing them up.
Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Depends: I7c1ebb2e7f059047903a53de26a0ec1ce7fa9b98 (osmo-python-tests)
Change-Id: I79d35f6d3c0fbee67904378ad7f216df34fde79a
2017-11-27 20:29:33 +00:00
|
|
|
#include <osmocom/bsc/handover_cfg.h>
|
2018-01-30 17:14:22 +00:00
|
|
|
#include <osmocom/bsc/chan_alloc.h>
|
2018-03-22 03:54:57 +00:00
|
|
|
#include <osmocom/bsc/neighbor_ident.h>
|
2018-06-16 17:29:50 +00:00
|
|
|
|
2019-01-28 02:52:14 +00:00
|
|
|
static struct osmo_tdef gsm_network_T_defs[] = {
|
2019-07-11 01:43:34 +00:00
|
|
|
{ .T=7, .default_val=10, .desc="inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout" },
|
|
|
|
{ .T=8, .default_val=10, .desc="inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout" },
|
2018-06-16 17:29:50 +00:00
|
|
|
{ .T=10, .default_val=6, .desc="RR Assignment" },
|
2019-07-11 01:43:34 +00:00
|
|
|
{ .T=101, .default_val=10, .desc="inter-BSC/MSC Handover incoming, BSSMAP HO Request to HO Accept" },
|
2018-06-16 17:29:50 +00:00
|
|
|
{ .T=3101, .default_val=3, .desc="RR Immediate Assignment" },
|
|
|
|
{ .T=3103, .default_val=5, .desc="Handover" },
|
2019-01-28 02:52:14 +00:00
|
|
|
{ .T=3105, .default_val=100, .unit=OSMO_TDEF_MS, .desc="Physical Information" },
|
2018-06-16 17:29:50 +00:00
|
|
|
{ .T=3107, .default_val=5, .desc="(unused)" },
|
|
|
|
{ .T=3109, .default_val=5, .desc="RSL SACCH deactivation" },
|
|
|
|
{ .T=3111, .default_val=2, .desc="Wait time before RSL RF Channel Release" },
|
2018-11-07 13:19:32 +00:00
|
|
|
{ .T=3113, .default_val=7, .desc="Paging"},
|
2018-06-16 17:29:50 +00:00
|
|
|
{ .T=3115, .default_val=10, .desc="(unused)" },
|
|
|
|
{ .T=3117, .default_val=10, .desc="(unused)" },
|
|
|
|
{ .T=3119, .default_val=10, .desc="(unused)" },
|
|
|
|
{ .T=3122, .default_val=GSM_T3122_DEFAULT, .desc="Wait time after RR Immediate Assignment Reject" },
|
|
|
|
{ .T=3141, .default_val=10, .desc="(unused)" },
|
2019-01-28 02:52:14 +00:00
|
|
|
{ .T=3212, .default_val=5, .unit=OSMO_TDEF_CUSTOM,
|
2018-06-16 17:29:50 +00:00
|
|
|
.desc="Periodic Location Update timer, sent to MS (1 = 6 minutes)" },
|
2020-09-15 22:56:19 +00:00
|
|
|
{ .T=-4, .default_val=60, .desc="After Clear Request, wait for MSC to Clear Command (sanity)" },
|
2020-04-09 09:22:24 +00:00
|
|
|
{ .T=-5, .default_val=5, .desc="Timeout to switch dynamic timeslot PCHAN modes"},
|
|
|
|
{ .T=-6, .default_val=5, .desc="Timeout for RSL Channel Activate ACK after sending RSL Channel Activate" },
|
|
|
|
{ .T=-7, .default_val=5, .desc="Timeout for RSL IPA CRCX ACK after sending RSL IPA CRCX" },
|
|
|
|
{ .T=-8, .default_val=5, .desc="Timeout for RSL IPA MDCX ACK after sending RSL IPA MDCX" },
|
|
|
|
{ .T=-9, .default_val=5, .desc="Timeout for availability of MGW endpoint" },
|
|
|
|
{ .T=-10, .default_val=5, .desc="Timeout for fully configured MGW endpoint" },
|
2020-09-17 15:54:39 +00:00
|
|
|
{ .T=-11, .default_val=5, .desc="Timeout for Perform Location Response from SMLC" },
|
2021-04-19 21:30:16 +00:00
|
|
|
{ .T=-12, .default_val=5, .desc="Timeout for obtaining TA after BSSLAP TA Request" },
|
2021-04-15 18:17:18 +00:00
|
|
|
{ .T=-13, .default_val=5, .desc="Timeout for RR Channel Mode Modify ACK (BSC <-> MS)" },
|
|
|
|
{ .T=-14, .default_val=5, .desc="Timeout for RSL Channel Mode Modify ACK (BSC <-> BTS)" },
|
2020-09-15 22:56:19 +00:00
|
|
|
{ .T=-3111, .default_val=4, .desc="Wait time after lchan was released in error (should be T3111 + 2s)" },
|
|
|
|
{ .T=-3210, .default_val=20, .desc="After L3 Complete, wait for MSC to confirm" },
|
2018-06-16 17:29:50 +00:00
|
|
|
{}
|
|
|
|
};
|
2018-01-30 17:14:22 +00:00
|
|
|
|
2019-04-23 16:37:37 +00:00
|
|
|
struct osmo_tdef g_mgw_tdefs[] = {
|
2020-09-15 22:56:19 +00:00
|
|
|
{ .T=-2427, .default_val=5, .desc="timeout for MGCP response from MGW" },
|
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct osmo_tdef_group bsc_tdef_group[] = {
|
|
|
|
{ .name = "net", .tdefs = gsm_network_T_defs, .desc = "GSM network" },
|
|
|
|
{ .name = "mgw", .tdefs = g_mgw_tdefs, .desc = "MGW (Media Gateway) interface" },
|
2019-04-23 16:37:37 +00:00
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
dissolve libbsc: move all to src/osmo-bsc, link .o files
Move all of libbsc/ into osmo-bsc/, and separate/move some implementations to
allow linking from utils/* and ipaccess/* without pulling in unccessary
dependencies.
Some utilities use gsm_network and gsm_bts structs, which already include data
structures for fairly advanced uses. Move initialization that only osmo-bsc
needs into new bsc_network_init() and bsc_bts_alloc_register() functions, so
that the leaner tools can use the old gsm_* versions without the need to link
everything (e.g. handover and lchan alloc code).
In some instances, there need to be stubs if to cut off linking "just before
the RSL level" and prevent dependencies from creeping in.
- abis_rsl_rcvmsg(): the only program currently interpreting RSL messages is
osmo-bsc, the utils are merely concerned with OML, if at all.
- paging_flush_bts(): ip.access nanobts models call this when the RSL link is
dropped. Only osmo-bsc actually needs to do anything there.
- on_gsm_ts_init(): the mechanism to trigger timeslot initialization is related
to OML, while this action to take on init would pull in RSL dependencies.
utils/ and ipaccess/ each have a stubs.c file to implement these stubs. Tests
implement stubs inline where required.
From src/utils/, src/ipaccess/ and tests/*/, link in .o files from osmo-bsc/.
In order for this to work, the osmo-bsc subdir must be built before the other
source trees. (An alternative would be to include the .c files as sources, but
that would re-compile them in every source tree. Not a large burden really, but
unless linking .o files gives problems, let's have the quicker build.)
Minor obvious cleanups creep in with this patch, I will not bother to name them
individually now unless code review asks me to.
Rationale:
1) libbsc has been separate to use it for osmo-nitb and osmo-bsc in the old
openbsc.git. This is no longer required, and spreading over libbsc and osmo-bsc
is distracting.
2) Recently, ridiculous linking requirements have made adding new functions
cumbersome, because libbsc has started depending on osmo-bsc/*.c
implementations: on gscon FSM and bssap functions. For example, neither
bs11_config nor ipaccess-config nor bts_test need handover_cfg or BSSMAP
message composition. It makes no sense to link the entire osmo-bsc to it, nor
do we want to keep adding stubs to each linking realm.
Change-Id: I36a586726f5818121abe54d25654819fc451d3bf
2018-05-26 23:26:31 +00:00
|
|
|
/* Initialize the bare minimum of struct gsm_network, minimizing required dependencies.
|
|
|
|
* This part is shared among the thin programs in osmo-bsc/src/utils/.
|
|
|
|
* osmo-bsc requires further initialization that pulls in more dependencies (see bsc_network_init()). */
|
|
|
|
struct gsm_network *gsm_network_init(void *ctx)
|
2014-11-10 10:21:32 +00:00
|
|
|
{
|
dissolve libbsc: move all to src/osmo-bsc, link .o files
Move all of libbsc/ into osmo-bsc/, and separate/move some implementations to
allow linking from utils/* and ipaccess/* without pulling in unccessary
dependencies.
Some utilities use gsm_network and gsm_bts structs, which already include data
structures for fairly advanced uses. Move initialization that only osmo-bsc
needs into new bsc_network_init() and bsc_bts_alloc_register() functions, so
that the leaner tools can use the old gsm_* versions without the need to link
everything (e.g. handover and lchan alloc code).
In some instances, there need to be stubs if to cut off linking "just before
the RSL level" and prevent dependencies from creeping in.
- abis_rsl_rcvmsg(): the only program currently interpreting RSL messages is
osmo-bsc, the utils are merely concerned with OML, if at all.
- paging_flush_bts(): ip.access nanobts models call this when the RSL link is
dropped. Only osmo-bsc actually needs to do anything there.
- on_gsm_ts_init(): the mechanism to trigger timeslot initialization is related
to OML, while this action to take on init would pull in RSL dependencies.
utils/ and ipaccess/ each have a stubs.c file to implement these stubs. Tests
implement stubs inline where required.
From src/utils/, src/ipaccess/ and tests/*/, link in .o files from osmo-bsc/.
In order for this to work, the osmo-bsc subdir must be built before the other
source trees. (An alternative would be to include the .c files as sources, but
that would re-compile them in every source tree. Not a large burden really, but
unless linking .o files gives problems, let's have the quicker build.)
Minor obvious cleanups creep in with this patch, I will not bother to name them
individually now unless code review asks me to.
Rationale:
1) libbsc has been separate to use it for osmo-nitb and osmo-bsc in the old
openbsc.git. This is no longer required, and spreading over libbsc and osmo-bsc
is distracting.
2) Recently, ridiculous linking requirements have made adding new functions
cumbersome, because libbsc has started depending on osmo-bsc/*.c
implementations: on gscon FSM and bssap functions. For example, neither
bs11_config nor ipaccess-config nor bts_test need handover_cfg or BSSMAP
message composition. It makes no sense to link the entire osmo-bsc to it, nor
do we want to keep adding stubs to each linking realm.
Change-Id: I36a586726f5818121abe54d25654819fc451d3bf
2018-05-26 23:26:31 +00:00
|
|
|
struct gsm_network *net = talloc_zero(ctx, struct gsm_network);
|
2018-02-13 22:34:07 +00:00
|
|
|
if (!net)
|
|
|
|
return NULL;
|
|
|
|
|
2018-03-05 01:09:40 +00:00
|
|
|
net->plmn = (struct osmo_plmn_id){
|
|
|
|
.mcc = 1,
|
|
|
|
.mnc = 1,
|
|
|
|
};
|
2018-02-27 11:37:26 +00:00
|
|
|
|
2018-05-10 03:22:50 +00:00
|
|
|
net->dyn_ts_allow_tch_f = true;
|
|
|
|
|
2017-12-23 16:30:18 +00:00
|
|
|
/* Permit a compile-time default of A5/3 and A5/1 */
|
|
|
|
net->a5_encryption_mask = (1 << 3) | (1 << 1);
|
2018-02-13 22:34:07 +00:00
|
|
|
|
|
|
|
INIT_LLIST_HEAD(&net->subscr_conns);
|
|
|
|
|
|
|
|
net->bsc_subscribers = talloc_zero(net, struct llist_head);
|
|
|
|
INIT_LLIST_HEAD(net->bsc_subscribers);
|
2014-11-10 10:21:32 +00:00
|
|
|
|
dissolve libbsc: move all to src/osmo-bsc, link .o files
Move all of libbsc/ into osmo-bsc/, and separate/move some implementations to
allow linking from utils/* and ipaccess/* without pulling in unccessary
dependencies.
Some utilities use gsm_network and gsm_bts structs, which already include data
structures for fairly advanced uses. Move initialization that only osmo-bsc
needs into new bsc_network_init() and bsc_bts_alloc_register() functions, so
that the leaner tools can use the old gsm_* versions without the need to link
everything (e.g. handover and lchan alloc code).
In some instances, there need to be stubs if to cut off linking "just before
the RSL level" and prevent dependencies from creeping in.
- abis_rsl_rcvmsg(): the only program currently interpreting RSL messages is
osmo-bsc, the utils are merely concerned with OML, if at all.
- paging_flush_bts(): ip.access nanobts models call this when the RSL link is
dropped. Only osmo-bsc actually needs to do anything there.
- on_gsm_ts_init(): the mechanism to trigger timeslot initialization is related
to OML, while this action to take on init would pull in RSL dependencies.
utils/ and ipaccess/ each have a stubs.c file to implement these stubs. Tests
implement stubs inline where required.
From src/utils/, src/ipaccess/ and tests/*/, link in .o files from osmo-bsc/.
In order for this to work, the osmo-bsc subdir must be built before the other
source trees. (An alternative would be to include the .c files as sources, but
that would re-compile them in every source tree. Not a large burden really, but
unless linking .o files gives problems, let's have the quicker build.)
Minor obvious cleanups creep in with this patch, I will not bother to name them
individually now unless code review asks me to.
Rationale:
1) libbsc has been separate to use it for osmo-nitb and osmo-bsc in the old
openbsc.git. This is no longer required, and spreading over libbsc and osmo-bsc
is distracting.
2) Recently, ridiculous linking requirements have made adding new functions
cumbersome, because libbsc has started depending on osmo-bsc/*.c
implementations: on gscon FSM and bssap functions. For example, neither
bs11_config nor ipaccess-config nor bts_test need handover_cfg or BSSMAP
message composition. It makes no sense to link the entire osmo-bsc to it, nor
do we want to keep adding stubs to each linking realm.
Change-Id: I36a586726f5818121abe54d25654819fc451d3bf
2018-05-26 23:26:31 +00:00
|
|
|
INIT_LLIST_HEAD(&net->bts_list);
|
2014-11-10 10:21:32 +00:00
|
|
|
net->num_bts = 0;
|
2018-06-16 17:29:50 +00:00
|
|
|
|
|
|
|
net->T_defs = gsm_network_T_defs;
|
2019-01-28 02:52:14 +00:00
|
|
|
osmo_tdefs_reset(net->T_defs);
|
2014-11-10 10:21:32 +00:00
|
|
|
|
2019-04-23 16:37:37 +00:00
|
|
|
net->mgw.tdefs = g_mgw_tdefs;
|
|
|
|
osmo_tdefs_reset(net->mgw.tdefs);
|
|
|
|
|
2020-05-26 01:58:14 +00:00
|
|
|
net->null_nri_ranges = osmo_nri_ranges_alloc(net);
|
|
|
|
net->nri_bitlen = OSMO_NRI_BITLEN_DEFAULT;
|
|
|
|
|
2014-11-10 10:21:32 +00:00
|
|
|
return net;
|
|
|
|
}
|