aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile.am10
-rw-r--r--TODO-RELEASE12
-rw-r--r--configure.ac29
-rwxr-xr-xcontrib/jenkins.sh3
-rw-r--r--contrib/osmo-bsc.spec.in149
-rw-r--r--debian/changelog518
-rw-r--r--debian/control22
-rw-r--r--debian/osmo-bsc-doc.install1
-rw-r--r--debian/osmo-bsc.install1
-rwxr-xr-xdebian/rules6
-rw-r--r--doc/Makefile.am1
-rw-r--r--doc/assignment-fsm.dot1
-rw-r--r--doc/assignment.msc8
-rw-r--r--doc/e1-data-model.txt2
-rw-r--r--doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus01-4trx.cfg211
-rw-r--r--doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-4trx.cfg215
-rw-r--r--doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-8trx.cfg371
-rw-r--r--doc/examples/osmo-bsc/ericsson/osmo-bsc.rbs2308.cfg101
-rw-r--r--doc/examples/osmo-bsc/nokia/osmo-bsc.insite.cfg65
-rw-r--r--doc/examples/osmo-bsc/osmo-bsc-minimal.cfg4
-rw-r--r--doc/examples/osmo-bsc/osmo-bsc.cfg17
-rw-r--r--doc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg11
-rw-r--r--doc/examples/osmo-bsc/siemens/osmo-bsc.bs11.cfg76
-rw-r--r--doc/handover.txt2
-rw-r--r--doc/lchan-fsm.dot6
-rw-r--r--doc/lchan-rtp-fsm.dot7
-rw-r--r--doc/lchan.msc32
-rw-r--r--doc/location_services_ta.msc49
-rw-r--r--doc/manuals/Makefile.am8
-rw-r--r--doc/manuals/aoip-mgw-options.adoc2
-rw-r--r--doc/manuals/chapters/bsc.adoc115
-rw-r--r--doc/manuals/chapters/bts-examples.adoc127
-rw-r--r--doc/manuals/chapters/bts.adoc559
-rw-r--r--doc/manuals/chapters/control.adoc7
-rw-r--r--doc/manuals/chapters/counters.adoc2
-rw-r--r--doc/manuals/chapters/counters_generated.adoc196
-rw-r--r--doc/manuals/chapters/handover.adoc222
-rw-r--r--doc/manuals/chapters/handover_inter_bsc.dot4
-rw-r--r--doc/manuals/chapters/handover_intra_bsc.dot4
-rw-r--r--doc/manuals/chapters/mscpool.adoc213
-rw-r--r--doc/manuals/chapters/osmux_bsc.adoc43
-rw-r--r--doc/manuals/chapters/overview.adoc63
-rw-r--r--doc/manuals/chapters/running.adoc114
-rw-r--r--doc/manuals/chapters/smlc.adoc73
-rw-r--r--doc/manuals/chapters/smscb.adoc104
-rw-r--r--doc/manuals/images/osmux-expected-traffic-savings.svg822
-rw-r--r--doc/manuals/message-sequences/location_services_ta.msc49
-rw-r--r--doc/manuals/message-sequences/mo_call-abis_a.msc2
-rw-r--r--doc/manuals/mgw/classic-bsc.msc2
-rw-r--r--doc/manuals/osmobsc-usermanual.adoc30
-rw-r--r--doc/manuals/osmobsc-vty-reference.xml8
-rw-r--r--doc/manuals/osmux-reference.adoc61
-rwxr-xr-xdoc/manuals/regen_doc.sh17
-rw-r--r--doc/manuals/vty/bsc_vty_reference.xml4846
-rw-r--r--doc/manuals/vty/libbsc_vty_additions.xml12
-rw-r--r--include/mISDNif.h6
-rw-r--r--include/osmocom/bsc/Makefile.am15
-rw-r--r--include/osmocom/bsc/a_reset.h4
-rw-r--r--include/osmocom/bsc/abis_nm.h10
-rw-r--r--include/osmocom/bsc/abis_om2000.h4
-rw-r--r--include/osmocom/bsc/abis_rsl.h15
-rw-r--r--include/osmocom/bsc/acc.h (renamed from include/osmocom/bsc/acc_ramp.h)98
-rw-r--r--include/osmocom/bsc/bsc_msc_data.h164
-rw-r--r--include/osmocom/bsc/bsc_msg_filter.h103
-rw-r--r--include/osmocom/bsc/bsc_subscr_conn_fsm.h27
-rw-r--r--include/osmocom/bsc/bsc_subscriber.h31
-rw-r--r--include/osmocom/bsc/bss.h1
-rw-r--r--include/osmocom/bsc/bssmap_reset.h29
-rw-r--r--include/osmocom/bsc/bts.h627
-rw-r--r--include/osmocom/bsc/bts_trx.h100
-rw-r--r--include/osmocom/bsc/chan_alloc.h3
-rw-r--r--include/osmocom/bsc/codec_pref.h13
-rw-r--r--include/osmocom/bsc/debug.h10
-rw-r--r--include/osmocom/bsc/gsm_04_08_rr.h9
-rw-r--r--include/osmocom/bsc/gsm_04_80.h7
-rw-r--r--include/osmocom/bsc/gsm_08_08.h5
-rw-r--r--include/osmocom/bsc/gsm_data.h936
-rw-r--r--include/osmocom/bsc/gsm_timers.h56
-rw-r--r--include/osmocom/bsc/handover.h20
-rw-r--r--include/osmocom/bsc/handover_cfg.h31
-rw-r--r--include/osmocom/bsc/handover_fsm.h18
-rw-r--r--include/osmocom/bsc/ipaccess.h4
-rw-r--r--include/osmocom/bsc/lb.h63
-rw-r--r--include/osmocom/bsc/lchan_fsm.h13
-rw-r--r--include/osmocom/bsc/lchan_rtp_fsm.h5
-rw-r--r--include/osmocom/bsc/lchan_select.h3
-rw-r--r--include/osmocom/bsc/lcs_loc_req.h48
-rw-r--r--include/osmocom/bsc/lcs_ta_req.h29
-rw-r--r--include/osmocom/bsc/meas_feed.h2
-rw-r--r--include/osmocom/bsc/mgw_endpoint_fsm.h59
-rw-r--r--include/osmocom/bsc/neighbor_ident.h2
-rw-r--r--include/osmocom/bsc/nm_common_fsm.h84
-rw-r--r--include/osmocom/bsc/osmo_bsc.h13
-rw-r--r--include/osmocom/bsc/osmo_bsc_grace.h5
-rw-r--r--include/osmocom/bsc/osmo_bsc_lcls.h20
-rw-r--r--include/osmocom/bsc/osmo_bsc_sigtran.h16
-rw-r--r--include/osmocom/bsc/osmux.h36
-rw-r--r--include/osmocom/bsc/paging.h48
-rw-r--r--include/osmocom/bsc/pcuif_proto.h49
-rw-r--r--include/osmocom/bsc/penalty_timers.h2
-rw-r--r--include/osmocom/bsc/rest_octets.h5
-rw-r--r--include/osmocom/bsc/signal.h18
-rw-r--r--include/osmocom/bsc/smscb.h66
-rw-r--r--include/osmocom/bsc/system_information.h1
-rw-r--r--include/osmocom/bsc/ussd.h10
-rw-r--r--include/osmocom/bsc/vty.h14
-rw-r--r--osmoappdesc.py2
-rw-r--r--src/Makefile.am6
-rw-r--r--src/ipaccess/Makefile.am28
-rw-r--r--src/ipaccess/abisip-find.c15
-rw-r--r--src/ipaccess/ipaccess-config.c53
-rw-r--r--src/ipaccess/ipaccess-proxy.c51
-rw-r--r--src/ipaccess/network_listen.c1
-rw-r--r--src/libfilter/Makefile.am27
-rw-r--r--src/libfilter/bsc_msg_acc.c136
-rw-r--r--src/libfilter/bsc_msg_filter.c339
-rw-r--r--src/libfilter/bsc_msg_vty.c149
-rw-r--r--src/osmo-bsc/Makefile.am26
-rw-r--r--src/osmo-bsc/a_reset.c189
-rw-r--r--src/osmo-bsc/abis_nm.c425
-rw-r--r--src/osmo-bsc/abis_nm_vty.c4
-rw-r--r--src/osmo-bsc/abis_om2000.c406
-rw-r--r--src/osmo-bsc/abis_om2000_vty.c143
-rw-r--r--src/osmo-bsc/abis_rsl.c521
-rw-r--r--src/osmo-bsc/acc.c648
-rw-r--r--src/osmo-bsc/acc_ramp.c363
-rw-r--r--src/osmo-bsc/assignment_fsm.c361
-rw-r--r--src/osmo-bsc/bsc_ctrl_commands.c9
-rw-r--r--src/osmo-bsc/bsc_ctrl_lookup.c1
-rw-r--r--src/osmo-bsc/bsc_init.c232
-rw-r--r--src/osmo-bsc/bsc_rf_ctrl.c33
-rw-r--r--src/osmo-bsc/bsc_sccp.c64
-rw-r--r--src/osmo-bsc/bsc_subscr_conn_fsm.c336
-rw-r--r--src/osmo-bsc/bsc_subscriber.c173
-rw-r--r--src/osmo-bsc/bsc_vty.c3892
-rw-r--r--src/osmo-bsc/bssmap_reset.c241
-rw-r--r--src/osmo-bsc/bts.c1129
-rw-r--r--src/osmo-bsc/bts_ericsson_rbs2000.c15
-rw-r--r--src/osmo-bsc/bts_ipaccess_nanobts.c276
-rw-r--r--src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c51
-rw-r--r--src/osmo-bsc/bts_nokia_site.c186
-rw-r--r--src/osmo-bsc/bts_siemens_bs11.c28
-rw-r--r--src/osmo-bsc/bts_sysmobts.c6
-rw-r--r--src/osmo-bsc/bts_trx.c452
-rw-r--r--src/osmo-bsc/bts_unknown.c7
-rw-r--r--src/osmo-bsc/cbch_scheduler.c288
-rw-r--r--src/osmo-bsc/cbsp_link.c660
-rw-r--r--src/osmo-bsc/chan_alloc.c107
-rw-r--r--src/osmo-bsc/codec_pref.c172
-rw-r--r--src/osmo-bsc/e1_config.c33
-rw-r--r--src/osmo-bsc/gsm_04_08_rr.c221
-rw-r--r--src/osmo-bsc/gsm_04_80_utils.c42
-rw-r--r--src/osmo-bsc/gsm_08_08.c879
-rw-r--r--src/osmo-bsc/gsm_data.c1033
-rw-r--r--src/osmo-bsc/gsm_timers.c207
-rw-r--r--src/osmo-bsc/gsm_timers_vty.c118
-rw-r--r--src/osmo-bsc/handover_decision.c3
-rw-r--r--src/osmo-bsc/handover_decision_2.c75
-rw-r--r--src/osmo-bsc/handover_fsm.c436
-rw-r--r--src/osmo-bsc/handover_logic.c214
-rw-r--r--src/osmo-bsc/handover_vty.c28
-rw-r--r--src/osmo-bsc/lb.c800
-rw-r--r--src/osmo-bsc/lchan_fsm.c380
-rw-r--r--src/osmo-bsc/lchan_rtp_fsm.c234
-rw-r--r--src/osmo-bsc/lchan_select.c66
-rw-r--r--src/osmo-bsc/lcs_loc_req.c581
-rw-r--r--src/osmo-bsc/lcs_ta_req.c305
-rw-r--r--src/osmo-bsc/meas_feed.c5
-rw-r--r--src/osmo-bsc/mgw_endpoint_fsm.c777
-rw-r--r--src/osmo-bsc/neighbor_ident_vty.c96
-rw-r--r--src/osmo-bsc/net_init.c50
-rw-r--r--src/osmo-bsc/nm_bb_transc_fsm.c334
-rw-r--r--src/osmo-bsc/nm_bts_fsm.c353
-rw-r--r--src/osmo-bsc/nm_bts_sm_fsm.c284
-rw-r--r--src/osmo-bsc/nm_channel_fsm.c360
-rw-r--r--src/osmo-bsc/nm_common_fsm.c (renamed from include/osmocom/bsc/osmo_bsc_reset.h)34
-rw-r--r--src/osmo-bsc/nm_rcarrier_fsm.c355
-rw-r--r--src/osmo-bsc/osmo_bsc_bssap.c754
-rw-r--r--src/osmo-bsc/osmo_bsc_ctrl.c163
-rw-r--r--src/osmo-bsc/osmo_bsc_filter.c54
-rw-r--r--src/osmo-bsc/osmo_bsc_grace.c118
-rw-r--r--src/osmo-bsc/osmo_bsc_lcls.c72
-rw-r--r--src/osmo-bsc/osmo_bsc_main.c246
-rw-r--r--src/osmo-bsc/osmo_bsc_mgcp.c92
-rw-r--r--src/osmo-bsc/osmo_bsc_msc.c193
-rw-r--r--src/osmo-bsc/osmo_bsc_sigtran.c362
-rw-r--r--src/osmo-bsc/osmo_bsc_vty.c1027
-rw-r--r--src/osmo-bsc/paging.c220
-rw-r--r--src/osmo-bsc/pcu_sock.c123
-rw-r--r--src/osmo-bsc/rest_octets.c41
-rw-r--r--src/osmo-bsc/smscb.c906
-rw-r--r--src/osmo-bsc/system_information.c75
-rw-r--r--src/osmo-bsc/timeslot_fsm.c79
-rw-r--r--src/utils/Makefile.am26
-rw-r--r--src/utils/bs11_config.c20
-rw-r--r--src/utils/meas_json.c22
-rw-r--r--src/utils/meas_udp2db.c2
-rw-r--r--src/utils/meas_vis.c34
-rw-r--r--tests/Makefile.am12
-rw-r--r--tests/abis/Makefile.am11
-rw-r--r--tests/abis/abis_test.c7
-rw-r--r--tests/acc/Makefile.am44
-rw-r--r--tests/acc/acc_test.c557
-rw-r--r--tests/acc/acc_test.ok3014
-rw-r--r--tests/bsc/Makefile.am11
-rw-r--r--tests/bsc/bsc_test.c32
-rw-r--r--tests/cbc.vty275
-rw-r--r--tests/codec_pref/codec_pref_test.c12
-rw-r--r--tests/codec_pref/codec_pref_test.ok12
-rwxr-xr-xtests/ctrl_test_runner.py358
-rw-r--r--tests/gprs_bvci_default.vty13
-rw-r--r--tests/gsm0408/Makefile.am12
-rw-r--r--tests/gsm0408/gsm0408_test.c44
-rw-r--r--tests/gsm0408/gsm0408_test.ok163
-rw-r--r--tests/handover/Makefile.am42
-rw-r--r--tests/handover/handover_test.c90
-rw-r--r--tests/handover_cfg.vty60
-rw-r--r--tests/nanobts_omlattr/Makefile.am10
-rw-r--r--tests/nanobts_omlattr/nanobts_omlattr_test.c38
-rw-r--r--tests/nanobts_omlattr/nanobts_omlattr_test.ok5
-rw-r--r--tests/neighbor_ident.vty25
-rw-r--r--tests/nri_cfg.vty166
-rw-r--r--tests/smlc.vty73
-rw-r--r--tests/subscr/bsc_subscr_test.c35
-rw-r--r--tests/subscr/bsc_subscr_test.err40
-rw-r--r--tests/testsuite.at12
-rw-r--r--tests/timer.vty150
-rwxr-xr-xtests/vty_test_runner.py131
229 files changed, 27927 insertions, 15304 deletions
diff --git a/.gitignore b/.gitignore
index ea828b6f1..c7b14bff3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,3 +83,5 @@ doc/manuals/generated/
doc/manuals/osmomsc-usermanual.xml
doc/manuals/common
doc/manuals/build
+
+contrib/osmo-bsc.spec
diff --git a/Makefile.am b/Makefile.am
index f42e6d0f0..3a2d56f56 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,15 +9,21 @@ AM_CPPFLAGS = \
$(NULL)
SUBDIRS = \
- doc \
include \
src \
tests \
+ doc \
contrib \
$(NULL)
BUILT_SOURCES = $(top_srcdir)/.version
-EXTRA_DIST = git-version-gen osmoappdesc.py .version
+EXTRA_DIST = \
+ .version \
+ contrib/osmo-bsc.spec.in \
+ debian \
+ git-version-gen \
+ osmoappdesc.py \
+ $(NULL)
AM_DISTCHECK_CONFIGURE_FLAGS = \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
diff --git a/TODO-RELEASE b/TODO-RELEASE
new file mode 100644
index 000000000..6a39a2192
--- /dev/null
+++ b/TODO-RELEASE
@@ -0,0 +1,12 @@
+# When cleaning up this file: bump API version in corresponding Makefile.am and rename corresponding debian/lib*.install
+# according to https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
+# In short:
+# LIBVERSION=c:r:a
+# If the library source code has changed at all since the last update, then increment revision: c:r + 1:a.
+# If any interfaces have been added, removed, or changed since the last update: c + 1:0:0.
+# If any interfaces have been added since the last public release: c:r:a + 1.
+# If any interfaces have been removed or changed since the last public release: c:r:0.
+#library what description / commit summary line
+manual needs common chapter cs7-config.adoc, vty_cpu_sched.adoc from osmo-gsm-manuals > 0.3.0
+osmo-bsc Mobile Identity Coding OsmoBSC is stricter in rejecting invalid coding of Mobile Identity IEs
+libosmocore >1.4.0 (1.4.1?) need BSSMAP-LE, BSSLAP, GAD coding
diff --git a/configure.ac b/configure.ac
index eafe4d6e7..ed9b2cb3f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,6 +22,11 @@ AC_PROG_CC
AC_PROG_INSTALL
LT_INIT
+dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
+AS_CASE(["$LD"],[*clang*],
+ [AS_CASE(["${host_os}"],
+ [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
+
dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
@@ -38,16 +43,21 @@ dnl checks for libraries
AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
AC_SUBST(LIBRARY_DL)
+# Enable/disable ipaccess-utils (src/ipacces/)?
+AC_ARG_ENABLE([ipaccess-utils], [AS_HELP_STRING([--enable-ipaccess-utils], [Build ipaccess utils: abisip-find, ipaccess-config, ...])],
+ [osmo_ac_ipa_utils="$enableval"],[osmo_ac_ipa_utils="yes"])
+AM_CONDITIONAL(BUILD_IPA_UTILS, test "x$osmo_ac_ipa_utils" = "xyes")
+AC_SUBST(osmo_ac_ipa_utils)
-PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.12.0)
-PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.12.0)
-PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 0.12.0)
-PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.12.0)
-PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 0.5.1)
-PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.3.0)
+PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.4.0)
+PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.4.0)
+PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.4.0)
+PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.4.0)
+PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 0.6.0)
+PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.6.0)
PKG_CHECK_MODULES(LIBOSMOSIGTRAN, libosmo-sigtran >= 0.10.0)
PKG_CHECK_MODULES(LIBOSMOSCCP, libosmo-sccp >= 0.10.0)
-PKG_CHECK_MODULES(LIBOSMOMGCPCLIENT, libosmo-mgcp-client >= 1.4.0)
+PKG_CHECK_MODULES(LIBOSMOMGCPCLIENT, libosmo-mgcp-client >= 1.6.0)
dnl checks for header files
AC_HEADER_STDC
@@ -112,7 +122,7 @@ AC_SUBST(SYMBOL_VISIBILITY)
AX_CHECK_COMPILE_FLAG([-Werror=implicit], [CFLAGS="$CFLAGS -Werror=implicit"])
AX_CHECK_COMPILE_FLAG([-Werror=maybe-uninitialized], [CFLAGS="$CFLAGS -Werror=maybe-uninitialized"])
AX_CHECK_COMPILE_FLAG([-Werror=memset-transposed-args], [CFLAGS="$CFLAGS -Werror=memset-transposed-args"])
-AX_CHECK_COMPILE_FLAG([-Werror=null-dereference], [CFLAGS="$CFLAGS -Werror=null-dereference"])
+AX_CHECK_COMPILE_FLAG([-Wnull-dereference], [CFLAGS="$CFLAGS -Wnull-dereference"])
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-array-argument], [CFLAGS="$CFLAGS -Werror=sizeof-array-argument"])
AX_CHECK_COMPILE_FLAG([-Werror=sizeof-pointer-memaccess], [CFLAGS="$CFLAGS -Werror=sizeof-pointer-memaccess"])
@@ -226,12 +236,12 @@ AC_OUTPUT(
include/osmocom/Makefile
include/osmocom/bsc/Makefile
src/Makefile
- src/libfilter/Makefile
src/osmo-bsc/Makefile
src/ipaccess/Makefile
src/utils/Makefile
tests/Makefile
tests/atlocal
+ tests/acc/Makefile
tests/gsm0408/Makefile
tests/bsc/Makefile
tests/codec_pref/Makefile
@@ -244,4 +254,5 @@ AC_OUTPUT(
doc/manuals/Makefile
contrib/Makefile
contrib/systemd/Makefile
+ contrib/osmo-bsc.spec
Makefile)
diff --git a/contrib/jenkins.sh b/contrib/jenkins.sh
index a47935f9b..11e42516c 100755
--- a/contrib/jenkins.sh
+++ b/contrib/jenkins.sh
@@ -59,11 +59,12 @@ LD_LIBRARY_PATH="$inst/lib" $MAKE check \
|| cat-testlogs.sh
LD_LIBRARY_PATH="$inst/lib" \
DISTCHECK_CONFIGURE_FLAGS="--enable-vty-tests --enable-external-tests --enable-werror $CONFIG" \
- $MAKE distcheck \
+ $MAKE $PARALLEL_MAKE distcheck \
|| cat-testlogs.sh
if [ "$WITH_MANUALS" = "1" ] && [ "$PUBLISH" = "1" ]; then
make -C "$base/doc/manuals" publish
fi
+$MAKE $PARALLEL_MAKE maintainer-clean
osmo-clean-workspace.sh
diff --git a/contrib/osmo-bsc.spec.in b/contrib/osmo-bsc.spec.in
new file mode 100644
index 000000000..8293c5195
--- /dev/null
+++ b/contrib/osmo-bsc.spec.in
@@ -0,0 +1,149 @@
+#
+# spec file for package osmo-bsc
+#
+# Copyright (c) 2017, Martin Hauke <mardnh@gmx.de>
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+## Disable LTO for now since it breaks compilation of the tests
+## https://osmocom.org/issues/4113
+%define _lto_cflags %{nil}
+
+Name: osmo-bsc
+Version: @VERSION@
+Release: 0
+Summary: OsmoBSC: Osmocom's Base Station Controller for 2G CS mobile networks
+License: AGPL-3.0-or-later AND GPL-2.0-or-later
+Group: Hardware/Mobile
+URL: https://osmocom.org/projects/osmobsc
+Source: %{name}-%{version}.tar.xz
+BuildRequires: automake >= 1.9
+BuildRequires: libtool >= 2
+BuildRequires: pkgconfig >= 0.20
+%if 0%{?suse_version}
+BuildRequires: systemd-rpm-macros
+%endif
+BuildRequires: pkgconfig(libcrypto) >= 0.9.5
+BuildRequires: pkgconfig(libosmo-mgcp-client) >= 1.5.0
+BuildRequires: pkgconfig(libosmo-netif) >= 0.6.0
+BuildRequires: pkgconfig(libosmo-sccp) >= 0.10.0
+BuildRequires: pkgconfig(libosmo-sigtran) >= 0.10.0
+BuildRequires: pkgconfig(libosmoabis) >= 0.6.0
+BuildRequires: pkgconfig(libosmocore) >= 1.2.0
+BuildRequires: pkgconfig(libosmoctrl) >= 1.2.0
+BuildRequires: pkgconfig(libosmogb)
+BuildRequires: pkgconfig(libosmogsm) >= 1.2.0
+BuildRequires: pkgconfig(libosmovty) >= 1.2.0
+BuildRequires: pkgconfig(talloc)
+%{?systemd_requires}
+
+%description
+OsmoBSC: Osmocom's Base Station Controller for 2G circuit-switched mobile networks.
+
+%package abisip-find
+Summary: CLI utility to find ip.access compatible BTS
+License: GPL-2.0-or-later
+Group: Productivity/Telephony/Utilities
+
+%description abisip-find
+Command line utility to find ip.access compatible BTS.
+
+%package ipaccess-utils
+Summary: Command line utilities for ip.access nanoBTS
+License: GPL-2.0-or-later
+Group: Productivity/Telephony/Utilities
+
+%description ipaccess-utils
+This package contains utilities that are specific for nanoBTS when being
+used together with OpenBSC. It contains mainly two tools: ipaccess-config
+and ipaccess-proxy.
+
+%package bs11-utils
+Summary: Command line utilities for Siemens BS-11 BTS
+License: GPL-2.0-or-later
+Group: Productivity/Telephony/Utilities
+
+%description bs11-utils
+There is a tool in this package for configuring the Siemens BS-11 BTS.
+Additionally, it contains one tool for making use of an ISDN-card and the
+public telephone network as frequency standard for the E1 line.
+
+%package meas-utils
+Summary: Command line utilities for OsmoBSC's measurement reports
+License: GPL-2.0-or-later
+Group: Productivity/Telephony/Utilities
+
+%description meas-utils
+This package contains utilities for handling OsmoBSC's measurement reports
+ * meas_json to convert measurement feed into a JSON feed
+
+%prep
+%setup -q
+
+%build
+echo "%{version}" >.tarball-version
+autoreconf -fi
+%configure \
+ --docdir=%{_docdir}/%{name} \
+ --with-systemdsystemunitdir=%{_unitdir}
+make %{?_smp_mflags}
+
+%install
+%make_install
+
+%if 0%{?suse_version}
+%preun
+%service_del_preun %{name}.service
+
+%postun
+%service_del_postun %{name}.service
+
+%pre
+%service_add_pre %{name}.service
+
+%post
+%service_add_post %{name}.service
+%endif
+
+%check
+make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
+
+%files
+%license COPYING
+%doc AUTHORS README
+%{_bindir}/osmo-bsc
+%dir %{_docdir}/%{name}/examples
+%dir %{_docdir}/%{name}/examples/osmo-bsc
+%{_docdir}/%{name}/examples/osmo-bsc/osmo-bsc.cfg
+%{_docdir}/%{name}/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg
+%{_docdir}/%{name}/examples/osmo-bsc/osmo-bsc-minimal.cfg
+%dir %{_docdir}/%{name}/examples/osmo-bsc/ericsson
+%dir %{_docdir}/%{name}/examples/osmo-bsc/nokia
+%dir %{_docdir}/%{name}/examples/osmo-bsc/siemens
+%{_docdir}/%{name}/examples/osmo-bsc/*/osmo-bsc*.cfg
+%dir %{_sysconfdir}/osmocom
+%config(noreplace) %{_sysconfdir}/osmocom/osmo-bsc.cfg
+%{_unitdir}/%{name}.service
+
+%files abisip-find
+%{_bindir}/abisip-find
+
+%files ipaccess-utils
+%{_bindir}/ipaccess-config
+%{_bindir}/ipaccess-proxy
+
+%files bs11-utils
+%{_bindir}/bs11_config
+%{_bindir}/isdnsync
+
+%files meas-utils
+%{_bindir}/meas_json
+
+%changelog
diff --git a/debian/changelog b/debian/changelog
index 2e07507ef..b65bc0dd8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,521 @@
+osmo-bsc (1.6.0) unstable; urgency=medium
+
+ [ Philipp Maier ]
+ * bsc_msc_data: remove unused member is_authenticated
+ * gsm_08_08.c: always pick first msc for unsolicit paging responses
+
+ [ Neels Hofmeyr ]
+ * add vty 'no neighbors' to remove all HO targets
+ * neighbor config: allow re-using ARFCN+BSIC pairs
+ * fsm: use deferred deallocation
+
+ [ Vadim Yanitskiy ]
+ * abis_nm.c: use LOGP() macro instead of LOGPC()
+ * lchan_select.c: tune log level in lchan_select_by_type()
+ * VTY: also print the active phan config in ts_dump_vty()
+ * osmo_bsc_main.c: verify the physical channel mapping at startup
+ * osmo_bsc_main.c: simplify computation of CCCH_CONFIG
+ * osmo_bsc_main.c: fix CCCH_CONF computation: use pchan_from_config
+ * abis_nm.c: fix error message in verify_chan_comb()
+ * abis_nm.c: replace magic numbers with NM_CHANC_* constants
+ * abis_nm.c: fix RSL connection timeout for trx->nr > 0
+
+ [ Harald Welte ]
+ * Cell Broadcast: CBSP and CBCH scheduling support
+ * doc: update bsc_vty_reference.xml
+ * manual: Update statements regarding SCCPlite
+ * SMSCB: Send ETWS primary warning message via all dedicated channels
+ * SMSCB: Send ETWS Primary Notifiation via RSL to BTS
+ * check for osmo_fsm_register() error return value
+ * check for osmo_ss7_init() error return value
+ * manual: Fix copy+paste error
+ * Move a_reset_fsm regstration to __attribute__((contructor))
+ * exit(2) on unsupported positional arguments on command line
+ * gsm_04_80: Avoid using deprecated API
+
+ [ Pau Espin Pedrol ]
+ * a_reset.c: Don't wait 2 seconds to send first BSSMAP RESET
+ * bsc: gsm_08_08.c: Remove repeated conn not null check
+ * bsc_subscr_conn_fsm: Cleanly clear BSSAP conn if associated channel closed during WAIT_CC
+ * gsm_08_08.c: Mark func bsc_find_msc() static
+ * sigtran: Set default remote ip to localhost instead of null
+ * bsc_vty: Fix typo in 'no depends-on-bts' cmd
+ * rsl: Send IE MS Power Param during CHAN ACT and MS PWR CTRL messages
+ * rsl.c: Clean up some repeated use of long chains of pointers
+ * rsl: Send IE MS Power Param to osmocom BTS models only
+ * Remove unused API classmark_is_r99()
+ * gsm_data.h: Remove unused field classmark from gsm_subscriber_connection
+ * gsm_data.h: Remove unused func declarations
+ * bsc: Adapt maximum MS Power Ctrl level based on band and MS Power class
+ * cosmetic: bs11_config: clean trailing whitespace
+ * bsc: Send MS Power Control msg upon max MS power change
+
+ [ Martin Hauke ]
+ * Fix some typos
+
+ [ Oliver Smith ]
+ * doc: osmux: use generated svg instead of pychart
+ * debian, osmoappdesc.py, tests: switch to python 3
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Fri, 03 Jan 2020 18:24:51 +0100
+
+osmo-bsc (1.5.0) unstable; urgency=medium
+
+ [ Max ]
+ * LCLS: constify helper parameters
+ * LCLS: use libosmocore function to add status
+ * nanobts: use libosmocore's osmo_store*() for OML attr. patching
+
+ [ Philipp Maier ]
+ * lchan_select: dont allow half rate EFR to be selected
+ * lchan_select: Do not unsolicitedly select a TCH/F
+ * bsc_vty: add vty command to display all lchans
+ * bsc_vty: add features to disable specific lchans via vty
+ * assignment_fsm: fix channel allocator preferences
+ * assignment_fsm: use activate.info.s15_s0 for ASS. COMPL.
+ * handover_fsm: copy old S15_S0 to new lchan
+ * osmo_bsc_msc: Use meaningful amr rate configuration on BTS level
+ * codec_pref: fix special handling for AMR rate configuration (S15-S0)
+ * lchan_fsm: make sure multi rate configuration is valid
+ * lchan_fsm: do not include 12.2k in active set on HR channels
+ * AMR: Signal usage of octet-aligned or bandwith-efficient mode to MSC
+ * lchan_fsm: add missing header file.
+ * osmo_bsc_bssap: check bssmap length field
+ * rest_octets: add Serving Cell Priority Parameters
+
+ [ Neels Hofmeyr ]
+ * abis_rsl: Fix TCH-as-SDCCH allocation on Channel Request
+ * handover_fsm: do not access conn->assignment.req, it may be outdated
+ * comments: clarify usage of conn.assignment and .handover scopes
+ * cosmetic: drop unused struct mgcp_ctx shadow
+ * incoming connect: don't crash if calling addr is missing
+ * log N-CONNECT from MSC
+ * Revert "assignment_fsm: Properly support assigning signalling mode TCH/x"
+ * fix log line end in assignment_fsm.c
+ * avoid use-after-free: on MGW endpoint dealloc, also forget it in conn->ho.*
+ * lchan activation: add explicit encryption info to activation
+ * Handover Request: also parse Chosen Algorithm IE, pass to lchan activation
+ * fix inter-BSC-HO-incoming for AoIP (1/2)
+ * use libosmocore osmo_tdef
+ * move mgw endpoint FSM to osmo-mgw.git
+ * fix inter-BSC-HO-incoming for AoIP (1/2)
+ * fix inter-BSC-HO-incoming for AoIP (2/2)
+ * abis_rsl.c: missing newlines on log lines
+ * doc/manuals: review and tweak handover docs
+ * make bsc_clear_request() static
+ * doc/manuals, vty doc: more handover doc clarifications
+ * remove double BSSMAP Clear on HO failure
+ * comment and VTY doc tweaks
+ * silence error for "invalid enum handover_scope value: none"
+
+ [ Harald Welte ]
+ * gsm_data: Add gsm_bts_name() just like we have gsm_{trx,ts,lchan}_name()
+ * manual: It's not "A over SCCP" but "BSSAP over SCCP"
+ * manual: Add sections on 3G/4G neighbor cells
+ * manual: Re-order chapters in more logical order
+ * manual: s/OsmoNITB/OsmoBSC/ in examples; remove E1 based BTSs
+ * manual: Remove bogus "Control interface" sub-section in overview
+ * Implement CSFB "Fast Return" Handling at RR RELEASE
+ * OML: Fix encoded length value of OML GET ATTRIBUTES
+ * Make sure to default to AMR octet-aligned mode
+ * abis_rsl: Add support for extended CBCH to rsl_sms_cb_command()
+ * abis_rsl: Avoid "Unimplemented" log message for every CBCH LOAD IND
+ * abis_rsl: Fix log message about unimplemented common channel msg
+ * smscb: Allow transmit of SCHEDULE and DEFAULT SMSCB
+ * chan_alloc: Don't include CBCH channels in load computation
+ * keep per-BTS stat_items about RACH busy / RACH access percentage
+ * vty: Dump per-bts stat_item group in 'show bts' output
+ * Allow VTY to set the CCCH Load Indication Threshold
+ * rx_fail_evt_rep(): Don't recycle variable
+ * Re-introduce support for IPA-encapsulated MGCP
+ * logging: introduce LOG_BTS and LOG_TRX and use it everywhere
+ * vty: Fix typo in VTY command descrption -> description
+
+ [ Pau Espin Pedrol ]
+ * ipaccess/Makefile.am: Remove unneeded libmgcp-client dep
+ * Move LCLS references from gsm_data to osmo_bsc_lcls
+ * Move msc related code from gsm_data to bsc_msc
+ * ipaccess/Makefile.am: Remove unneeded libosmo-sigtran dep
+ * net_init.c: remove unneeded header
+ * configure.ac: Add flag to enable/disable build of ipaccess related utils
+ * src/utils/Makefile.am: Drop unneeded sigtran and mgcp-client deps
+ * fix another log line end in assignment_fsm.c
+ * Drop unused old osmux leftover code
+ * vty: Add option to enable osmux towards MSC
+ * bssap: Detect MSC Osmux support on RESET (ACK) recv
+ * bssap: Announce Osmux support on RESET (ACK) send
+ * bssap: Parse Osmux CID on BSSAP Assign Req recv and use it in MGCP
+ * bssap: Feed Assign Complete with Osmux CID retrieved from MGW
+ * lcls: Fix MDCX with garbage on LCLS loop break
+ * Introduce msc_is_{sccplite,aoip}() helpers
+ * bsc: Append Osmux Support IE only on AoIP
+ * Remove extern declarations of libosmovty symbols
+ * bsc_subscr_conn_fsm: Use gscon_bssmap_clear() helper on send failure
+ * bsc_subscr_conn_fsm: Log Tx of BSSMAP Clear Request with cause
+ * doc: Add Osmux documentation to User Manual
+ * Remove undefined param passed to logging_vty_add_cmds
+
+ [ Sylvain Munaut ]
+ * assignment_fsm: Properly support assigning signalling mode TCH/x
+ * assignment_fsm: Properly support assigning signalling mode TCH/x
+
+ [ Vadim Yanitskiy ]
+ * abis_nm.c: use proper format specifiers for BTS / TRX number
+ * abis_nm.c: also print TRX number in abis_nm_get_attr()
+ * abis_nm.c: use abis_nm_ipa_magic from libosmocore
+ * abis_nm.c: use msgb_lv_put() to put abis_nm_ipa_magic
+ * abis_nm.c: fix broken logging in abis_nm_rx_ipacc()
+ * gsm_data.c: use REG_NOSUB flag of regcomp()
+ * osmo_bsc_lcls.c: cosmetic: make Coverity happy
+ * ipaccess-config: use POSIX regex for Unit ID format check
+ * handover_fsm.c: fix: prevent possible buffer overflow
+
+ [ Daniel Willmann ]
+ * doc: Add generic counter chapter in manual
+ * manuals: Fix example config to reflect OsmoBSC commands
+ * Change comments/strings from OpenBSC to OsmoBSC
+ * gsm_data.h: Remove unused variable from OpenBSC times
+ * Revert "fix inter-BSC-HO-incoming for AoIP (1/2)"
+ * manuals: Update generated VTY reference and counters
+ * manuals: Add script to update vtr/counter documentation from docker
+
+ [ Oliver Smith ]
+ * debian: create -doc subpackage with pdf manuals
+ * contrib/jenkins.sh: run "make maintainer-clean"
+ * contrib/jenkins.sh: "maintainer-clean" after "publish"
+ * osmo-bsc.cfg: work with osmo-bts example cfg
+
+ [ Eric Wild ]
+ * vty: adjust config name for unit-id
+ * turn -Werror=null-dereference into a warning
+
+ [ Ruben Undheim ]
+ * Fix some spelling errors found by lintian
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Wed, 07 Aug 2019 20:42:06 +0200
+
+osmo-bsc (1.4.0) unstable; urgency=medium
+
+ [ Neels Hofmeyr ]
+ * inter-BSC HO: add neighbor_ident API to manage neighbor-BSS-cells
+ * inter-BSC HO: neighbor_ident API: drop 9bit BSIC
+ * doc: update/fix FSM charts
+ * fix / clarify rsl dtap cache
+ * rename gsm_04_08_utils.[hc] to gsm_04_08_rr
+ * cosmetic: move RR functions from bsc_api.c to gsm_04_08_rr.c
+ * add gsm_timers, for Tnnn definitions usable by FSMs
+ * large refactoring: use FSMs for lchans; add inter-BSC HO
+ * fix nanobts: timeslot FSM: use flags to remember OML,RSL status
+ * fix: dispatch TS_EV_RSL_DOWN when losing RSL
+ * timeslot FSM: fix infinite recursion on failure to send PDCH ACT
+ * timeslot FSM: permit entering broken state from anywhere
+ * cosmetic: FSMs: allow ignorable events
+ * fix BSC_CTR_ASSIGNMENT doc strings
+ * lchan_fsm: split off lchan_rtp_fsm, establish RTP a bit earlier
+ * lchan_fsm: add in_release_handler flag
+ * allocate larger lchans if no SDCCH are available
+ * create separate logging categories for lchan,ts,as FSMs
+ * cosmetic: constify gsm_bts_num() net arg
+ * vty: 'handover any': pick more random chans, use lchan_select_by_type()
+ * cosmetic: dissolve bsc_api.c
+ * cosmetic: reduce bsc_api.h
+ * cosmetic: rename bsc_api.h to gsm_08_08.h
+ * cosmetic: rename osmo_bsc_api.c to gsm_08_08.c
+ * cosmetic: gscon: don't re-enter ST_CLEARING
+ * use __FILE__, not __BASE_FILE__
+ * fix lchan_rtp_fsm: missing event handling
+ * MGCP: add 'X-Osmo-IGN: C' for SCCPlite by default
+ * cosmetic: neighbor_ident_vty.c: add and use common string defs
+ * neighbor_ident_vty.c: fix CI format, should be 16bit
+ * inter-BSC HO incoming: continue despite missing Classmark
+ * inter-BSC HO incoming: drop old/wrong RTP port code
+ * lchan_fsm: lchan_fail_to(): store target state early
+ * cosmetic: lchan_fsm failure: log about state transitions
+ * lchan_fsm: safer 'concluded' flag
+ * log: lchan_rtp_fsm: add missing '\n'
+ * log: 'sending BSSMAP HO Request ACK'
+ * inter-BSC HO: send failure msg directly
+ * log: tweaks and more context in osmo_bsc_sigtran_send()
+ * fix dependency bug: include mgcp_client/, not mgcp/
+ * cosmetic: lchan activ: no need to clear mr again
+ * cosmetic: lchan activ: drop todo comments
+ * lchan: pick proper power and ta values
+ * SCCPlite Assignment Complete: include Speech Codec (Chosen)
+ * inter-BSC HO incoming: send BSSMAP HO Complete directly
+ * inter-BSC HO outgoing: fix L3 forwarding
+ * ho fsm: handle RR HO Failure for inter-BSC outgoing
+ * lchan_fsm: allow late RTP release events without erroring
+ * ts,lchan_fsm: do not attempt to allocate CBCH subslots
+ * Implement RR Classmark Enquiry
+ * fix LCLS during Assignment: actually use new TCH lchan
+ * cosmetic: drop param from send_assignment_complete()
+ * vty: add SCCP related vty commands
+ * make: allow vty-tests without configure
+ * test neighbor ident vty docs
+ * neighbor vty: drop keyword 'add'
+ * neighbor vty: rather 'no neighbor', not 'neighbor del'
+ * neighbor vty: allow setting local neighbors by CGI
+ * vty: write local neighbors by bts nr, not lac-ci
+ * fix counters for inter-BSC outgoing
+ * gscon_forget_lchan(): no Clear Request after Clear Command
+ * gscon_forget_lchan(): Clear Request iff no lchans remain
+ * subscr conn: properly forget lchan before release
+ * lchan_fsm: fix failure handling: notify conn when released
+ * handover_decision_2.c: tweak comments
+ * handover_decision_2.c: tweak ho candidate logging
+ * handover_decision_2.c: find_alternative_lchan: drop goto
+ * handover_decision_2.c: drop redundant debug_candidate() args
+ * lchan_fsm: notify conn of released lchan upon RF Release
+ * handover_fsm: adjust inter-BSC HO failure handling to spec
+ * remote-BSS neighbors: allow only one cell ID
+ * handover_decision_2.c: refactor trigger_*()
+ * handover_decision_2.c: implement HO to remote BSS
+ * abis_rsl.c: fix uninitialized RSL cause issues
+ * handover_fsm: fix missing newline for log statement
+ * handover_fsm: fix failure logging of uninitialized chan mode
+ * fix build: revert bad neighbor_ident.vty change
+ * vty doc: drop "(HO algo 2 only)" strings
+ * lchan_fsm_cleanup: drop redundant 'forget_lchan' call
+ * lchan: rf release: make sure conn is NULL
+ * dbug log: verbosely detach conn<->lchan
+ * fix: send RR Release (e.g. after BSSMAP Clear Cmd)
+ * abis_rsl.c: drop unused enum sacch_deact
+ * lchan: release in error: fix missing messages / events
+ * lchan release: always Deact SACCH
+ * cosmetic: lchan: introduce sub-struct lchan->release.*
+ * cosmetic: abis_rsl.c: drop uneccesary braces
+ * lchan: set cause for 4 instances of release_in_error = true
+ * coverity: gscon_forget_lchan: squelch forward-null
+ * always directly send BSSMAP Clear Request
+ * send Immediate Assignment Reject only before Immediate Assignment
+ * Importing history from osmo-gsm-manuals
+ * minor tweak
+ * make clean: also remove generated image files
+ * add 'make check' target
+ * OsmoBSC+NITB/running: fix title levels, one too deep
+ * OsmoBSC: include bts-examples.adoc from OsmoNITB
+ * fix 'make clean': shell glob, ignore failure
+ * refactor Makefile build rules, don't use the FORCE
+ * OsmoBSC: update overview to explain both SCCPlite and SCCP/M3UA
+ * common / OsmoBSC: drop unused alink.adoc
+ * OsmoBSC: update VTY reference
+ * bsc: document handover
+ * bsc: handover: clarify default of all-cells-are-neighbors
+ * bsc: handover: mention the need to resend SI for telnet neighbor cfg
+ * author info: add "former" to Holger's job title
+ * OsmoBSC: update VTY reference
+ * follow-up: logging tweak for Immediate Assignment
+ * set gscon FSM instances' log level to DEBUG
+ * make sure early lchan act failure resets the lchan
+ * comments: describe some lchan details
+ * use mgcp-client configured endpoint domain name
+
+ [ Philipp Maier ]
+ * endpoint_fsm: add missing return in mgcp_pick_codec
+ * gscon: use BSS-common payload types on BSS side
+ * sigtran: fix memleak in osmo_bsc_sigtran_send()
+ * GSCON: avoid sending connection oriented data when not connected
+ * GSCON: call api of a_reset.c with msc object directly
+ * lcls: do not LCLS call legs with different codecs
+ * doc: update mgw settings in example config file
+ * assignment: remove unnecessary call to gsm0808_speech_codec_from_chan_type()
+ * codec_pref: fix typo in comment
+ * codec_pref: add AMR configuration bits to make_scl_config() in unit-test
+ * codec_pref: fix missing breaks in switch-case statement
+ * LCLS: fix codec mismatch detection
+ * gsm_data: remove unused struct member full_rate.
+ * gsm_data: remove unused struct member chan_mode
+ * assignment_fsm: only include speech codec (choosen) on AoIP networks
+ * gsm_data.c: Set reasonable AMR codec defaults in gsm_bts_alloc()
+ * codec_pref: Add Codec List to COMPLETE LAYER 3 INFORMATION
+ * lcls: log channel type and lchan names on LCLS codec mismatch
+ * codec_pref: handle S0-S15 in ASSIGNMENT REQUEST
+ * gsm_08_08: abort complete L3 3 msg gen when no codecs are set
+ * osmo_bsc_msc: Set reasonable codec list defaults
+ * codec_pref: check codec configuration before start
+ * codec_pref: cosmetic: seperate half/full rate determination
+ * codec_pref: also check physical channels
+ * gsm_08_08: allow zero length speech codec lists in compl l3 info.
+ * gsm_08_08: do not include zero length speech codec list.
+ * gsm_data: set meaningful default values for amr modes
+ * codec_pref: also check amr codec rates in check_codec_pref()
+ * gsm_04_08: improve gsm48_multirate_config()
+ * bsc_vty: check amr mode parameters
+ * lchan_fsm: generate proper multirate configuration IE on RSL
+ * gsm_data: make cgi_for_msc available for other modules
+ * handover_fsm: send HANDOVER PERFORMED msg on internal ho
+ * paging: fix nullpointer deref
+ * chan_alloc: remove references to lchan_alloc()
+
+ [ Harald Welte ]
+ * Migrate from osmo_ipa_idtag_parse() to ipa_ccm_id_resp_parse()
+ * handover_fsm.c: Fix -Werror=format-security errors
+ * cbch: Don't send cell-broadcast command on BTS without CBCH channel
+ * gsm48_lchan2chan_desc() belongs to gsm_data.h
+ * Introduce gsm48_lchan2chan_desc_as_configured()
+ * CBCH: Fix SI4 CBCH IE generation
+ * CBCH: Fix gsm_bts_get_cbch()
+ * nanoBTS: Allow BCCH with CBCH on TS0
+ * range_enc_determine_range(): Don't dereference array on size=0
+ * handover_start_inter_bsc_in(): Uninitialized variable
+ * ipaccess-config: Fix open() return value checking
+ * bssmap_handle_cipher_mode(): Don't sent reject if !conn
+ * subscr_conn_fsm: Fix null-pointer deref / N-CONNECT.ind from unknown MSC
+ * acc_ramp: An unsigned int is always >= 0
+ * ipaccess-proxy: Add error handling to IAP CCM ID RESP parsing
+ * initial checkin of manuals to public repo
+ * Add link to Asciidoc source code of manual
+ * add Ericsson OM2000 message sequence charts (one for each MO)
+ * OM2000 message sequence charts: specify MO in node name
+ * OM2000 MSC: Fix spelling
+ * Add chapter on Cell Broadcast Support in Osmocom (to BSC+NITB manual)
+ * BSC: Add series of message sequence charts about MGCP handling
+ * mgw: Fix endpoint names for new MGW
+ * MGW: Include MGCP endpoint naming scheme of old IPA/SCCPlite approach
+ * add message sequence chart MS/BTS/BSC/MSC for 3GPP aoIP MO call
+ * vty-ref: Update URI of docbook 5.0 schema
+
+ [ Pau Espin Pedrol ]
+ * bsc: Use libosmocore API to track osmo_signal structs
+ * abis_nm: Fix heap-use-after-free in abis_nm_set_channel_attr
+ * abis_nm: Fix trailing whitespacing
+ * Fix heap-use-after-free due to OML link destruction
+ * abis_nm_ipaccess_rsl_connect: Log bts and trx nr
+ * codec_pref: Log unsupported codec name used
+ * codec_pref: Log HR2 specifically as never specified
+ * codec_pref.c: Add comment in expected switch case without break
+ * Install systemd services with autotools
+ * Install sample cfg file to /etc/osmocom
+ * osmo-bsc: Add default case for switch(enum)
+ * abis_nm_get_ts: Return TS of correct TRX, not always TRX0
+ * ipaccess-config: Use enum value for OML IP
+ * abis_nm: Rename m_id_len to ease review of forthcoming patches
+ * abis_nm: Split handling of Attribute Response Info into its own func
+ * abis_nm: Split reported attr list parsing from Attribute Response Info into its own func
+ * abis_nm: Allow sending and receiving Get Attributes (Response) against nanoBTS
+ * abis_nm: Add support to parse some nanoBTS Attribute Response attributes
+ * abis_nm: Add support to parse OML IP and Unit Id in Get Attributes
+ * abis_nm: Support parsing nanoBTS format for Get Attributes Info
+ * abis_nm: parse_attr_resp_info_unreported: Fix offset calculation
+ * examples: Remove neighbor-list invalid for default setup
+ * bsc: bts_alloc: Use enum value during neigh_list_manual_mode initialization
+ * bsc: vty: Use enum value in neighbor-list check
+ * bsc: gsm0808: Fix return code in bsc_compl_l3
+ * osmo-bsc: gsm_timers_vty: Set global T_defs during vty_init
+ * bsc: Prefix log string with related SI type during call to list_arfcn
+ * bsc: si: Fix SI2bis L2 pseudo length
+ * bsc: si: Fix SI2ter L2 pseudo length
+ * bsc: Enable force-combined-si on nanoBTS by default
+ * bsc: band_compatible: Return band non-compatible for invalid arfcn
+ * bsc: vty: Verify and warn on invalid arfcn passed
+ * abis_nm: Introduce new signal S_NM_GET_ATTR_REP
+ * ipaccess-config: Fix whitespace
+ * ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID
+ * ipaccess-config: cosmetic: Remove unneeded comment with hex values
+ * gsm0408_rcvmsg: Release lchan if L3 fails to complete
+ * ipaccess-config: Introduce -q quiet param
+ * Add osmux-reference document
+ * osmux-reference: Use packetdiag to draw packet header structures
+ * osmux-reference: Add sequence charts
+ * osmux-reference: Add traffic saving plot
+ * osmux-reference-docinfo: Add latest changes to revhistory
+ * osmux: Fix description for Dummy frames FT field
+ * Allow easily disabling GFDL references
+ * cosmetic: bsc: timeslot_fsm: Clean uneeded scope brackets
+ * bsc: lchan_select: Avoid returning a TCH/H lchan when TCH/F is requested
+ * bsc: ts_as_pchan_for_each_lchan: reorder and improve documentation
+ * bsc: ts_for_each_lchan: Improve documentation
+ * bsc: Add define for ts_as_pchan_for_each_lchan with ts->pchan_on_init
+ * bsc: Fix lchan iteration for dyn TS during PDCH Deact
+ * bsc: timelost_fsm: Remove unneeded set of out variable on failure
+ * bsc: timeslot_fsm: Fix ts_is_lchan_waiting_for_pchan
+ * bsc: ts_is_pchan_switching: Return correct IPA dyn TS target_pchan
+ * bsc: timeslot_fsm: Fix possible skip of some lchans in ts_terminate_lchan_fsms
+ * bsc: timeslot_fsm: Fix count in ts_lchans_waiting
+ * bsc: lchan_rtp_fsm: Avoid duplicate LCHAN_EV_RTP_RELEASED event
+ * bsc: lchan_fsm: Add missing transition WAIT_TS_READY->WAIT_RLL_RTP_RELEASED
+ * bsc: timeslot_fsm: Handle and ignore tear down of lchan during PDCH DEACT
+ * bsc: lchan_fsm: Fix invalid duplicated transition
+ * paging: Add VTY options to calculate T3113 timeout dynamically
+ * paging: fix whitespace
+ * paging: Properly enclose logging imsi filter scope
+ * bsc_main: filter_fn: Compare imsi values instead of subscr pointers
+ * bsc: Set subscr log context during complete_layer3
+ * bsc: rsl: Set subscr log context during meas report
+ * bsc: dtap: Set subscr log context
+ * bsc: bssap: Set subscr log context during paging
+ * Add VTY option to avoid sending empty Full BCCH Info for disabled SI
+
+ [ Stefan Sperling ]
+ * check for overlong unix socket paths
+ * fix unaligned access in abis_nm_rx_ipacc()
+ * re-order condition checks for clarity
+ * show dynamic timeslot details in 'show timeslot' vty command
+ * check return value of gsm48_multirate_config()
+ * add missing 'break' in switch statement
+ * unlink socket path correctly in rf_create_socket()
+
+ [ Martin Hauke ]
+ * cosmetics: Fix typo in bsc_vty.c
+ * ipaccess-config: Generate valid JSON output when using the -G parameter
+ * ipaccess-config: Fix indentation of the usage output
+
+ [ Oliver Smith ]
+ * osmo_bsc_main.c: initialize rate counters
+ * vty 'show bts'/'show trx': display IPs and ports
+ * cosmetic: fix spec ref for gsm0808_cipher_mode()
+ * cipher mode reject: send proper cause codes
+ * vty: add 'show rejected-bts'
+ * ipaccess_sign_link_reject: fix: use osmo_strlcpy() to safely copy IP
+ * copy NITB's osmobsc-usermanual.adoc to OsmoBSC
+ * build manuals included from osmo-gsm-manuals.git
+ * Fix DISTCHECK_CONFIGURE_FLAGS override
+ * contrib/jenkins.sh: build and publish manuals
+ * contrib: fix makedistcheck with disabled systemd
+
+ [ Daniel Willmann ]
+ * debian: Require libcdk and install meas_vis osmo-bsc-meas-utils
+ * OsmoBSC/HLR/MSC: Fix default config file name
+ * gsm_04_08: Free GSM subscr conn if paging response can't be matched
+ * VTY: Allow logging filter imsi statements for IMSIs we haven't seen yet
+
+ [ Max ]
+ * vty: don't show GPRS details if not configured
+ * LCLS: move MGCP MDCX into separate function
+ * Make IP address helper accessible via header file
+ * constify rsl_tx_ipacc_*cx() parameters
+ * LCLS: expand logging to print the name of the mode in use
+ * LCLS: tighten GCR check
+ * LCLS: explicitly check for mode before closing the loop
+ * LCLS: move mode check into separate function
+ * LCLS: make config and control redable in 'sh conns'
+ * RSL: restructure MDCX functions
+ * LCLS: add bts-loop variant
+ * vty: add command to show TRX selectively
+ * Add OsmoBSC control interface description
+ * Add OsmoBSC control interface description
+ * OsmoBSC: update CTRL docs
+ * LCLS: update parameter representation
+ * LCLS: log config/control update
+ * IPA: log OML/RSL link drop reason
+ * LCLS: use enum values instead of magic numbers
+ * Print BTS number on GPRS options error
+ * Log MDCX ACK for established lchan
+
+ [ Jonathan Brielmaier ]
+ * fix various typos across all manuals
+
+ [ Ivaylo Kostov ]
+ * BSC,BTS: add diagrams of PCU-BTS-NITB-SGSN relationships
+
+ [ Alexander Couzens ]
+ * OsmoBSC: add rate counter documentation
+
+ [ Vadim Yanitskiy ]
+ * osmo_bsc_bssap.c: fix incorrect link_id assignment
+
+ -- Harald Welte <laforge@gnumonks.org> Sun, 20 Jan 2019 21:21:24 +0100
+
osmo-bsc (1.3.0) unstable; urgency=medium
[ Philipp Maier ]
diff --git a/debian/control b/debian/control
index 141cb5e52..d2ecea0ad 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,7 @@
Source: osmo-bsc
Section: net
Priority: extra
-Maintainer: Alexander Couzens <lynxis@fe80.eu>
+Maintainer: Osmocom team <openbsc@lists.osmocom.org>
Build-Depends: debhelper (>=9),
dh-autoreconf,
autotools-dev,
@@ -9,15 +9,16 @@ Build-Depends: debhelper (>=9),
automake,
libtool,
pkg-config,
- python-minimal,
+ python3-minimal,
libcdk5-dev,
libtalloc-dev,
- libosmocore-dev (>= 0.12.0),
+ libosmocore-dev (>= 1.4.0),
libosmo-sccp-dev (>= 0.10.0),
libosmo-sigtran-dev (>= 0.10.0),
- libosmo-abis-dev (>= 0.5.1),
- libosmo-netif-dev (>= 0.3.0),
- libosmo-mgcp-client-dev (>= 1.4.0)
+ libosmo-abis-dev (>= 0.6.0),
+ libosmo-netif-dev (>= 0.6.0),
+ libosmo-mgcp-client-dev (>= 1.6.0),
+ osmo-gsm-manuals-dev
Standards-Version: 3.9.8
Vcs-Git: git://git.osmocom.org/osmo-bsc.git
Vcs-Browser: https://git.osmocom.org/osmo-bsc/
@@ -64,3 +65,12 @@ Architecture: any
Multi-Arch: foreign
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: Command line utilities to manage measurement reports.
+
+Package: osmo-bsc-doc
+Architecture: all
+Section: doc
+Priority: optional
+Depends: ${misc:Depends}
+Description: ${misc:Package} PDF documentation
+ Various manuals: user manual, VTY reference manual and/or
+ protocol/interface manuals.
diff --git a/debian/osmo-bsc-doc.install b/debian/osmo-bsc-doc.install
new file mode 100644
index 000000000..b0e2cc49a
--- /dev/null
+++ b/debian/osmo-bsc-doc.install
@@ -0,0 +1 @@
+usr/share/doc/osmo-bsc-doc/*.pdf
diff --git a/debian/osmo-bsc.install b/debian/osmo-bsc.install
index 8f91b03bc..e60bb50a5 100644
--- a/debian/osmo-bsc.install
+++ b/debian/osmo-bsc.install
@@ -3,3 +3,4 @@ lib/systemd/system/osmo-bsc.service
usr/bin/osmo-bsc
usr/share/doc/osmo-bsc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg usr/share/doc/osmo-bsc/examples
usr/share/doc/osmo-bsc/examples/osmo-bsc/osmo-bsc.cfg usr/share/doc/osmo-bsc/examples
+usr/share/doc/osmo-bsc/examples/osmo-bsc/*/osmo-bsc*.cfg usr/share/doc/osmo-bsc/examples
diff --git a/debian/rules b/debian/rules
index ffc99db85..a6646c10b 100755
--- a/debian/rules
+++ b/debian/rules
@@ -45,7 +45,7 @@
dh $@ --with autoreconf
# debmake generated override targets
-CONFIGURE_FLAGS += --with-systemdsystemunitdir=/lib/systemd/system
+CONFIGURE_FLAGS += --with-systemdsystemunitdir=/lib/systemd/system --enable-manuals
override_dh_auto_configure:
dh_auto_configure -- $(CONFIGURE_FLAGS)
#
@@ -60,3 +60,7 @@ override_dh_strip:
# Print test results in case of a failure
override_dh_auto_test:
dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)
+
+# Don't create .pdf.gz files (barely saves space and they can't be opened directly by most pdf readers)
+override_dh_compress:
+ dh_compress -X.pdf
diff --git a/doc/Makefile.am b/doc/Makefile.am
index d3a04c62f..08558e5b5 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -13,6 +13,7 @@ msc: \
$(builddir)/handover-inter-bsc-out.png \
$(builddir)/handover-inter-bsc-in.png \
$(builddir)/mgw-endpoint.png \
+ $(builddir)/location_services_ta.png \
$(NULL)
dot: \
diff --git a/doc/assignment-fsm.dot b/doc/assignment-fsm.dot
index 5a3a2b91f..c2181535b 100644
--- a/doc/assignment-fsm.dot
+++ b/doc/assignment-fsm.dot
@@ -22,6 +22,7 @@ labelloc=t; label="Assignment FSM"
bssap -> gscon [label="GSCON_EV_ASSIGNMENT_START\ndata=struct assignment_request",style=dotted]
gscon -> WAIT_LCHAN_ACTIVE [label="assignment_fsm_start()",style=dotted]
+ gscon -> WAIT_LCHAN_ESTABLISHED [label="assignment_fsm_start()\n(mode modify)",style=dotted]
WAIT_LCHAN_ACTIVE -> lchan [label="lchan_activate()\nFOR_ASSIGNMENT",style=dotted]
lchan -> WAIT_LCHAN_ACTIVE [label="ASSIGNMENT_EV_\nLCHAN_\nACTIVE,ERROR",style=dotted]
lchan -> WAIT_LCHAN_ESTABLISHED [label="ASSIGNMENT_EV_\nLCHAN_\nESTABLISHED,ERROR",style=dotted]
diff --git a/doc/assignment.msc b/doc/assignment.msc
index 4e690a811..fae088f23 100644
--- a/doc/assignment.msc
+++ b/doc/assignment.msc
@@ -9,6 +9,14 @@ msc {
gscon note gscon [label="GSCON_EV_ASSIGNMENT_START\n data=struct assignment_request"];
gscon abox gscon [label="ST_ASSIGNMENT"];
ass <- gscon [label="assignment_fsm_start()"];
+ |||;
+ --- [label="IF current lchan supports requested channel mode (re-use)"];
+ lchan <- ass [label="LCHAN_EV_REQUEST_MODE_MODIFY"];
+ ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ESTABLISHED"];
+ ass rbox ass [label="see below"];
+
+ |||;
+ --- [label="ELSE: if current lchan does not support requested channel mode (establish new lchan)"];
ass abox ass [label="ASSIGNMENT_ST_\nWAIT_LCHAN_ACTIVE"];
|||;
diff --git a/doc/e1-data-model.txt b/doc/e1-data-model.txt
index 509004fe9..06f9f305b 100644
--- a/doc/e1-data-model.txt
+++ b/doc/e1-data-model.txt
@@ -8,7 +8,7 @@ A BTS is connected to the BSC by some physical link. It could be an actual
E1 link, but it could also be abis-over-IP with a mixture of TCP and RTP/UDP.
To further complicate the fact, multiple BTS can share one such pysical
-link. On a single E1 line, we can easily accomodate up to three BTS with
+link. On a single E1 line, we can easily accommodate up to three BTS with
two TRX each.
Thus, it is best for OpenBSC to have some kind of abstraction layer. The BSC's
diff --git a/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus01-4trx.cfg b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus01-4trx.cfg
new file mode 100644
index 000000000..68837caf7
--- /dev/null
+++ b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus01-4trx.cfg
@@ -0,0 +1,211 @@
+!
+! OpenBSC (0.9.11.308-62d46) configuration saved from vty
+!!
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging level lmi info
+ logging level linp info
+ logging level nm debug
+ logging level rsl debug
+ logging level llapd notice
+network
+ network country code 901
+ mobile network code 70
+ neci 0
+ paging any use tch 0
+ handover 0
+ handover window rxlev averaging 10
+ handover window rxqual averaging 1
+ handover window rxlev neighbor averaging 10
+ handover power budget interval 6
+ handover power budget hysteresis 3
+ handover maximum distance 9999
+ timer t3101 10
+ timer t3105 40
+ timer t3109 4
+ timer t3113 60
+ bts 0
+ type rbs2000
+ band GSM900
+ om2000 version-limit oml gen 12 rev 10
+ cell_identity 0
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ ms max power 15
+ cell reselection hysteresis 4
+ rxlev access min 0
+ channel allocator descending
+ rach tx integer 9
+ rach max transmission 7
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 62
+ neighbor-list mode automatic
+ gprs mode none
+ is-connection-list add 4 512 12
+ is-connection-list add 16 524 12
+ is-connection-list add 28 536 12
+ is-connection-list add 40 548 12
+ trx 0
+ rf_locked 0
+ arfcn 123
+ nominal power 42
+ max_power_red 12
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ hopping enabled 0
+ e1 line 0 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 3
+ trx 1
+ rf_locked 0
+ arfcn 121
+ nominal power 42
+ max_power_red 12
+ rsl e1 line 0 timeslot 4 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 3
+ trx 2
+ rf_locked 0
+ arfcn 119
+ nominal power 42
+ max_power_red 12
+ rsl e1 line 0 timeslot 7 sub-slot full
+ rsl e1 tei 2
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 3
+ trx 3
+ rf_locked 0
+ arfcn 119
+ nominal power 42
+ max_power_red 12
+ rsl e1 line 0 timeslot 10 sub-slot full
+ rsl e1 tei 3
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 3
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 3
diff --git a/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-4trx.cfg b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-4trx.cfg
new file mode 100644
index 000000000..ae0b7db3a
--- /dev/null
+++ b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-4trx.cfg
@@ -0,0 +1,215 @@
+!
+! OpenBSC (0.9.11.308-62d46) configuration saved from vty
+!!
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging level lmi info
+ logging level linp info
+ logging level nm debug
+ logging level rsl debug
+ logging level llapd notice
+network
+ network country code 901
+ mobile network code 70
+ neci 0
+ paging any use tch 0
+ handover 0
+ handover window rxlev averaging 10
+ handover window rxqual averaging 1
+ handover window rxlev neighbor averaging 10
+ handover power budget interval 6
+ handover power budget hysteresis 3
+ handover maximum distance 9999
+ timer t3101 10
+ timer t3105 40
+ timer t3109 4
+ timer t3113 60
+ bts 0
+ type rbs2000
+ band GSM900
+ om2000 version-limit oml gen 12 rev 10
+ cell_identity 0
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ ms max power 15
+ cell reselection hysteresis 4
+ rxlev access min 0
+ channel allocator descending
+ rach tx integer 9
+ rach max transmission 7
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 62
+ neighbor-list mode automatic
+ gprs mode none
+ is-connection-list add 4 512 12
+ is-connection-list add 16 524 12
+ is-connection-list add 28 536 12
+ is-connection-list add 40 548 12
+ is-connection-list add 52 560 12
+ is-connection-list add 64 572 12
+ is-connection-list add 76 640 12
+ is-connection-list add 88 652 12
+ trx 0
+ rf_locked 0
+ arfcn 123
+ nominal power 44
+ max_power_red 0
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ hopping enabled 0
+ e1 line 0 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 3
+ trx 1
+ rf_locked 0
+ arfcn 121
+ nominal power 44
+ max_power_red 0
+ rsl e1 line 0 timeslot 4 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 3
+ trx 2
+ rf_locked 0
+ arfcn 119
+ nominal power 44
+ max_power_red 0
+ rsl e1 line 0 timeslot 7 sub-slot full
+ rsl e1 tei 2
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 3
+ trx 3
+ rf_locked 0
+ arfcn 119
+ nominal power 44
+ max_power_red 0
+ rsl e1 line 0 timeslot 10 sub-slot full
+ rsl e1 tei 3
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 3
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 3
diff --git a/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-8trx.cfg b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-8trx.cfg
new file mode 100644
index 000000000..ff0b27797
--- /dev/null
+++ b/doc/examples/osmo-bsc/ericsson/osmo-bsc.dug20-rus02-8trx.cfg
@@ -0,0 +1,371 @@
+!
+! OpenBSC (0.9.11.308-62d46) configuration saved from vty
+!!
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging level lmi info
+ logging level linp info
+ logging level nm debug
+ logging level rsl debug
+ logging level llapd notice
+network
+ network country code 901
+ mobile network code 70
+ neci 0
+ paging any use tch 0
+ handover 0
+ handover window rxlev averaging 10
+ handover window rxqual averaging 1
+ handover window rxlev neighbor averaging 10
+ handover power budget interval 6
+ handover power budget hysteresis 3
+ handover maximum distance 9999
+ timer t3101 10
+ timer t3105 40
+ timer t3109 4
+ timer t3113 60
+ bts 0
+ type rbs2000
+ band GSM900
+ om2000 version-limit oml gen 12 rev 10
+ cell_identity 0
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ ms max power 15
+ cell reselection hysteresis 4
+ rxlev access min 0
+ channel allocator descending
+ rach tx integer 9
+ rach max transmission 7
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 62
+ neighbor-list mode automatic
+ gprs mode none
+ is-connection-list add 4 512 12
+ is-connection-list add 16 524 12
+ is-connection-list add 28 536 12
+ is-connection-list add 40 548 12
+ is-connection-list add 52 560 12
+ is-connection-list add 64 572 12
+ is-connection-list add 76 640 12
+ is-connection-list add 88 652 12
+ trx 0
+ rf_locked 0
+ arfcn 123
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ hopping enabled 0
+ e1 line 0 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 3
+ trx 1
+ rf_locked 0
+ arfcn 121
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 4 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 5 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 6 sub-slot 3
+ trx 2
+ rf_locked 0
+ arfcn 119
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 7 sub-slot full
+ rsl e1 tei 2
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 8 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 9 sub-slot 3
+ trx 3
+ rf_locked 0
+ arfcn 119
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 10 sub-slot full
+ rsl e1 tei 3
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 11 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 12 sub-slot 3
+ trx 4
+ rf_locked 0
+ arfcn 117
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 13 sub-slot full
+ rsl e1 tei 4
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 14 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 14 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 14 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 14 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 15 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 15 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 15 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 15 sub-slot 3
+ trx 5
+ rf_locked 0
+ arfcn 115
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 16 sub-slot full
+ rsl e1 tei 5
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 17 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 17 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 17 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 17 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 18 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 18 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 18 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 18 sub-slot 3
+ trx 6
+ rf_locked 0
+ arfcn 113
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 19 sub-slot full
+ rsl e1 tei 6
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 20 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 20 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 20 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 20 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 21 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 21 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 21 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 21 sub-slot 3
+ trx 7
+ rf_locked 0
+ arfcn 113
+ nominal power 40
+ max_power_red 10
+ rsl e1 line 0 timeslot 22 sub-slot full
+ rsl e1 tei 7
+ timeslot 0
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 23 sub-slot 0
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 23 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 23 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 23 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 24 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 24 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 24 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 24 sub-slot 3
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 3
diff --git a/doc/examples/osmo-bsc/ericsson/osmo-bsc.rbs2308.cfg b/doc/examples/osmo-bsc/ericsson/osmo-bsc.rbs2308.cfg
new file mode 100644
index 000000000..f79d45735
--- /dev/null
+++ b/doc/examples/osmo-bsc/ericsson/osmo-bsc.rbs2308.cfg
@@ -0,0 +1,101 @@
+!
+! OpenBSC (0.9.11.308-62d46) configuration saved from vty
+!!
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging level lmi info
+ logging level linp info
+ logging level nm debug
+ logging level rsl debug
+ logging level llapd notice
+log file bsc-rbs2k.log
+ logging timestamp 1
+ logging filter all 1
+ logging level lmi info
+ logging level linp info
+ logging level nm debug
+ logging level rsl debug
+network
+ network country code 262
+ mobile network code 42
+ neci 0
+ paging any use tch 0
+ handover 0
+ handover window rxlev averaging 10
+ handover window rxqual averaging 1
+ handover window rxlev neighbor averaging 10
+ handover power budget interval 6
+ handover power budget hysteresis 3
+ handover maximum distance 9999
+ timer t3101 10
+ timer t3105 40
+ timer t3109 4
+ timer t3113 60
+ bts 0
+ type rbs2000
+ band PCS1900
+ cell_identity 0
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ ms max power 33
+ cell reselection hysteresis 4
+ rxlev access min 0
+ channel allocator descending
+ rach tx integer 9
+ rach max transmission 7
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 62
+ neighbor-list mode automatic
+ gprs mode none
+ is-connection-list add 4 512 12
+ is-connection-list add 16 524 12
+ is-connection-list add 28 536 12
+ is-connection-list add 40 548 12
+ trx 0
+ rf_locked 0
+ arfcn 800
+ nominal power 43
+ max_power_red 14
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ hopping enabled 0
+ e1 line 0 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ hopping enabled 0
+ e1 line 0 timeslot 3 sub-slot 3
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 1
+ pcap 20200703-rbs2k-10.pcap
diff --git a/doc/examples/osmo-bsc/nokia/osmo-bsc.insite.cfg b/doc/examples/osmo-bsc/nokia/osmo-bsc.insite.cfg
new file mode 100644
index 000000000..a8e8e5c3f
--- /dev/null
+++ b/doc/examples/osmo-bsc/nokia/osmo-bsc.insite.cfg
@@ -0,0 +1,65 @@
+!
+! OpenBSC configuration saved from vty
+! !
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging filter all 1
+ logging color 1
+ logging print category-hex 0
+ logging print category 1
+ logging print file 1
+ logging level llapd notice
+ logging level nm debug
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 3
+ pcap 2020004-insite.pcap
+network
+ network country code 1
+ mobile network code 1
+ timer t3101 10
+ timer t3113 60
+ bts 0
+ type nokia_site
+ band GSM1900
+ cell_identity 1
+ location_area_code 1
+ base_station_id_code 63
+ training_sequence_code 7
+
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 1
+
+ trx 0
+ arfcn 810
+ max_power_red 0
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ e1 line 0 timeslot 2 sub-slot full
+ timeslot 1
+ phys_chan_config SDCCH8
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 3
diff --git a/doc/examples/osmo-bsc/osmo-bsc-minimal.cfg b/doc/examples/osmo-bsc/osmo-bsc-minimal.cfg
index 850e29c84..b8cd78db0 100644
--- a/doc/examples/osmo-bsc/osmo-bsc-minimal.cfg
+++ b/doc/examples/osmo-bsc/osmo-bsc-minimal.cfg
@@ -5,7 +5,7 @@ network
type sysmobts
band GSM-1800
location_area_code 23
- ip.access unit_id 1800 0
+ ipa unit-id 1800 0
trx 0
rf_locked 0
arfcn 868
@@ -30,4 +30,4 @@ e1_input
e1_line 0 driver ipa
msc 0
allow-emergency deny
- codec-list hr3
+ codec-list fr1
diff --git a/doc/examples/osmo-bsc/osmo-bsc.cfg b/doc/examples/osmo-bsc/osmo-bsc.cfg
index eec154db7..828875d9e 100644
--- a/doc/examples/osmo-bsc/osmo-bsc.cfg
+++ b/doc/examples/osmo-bsc/osmo-bsc.cfg
@@ -17,12 +17,11 @@ network
handover1 power budget interval 6
handover1 power budget hysteresis 3
handover1 maximum distance 9999
- dyn_ts_allow_tch_f 0
periodic location update 30
bts 0
type sysmobts
band DCS1800
- cell_identity 0
+ cell_identity 6969
location_area_code 1
base_station_id_code 63
ms max power 15
@@ -32,12 +31,12 @@ network
channel allocator ascending
rach tx integer 9
rach max transmission 7
- channel-descrption attach 1
- channel-descrption bs-pa-mfrms 5
- channel-descrption bs-ag-blks-res 1
+ channel-description attach 1
+ channel-description bs-pa-mfrms 5
+ channel-description bs-ag-blks-res 1
early-classmark-sending forbidden
- ip.access unit_id 0 0
- oml ip.access stream_id 255 line 0
+ ipa unit-id 6969 0
+ oml ipa stream-id 255 line 0
codec-support fr
gprs mode none
trx 0
@@ -72,9 +71,6 @@ network
phys_chan_config TCH/F
hopping enabled 0
msc 0
- no bsc-welcome-text
- no bsc-msc-lost-text
- no bsc-grace-text
type normal
allow-emergency allow
amr-config 12_2k forbidden
@@ -91,4 +87,3 @@ msc 0
mgw endpoint-range 1 31
bsc
mid-call-timeout 0
- no missing-msc-text
diff --git a/doc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg b/doc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg
index fd3a34950..0ecb5fc52 100644
--- a/doc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg
+++ b/doc/examples/osmo-bsc/osmo-bsc_custom-sccp.cfg
@@ -16,7 +16,6 @@ network
handover1 power budget interval 6
handover1 power budget hysteresis 3
handover1 maximum distance 9999
- dyn_ts_allow_tch_f 0
periodic location update 30
bts 0
type sysmobts
@@ -31,12 +30,12 @@ network
channel allocator ascending
rach tx integer 9
rach max transmission 7
- channel-descrption attach 1
- channel-descrption bs-pa-mfrms 5
- channel-descrption bs-ag-blks-res 1
+ channel-description attach 1
+ channel-description bs-pa-mfrms 5
+ channel-description bs-ag-blks-res 1
early-classmark-sending forbidden
- ip.access unit_id 0 0
- oml ip.access stream_id 255 line 0
+ ipa unit-id 0 0
+ oml ipa stream-id 255 line 0
codec-support fr
gprs mode none
trx 0
diff --git a/doc/examples/osmo-bsc/siemens/osmo-bsc.bs11.cfg b/doc/examples/osmo-bsc/siemens/osmo-bsc.bs11.cfg
new file mode 100644
index 000000000..a308db5be
--- /dev/null
+++ b/doc/examples/osmo-bsc/siemens/osmo-bsc.bs11.cfg
@@ -0,0 +1,76 @@
+!
+! OpenBSC configuration saved from vty
+! !
+password foo
+!
+line vty
+ no login
+!
+log stderr
+ logging filter all 1
+ logging color 1
+ logging print category-hex 0
+ logging print category 1
+ logging timestamp 1
+ logging print file 1
+ logging level llapd notice
+ logging level linp notice
+ logging level lmi notice
+ logging level lmib info
+ logging level rsl debug
+ logging level rll debug
+ logging level nm debug
+ logging level mm debug
+ logging level rr debug
+e1_input
+ e1_line 0 driver dahdi
+ e1_line 0 port 0
+ e1_line 1 driver dahdi
+ e1_line 1 port 1
+ e1_line 2 driver dahdi
+ e1_line 2 port 2
+ pcap 20200714-bs11.pcap
+network
+ network country code 1
+ mobile network code 1
+ timer t3101 10
+ timer t3113 60
+ bts 0
+ type bs11
+ band GSM900
+ cell_identity 1
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ oml e1 line 2 timeslot 1 sub-slot full
+ oml e1 tei 25
+ trx 0
+ arfcn 121
+ max_power_red 00
+ rsl e1 line 2 timeslot 1 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ e1 line 2 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ e1 line 2 timeslot 3 sub-slot 3
+
diff --git a/doc/handover.txt b/doc/handover.txt
index ac19e8725..c5fc33115 100644
--- a/doc/handover.txt
+++ b/doc/handover.txt
@@ -38,7 +38,7 @@ Chapter 8, Section 2.2, Table 24:
Window RXLEV averaging: 10 SACCH frames (no weighting)
Window RXQUAL averaging: 1 SACCH frame (no averaging)
-Level Threashold: 1 of the last 1 AV-RXLEV values < -110dBm
+Level Threshold: 1 of the last 1 AV-RXLEV values < -110dBm
Quality Threshold: 3 of the last 4 AV-RXQUAL values >= 5
Interference Threshold: 1 of the last AV-RXLEV > -85 dBm &
3 of the last 4 AV-RXQUAL values >= 5
diff --git a/doc/lchan-fsm.dot b/doc/lchan-fsm.dot
index b726b0c87..fe35903f7 100644
--- a/doc/lchan-fsm.dot
+++ b/doc/lchan-fsm.dot
@@ -38,4 +38,10 @@ labelloc=t; label="lchan FSM"
rtp -> WAIT_RLL_RTP_ESTABLISH [label="LCHAN_EV_RTP_READY",style=dotted]
rtp -> ESTABLISHED [label="LCHAN_EV_RTP_RELEASED",style=dotted]
+ ESTABLISHED -> WAIT_RR_CHAN_MODE_MODIFY_ACK [label="LCHAN_EV_REQUEST_MODE_MODIFY"]
+ WAIT_RR_CHAN_MODE_MODIFY_ACK -> WAIT_RSL_CHAN_MODE_MODIFY_ACK [label="LCHAN_EV_RR_CHAN_MODE_MODIFY_ACK"]
+ WAIT_RSL_CHAN_MODE_MODIFY_ACK -> WAIT_RLL_RTP_ESTABLISH [label="LCHAN_EV_RSL_CHAN_MODE_MODIFY_ACK\nwhen adding RTP"]
+ WAIT_RSL_CHAN_MODE_MODIFY_ACK -> ESTABLISHED [label="LCHAN_EV_RSL_CHAN_MODE_MODIFY_ACK\nno change to RTP"]
+ WAIT_RR_CHAN_MODE_MODIFY_ACK -> BORKEN [label="error/timeout",style=dashed]
+ WAIT_RSL_CHAN_MODE_MODIFY_ACK -> BORKEN [label="error/timeout",style=dashed]
}
diff --git a/doc/lchan-rtp-fsm.dot b/doc/lchan-rtp-fsm.dot
index d5df643b5..4c2dd31bf 100644
--- a/doc/lchan-rtp-fsm.dot
+++ b/doc/lchan-rtp-fsm.dot
@@ -1,7 +1,7 @@
digraph G {
rankdir=TB
labelloc=t; label="lchan RTP FSM"
-
+
lchan [label="lchan\nFSM",shape=box3d]
lchan2 [label="lchan\nFSM",shape=box3d]
ho_as [label="Handover or Assignment FSM",shape=box3d]
@@ -23,14 +23,15 @@ labelloc=t; label="lchan RTP FSM"
lchan -> WAIT_LCHAN_READY [label="LCHAN_RTP_EV_LCHAN_READY",style=dashed]
WAIT_LCHAN_READY -> WAIT_IPACC_CRCX_ACK [label="IPACC BTS"]
WAIT_LCHAN_READY -> WAIT_READY_TO_SWITCH_RTP
- WAIT_IPACC_CRCX_ACK -> WAIT_IPACC_MDCX_ACK
- WAIT_IPACC_MDCX_ACK -> WAIT_READY_TO_SWITCH_RTP
+ WAIT_IPACC_CRCX_ACK -> WAIT_READY_TO_SWITCH_RTP
invisible -> ho [label="HO DETECT",style=dashed]
ho -> WAIT_READY_TO_SWITCH_RTP [label="LCHAN_RTP_EV_READY_TO_SWITCH",style=dashed]
WAIT_READY_TO_SWITCH_RTP -> WAIT_MGW_ENDPOINT_CONFIGURED
WAIT_MGW_ENDPOINT_CONFIGURED -> mgwep [label="MDCX",style=dashed]
mgwep -> WAIT_MGW_ENDPOINT_CONFIGURED [label="LCHAN_RTP_EV_\nMGW_ENDPOINT_\nCONFIGURED",style=dashed]
+ WAIT_MGW_ENDPOINT_CONFIGURED -> WAIT_IPACC_MDCX_ACK [label="IPACC BTS"]
WAIT_MGW_ENDPOINT_CONFIGURED -> RTP_READY
+ WAIT_IPACC_MDCX_ACK -> RTP_READY
RTP_READY -> lchan2 [label="LCHAN_EV_\nRTP_READY",style=dashed]
RTP_READY -> RTP_ESTABLISHED
lchan2 -> RTP_ESTABLISHED [label="LCHAN_RTP_EV_\nRELEASE",style=dashed]
diff --git a/doc/lchan.msc b/doc/lchan.msc
index e2caa4875..af9a59b52 100644
--- a/doc/lchan.msc
+++ b/doc/lchan.msc
@@ -68,10 +68,6 @@ msc {
ms <= rtp [label="IPACC CRCX"];
...;
ms => rtp [label="IPACC CRCX ACK (BTS RTP port info)"];
- rtp abox rtp [label="LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK"];
- ms <= rtp [label="IPACC MDCX (MGW RTP port info)"];
- ...;
- ms => rtp [label="IPACC MDCX ACK"];
--- [label="END ip.access style BTS"];
|||;
rtp box rtp [label="lchan_rtp_fsm_switch_rtp()"];
@@ -91,6 +87,12 @@ msc {
...;
mgwep rbox mgwep [label="MGCP: MDCX OK"];
rtp <- mgwep [label="LCHAN_RTP_EV_MGW_ENDPOINT_CONFIGURED"];
+ --- [label="IF ip.access style BTS"];
+ rtp abox rtp [label="LCHAN_RTP_ST_WAIT_IPACC_MDCX_ACK"];
+ ms <= rtp [label="IPACC MDCX (MGW RTP port info)"];
+ ...;
+ ms => rtp [label="IPACC MDCX ACK"];
+ --- [label="END ip.access style BTS"];
rtp abox rtp [label="LCHAN_RTP_ST_READY"];
lchan <- rtp [label="LCHAN_EV_RTP_READY"];
rtp note rtp [label="RTP FSM stays ready for Rollback until final establish event"];
@@ -129,6 +131,26 @@ msc {
...;
...;
+ ms rbox mgwep [label="On Mode Modify (e.g. change a TCH lchan from signalling to voice)"];
+ lchan abox lchan [label="LCHAN_ST_\nWAIT_RR_CHAN_\nMODE_MODIFY_ACK"];
+ ms <= lchan [label="RR Chan Mode Modif"];
+ ...;
+ ms => lchan [label="RR Chan Mode Modif Ack"];
+ lchan abox lchan [label="LCHAN_ST_\nWAIT_RSL_CHAN_\nMODE_MODIFY_ACK"];
+ ms <= lchan [label="RSL MT Mode Modify Req"];
+ ...;
+ ms => lchan [label="RSL MT Mode Modify Ack"];
+ --- [label="IF adding RTP stream"];
+ lchan abox lchan [label="LCHAN_ST_WAIT_\nRLL_RTP_ESTABLISH\nT3101"];
+ lchan rbox rtp [label="See above at 'LCHAN_RTP_EV_LCHAN_READY'"];
+ --- [label="IF not adding RTP stream"];
+ lchan abox lchan [label="LCHAN_ST_\nESTABLISHED"];
+ --- [label="END: whether adding voice stream"];
+
+ ...;
+ ...;
+ ...;
+
ms rbox mgwep [label="When the MS or BTS release the lchan"];
lchan abox lchan [label="LCHAN_ST_\nESTABLISHED"];
ms -> lchan [label="RLL Release Ind for SAPI=0"];
@@ -167,7 +189,7 @@ msc {
ms => lchan [label="RSL RF Channel Release Ack"];
|||;
--- [label="IF release_in_error"];
- lchan abox lchan [label="LCHAN_ST_WAIT_\nAFTER_ERROR\n(timeout: T3111+2 s, T993111)"];
+ lchan abox lchan [label="LCHAN_ST_WAIT_\nAFTER_ERROR\n(timeout: T3111+2 s, X3111)"];
...;
lchan box lchan [label="timer expires"];
--- [label="END: release_in_error"];
diff --git a/doc/location_services_ta.msc b/doc/location_services_ta.msc
new file mode 100644
index 000000000..e6bef38ef
--- /dev/null
+++ b/doc/location_services_ta.msc
@@ -0,0 +1,49 @@
+msc {
+ hscale="2";
+
+ ms[label="MS/BTS"],bsc[label="BSC"],smlc[label="SMLC"],__msc[label="MSC"];
+
+ ||| [label="Location Services (LCS): Perform Location Request using TA"];
+
+ |||;
+ --- [label="MS in DEDICATED MODE (currently active)"];
+
+ ms =>> bsc [label="earlier Measurement Report provides Timing Advance"];
+
+ bsc <<= __msc [label="PERFORM LOCATION REQUEST\n3GPP TS 48.008 3.2.1.71"];
+
+ bsc =>> smlc [label="BSSMAP-LE PERFORM LOCATION REQUEST\n3GPP TS 49.031 9.1\nwith BSSLAP APDU = TA Layer3\n3GPP TS 48.071 4.2.8"];
+
+ smlc rbox smlc [label="SMLC uses TA included in TA Layer3"];
+
+ bsc <<= smlc [label="BSSMAP-LE PERFORM LOCATION RESPONSE\n3GPP TS 49.031 9.2"];
+
+ bsc =>> __msc [label="PERFORM LOCATION RESPONSE\n3GPP TS 48.008 3.2.1.72"];
+
+ ...;
+ ...;
+ --- [label="MS in IDLE MODE (not connected)"];
+
+ bsc <<= __msc [label="PERFORM LOCATION REQUEST\n3GPP TS 48.008 3.2.1.71"];
+
+ bsc =>> smlc [label="BSSMAP-LE PERFORM LOCATION REQUEST\n3GPP TS 49.031 9.1"];
+
+ smlc rbox smlc [label="SMLC needs TA information,\nasks BSC via BSSLAP"];
+
+ bsc <<= smlc [label="BSSMAP-LE CONNECTION ORIENTED INFORMATION\n3GPP TS 49.031 9.12\nwith BSSLAP APDU = TA Request\n3GPP TS 48.071 4.2.1"];
+
+
+ ms <<= bsc [label="RR Paging Request\n3GPP TS 48.018 9.1.22-24"];
+
+ ms =>> bsc [label="RSL CHANNEL REQUIRED\n3GPP TS 48.058 8.5.3\nincludes Access Delay (9.3.17) == Timing Advance"];
+
+ ms =>> bsc [label="RR Paging Response\n3GPP TS 48.018 9.1.25"];
+
+ ms <<= bsc [label="RF CHANNEL RELEASE\n3GPP TS 48.058 8.4.14"];
+
+ bsc =>> smlc [label="BSSMAP-LE CONNECTION ORIENTED INFORMATION\n3GPP TS 49.031 9.12\nwith BSSLAP APDU = TA Response\n3GPP TS 48.071 4.2.2"];
+
+ bsc <<= smlc [label="BSSMAP-LE PERFORM LOCATION RESPONSE\n3GPP TS 49.031 9.2"];
+
+ bsc =>> __msc [label="PERFORM LOCATION RESPONSE\n3GPP TS 48.008 3.2.1.72"];
+}
diff --git a/doc/manuals/Makefile.am b/doc/manuals/Makefile.am
index 482c1ab32..c86f21563 100644
--- a/doc/manuals/Makefile.am
+++ b/doc/manuals/Makefile.am
@@ -9,6 +9,7 @@ EXTRA_DIST = aoip-mgw-options.adoc \
message-sequences \
mgw \
om2000 \
+ regen_doc.sh \
vty
if BUILD_MANUALS
@@ -18,7 +19,14 @@ if BUILD_MANUALS
aoip-mgw-options.pdf: $(srcdir)/aoip-mgw-options.adoc $(srcdir)/mgw/*.msc
VTY_REFERENCE = osmobsc-vty-reference.xml
+
+ BUILT_REFERENCE_XML = $(builddir)/vty/bsc_vty_reference.xml
+ $(builddir)/vty/bsc_vty_reference.xml: $(top_builddir)/src/osmo-bsc/osmo-bsc
+ mkdir -p $(builddir)/vty
+ $(top_builddir)/src/osmo-bsc/osmo-bsc --vty-ref-xml > $@
+
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.vty-reference.inc
+ OSMO_REPOSITORY = osmo-bsc
include $(OSMO_GSM_MANUALS_DIR)/build/Makefile.common.inc
endif
diff --git a/doc/manuals/aoip-mgw-options.adoc b/doc/manuals/aoip-mgw-options.adoc
index f69309334..124c03fda 100644
--- a/doc/manuals/aoip-mgw-options.adoc
+++ b/doc/manuals/aoip-mgw-options.adoc
@@ -54,7 +54,7 @@ interoperable A-over-IP (AoIP) interface shall look like.
As more modern MSCs at operators tend to favor implementing 3GPP AoIP
rather than the proprietary SCCPlite based A interface, it becomes
-neccessary for OsmoBSC to support this.
+necessary for OsmoBSC to support this.
At the same time, for compatibility reasons, the classic SCCPlite
support shall be kept, if possible with reasonable effort.
diff --git a/doc/manuals/chapters/bsc.adoc b/doc/manuals/chapters/bsc.adoc
new file mode 100644
index 000000000..0d3ded5c4
--- /dev/null
+++ b/doc/manuals/chapters/bsc.adoc
@@ -0,0 +1,115 @@
+== BSC level configuration
+
+=== Hand-over
+
+==== Hand-over in GSM
+
+Hand-over is the process of changing a MS with a currently active
+dedicated channel from one BTS to another BTS. As opposed to idle mode,
+where the MS autonomously performs cell re-selection, in dedicated mode
+this happens under network control.
+
+In order to determine when to perform hand-over, and to which cells, the
+network requests the MS to perform measurements on a list of neighbor
+cell channels, which the MS then reports back to the network in the form
+of GSM RR 'Measurement Result' messages. Those messages contain the
+downlink measurements as determined by the MS.
+
+Furthermore, the BTS also performs measurements on the uplink, and
+communicates those by means of RSL to the BSC.
+
+The hand-over decision is made by an algorithm that processes those
+measurement results and determines when to perform the hand-over.
+
+==== Configuration of hand-over in OsmoBSC
+
+OsmoBSC only support so-called intra-BSC hand-over, where the hand-over is
+performed between two BTSs within the same BSC.
+
+Hand-over is enabled and configured by the use of a set of `handover`
+commands. Using those, you can tune the key parameters of the hand-over
+algorithm and adapt it to your specific environment.
+
+.Example handover configuration snippet
+----
+ handover 1 <1>
+ handover window rxlev averaging 10 <2>
+ handover window rxqual averaging 1 <3>
+ handover window rxlev neighbor averaging 10 <4>
+ handover power budget interval 6 <5>
+ handover power budget hysteresis 3 <6>
+ handover maximum distance 9999 <7>
+----
+<1> Enable hand-over
+<2> Set the RxLev averaging window for the serving cell to 10 measurements
+<3> Set the RxQual averaging window for the serving cell to 1
+ measurement (no window)
+<4> Set the RxLev averaging for neighbor cells to 10 measurements
+<5> Check for the conditions of a power budget hand-over every 6 SACCH
+ frames
+<6> A neighbor cell must be at least 3 dB stronger than the serving cell
+ to be considered a candidate for hand-over
+<7> Perform a maximum distance hand-over if TA is larger 9999 (i.e. never)
+
+//TODO: Move all to BSC node
+
+=== Timer Configuration
+
+The GSM specification specifies a variety of timers both on the network
+as well as on the mobile station side.
+
+Those timers can be configured using the `timer tXXXX` command.
+
+.Configurable Timers
+|===
+|node|timer|default|description
+|network|t3101|10|Timeout for 'Immediate Assignment' (sec)
+|network|t3103|?|Timeout for Handover (sec)
+|network|t3105|40|Repetition of 'Physical Information' (sec)
+|network|t3107|?|?
+|network|t3109|?|RSL SACCH deactivation timeout (sec)
+|network|t3111|?|RSL timeout to wait before releasing the RF channel (sec)
+|network|t3113|60|Time to try paging for a subscriber (sec)
+|network|t3115|?|?
+|network|t3117|?|?
+|network|t3119|?|?
+|network|t3122|10|Waiting time after 'Immediate Assignment Reject'
+|network|t3141|?|?
+|===
+
+//TODO: split between BSC and MSC timers
+
+=== Discontinuous Transmission (DTX)
+
+GSM provides a full-duplex voice call service. However, in any
+civilized communication between human beings, only one of the
+participants is speaking at any given point in time. This means that
+most of the time, one of the two directions of the radio link is
+transmitting so-called 'silence frames'.
+
+During such periods of quiescence in one of the two directions, it is
+possible to suppress transmission of most of the radio bursts, as there
+is no voice signal to transport. GSM calls this feature 'Discontinuous
+Transmission'. It exists separately for uplink (DTXu) and downlink
+(DTXd).
+
+Downlink DTX is only permitted on non-primary transceivers (!= TRX0), as
+TRX0 must always transmit at constant output power to ensure it is
+detected during cell selection.
+
+Uplink DTX is possible on any TRX, and serves primarily two uses:
+
+possible on any TRX, and serves primarily two uses:
+
+. reducing the MS battery consumption by transmitting at a lower duty cycle
+. reducing the uplink interference caused in surrounding cells that
+ re-use the same ARFCN.
+
+DTS for both uplink and downlink is implemented in the BTS. Not all BTS
+models support it.
+
+The Osmocom BSC component can instruct the BTS to enable or disable
+uplink and/or downlink DTX by means of A-bis OML.
+
+//TODO: Test/implement, at least for uplink
+//TODO: Move to BSC
diff --git a/doc/manuals/chapters/bts-examples.adoc b/doc/manuals/chapters/bts-examples.adoc
index b15fb9921..58cb3ab17 100644
--- a/doc/manuals/chapters/bts-examples.adoc
+++ b/doc/manuals/chapters/bts-examples.adoc
@@ -1,109 +1,16 @@
[[bts-examples]]
-== OsmoNITB example configuration files
+== OsmoBSC example configuration files
-The `openbsc/doc/examples/osmo-nitb` directory in the OpenBSC source
+The `osmo-bsc/doc/examples/osmo-bsc` directory in the OpenBSC source
tree contains a collection of example configuration files, sorted by BTS
type.
This chapter is illustrating some excerpts from those examples
-[[bts_example_bs11]]
-=== Example configuration for OsmoNITB with one dual-TRX BS-11
-
-.OsmoNITB with BS11, 2 TRX, no frequency hopping
-====
-
-----
-e1_input
- e1_line 0 driver misdn
-network
- network country code 1
- mobile network code 1
- short name OpenBSC
- long name OpenBSC
- timer t3101 10
- timer t3113 60
- bts 0
- type bs11 <1>
- band GSM900
- cell_identity 1
- location_area_code 1
- training_sequence_code 7
- base_station_id_code 63
- oml e1 line 0 timeslot 1 sub-slot full <2>
- oml e1 tei 25 <3>
- trx 0
- arfcn 121
- max_power_red 0
- rsl e1 line 0 timeslot 1 sub-slot full <4>
- rsl e1 tei 1 <5>
- timeslot 0
- phys_chan_config CCCH+SDCCH4
- e1 line 0 timeslot 1 sub-slot full
- timeslot 1
- phys_chan_config TCH/F
- e1 line 0 timeslot 2 sub-slot 1 <6>
- timeslot 2
- phys_chan_config TCH/F
- e1 line 0 timeslot 2 sub-slot 2
- timeslot 3
- phys_chan_config TCH/F
- e1 line 0 timeslot 2 sub-slot 3
- timeslot 4
- phys_chan_config TCH/F
- e1 line 0 timeslot 3 sub-slot 0
- timeslot 5
- phys_chan_config TCH/F
- e1 line 0 timeslot 3 sub-slot 1
- timeslot 6
- phys_chan_config TCH/F
- e1 line 0 timeslot 3 sub-slot 2
- timeslot 7
- phys_chan_config TCH/F
- e1 line 0 timeslot 3 sub-slot 3
- trx 1
- arfcn 123
- max_power_red 0
- rsl e1 line 0 timeslot 1 sub-slot full <4>
- rsl e1 tei 2 <5>
- timeslot 0
- phys_chan_config TCH/F
- e1 line 0 timeslot 4 sub-slot 0 <6>
- timeslot 1
- phys_chan_config TCH/F
- e1 line 0 timeslot 4 sub-slot 1
- timeslot 2
- phys_chan_config TCH/F
- e1 line 0 timeslot 4 sub-slot 2
- timeslot 3
- phys_chan_config TCH/F
- e1 line 0 timeslot 4 sub-slot 3
- timeslot 4
- phys_chan_config TCH/F
- e1 line 0 timeslot 5 sub-slot 0
- timeslot 5
- phys_chan_config TCH/F
- e1 line 0 timeslot 5 sub-slot 1
- timeslot 6
- phys_chan_config TCH/F
- e1 line 0 timeslot 5 sub-slot 2
- timeslot 7
- phys_chan_config TCH/F
- e1 line 0 timeslot 5 sub-slot 3
-----
-====
-
-<1> The BTS type must be set to __bs11__
-<2> The OML E1 timeslot needs to be identical with what was on the BTS side using LMT.
-<3> The OML TEI value needs to be identical with what was configured on the BTS side using LMT.
-<4> The RSL E1 timeslot can be identical for all TRX.
-<5> The RSL TEI values __must__ be different if multiple TRX share one E1 signalling timeslot.
-<6> The TCH all need to be allocated one 16k sub-slot on the E1
-
[[bts_example_nbts]]
-=== Example configuration for OsmoNITB with one single-TRX nanoBTS
+=== Example configuration for OsmoBSC with one single-TRX nanoBTS
-.OsmoNITB with one single-TRX nanoBTS
+.OsmoBSC with one single-TRX nanoBTS
====
----
@@ -112,14 +19,8 @@ e1_input
network
network country code 1
mobile network code 1
- short name OpenBSC
- long name OpenBSC
- auth policy closed
- location updating reject cause 13
encryption a5 0
neci 1
- rrlp mode none
- mm info 1
handover 0
bts 0
type nanobts <2>
@@ -134,8 +35,8 @@ network
channel allocator ascending
rach tx integer 9
rach max transmission 7
- ip.access unit_id 1801 0 <4>
- oml ip.access stream_id 255 line 0
+ ipa unit-id 1801 0 <4>
+ oml ipa stream-id 255 line 0
gprs mode none
trx 0
rf_locked 0
@@ -185,9 +86,9 @@ basis for calculations.
[[bts_example_nbts_multi]]
-=== Example configuration for OsmoNITB with multi-TRX nanoBTS
+=== Example configuration for OsmoBSC with multi-TRX nanoBTS
-.OsmoNITB configured for dual-TRX (stacked) nanoBTS
+.OsmoBSC configured for dual-TRX (stacked) nanoBTS
====
----
@@ -196,14 +97,8 @@ e1_input
network
network country code 1
mobile network code 1
- short name OpenBSC
- long name OpenBSC
- auth policy closed
- location updating reject cause 13
encryption a5 0
neci 1
- rrlp mode none
- mm info 0
handover 0
bts 0
type nanobts
@@ -218,8 +113,8 @@ network
channel allocator ascending
rach tx integer 9
rach max transmission 7
- ip.access unit_id 1800 0 <1>
- oml ip.access stream_id 255 line 0
+ ipa unit-id 1800 0 <1>
+ oml ipa stream-id 255 line 0
gprs mode none
trx 0
rf_locked 0
@@ -272,7 +167,7 @@ network
first nanoBTS unit (`trx 0`) needs to be configured to 1800/0/0 and
the second nanoBTS unit (`trx 1`) needs to be configured to 1800/0/1.
You can configure the BTS unit IDs using the `ipaccess-config`
- utility included in OpenBSC.
+ utility included in OsmoBSC.
[NOTE]
====
diff --git a/doc/manuals/chapters/bts.adoc b/doc/manuals/chapters/bts.adoc
new file mode 100644
index 000000000..6e7a308c7
--- /dev/null
+++ b/doc/manuals/chapters/bts.adoc
@@ -0,0 +1,559 @@
+[[bts]]
+== Reviewing and Provisioning BTS configuration
+
+The main functionality of the BSC component is to manage BTSs. As such,
+provisioning BTSs within the BSC is one of the most common tasks during
+BSC operation. Just like about anything else in OsmoBSC, they are
+configured using the VTY.
+
+BTSs are internally numbered with integer numbers starting from "0" for
+the first BTS. BTS numbers have to be contiguous, so you cannot
+configure 0,1,2 and then 5.
+
+
+=== Reviewing current BTS status and configuration
+
+In order to view the status and properties of a BTS, you can issue the
+`show bts` command. If used without any BTS number, it will display
+information about all provisioned BTS numbers.
+
+----
+OsmoBSC> show bts 0
+BTS 0 is of nanobts type in band DCS1800, has CI 0 LAC 1, BSIC 63, TSC 7 and 1 TRX
+Description: (null)
+MS Max power: 15 dBm
+Minimum Rx Level for Access: -110 dBm
+Cell Reselection Hysteresis: 4 dBm
+RACH TX-Integer: 9
+RACH Max transmissions: 7
+System Information present: 0x0000007e, static: 0x00000000
+ Unit ID: 200/0/0, OML Stream ID 0xff
+ NM State: Oper 'Enabled', Admin 2, Avail 'OK'
+ Site Mgr NM State: Oper 'Enabled', Admin 0, Avail 'OK'
+ Paging: 0 pending requests, 0 free slots
+ OML Link state: connected.
+ Current Channel Load:
+ TCH/F: 0% (0/5)
+ SDCCH8: 0% (0/8)
+----
+
+You can also review the status of the TRXs configured within the BTSs of
+this BSC by using `show trx`:
+
+----
+OsmoBSC> show trx 0 0
+TRX 0 of BTS 0 is on ARFCN 871
+Description: (null)
+ RF Nominal Power: 23 dBm, reduced by 0 dB, resulting BS power: 23 dBm
+ NM State: Oper 'Enabled', Admin 2, Avail 'OK'
+ Baseband Transceiver NM State: Oper 'Enabled', Admin 2, Avail 'OK'
+ ip.access stream ID: 0x00
+----
+
+The output can be restricted to the TRXs of one specified BTS number
+(`show trx 0`) or even that of a single specified TRX within a
+specified BTS (`show trx 0 0`).
+
+Furthermore, information on the individual timeslots can be shown by
+means of `show timeslot`. The output can be restricted to the
+timeslots of a single BTS (`show timeslot 0`) or that of a single
+TRX (`show timeslot 0 0`). Finally, you can restrict the output to
+a single timeslot by specifying the BTS, TRX and TS numbers (`show
+timeslot 0 0 4`).
+
+----
+OsmoBSC> show timeslot 0 0 0
+BTS 0, TRX 0, Timeslot 0, phys cfg CCCH, TSC 7
+ NM State: Oper 'Enabled', Admin 2, Avail 'OK'
+OsmoBSC> show timeslot 0 0 1
+BTS 0, TRX 0, Timeslot 1, phys cfg SDCCH8, TSC 7
+ NM State: Oper 'Enabled', Admin 2, Avail 'OK'
+----
+
+
+=== Provisioning a new BTS
+
+In order to provision BTSs, you have to enter the BTS config node of the
+VTY. In order to configure BTS 0, you can issue the following sequence
+of commands:
+
+----
+OsmoBSC> enable
+OsmoBSC# configure terminal
+OsmoBSC(config)# network
+OsmoBSC(config-net)# bts 0
+OsmoBSC(config-net-bts)#
+----
+
+At this point, you have a plethora of commands, in fact an entire
+hierarchy of commands to configure all aspects of the BTS, as well as
+each of its TRX and each timeslot within each TRX. For a full
+reference, please consult the telnet VTY integrated help or the respective
+chapter in the VTY reference.
+
+BTS configuration depends quite a bit on the specific BTS vendor and
+model. The section below provides just one possible example for the
+case of a sysmoBTS.
+
+Note that from the `configure terminal` command onwards, the telnet VTY
+commands above are identical to configuration file settings, for details see
+<<vty>>.
+
+Starting with `network` as above, your complete sysmoBTS configuration may look
+like this:
+
+----
+network
+ bts 0
+ type sysmobts
+ band DCS1800
+ description The new BTS in Baikonur
+ location_area_code 2342
+ cell_identity 5
+ base_station_id_code 63
+ ip.access unit_id 8888 0
+ ms max power 40
+ trx 0
+ arfcn 871
+ nominal power 23
+ max_power_red 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ timeslot 1
+ phys_chan_config TCH/F
+ timeslot 2
+ phys_chan_config TCH/F
+ timeslot 3
+ phys_chan_config TCH/F
+ timeslot 4
+ phys_chan_config TCH/F
+ timeslot 5
+ phys_chan_config TCH/F
+ timeslot 6
+ phys_chan_config TCH/F
+ timeslot 7
+ phys_chan_config PDCH
+----
+
+
+=== System Information configuration
+
+A GSM BTS periodically transmits a series of 'SYSTEM INFORMATION'
+messages to mobile stations, both via the BCCH in idle mode, was well as
+via the SACCH in dedicated mode. There are many different types of such
+messages. For their detailed contents and encoding, please see _3GPP TS
+24.008_ <<3gpp-ts-24-008>>.
+
+For each of the 'SYSTEM INFORMATION' message types, you can configure to
+have the BSC generate it automatically ('computed'), or you can specify
+the respective binary message as a string of hexadecimal digits.
+
+The default configuration is to compute all (required) 'SYSTEM
+INFORMATION' messages automatically.
+
+Please see the _OsmoBSC VTY Reference Manual_ <<vty-ref-osmobsc>> for
+further information, particularly on the following commands:
+
+* `system-information (1|2|3|4|5|6|7|8|9|10|13|16|17|18|19|20|2bis|2ter|2quater|5bis|5ter) mode (static|computed)`
+* `system-information (1|2|3|4|5|6|7|8|9|10|13|16|17|18|19|20|2bis|2ter|2quater|5bis|5ter) static HEXSTRING`
+
+
+=== Neighbor List configuration
+
+Every BTS sends a list of ARFCNs of neighbor cells
+. within its 'SYSTEM INFORMATION 2' (and 2bis/2ter) messages on the BCCH
+. within its 'SYSTEM INFORMATION 5' messages on SACCH in dedicated mode
+
+For every BTS config node in the VTY, you can specify the behavior of
+the neighbor list using the `neighbor list mode` VTY command:
+
+automatic::
+ Automatically generate a list of neighbor cells using all other
+ BTSs configured in the VTY
+manual::
+ Manually specify the neighbor list by means of `neighbor-list
+(add|del) arfcn <0-1023>` commands, having identical neighbor lists on
+BCCH (SI2) and SACCH (SI5)
+
+manual-si5::
+ Manually specify the neighbor list by means of `neighbor-list
+(add|del) arfcn <0-1023>` for BCCH (SI2) and a separate neighbor list by
+means of `si5 neighbor-list (add|del) arfcn <0-1023>` for SACCH (SI5).
+
+
+=== Configuring GPRS PCU parameters of a BTS
+
+In the case of BTS models using Abis/IP (IPA), the GPRS PCU is located
+inside the BTS. The BTS then establishes a Gb connection to the SGSN.
+
+All the BTS-internal PCU configuration is performed via A-bis OML by
+means of configuring the 'CELL', 'NSVC' (NS Virtual Connection and 'NSE'
+(NS Entity).
+
+There is one 'CELL' node and one 'NSE' node, but there are two 'NSVC'
+nodes. At the time of this writing, only the NSVC 0 is supported by
+OsmoBTS, while both NSVC are supported by the ip.access nanoBTS.
+
+The respective VTY configuration parameters are described below. They
+all exist beneath each BTS VTY config node.
+
+But let's first start with a small example
+
+.Example configuration of GPRS PCU parameters at VTY BTS node
+----
+OsmoBSC(config-net-bts)# gprs mode gprs
+OsmoBSC(config-net-bts)# gprs routing area 1
+OsmoBSC(config-net-bts)# gprs cell bvci 1234
+OsmoBSC(config-net-bts)# gprs nsei 1234
+OsmoBSC(config-net-bts)# gprs nsvc 0 nsvci 1234
+OsmoBSC(config-net-bts)# gprs nsvc 0 local udp port 23000
+OsmoBSC(config-net-bts)# gprs nsvc 0 remote udp port 23000
+OsmoBSC(config-net-bts)# gprs nsvc 0 remote ip 192.168.100.239
+----
+
+
+=== More explanation about the PCU config parameters
+
+//FIXME: should this go into VTY additions?
+
+==== `gprs mode (none|gprs|egprs)`
+
+This command determines if GPRS (or EGPRS) services are to be enabled in
+this cell at all.
+
+
+==== `gprs cell bvci <2-65535>`
+
+Configures the 'BSSGP Virtual Circuit Identifier'. It must be unique
+between all BGSGP connections to one SGSN.
+
+NOTE: It is up to the system administrator to ensure all PCUs are
+allocated an unique bvci. OsmoBSC will not ensure this policy.
+
+
+==== `gprs nsei <0-65535>`
+
+Configures the 'NS Entity Identifier'. It must be unique between all NS
+connections to one SGSN.
+
+NOTE: It is up to the system administrator to ensure all PCUs are
+allocated an unique bvci. OsmoBSC will not ensure this policy.
+
+
+==== `gprs nsvc <0-1> nsvci <0-65535>`
+
+Configures the 'NS Virtual Connection Identifier'. It must be unique
+between all NS virtual connections to one SGSN.
+
+NOTE: It is up to the system administrator to ensure all PCUs are
+allocated an unique nsvci. OsmoBSC will not ensure this policy.
+
+
+==== `gprs nsvc <0-1> local udp port <0-65535>`
+
+Configures the local (PCU side) UDP port for the NS-over-UDP link.
+
+
+==== `gprs nsvc <0-1> remote udp port <0-65535>`
+
+Configures the remote (SGSN side) UDP port for the NS-over-UDP link.
+
+
+==== `gprs nsvc <0-1> remote ip A.B.C.D`
+
+Configures the remote (SGSN side) UDP port for the NS-over-UDP link.
+
+
+==== `gprs ns timer (tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries)` <0-255>
+
+Configures the various GPRS NS related timers. Please check the GPRS NS
+specification for the detailed meaning of those timers.
+
+
+=== Dynamic Timeslot Configuration (TCH / PDCH)
+
+A dynamic timeslot is in principle a voice timeslot (TCH) that is used to serve
+GPRS data (PDCH) when no voice call is active on it. This enhances GPRS
+bandwidth while no voice calls are active, which is dynamically scaled down as
+voice calls need to be served. This is a tremendous improvement in service over
+statically assigning a fixed number of timeslots for voice and data.
+
+The causality is as follows: to establish a voice call, the
+MSC requests a logical channel of a given TCH kind from the BSC. The BSC
+assigns such a channel from a BTS' TRX's timeslot of its choice. The knowledge
+that a given timeslot is dynamic exists only on the BSC level. When the MSC
+asks for a logical channel, the BSC may switch off PDCH on a dynamic timeslot
+and then assign a logical TCH channel on it. Hence, though compatibility with
+the BTS needs to be ensured, any MSC is compatible with dynamic timeslots by
+definition.
+
+OsmoBSC supports two kinds of dynamic timeslot handling, configured via the
+`network` / `bts` / `trx` / `timeslot` / `phys_chan_config` configuration. Not
+all BTS models support dynamic channels.
+
+[[dyn_ts_compat]]
+.Dynamic timeslot support by various BTS models
+[cols="50%,25%,25%"]
+|===
+| |`TCH/F_TCH/H_PDCH` |`TCH/F_PDCH`
+|ip.access nanoBTS |- |supported
+|Ericsson RBS |supported |-
+|sysmoBTS using _osmo-bts-sysmo_ |supported |supported
+|various SDR platforms using _osmo-bts-trx_ |supported |supported
+|Nutaq Litecell 1.5 using _osmo-bts-litecell15_ |supported |supported
+|Octasic OctBTS using _osmo-bts-octphy_ | supported | supported
+|===
+
+The _OsmoBTS Abis Protocol Specification_ <<osmobts-abis-spec>> describes the
+non-standard RSL messages used for these timeslot kinds.
+
+NOTE: Same as for dedicated PDCH timeslots, you need to enable GPRS and operate
+a PCU, SGSN and GGSN to provide the actual data service.
+
+==== Osmocom Style Dynamic Timeslots (TCH/F_TCH/H_PDCH)
+
+Timeslots of the `TCH/F_TCH/H_PDCH` type dynamically switch between TCH/F,
+TCH/H and PDCH, depending on the channel kind requested by the MSC. The RSL
+messaging for `TCH/F_TCH/H_PDCH` timeslots is compatible with Ericsson RBS.
+
+BTS models supporting this timeslot kind are shown in <<dyn_ts_compat>>.
+
+In the lack of transcoding capabilities, this timeslot type may cause
+mismatching codecs to be selected for two parties of the same call, which would
+cause call routing to fail ("`Cannot patch through call with different channel
+types: local = TCH_F, remote = TCH_H`"). A workaround is to disable TCH/F on
+this timeslot type, i.e. to allow only TCH/H. To disable TCH/F on Osmocom
+style dynamic timeslots, use a configuration of
+
+----
+network
+ dyn_ts_allow_tch_f 0
+----
+
+In OsmoNITB, disabling TCH/F on Osmocom dynamic timeslots is the default. In
+OsmoBSC, the default is to allow both.
+
+==== ip.access Style Dynamic Timeslots (TCH/F_PDCH)
+
+Timeslots of the `TCH/F_PDCH` type dynamically switch between TCH/F and PDCH.
+The RSL messaging for `TCH/F_PDCH` timeslots is compatible with ip.access
+nanoBTS.
+
+BTS models supporting this timeslot kind are shown in <<dyn_ts_compat>>.
+
+==== Avoid PDCH Exhaustion
+
+To avoid disrupting GPRS, configure at least one timeslot as dedicated PDCH.
+With only dynamic timeslots, a given number of voice calls would convert all
+timeslots to TCH, and no PDCH timeslots would be left for GPRS service.
+
+==== Dynamic Timeslot Configuration Examples
+
+This is an extract of an `osmo-bsc`` config file. A timeslot configuration with
+five Osmocom style dynamic timeslots and one dedicated PDCH may look like this:
+
+----
+network
+ bts 0
+ trx 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ timeslot 1
+ phys_chan_config SDCCH8
+ timeslot 2
+ phys_chan_config TCH/F_TCH/H_PDCH
+ timeslot 3
+ phys_chan_config TCH/F_TCH/H_PDCH
+ timeslot 4
+ phys_chan_config TCH/F_TCH/H_PDCH
+ timeslot 5
+ phys_chan_config TCH/F_TCH/H_PDCH
+ timeslot 6
+ phys_chan_config TCH/F_TCH/H_PDCH
+ timeslot 7
+ phys_chan_config PDCH
+----
+
+With the ip.access nanoBTS, only `TCH/F_PDCH` dynamic timeslots are supported,
+and hence a nanoBTS configuration may look like this:
+
+----
+network
+ bts 0
+ trx 0
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ timeslot 1
+ phys_chan_config SDCCH8
+ timeslot 2
+ phys_chan_config TCH/F_PDCH
+ timeslot 3
+ phys_chan_config TCH/F_PDCH
+ timeslot 4
+ phys_chan_config TCH/F_PDCH
+ timeslot 5
+ phys_chan_config TCH/F_PDCH
+ timeslot 6
+ phys_chan_config TCH/F_PDCH
+ timeslot 7
+ phys_chan_config PDCH
+----
+
+=== Tuning Access to the BTS
+
+OsmoBSC offers several configuration options to fine-tune access to the BTS.
+It can allow only a portion of the subscribers access to the network.
+This can also be used to ramp up access to the network on startup by slowly
+letting in more and more subscribers. This is especially useful for isolated
+cells with a huge number of subscribers.
+
+Other options control the behaviour of the MS when it needs to access the
+random access channel before a dedicated channel is established.
+
+If the BTS is connected to the BSC via a high-latency connection the MS should
+wait longer for an answer to a RACH request. If it does not the network will
+have to deal with an increased load due to duplicate RACH requests. However,
+in order to minimize the delay when a RACH request or response gets lost the
+MS should not wait too long before retransmitting.
+
+==== Access Control Class Load Management
+
+Every SIM card is member of one of the ten regular ACCs (0-9). Access to the BTS
+can be restricted to SIMs that are members of certain ACCs.
+
+Furthermore, high priority users (such as PLMN staff, public or emergency
+services, etc.) may be members of one or more ACCs from 11-15.
+
+Since the ACCs 0-9 are distributed uniformly across all SIMs, for instance
+allowing only ACCs 0-4 to connect to the BTS should reduce its load by 50% at
+the expense of not serving 50% of the subscribers.
+
+The default is to allow all ACCs to connect.
+
+OsmoBSC supports several levels of ACC management to allow or restrict access
+either permanently or temporarily on each BTS.
+
+The first level of management consists of an access list to flag specific ACCs
+as permanently barred (the list can be updated at any time through VTY as seen
+below). As indicated above, the default is to allow all ACCs (0-15).
+
+.Example: Restrict permanent access to the BTS by ACC
+----
+network
+ bts 0
+ rach access-control-class 1 barred <1>
+ rach access-control-class 9 allowed <2>
+----
+<1> Disallow SIMs with access-class 1 from connecting to the BTS
+<2> Permit SIMs with access-class 9 to connect to the BTS.
+
+On really crowded areas, a BTS may struggle to service all mobile stations
+willing to use it, and which may end up in collapse. In this kind of scenarios
+it is a good idea to temporarily further restrict the amount of allowed ACCs
+(hence restrict the amount of subscribers allowed to reach the BTS).
+However, doing so on a permanent basis would be unfair to subscribers from
+barred ACCs. Hence, OsmoBSC can be configured to temporarily generate ACC
+subsets of the permanent set presented above, and rotate them over time to allow
+fair access to all subscribers. This feature is only aimed at ACCs 0-9,
+since ACCs 11-15 are considered high priority and hence are always configured
+based on permanent list policy.
+
+.Example: Configure rotative access to the BTS
+----
+network
+ bts 0
+ access-control-rotate 3 <1>
+ access-control-rotate-quantum 20 <2>
+----
+<1> Only allow up to 3 concurrent allowed ACCs from the permanent list
+<2> Rotate the generated permanent list subsets every 20 seconds in a fair fashion
+
+Furthermore, cells with large number of subscribers and limited overlapping
+coverage may become overwhelmed with traffic after the cell starts brodacasting.
+This is especially true in areas with little to no reception from other
+networks. To manage the load, OsmoBSC has an option to further restrict the
+rotating ACC subset during startup and slowly increment it over time and taking
+current load into account.
+
+.Example: Ramp up access to the BTS after startup
+----
+network
+ bts 0
+ access-control-class-ramping <1>
+ access-control-class-ramping-step-interval 30 <2>
+ access-control-class-ramping-step-size 1 <3>
+----
+<1> Turn on access-control-class ramping
+<2> Enable more ACCs every 30 seconds
+<3> At each step enable one more ACC
+
+
+Here a full example of all the mechanisms combined can be found:
+
+.Example: Full ACC Load Management config setup
+----
+bts 0
+ rach access-control-class 5 barred <1>
+ rach access-control-class 6 barred
+ rach access-control-class 7 barred
+ rach access-control-class 8 barred
+ rach access-control-class 9 barred
+ access-control-class-rotate 3 <2>
+ access-control-class-rotate-quantum 20 <3>
+ access-control-class-ramping <4>
+ access-control-class-ramping-step-size 1 <5>
+ access-control-class-ramping-step-interval dynamic <6>
+----
+<1> ACCs 5-9 are administratively barred, ie they will never be used until somebody manually enables them in VTY config
+<2> Allow access through temporary subsets of len=3 from ACC set 0-4: (0,1,2) -> (1,2,3) -> (2,3,4) -> (3,4,0), etc.
+<3> Each subset iteration will happen every 20 seconds
+<4> During startup since ramping is enabled, it will further restrict the rotate subset size parameter (len=3)
+<5> The rotate subset size parameter will be increased one ACC slot at a time: len=0 -> len=1 -> len=2 -> len=3
+<6> The time until the subset size is further increased will be calculated based on current channel load
+
+==== RACH Parameter Configuration
+
+The following parameters allow control over how the MS can access the random
+access channel (RACH). It is possible to set a minimum receive level under
+which the MS will not even attempt to access the network.
+
+The RACH is a shared channel which means multiple MS can choose to send a
+request at the same time. To minimize the risk of a collision each MS will
+choose a random number of RACH slots to wait before trying to send a RACH
+request.
+
+On very busy networks the range this number is chosen from should be
+high to avoid collisions, but a lower range reduces the overall delay when
+trying to establish a channel.
+
+The option `rach tx integer N` controls the range from which this number X
+is chosen. It is `0 <= X < max(8,N)`.
+
+After sending a RACH request the MS will wait a random amount of slots before
+retransmitting its RACH request. The range it will wait is also determined by
+the option `rach tx integer N`, but calculating it is not so straightforward.
+It is defined as `S <= X < S+N` where `S` is determined from a table.
+
+In particular `S` is lowest when `N` is one of 3, 8, 14 or 50 and highest when
+`N` is 7, 12 or 32.
+
+For more information see _3GPP TA 44.018_ <<3gpp-ts-44-018>> Ch. 3.3.1.1.2 and
+Table 3.3.1.1.2.1 in particular.
+
+The amount of times the MS attempts to retransmit RACH requests can also be
+changed. A higher number means more load on the RACH while a lower number can
+cause channel establishment to fail due to collisions or bad reception.
+
+.Example: Configure RACH Access Parameters
+----
+network
+ bts 0
+ rxlev access min 20 <1>
+ rach tx integer 50<2>
+ rach max transmission <3>
+----
+<1> Allow access to the network if the MS receives the BCCH of the cell at
+-90dBm or better (20dB above -110dBm).
+<2> This number affects how long the MS waits before (re-)transmitting RACH
+requests.
+<3> How often to retransmit the RACH request.
diff --git a/doc/manuals/chapters/control.adoc b/doc/manuals/chapters/control.adoc
index 327e5b4af..6b1609ae5 100644
--- a/doc/manuals/chapters/control.adoc
+++ b/doc/manuals/chapters/control.adoc
@@ -25,7 +25,6 @@ TRX-specific commands are additionally prefixed with TRX number e. g.
|mcc-mnc-apply|WO|No|"<mcc>,<mnc>"|Apply new MCC/MNC values if different from currently used one.
|notification|WO|Yes|Arbitrary value| See <<notif>> for details.
|inform-msc-v1|WO|Yes|Arbitrary value| See <<infomsc>> for details.
-|ussd-notify-v1|WO|No|"<cic>,<alert>,<text>"| See <<ussdnot>> for details.
|rf_locked|RW|No|"0","1"|See <<rfl>> for details.
|number-of-bts|RO|No|"<num>"|Get number of configured BTS.
|bts.N.location-area-code|RW|No|"<lac>"|Set/Get LAC (value between (0, 65535)).
@@ -54,12 +53,6 @@ intended to be used outside of local systems.
Setting this variable initiate TRAP "inform-msc-v1" to all connected MSCs
control interfaces with the value supplied in SET operation.
-[[ussdnot]]
-=== ussd-notify-v1
-
-Setting this variable will send USSD Notify message to subscriber specified in
-command parameters with the text specified in command parameters.
-
[[chanlo]]
=== channel-load
diff --git a/doc/manuals/chapters/counters.adoc b/doc/manuals/chapters/counters.adoc
index 7fbb10c6f..be92369b6 100644
--- a/doc/manuals/chapters/counters.adoc
+++ b/doc/manuals/chapters/counters.adoc
@@ -1,4 +1,4 @@
[[counters]]
-== Counters
+== Implemented Counters
include::./counters_generated.adoc[]
diff --git a/doc/manuals/chapters/counters_generated.adoc b/doc/manuals/chapters/counters_generated.adoc
index d55df072f..f668865fd 100644
--- a/doc/manuals/chapters/counters_generated.adoc
+++ b/doc/manuals/chapters/counters_generated.adoc
@@ -1,7 +1,88 @@
+
// autogenerated by show asciidoc counters
-These counters and their description based on OsmoBSC (OsmoBSC).
+These counters and their description based on OsmoBSC 1.4.0.84-3f1f8 (OsmoBSC).
+
+=== Rate Counters
// generating tables for rate_ctr_group
+// rate_ctr_group table base transceiver station
+.bts - base transceiver station
+[options="header"]
+|===
+| Name | Reference | Description
+| chreq:total | <<bts_chreq:total>> | Received channel requests.
+| chreq:no_channel | <<bts_chreq:no_channel>> | Sent to MS no channel available.
+| chan:rf_fail | <<bts_chan:rf_fail>> | Received a RF failure indication from BTS.
+| chan:rll_err | <<bts_chan:rll_err>> | Received a RLL failure with T200 cause from BTS.
+| oml_fail | <<bts_oml_fail>> | Received a TEI down on a OML link.
+| rsl_fail | <<bts_rsl_fail>> | Received a TEI down on a OML link.
+| codec:amr_f | <<bts_codec:amr_f>> | Count the usage of AMR/F codec by channel mode requested.
+| codec:amr_h | <<bts_codec:amr_h>> | Count the usage of AMR/H codec by channel mode requested.
+| codec:efr | <<bts_codec:efr>> | Count the usage of EFR codec by channel mode requested.
+| codec:fr | <<bts_codec:fr>> | Count the usage of FR codec by channel mode requested.
+| codec:hr | <<bts_codec:hr>> | Count the usage of HR codec by channel mode requested.
+| paging:attempted | <<bts_paging:attempted>> | Paging attempts for a subscriber.
+| paging:already | <<bts_paging:already>> | Paging attempts ignored as subscriber was already being paged.
+| paging:responded | <<bts_paging:responded>> | Paging attempts with successful paging response.
+| paging:expired | <<bts_paging:expired>> | Paging Request expired because of timeout T3113.
+| chan_act:total | <<bts_chan_act:total>> | Total number of Channel Activations.
+| chan_act:nack | <<bts_chan_act:nack>> | Number of Channel Activations that the BTS NACKed
+| rsl:unknown | <<bts_rsl:unknown>> | Number of unknown/unsupported RSL messages received from BTS
+| rsl:ipa_nack | <<bts_rsl:ipa_nack>> | Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS
+| chan:mode_modify_nack | <<bts_chan:mode_modify_nack>> | Number of Channel Mode Modify NACKs received from BTS
+|===
+// rate_ctr_group table base transceiver station
+.bts - base transceiver station
+[options="header"]
+|===
+| Name | Reference | Description
+| chreq:total | <<bts_chreq:total>> | Received channel requests.
+| chreq:no_channel | <<bts_chreq:no_channel>> | Sent to MS no channel available.
+| chan:rf_fail | <<bts_chan:rf_fail>> | Received a RF failure indication from BTS.
+| chan:rll_err | <<bts_chan:rll_err>> | Received a RLL failure with T200 cause from BTS.
+| oml_fail | <<bts_oml_fail>> | Received a TEI down on a OML link.
+| rsl_fail | <<bts_rsl_fail>> | Received a TEI down on a OML link.
+| codec:amr_f | <<bts_codec:amr_f>> | Count the usage of AMR/F codec by channel mode requested.
+| codec:amr_h | <<bts_codec:amr_h>> | Count the usage of AMR/H codec by channel mode requested.
+| codec:efr | <<bts_codec:efr>> | Count the usage of EFR codec by channel mode requested.
+| codec:fr | <<bts_codec:fr>> | Count the usage of FR codec by channel mode requested.
+| codec:hr | <<bts_codec:hr>> | Count the usage of HR codec by channel mode requested.
+| paging:attempted | <<bts_paging:attempted>> | Paging attempts for a subscriber.
+| paging:already | <<bts_paging:already>> | Paging attempts ignored as subscriber was already being paged.
+| paging:responded | <<bts_paging:responded>> | Paging attempts with successful paging response.
+| paging:expired | <<bts_paging:expired>> | Paging Request expired because of timeout T3113.
+| chan_act:total | <<bts_chan_act:total>> | Total number of Channel Activations.
+| chan_act:nack | <<bts_chan_act:nack>> | Number of Channel Activations that the BTS NACKed
+| rsl:unknown | <<bts_rsl:unknown>> | Number of unknown/unsupported RSL messages received from BTS
+| rsl:ipa_nack | <<bts_rsl:ipa_nack>> | Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS
+| chan:mode_modify_nack | <<bts_chan:mode_modify_nack>> | Number of Channel Mode Modify NACKs received from BTS
+|===
+// rate_ctr_group table base transceiver station
+.bts - base transceiver station
+[options="header"]
+|===
+| Name | Reference | Description
+| chreq:total | <<bts_chreq:total>> | Received channel requests.
+| chreq:no_channel | <<bts_chreq:no_channel>> | Sent to MS no channel available.
+| chan:rf_fail | <<bts_chan:rf_fail>> | Received a RF failure indication from BTS.
+| chan:rll_err | <<bts_chan:rll_err>> | Received a RLL failure with T200 cause from BTS.
+| oml_fail | <<bts_oml_fail>> | Received a TEI down on a OML link.
+| rsl_fail | <<bts_rsl_fail>> | Received a TEI down on a OML link.
+| codec:amr_f | <<bts_codec:amr_f>> | Count the usage of AMR/F codec by channel mode requested.
+| codec:amr_h | <<bts_codec:amr_h>> | Count the usage of AMR/H codec by channel mode requested.
+| codec:efr | <<bts_codec:efr>> | Count the usage of EFR codec by channel mode requested.
+| codec:fr | <<bts_codec:fr>> | Count the usage of FR codec by channel mode requested.
+| codec:hr | <<bts_codec:hr>> | Count the usage of HR codec by channel mode requested.
+| paging:attempted | <<bts_paging:attempted>> | Paging attempts for a subscriber.
+| paging:already | <<bts_paging:already>> | Paging attempts ignored as subscriber was already being paged.
+| paging:responded | <<bts_paging:responded>> | Paging attempts with successful paging response.
+| paging:expired | <<bts_paging:expired>> | Paging Request expired because of timeout T3113.
+| chan_act:total | <<bts_chan_act:total>> | Total number of Channel Activations.
+| chan_act:nack | <<bts_chan_act:nack>> | Number of Channel Activations that the BTS NACKed
+| rsl:unknown | <<bts_rsl:unknown>> | Number of unknown/unsupported RSL messages received from BTS
+| rsl:ipa_nack | <<bts_rsl:ipa_nack>> | Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS
+| chan:mode_modify_nack | <<bts_chan:mode_modify_nack>> | Number of Channel Mode Modify NACKs received from BTS
+|===
// rate_ctr_group table E1 Input subsystem
.e1inp - E1 Input subsystem
[options="header"]
@@ -18,59 +99,74 @@ These counters and their description based on OsmoBSC (OsmoBSC).
[options="header"]
|===
| Name | Reference | Description
-| chreq:total | <<bsc_chreq:total>> | Received channel requests.
-| chreq:no_channel | <<bsc_chreq:no_channel>> | Sent to MS no channel available.
-| handover:attempted | <<bsc_handover:attempted>> | Received handover attempts.
-| handover:no_channel | <<bsc_handover:no_channel>> | Sent no channel available responses.
-| handover:timeout | <<bsc_handover:timeout>> | Count the amount of timeouts of timer T3103.
-| handover:completed | <<bsc_handover:completed>> | Received handover completed.
-| handover:failed | <<bsc_handover:failed>> | Receive HO FAIL messages.
-| paging:attempted | <<bsc_paging:attempted>> | Paging attempts for a MS.
-| paging:detached | <<bsc_paging:detached>> | Counts the amount of paging attempts which couldn't sent out any paging request because no responsible bts found.
-| paging:completed | <<bsc_paging:completed>> | Paging successful completed.
-| paging:expired | <<bsc_paging:expired>> | Paging Request expired because of timeout T3113.
-| chan:rf_fail | <<bsc_chan:rf_fail>> | Received a RF failure indication from BTS.
-| chan:rll_err | <<bsc_chan:rll_err>> | Received a RLL failure with T200 cause from BTS.
-| bts:oml_fail | <<bsc_bts:oml_fail>> | Received a TEI down on a OML link.
-| bts:rsl_fail | <<bsc_bts:rsl_fail>> | Received a TEI down on a OML link.
-| bts:codec_amr_f | <<bsc_bts:codec_amr_f>> | Count the usage of AMR/F codec by channel mode requested.
-| bts:codec_amr_h | <<bsc_bts:codec_amr_h>> | Count the usage of AMR/H codec by channel mode requested.
-| bts:codec_efr | <<bsc_bts:codec_efr>> | Count the usage of EFR codec by channel mode requested.
-| bts:codec_fr | <<bsc_bts:codec_fr>> | Count the usage of FR codec by channel mode requested.
-| bts:codec_hr | <<bsc_bts:codec_hr>> | Count the usage of HR codec by channel mode requested.
-|===
-// rate_ctr_group table mobile switching center
-.msc - mobile switching center
+| assignment:attempted | <<bsc_assignment:attempted>> | Assignment attempts.
+| assignment:completed | <<bsc_assignment:completed>> | Assignment completed.
+| assignment:stopped | <<bsc_assignment:stopped>> | Connection ended during Assignment.
+| assignment:no_channel | <<bsc_assignment:no_channel>> | Failure to allocate lchan for Assignment.
+| assignment:timeout | <<bsc_assignment:timeout>> | Assignment timed out.
+| assignment:failed | <<bsc_assignment:failed>> | Received Assignment Failure message.
+| assignment:error | <<bsc_assignment:error>> | Assignment failed for other reason.
+| handover:attempted | <<bsc_handover:attempted>> | Intra-BSC handover attempts.
+| handover:completed | <<bsc_handover:completed>> | Intra-BSC handover completed.
+| handover:stopped | <<bsc_handover:stopped>> | Connection ended during HO.
+| handover:no_channel | <<bsc_handover:no_channel>> | Failure to allocate lchan for HO.
+| handover:timeout | <<bsc_handover:timeout>> | Handover timed out.
+| handover:failed | <<bsc_handover:failed>> | Received Handover Fail messages.
+| handover:error | <<bsc_handover:error>> | Re-assignment failed for other reason.
+| interbsc_ho_out:attempted | <<bsc_interbsc_ho_out:attempted>> | Attempts to handover to remote BSS.
+| interbsc_ho_out:completed | <<bsc_interbsc_ho_out:completed>> | Handover to remote BSS completed.
+| interbsc_ho_out:stopped | <<bsc_interbsc_ho_out:stopped>> | Connection ended during HO.
+| interbsc_ho_out:timeout | <<bsc_interbsc_ho_out:timeout>> | Handover timed out.
+| interbsc_ho_out:error | <<bsc_interbsc_ho_out:error>> | Handover to remote BSS failed for other reason.
+| interbsc_ho_in:attempted | <<bsc_interbsc_ho_in:attempted>> | Attempts to handover from remote BSS.
+| interbsc_ho_in:completed | <<bsc_interbsc_ho_in:completed>> | Handover from remote BSS completed.
+| interbsc_ho_in:stopped | <<bsc_interbsc_ho_in:stopped>> | Connection ended during HO.
+| interbsc_ho_in:no_channel | <<bsc_interbsc_ho_in:no_channel>> | Failure to allocate lchan for HO.
+| interbsc_ho_in:failed | <<bsc_interbsc_ho_in:failed>> | Received Handover Fail message.
+| interbsc_ho_in:timeout | <<bsc_interbsc_ho_in:timeout>> | Handover from remote BSS timed out.
+| interbsc_ho_in:error | <<bsc_interbsc_ho_in:error>> | Handover from remote BSS failed for other reason.
+| paging:attempted | <<bsc_paging:attempted>> | Paging attempts for a subscriber.
+| paging:detached | <<bsc_paging:detached>> | Paging request send failures because no responsible BTS was found.
+| paging:responded | <<bsc_paging:responded>> | Paging attempts with successful response.
+| abis:unknown_unit_id | <<bsc_abis:unknown_unit_id>> | Connection attempts from unknown IPA CCM Unit ID.
+|===
+== Osmo Stat Items
+
+// generating tables for osmo_stat_items
+base transceiver station
+// osmo_stat_item_group table base transceiver station
+.bts - base transceiver station
[options="header"]
|===
-| Name | Reference | Description
-| loc_update_type:attach | <<msc_loc_update_type:attach>> | Received location update imsi attach requests.
-| loc_update_type:normal | <<msc_loc_update_type:normal>> | Received location update normal requests.
-| loc_update_type:periodic | <<msc_loc_update_type:periodic>> | Received location update periodic requests.
-| loc_update_type:detach | <<msc_loc_update_type:detach>> | Received location update detach indication.
-| loc_update_resp:failed | <<msc_loc_update_resp:failed>> | Rejected location updates.
-| loc_update_resp:completed | <<msc_loc_update_resp:completed>> | Successful location updates.
-| sms:submitted | <<msc_sms:submitted>> | Received a RPDU from a MS (MO).
-| sms:no_receiver | <<msc_sms:no_receiver>> | Counts SMS which couldn't routed because no receiver found.
-| sms:delivered | <<msc_sms:delivered>> | Global SMS Deliver attempts.
-| sms:rp_err_mem | <<msc_sms:rp_err_mem>> | CAUSE_MT_MEM_EXCEEDED errors of MS responses on a sms deliver attempt.
-| sms:rp_err_other | <<msc_sms:rp_err_other>> | Other error of MS responses on a sms delive attempt.
-| sms:deliver_unknown_error | <<msc_sms:deliver_unknown_error>> | Unknown error occured during sms delivery.
-| call:mo_setup | <<msc_call:mo_setup>> | Received setup requests from a MS to init a MO call.
-| call:mo_connect_ack | <<msc_call:mo_connect_ack>> | Received a connect ack from MS of a MO call. Call is now succesful connected up.
-| call:mt_setup | <<msc_call:mt_setup>> | Sent setup requests to the MS (MT).
-| call:mt_connect | <<msc_call:mt_connect>> | Sent a connect to the MS (MT).
-| call:active | <<msc_call:active>> | Count total amount of calls that ever reached active state.
-| call:complete | <<msc_call:complete>> | Count total amount of calls which got terminated by disconnect req or ind after reaching active state.
-| call:incomplete | <<msc_call:incomplete>> | Count total amount of call which got terminated by any other reason after reaching active state.
+| Name | Reference | Description | Unit
+| chanloadavg | <<bts_chanloadavg>> | Channel load average. | %
+| T3122 | <<bts_T3122>> | T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator. | s
+| rach_busy | <<bts_rach_busy>> | RACH slots with signal above threshold | %
+| rach_access | <<bts_rach_access>> | RACH slots with access bursts in them | %
|===
-// generating tables for osmo_stat_items
-// generating tables for osmo_counters
-// ungrouped osmo_counters
-.ungrouped osmo counters
+base transceiver station
+// osmo_stat_item_group table base transceiver station
+.bts - base transceiver station
[options="header"]
|===
-| Name | Reference | Description
-| msc.active_calls | <<ungroup_counter_msc.active_calls>> |
+| Name | Reference | Description | Unit
+| chanloadavg | <<bts_chanloadavg>> | Channel load average. | %
+| T3122 | <<bts_T3122>> | T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator. | s
+| rach_busy | <<bts_rach_busy>> | RACH slots with signal above threshold | %
+| rach_access | <<bts_rach_access>> | RACH slots with access bursts in them | %
+|===
+base transceiver station
+// osmo_stat_item_group table base transceiver station
+.bts - base transceiver station
+[options="header"]
+|===
+| Name | Reference | Description | Unit
+| chanloadavg | <<bts_chanloadavg>> | Channel load average. | %
+| T3122 | <<bts_T3122>> | T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator. | s
+| rach_busy | <<bts_rach_busy>> | RACH slots with signal above threshold | %
+| rach_access | <<bts_rach_access>> | RACH slots with access bursts in them | %
|===
+== Osmo Counters
+// generating tables for osmo_counters
+// there are no ungrouped osmo_counters
diff --git a/doc/manuals/chapters/handover.adoc b/doc/manuals/chapters/handover.adoc
index 297eafc1f..d9805f78c 100644
--- a/doc/manuals/chapters/handover.adoc
+++ b/doc/manuals/chapters/handover.adoc
@@ -19,11 +19,10 @@ orchestrating completely separate RAN stacks.
OsmoBSC currently supports handover within one BSS and between separate BSS.
Whether inter-MSC is supported depends on the MSC implementation (to the BSC,
inter-MSC handover looks identical to inter-BSC handover). Inter-RAT handover
-is currently not implemented.
+is currently not implemented. However, you may still advertise 3G and 4G neighbor cells
+in order to facilitate cell/RAT re-selection to those neighbors.
-At the time of writing, OsmoMSC's inter-BSC handover support is not complete
-yet, so OsmoBSC can perform handover between separate BSS only in conjunction
-with a 3rd party MSC implementation.
+Since 2019, OsmoMSC fully supports both inter-BSC and inter-MSC handover.
.Handover support in Osmocom at the time of writing
[cols="^,^,^,^,^"]
@@ -33,6 +32,7 @@ with a 3rd party MSC implementation.
| OsmoMSC | (not involved, except for codec changes) | (planned) | (planned) | -
|====
+Most handover related procedures are explained in 3GPP TS 48.008.
=== How Handover Works
@@ -44,13 +44,24 @@ The BSS is configured to know which cell is physically adjacent to which other
cells, its "neighbors". On the MS/BTS/BSS level, individual cells are
identified by ARFCN+BSIC (frequency + 6-bit identification code).
-Each BTS is told by the BSC which cells identified by ARFCN+BSIC are its
-adjacent cells. Via System Information, each MS receives a list of these
-ARFCN+BSIC, and the MS then return measurements of reception levels.
+The BSC instructs each BTS with a list of ARFCNs (i.e. GSM frequency bands)
+that qualify as neighbor cells, as part of the System Information Type 2. Each
+MS served by a BTS receives the System Information Type 2 and thus knows which
+ARFCNs to measure for potential handover. Each MS with an active channel then
+returns up to 6 measurements of reception levels (RXLEV) to the BTS, to be
+forwarded to the BSC in RSL Measurement Report messages.
+
+Note that the BTS and MS are told only the ARFCNs, not the BSICs, of neighbor
+cells; the BSICs are however included in the measurements that an MS returns to
+BTS and BSC. Commonly, each ARFCN is owned by one specific operator, so, an MS
+considers all visible cells on a given ARFCN as possible neighbors. However, as
+soon as an MS reports RXLEV of a specific neighbor cell, the BSC needs to know
+which exact cell to possibly handover to, which is why the MS pinpoints the
+specific BSIC that it reported measurements for.
The BSC is the point of decision whether to do handover or not. This can be a
hugely complex combination of heuristics, knowledge of cell load and codec
-capabilites. The most important indicator for handover though is: does an MS
+capabilities. The most important indicator for handover though is: does an MS
report a neighbor with a better signal than the current cell? See
<<intra_bsc_ho_dot>>.
@@ -73,18 +84,18 @@ If the BSC sees the need for handover, it will:
Should handover fail at any point, e.g. the new lchan never receives a RACH, or
the MS reports a Handover Failure, then the new lchan is simply released again,
and the old lchan remains in use. If the RTP stream has already been switched
-over to the new lchan, it may actually be switched back to the old lchan.
+over to the new lchan, it is switched back to the old lchan.
This is simple enough if the new cell is managed by the same BSC: the OsmoMGW
is simply instructed to relay the BTS-side of the RTP stream to another IP
address and port, and the BSC continues to forward DTAP to the MSC
-transparently. The operation happens completely within the BSS. If the voice
-codec has remained unchanged, the MSC/MNCC may not even be notified that
-anything has happened at all.
+transparently. The operation happens completely within the BSS, except for the
+BSSMAP Handover Performed message sent to the MSC once the handover is
+completed (see 3GPP TS 48.008).
==== External / Inter-BSC Handover
-If the adjacent target cell belongs to a different BSS, the RR procedure for
+If the handover target cell belongs to a different BSS, the RR procedure for
handover remains the same, but we need to tell the _remote_ BSC to allocate the
new lchan.
@@ -107,7 +118,7 @@ include::handover_inter_bsc.dot[]
The first part, identifying the remote BSC, is not as trivial as it sounds: as
mentioned above, on the level of cell information seen by BTS and MS, the
neighbor cells are identified by ARFCN+BSIC. However, on the A-interface and in
-the MSC, there is no knowledge of ARFCN+BSIC configurations, and instead each
+the MSC, there is no knowledge of ARFCN+BSIC configurations. Instead, each
cell is identified by a LAC and CI (Location Area Code and Cell Identifier).
NOTE: There are several different cell identification types on the A-interface:
@@ -115,15 +126,7 @@ from Cell Global Identifier (MCC+MNC+LAC+CI) down to only LAC. OsmoBSC supports
most of these (see <<neighbor_conf_list>>). For simplicity, this description
focuses on LAC+CI identification.
-The most obvious reason for using LAC+CI is that identical ARFCN+BSIC are
-typically re-used across many cells of the same network operator: an operator
-will have only very few ARFCNs available, and the 6bit BSIC opens only a very
-limited range of distinction between cells. As long as each cell has no more
-than one neighbor per given ARFCN+BSIC, these values can be re-used any number
-of times across a network, and even between cells managed by one and the same
-BSC.
-
-The consequence of this is that
+Hence:
- the BSC needs to know which remote-BSS cells' ARFCN+BSIC correspond to
exactly which global LAC+CI, and
@@ -133,6 +136,14 @@ In other words, each BSC requires prior knowledge about the cell configuration
of its remote-BSS neighbor cells, and the MSC requires prior knowledge about
each BSC's cell identifiers; i.e. these config items are spread reduntantly.
+The most obvious reason for using LAC+CI in BSSMAP is that identical ARFCN+BSIC
+are typically re-used across many cells of the same network operator: an
+operator will have only very few ARFCNs available, and the 6bit BSIC opens only
+a very limited range of distinction between cells. As long as each cell has no
+more than one neighbor per given ARFCN+BSIC, these values can be re-used any
+number of times across a network, and even between cells managed by one and the
+same BSC.
+
=== Configuring Neighbors
The most important step to enable handover in OsmoBSC is to configure each cell
@@ -141,12 +152,12 @@ remote-BSS.
For a long time, OsmoBSC has offered configuration to manually enter the
ARFCN+BSIC sent out as neighbors on various System Information messages (all
-`neighbor-list` related commands). This is still possible, however,
+`neighbor-list` related commands). This is still possible; however,
particularly for re-using ARFCN+BSIC within one BSS, this method will not work
well.
With the addition of inter-BSC handover support, the new `neighbor` config item
-has been added to the `bts` config, to maintain explicit cell-to-cell neighbor
+has been added to the `bts` config node, to maintain explicit cell-to-cell neighbor
relations, with the possibility to re-use ARFCN+BSIC in each cell.
It is recommended to completely replace `neighbor-list` configurations with the
@@ -156,31 +167,30 @@ new `neighbor` configuration described below.
.Overview of neighbor configuration on the `bts` config node
[frame="none",grid="none",cols="^10%,^10%,80%"]
|====
-| Local | Remote BSS |
-| ✓ | | neighbor bts 5
-| ✓ | | neighbor lac 200
-| ✓ | | neighbor lac-ci 200 3
-| ✓ | | neighbor cgi 001 01 200 3
-| ✓ | ✓ | neighbor lac 200 arfcn 123 bsic 1
-| ✓ | ✓ | neighbor lac-ci 200 3 arfcn 123 bsic 1
-| ✓ | ✓ | neighbor cgi 001 01 200 3 arfcn 123 bsic 1
+| Local | Remote BSS | type of `neighbor` config line, by example
+| ✓ | | `neighbor bts 5`
+| ✓ | | `neighbor lac 200`
+| ✓ | | `neighbor lac-ci 200 3`
+| ✓ | | `neighbor cgi 001 01 200 3`
+| ✓ | ✓ | `neighbor lac 200 arfcn 123 bsic 1`
+| ✓ | ✓ | `neighbor lac-ci 200 3 arfcn 123 bsic 1`
+| ✓ | ✓ | `neighbor cgi 001 01 200 3 arfcn 123 bsic 1`
|====
==== Default: All Local Cells are Neighbors
-For historical reasons, the default behavior of OsmoBSC is to add all local-BSS cells as neighbors. To
-maintain a backwards compatible configuration file format, this is still the case: as soon as no explicit
+For historical reasons, the default behavior of OsmoBSC is to add all local-BSS cells as neighbors for every other cell. To
+maintain a backwards compatible configuration file format, this is still the case: as long as no explicit
neighbor cell is configured with a `neighbor` command (either none was configured, or all configured
-neighbors have been removed again), a cell automatically lists all of the local-BSS cells as neighbors.
+`neighbor` lines have been removed again), a cell automatically lists all of the local-BSS cells as neighbors.
These are implicit mappings in terms of the legacy neighbor configuration scheme, and re-using ARFCN+BSIC
combinations within a BSS will not work well this way.
-As soon as the first explicit neighbor relation is added to a cell, the legacy behavior is switched off,
+As soon as the first explicit `neighbor` relation is added to a cell, the legacy behavior is switched off,
and only explicit neighbors are in effect.
-NOTE: If a cell is required to not have any neighbors, it is recommended to rather switch off handover
-for that cell with `handover 0`. An alternative solution is to set `neighbor-list mode manual` and not
-configure any `neighbor-list` entries.
+NOTE: If a cell is required to not have any neighbors, it is recommended to switch off handover
+for that cell with `handover 0`.
==== Local-BSS Neighbors
@@ -227,10 +237,13 @@ network
It is allowed to include the ARFCN and BSIC of local neighbor cells, even
though that is redundant with the already known local configuration of the
-other cell. The idea is to ease generating the neighbor configuration
-automatically, since local-BSS and remote-BSS neighbors then share identical
-configuration formatting. For human readability and maintainability, it may
-instead be desirable to use the `neighbor bts <0-255>` format.
+target cell. The idea is to ease generating the neighbor configuration
+automatically, in that local-BSS and remote-BSS neighbors can have identical
+configuration formatting. If the cell identification (LAC+CI) matches a local
+cell but a mismatching ARFCN+BSIC follows on the same config line, OsmoBSC will
+report errors. For human readability and maintainability, it may instead be
+desirable to use the `neighbor bts <0-255>` format, or omit the redundant
+`arfcn` and `bsic`.
.Example: configuring neighbors within the local BSS in osmo-bsc.cfg, redundantly identified by LAC+CI as well as ARFCN+BSIC
----
@@ -259,14 +272,11 @@ network
neighbor lac-ci 23 5 arfcn 1 bsic 1
----
-If the cell identification matches a local cell, OsmoBSC will report errors if
-the provided ARFCN+BSIC do not match.
-
==== Remote-BSS Neighbors
-Remote-BSS neighbors _always_ need to be configured with full A-interface
+Remote-BSS neighbors always need to be configured with full A-interface
identification _and_ ARFCN+BSIC, to allow mapping a cell's neighbor ARFCN+BSIC
-to a _BSSMAP Cell Identifier_ (see 3GPP TS 48.008 3.1.5.1 Handover Required
+to a BSSMAP Cell Identifier (see 3GPP TS 48.008 3.1.5.1 Handover Required
Indication and 3.2.1.9 HANDOVER REQUIRED).
.Example: configuring remote-BSS neighbors in osmo-bsc.cfg, identified by LAC+CI (showing both BSCs' configurations)
@@ -319,7 +329,7 @@ necessary to
=== Configuring Handover Decisions
For a long time, OsmoBSC has supported handover based on reception level
-hysteresis (RXLEV) and distance (TA, Timing Advance), known has `algorithm 1`.
+hysteresis (RXLEV) and distance (TA, Timing Advance), known as `algorithm 1`.
Since 2018, OsmoBSC also supports a load-based handover decision algorithm,
known as `algorithm 2`, which also takes cell load, available codecs and
@@ -386,7 +396,7 @@ network
----
The order in which these settings are issued makes no difference for the
-overlay; i.e., this configuration is perfectly identical to the above, and the
+overlay; i.e., the following configuration is perfectly identical to the above, and the
individual cell's value remains in force:
----
@@ -424,7 +434,8 @@ with the next Measurement Report received.
Configuration settings relevant for algorithm 1 start with `handover1`. For
further details, please refer to the OsmoBSC VTY Reference
-(<<vty-ref-osmobsc>>) or the telnet VTY online documentation.
+(<<vty-ref-osmobsc>>) or the telnet VTY online documentation. See the
+`handover1` settings on the `config-net` and `config-net-bts` nodes.
==== Handover Algorithm 2
@@ -441,7 +452,8 @@ configurable (see `handover2 penalty-time` configuration items).
Configuration settings relevant for algorithm 2 start with `handover2`. For
further details, please refer to the OsmoBSC VTY Reference
-<<vty-ref-osmobsc>> or the telnet VTY online documentation.
+<<vty-ref-osmobsc>> or the telnet VTY online documentation. See the `handover2`
+settings on the `config-net` and `config-net-bts` nodes.
===== Load Distribution
@@ -462,8 +474,8 @@ In either case, load distribution will only occur towards neighbor cells that
adhere to minimum reception levels and distance, see `min rxlev` and `max
distance`.
-Load distribution will take effect only for already established voice channels.
-An MS will always first establish a voice call with its current cell choice; in
+Load distribution will take effect only for already established channels.
+For example, an MS will always first establish a voice call with its current cell choice; in
load situations, it might be moved to another cell shortly after that.
Considering the best neighbor _before_ starting a new voice call might be
desirable, but is currently not implemented. Consider that RXLEV/RXQUAL ratings
@@ -575,3 +587,103 @@ OsmoBSC:
- Algorithm 1 has no `min rxlev` setting.
- Algorithm 1 does not actually use any information besides the Measurement
Reports, and hence can trivially treat all neighbor cells identically.
+
+=== Advertising 3G/4G neighbors
+
+Despite osmo-bsc not supporting inter-RAT hand-over at this point, it
+still makes sense to advertise neighbor cells of other network
+technologies like UMTS/UTRAN (3G) and LTE/EUTRAN (4G). This will help
+phones with idle-mode re-selection of the best available radio access
+technology (RAT).
+
+For more information on the inter-RAT cell re-selection algorithm and its
+parameters, see 3GPP TS 45.008 - particularly Section 6.6.4 describing
+measurements on cells of other (non-GSM) RATs.
+
+Such neighbors are advertised as part of the SI2quater (System
+Information Type 2quater).
+
+==== UMTS/UTRAN/3G neighbors
+
+In order to advertise a 3G neighbor cell you have to specify the
+following properties:
+
+* the UARFCN (UTRAN Absolute Radio Channel Number) on which the cell
+ broadcasts
+* the Scrambling Code of the cell
+* whether or not the cell uses diversity
+
+
+In the following example, we're configuring a 3G neighbor cell on UARFCN
+1234 using the scrambling code 511 with no diversity:
+
+----
+network
+ bts 0
+ si2quater neighbor-list add uarfcn 1234 511 0
+----
+
+3G neighbor cells can be removed using the same command, just replacing
+`add` with `del`.
+
+==== LTE/EUTRAN/4G neighbors
+
+In order to advertise a 4G neighbor cell you have to specify the
+following properties:
+
+* EARFCN (EUTRAN Absolute Radio Channel Number) on which the cell
+ broadcasts
+* Reselection thresholds towards E-UTRAN cells:
+[width="30%"]
+|====
+| 0 | 0 dB
+| 1 | 2 dB
+| 2 | 4 dB
+| 3 | 6 dB
+| ... | ...
+| 31 | 62 dB
+|=====
+* Priority of E-UTRAN frequency: 0 = lowest priority, ..., 7 = highest priority
+* QRXLEVMIN parameter: Minimum required RX level in the UTRAN FDD cell
+ (dBm), see 3GPP TS 25.304.
+[width="30%"]
+|====
+| 0 | -140 dBm
+| 1 | -138 dBm
+| 2 | -136 dBm
+| ... | ...
+| 31 | -78 dBm
+|====
+* Measurement bandwidth in MHz, see 3GPP TS 44.018 and 3GPP TS 44.060.
+ This field specifies the minimum value of the channel bandwidth of all
+ valid E-UTRAN cells on the specified EARFCN. It is defined by the
+ parameter Transmission Bandwidth Configuration, N RB (see 3GPP TS
+ 36.104). The values indicate the number of resource blocks over which
+ the mobile station could measure if the mobile station does not
+ support wideband RSRQ measurements (see 3GPP TS 24.008). A mobile
+ station supporting wideband RSRQ measurements shall measure over the
+ indicated number of resource blocks. The field is coded according to
+ the following table:
+[width="30%"]
+|====
+| 0 | N_RB = 6
+| 1 | N_RB = 15
+| 2 | N_RB = 25
+| 3 | N_RB = 50
+| 4 | N_RB = 75
+| 5 | N_RB = 100
+|====
+
+In the following example we're configuring a 4G neighbor on EARFCN 2342
+with a higher reselection threshold of 40dB, a lower reselection
+threshold of 20dB, priority 5, QRXLEVMIN of -140 dBm and a measurement
+bandwidth of 100 resource blocks:
+
+----
+network
+ bts 0
+ si2quater neighbor-list add earfcn 2342 thresh-hi 20 thresh-lo 10 prio 5 qrxlv 0 meas 5
+----
+
+4G neighbor cells can be removed using the same command, just replacing
+`add` with `del`.
diff --git a/doc/manuals/chapters/handover_inter_bsc.dot b/doc/manuals/chapters/handover_inter_bsc.dot
index 0cc655401..42decef32 100644
--- a/doc/manuals/chapters/handover_inter_bsc.dot
+++ b/doc/manuals/chapters/handover_inter_bsc.dot
@@ -18,8 +18,8 @@ subgraph cluster_bss_b {
}
MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=3 RXLEV"]
-BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]
-BTS_b0 -> MS [label="(2) good RXLEV",style=dotted]
+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1"]
+BTS_b0 -> MS [label="(2) good RXLEV\nBSIC=3",style=dotted]
MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]
BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]
diff --git a/doc/manuals/chapters/handover_intra_bsc.dot b/doc/manuals/chapters/handover_intra_bsc.dot
index 2a4f6cf15..75eedec0c 100644
--- a/doc/manuals/chapters/handover_intra_bsc.dot
+++ b/doc/manuals/chapters/handover_intra_bsc.dot
@@ -18,8 +18,8 @@ subgraph cluster_bss_b {
}
MS -> BTS_a1 [label="(3) Measurement:\nARFCN=1 BSIC=1 RXLEV"]
-BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1 BSIC=1\nARFCN=1 BSIC=3"]
-BTS_a0 -> MS [label="(2) good RXLEV",style=dotted]
+BTS_a1 -> MS [label="(1) my neighbors:\nARFCN=1"]
+BTS_a0 -> MS [label="(2) good RXLEV\nBSIC=1",style=dotted]
MS -> {BTS_a0,BTS_b0,BTS_b1} [style=invisible,arrowhead=none]
BTS_a1 -> BSC_a [label="(4) Measurement\nReport",style=dashed]
diff --git a/doc/manuals/chapters/mscpool.adoc b/doc/manuals/chapters/mscpool.adoc
new file mode 100644
index 000000000..923a08810
--- /dev/null
+++ b/doc/manuals/chapters/mscpool.adoc
@@ -0,0 +1,213 @@
+== MSC Pooling
+
+MSC pooling is described in 3GPP TS 23.236 <<3gpp-ts-23-236>>, and is supported
+by OsmoBSC since mid 2020.
+
+The aim of MSC pooling is to distribute load from a BSC across multiple MSCs,
+which are equivalent and redundant infrastructure for the same core network.
+
+The main mechanism for MSC pooling is the TMSI identity, which an MSC hands out
+to its attached subscribers. Typically 10 bits of the TMSI are designated as a
+Network Resource Identifier (NRI) that identifies the originating MSC, and
+allows OsmoBSC to direct a subscriber back to the same MSC instance that
+previously negotiated the IMSI Attach procedure. Typically, the full NRI value
+range available is divided into N even ranges, where each MSC is assigned one
+NRI range.
+
+Subscribers attaching without a TMSI identity, or those with unknown NRI value,
+are evenly distributed across MSC instances. OsmoBSC uses a round-robin
+approach to distribute load across all connected MSCs.
+
+A Paging Response from a subscriber is always returned back to whichever MSC
+initiated the Paging, regardless of the Mobile Identity used.
+
+Finally, a NULL-NRI is a special NRI value that indicates that the MSC wishes
+to offload this subscriber to a different MSC. A NULL-NRI is an arbitrary NRI
+value that is chosen distinctly for each PLMN served by a BSC, so that a
+subscriber can be reassigned within that PLMN. Upon (periodic) Location
+Updating, an offloading MSC hands out a NULL-NRI value in the assigned TMSI,
+along with a non-broadcast LAI. The subscriber will notice the LAI mismatch,
+and immediately re-attempt the attach using the TMSI containing the NULL-NRI.
+The BSC recognises the NULL-NRI and redirects the subscriber to one of the
+other MSCs. A prerequisite for this to work well is that the particular MSC is
+previously marked as not accepting new subscribers, in the BSC's configuration.
+
+The mechanisms described above make up the NAS node selection function
+implemented in the BSC.
+
+3GPP TS 23.236 also defines that an offloading MSC hands subscriber information
+to the newly assigned MSC, which takes place outside the scope of the BSC.
+
+=== Configuring MSC Pooling
+
+The NRI ranges assigned to each MSC must match in the BSC and the MSC
+configuration. If MSC and BSC had inconsistent NRI value ranges configured,
+attached subscribers would be redirected MSC instances that did not perform the
+attach, possibly rendering the core network unusable.
+
+==== Connecting Multiple MSCs
+
+The `cs7 instance` configuration defines the SCCP addresses to reach the MSCs
+at. In addition, each MSC is configured by its own `msc` section in the
+configuration. An example osmo-bsc.cfg serving three MSCs:
+
+----
+cs7 instance 0
+ # SCCP address book entries for the three MSCs
+ sccp-address my-msc-0
+ point-code 0.23.0
+ sccp-address my-msc-1
+ point-code 0.23.1
+ sccp-address my-msc-2
+ point-code 0.23.2
+
+# assign each MSC configuration its remote SCCP address
+msc 0
+ msc-addr my-msc-0
+msc 1
+ msc-addr my-msc-1
+msc 2
+ msc-addr my-msc-2
+
+# configure NRI value ranges
+network
+ nri bitlen 10
+ nri null add 0
+msc 0
+ nri add 1 341
+msc 1
+ nri add 342 682
+msc 2
+ nri add 683 1023
+----
+
+==== NRI Value Bit Length
+
+In OsmoBSC, the NRI value's bit length is freely configurable from 1 to 15
+bits. 3GPP TS 23.236 suggests a typical bit length of 10, which is OsmoBSC's
+default. The NRI bit length must be identical across the entire MSC pool.
+
+Change the NRI value bit length in OsmoBSC's VTY configuration like this:
+
+----
+network
+ nri bitlen 10
+----
+
+In the TMSI bits, regardless of the NRI bit length, the NRI value always starts
+just after the most significant octet of a TMSI (most significant bit at TMSI's
+bit 23).
+
+==== NULL-NRI
+
+Since OsmoBSC supports serving only one PLMN, NULL-NRI are configured globally.
+Even though 3GPP TS 23.236 indicates that there is a single NULL-NRI per PLMN,
+OsmoBSC allows configuring multiple NULL-NRI values.
+
+----
+network
+ nri null add 0
+ nri null add 423
+----
+
+==== Assigning NRI Ranges to MSCs
+
+Each MSC configured in OsmoBSC must be assigned a distinct NRI value range.
+Overlapping NRI value ranges will cause failure to serve subscribers.
+
+NRI values are typically configured in ranges, here dividing a 10bit range
+(0..1023) into three equal ranges, while leaving 0 available to be configured
+as NULL-NRI:
+
+----
+msc 0
+ nri add 1 341
+msc 1
+ nri add 342 684
+msc 2
+ nri add 685 1023
+----
+
+NRI can also be assigned in single values:
+
+----
+msc 0
+ nri add 23
+----
+
+Ranges can be constructed arbitrarily by a sequence of `add` and `del`
+configurations, here a contrived example:
+
+----
+msc 0
+ nri add 0 342
+ nri del 23
+ nri del 42 235
+ nri add 1000 1023
+----
+
+To view the current NRI config in a running OsmoBSC instance, use the
+`show nri` command, here showing the result of the contrived example:
+
+----
+OsmoBSC(config-msc)# show nri
+msc 0
+ nri add 0 22
+ nri add 24 41
+ nri add 236 342
+ nri add 1000 1023
+----
+
+On the VIEW and ENABLE VTY nodes, `show nri` shows all MSCs:
+
+----
+OsmoBSC> show nri
+msc 0
+ nri add 1 341
+msc 1
+ nri add 342 684
+msc 2
+ nri add 685 1023
+----
+
+When configuring overlapping NRI value ranges across MSCs, the telnet VTY warns
+about it, and starting OsmoBSC with such a configuration will fail:
+
+----
+msc 0
+ nri add 1 511
+msc 1
+ nri add 512 1023
+msc 2
+ nri add 500 555
+----
+
+This results in:
+
+----
+$ osmo-bsc
+DMSC ERROR msc 2: NRI range [500..555] overlaps between msc 2 and msc 0. For overlaps, msc 0 has higher priority than msc 2
+DMSC ERROR msc 2: NRI range [500..555] overlaps between msc 2 and msc 1. For overlaps, msc 1 has higher priority than msc 2
+----
+
+==== MSC Offloading
+
+To effectively offload a particular MSC, it must be marked as no longer taking
+new subscribers in OsmoBSC. This can be achieved in the telnet VTY by:
+
+----
+msc 0
+ no allow-attach
+----
+
+This MSC will, as long as it is connected, continue to serve subscribers
+already attached to it: those that yield an NRI matching this MSC, and those
+that are being paged by this MSC. But OsmoBSC will no longer direct new
+subscribers to this MSC.
+
+To re-enable an MSC for attaching new subscribers:
+
+----
+msc 0
+ allow-attach
+----
diff --git a/doc/manuals/chapters/osmux_bsc.adoc b/doc/manuals/chapters/osmux_bsc.adoc
new file mode 100644
index 000000000..0a11d17bf
--- /dev/null
+++ b/doc/manuals/chapters/osmux_bsc.adoc
@@ -0,0 +1,43 @@
+include::{commondir}/chapters/osmux/osmux.adoc[]
+
+=== Osmux Support in {program-name}
+
+==== {program-name} in a A/IP with IPA/SCCPlite network setup
+
+In this kind of setup, Osmux is transparent to {program-name} and no specific
+configuration is required here, since the CN-side of the BSC-attached MGW is
+managed directly by the MSC.
+
+So, in this case, only MSC and MGW (both for MSC-attached one and BSC-attached
+one) need to be configured explicitly.
+
+==== {program-name} in a 3GPP AoIP network setup
+
+Osmux usage in {program-name} in managed through the VTY command `osmux
+(on|off|only)`. Once enabled (`on` or `only`), {program-name} will start
+appending the vendor specific _Osmux Support_ IE in _BSSMAP RESET_ and _BSSMAP
+RESET-ACK_ message towards the MSC in order to announce it supports Osmux. This
+way, the MSC can decide whether to use Osmux or not based on this information
+when setting up a call (this time using _Osmux CID_ IE). It should be noted that
+this option should not be enabled unless MSC managing {program-name} supports
+handling this extension IE (like OsmoMSC), a 3rd-party MSC might otherwise
+refuse the related _RESET_/_RESET-ACK_ messages.
+
+{program-name} will behave differently during call set up based on the VTY
+command presented above:
+
+* `off`: If _BSSMAP Assign Request_ from MSC contains _Osmux CID_ IE, meaning
+ MSC wants to use Osmux for this call, then {program-name} will reject the
+ assignment and the call set up will fail.
+* `on`: BSC will support and accept both Osmux and non-Osmux (RTP) upon call set
+ up. If _BSSMAP Assign Request_ from MSC contains _Osmux CID_ IE,
+ {program-name} will instruct its MGW to set up an Osmux connection on the
+ CN-side of the MGCP endpoint, and will provide the MSC with its _recvCID_
+ through the extension IE _Osmux CID_ appended to the _BSSMAP Assign Complete_
+ message. On the other hand, if _BSSMAP Assign Request_ doesn't contain an
+ _Osmux CID_ IE, {program-name} will instruct its MGW to set up a regular RTP
+ connection on the CN-side of the MGCP endpoint.
+* `only`: Same as per `on`, except that {program-name} will accept only Osmux
+ calls on the CN-side, this is, if _BSSMAP Assign Request_ from MSC doesn't
+ contain an _Osmux CID_ IE, it will reject the assignment and the call set up
+ will fail.
diff --git a/doc/manuals/chapters/overview.adoc b/doc/manuals/chapters/overview.adoc
index 9b619fb24..a27b0bf22 100644
--- a/doc/manuals/chapters/overview.adoc
+++ b/doc/manuals/chapters/overview.adoc
@@ -38,34 +38,29 @@ OsmoBSC implements a sub-set of the GSM A interface as specified in TS 08.08
Osmocom offers two variants of the 'A' interface's protocol stacking:
-- 'A/SCCPlite'
-- 'A/SCCP/M3UA'
+- 'BSSAP/SCCPlite'
+- 'BSSAP/SCCP/M3UA' (called AoIP)
-Traditionally, OsmoBSC only implemented the A/SCCPlite protocol, but since a
-proper M3UA implementation is available from 'libosmo-sigtran'
-('libosmo-sccp.git'), the stock OsmoBSC now supports only A/SCCP/M3UA. (The
-idea is that SCCPlite support may be added to libosmo-sigtran at some point
-in the future, after which the new `osmo-bsc` would support both variants of
-the A interface.)
+Traditionally, OsmoBSC only implemented the BSSAP/SCCPlite protocol, but since a
+proper M3UA implementation became available in 2017 as part of 'libosmo-sigtran'
+('libosmo-sccp.git'), the stock OsmoBSC now supports BSSAP/SCCP/M3UA. SCCPlite
+support has been subsequently added to libosmo-sigtran in 2018, and now both
+variants of the 'A' interface are supported by `osmo-bsc`.
-The difference between an A/SCCPlite and A/SCCP/M3UA is illustrated in
+The difference between an BSSAP/SCCPlite and BSSAP/SCCP/M3UA is illustrated in
<<fig-sccplite>> and <<fig-sccp-m3ua>>.
-===== A/SCCPlite
+===== BSSAP/SCCPlite
Unlike classic A interface implementations for E1 interfacs,
-`osmo-bsc-sccplite` implements a variant of encapsulating the A interface over
+`osmo-bsc` implements a variant of encapsulating the A interface over
IP. To do so, the SCCP messages are wrapped in an IPA multiplex and then
communicated over TCP. The audio channels are mapped to RTP streams.
This protocol stacking is sometimes called "SCCPlite".
-At the time of writing, if you would like to use the old A/SCCPlite protocol,
-look for binary packages named `osmo-bsc-sccplite`, or compile `osmo-bsc` from
-the 'openbsc.git' repository.
-
[[fig-sccplite]]
-.`osmo-bsc-sccplite` operation using 'A/SCCPlite'
+.`osmo-bsc-sccplite` operation using 'BSSAP/SCCPlite'
[graphviz]
----
digraph G {
@@ -81,32 +76,30 @@ digraph G {
{MS0,MS1}->BTS0 [label="Um"];
{MS2,MS3}->BTS1 [label="Um"];
{BTS0,BTS1}->BSC [label="Abis\nTCP\nIP"];
- BSC->MSC [label="A\nSCCP\nTCP\nIP"];
+ BSC->MSC [label="BSSAP\nSCCP\nTCP\nIP"];
}
----
-===== A/SCCP/M3UA
+===== BSSAP/SCCP/M3UA
The default OsmoBSC's A interface uses the M3UA variant of SIGTRAN protocol
stacking:
|=====
-|A
+|BSSAP
|SCCP
|M3UA
|SCTP
|IP
|=====
-To use the now-default A/SCCP/M3UA protocol, look for binary packages named
-`osmo-bsc`, or compile `osmo-bsc` from the 'osmo-bsc.git' repository. It is
-recommended to use the M3UA variant, which is required to operate with OsmoMSC.
+It is recommended to use the M3UA variant, which is required to operate with OsmoMSC.
To route SCCP/M3UA messages between OsmoBSC and and MSC, an STP instance like
OsmoSTP is required.
[[fig-sccp-m3ua]]
-.`osmo-bsc` operation using 'A/SCCP/M3UA'
+.`osmo-bsc` operation using 'BSSAP/SCCP/M3UA'
[graphviz]
----
digraph G {
@@ -123,7 +116,7 @@ digraph G {
{MS0,MS1}->BTS0 [label="Um"];
{MS2,MS3}->BTS1 [label="Um"];
{BTS0,BTS1}->BSC [label="Abis\nTCP\nIP"];
- BSC->STP->MSC [label="A\nSCCP\nM3UA\nSCTP\nIP"];
+ BSC->STP->MSC [label="BSSAP\nSCCP\nM3UA\nSCTP\nIP"];
}
----
@@ -150,25 +143,3 @@ codec frames are passed through transparently. In order to achieve this
with E1 based BTS, OsmoBSC contains a E1 sub-channel de- and
re-multiplexer as well as a TRAU mapper that can map uplink to downlink
frames and vice versa.
-
-=== Control interface
-
-The actual protocol is described in <<common-control-if>> section. Here we
-describe variables specific to OsmoBSC.
-
-.Variables available over control interface
-[options="header",width="100%",cols="20%,5%,5%,50%,20%"]
-|===
-|Name|Access|Trap|Value|Comment
-|msc_connection_status|RO|Yes|"connected", "disconnected"|Indicate the status of connection to MSC.
-|bts_connection_status|RO|Yes|"connected", "disconnected"|Indicate the status of connection to BTS.
-|location|RW|Yes|"<unixtime>,(invalid\|fix2d\|fix3d),<lat>,<lon>,<height>"|Set/Get location data.
-|timezone|RW|No|"<hours>,<mins>,<dst>", "off"|-19 <= hours <= 19, mins in {0, 15, 30, 45}, and 0 <= dst <= 2
-|notification|WO|Yes||
-|inform-msc-v1|WO|Yes||
-|ussd-notify-v1|WO|Yes||
-|===
-
-Some comments.
-FIXME: commands defined in src/ctrl/control_if.c? Nodes? Traps?
-
diff --git a/doc/manuals/chapters/running.adoc b/doc/manuals/chapters/running.adoc
index f62ba6e8b..ae177a926 100644
--- a/doc/manuals/chapters/running.adoc
+++ b/doc/manuals/chapters/running.adoc
@@ -12,7 +12,7 @@ arguments:
*-h, --help*::
Print a short help message about the supported options
*-V, --version*::
- Print the compile-time version number of the OsmoBTS program
+ Print the compile-time version number of the program
*-d, --debug 'DBGMASK','DBGLEVELS'*::
Set the log subsystems and levels for logging to stderr. This
has mostly been superseded by VTY-based logging configuration,
@@ -40,3 +40,115 @@ arguments:
*-r, --rf-ctl 'RFCTL'*::
Offer a Unix domain socket for RF control at the path/filename
'RFCTL' in the file system.
+
+
+=== Multiple instances
+
+Running multiple instances of `osmo-bsc` on the same host is possible if all
+interfaces (VTY, CTRL) are separated using the appropriate configuration
+options. The IP based interfaces are binding to local host by default. In order
+to separate the processes, the user has to bind those services to specific but
+different IP addresses and/or ports.
+
+The VTY and the Control interface can be bound to IP addresses from the loopback
+address range, for example:
+
+----
+line vty
+ bind 127.0.0.2
+ctrl
+ bind 127.0.0.2
+----
+
+For the following links, OsmoBSC acts as a client and does not listen/bind to a
+specific interface, and will hence not encounter conflicts for multiple instances
+running on the same interface:
+
+- The SCCP/M3UA links are established by OsmoBSC contacting an STP.
+- The MGCP link is established by OsmoMSC contacting an MGW.
+
+To run multiple OsmoBSC instances on the same A-interface (SCCP/M3UA), each BSC
+has to configure a distinct point-code. See <<cs7_config>>.
+
+
+=== Configure primary links
+
+==== Connect to an MSC's _A_ interface
+
+===== Configure SCCP/M3UA (AoIP)
+
+OsmoBSC acts as client to contact an STP instance and establish an SCCP/M3UA
+link.
+
+An example configuration of OsmoBSC's AoIP SCCP link, assuming the BSC at
+point-code 1.23.3 and the MSC reachable at point-code 0.23.1 via an SG
+listening for M3UA at 127.0.0.1:2905:
+
+----
+cs7 instance 0
+ point-code 1.23.3
+ asp asp-clnt-msc-0 2905 0 m3ua
+ remote-ip 127.0.0.1
+ sctp-role client
+ sccp-address msc
+ point-code 0.23.1
+msc 0
+ msc-addr msc
+----
+
+This configuration is explained in detail in <<cs7_config>>.
+
+===== Configure SCCPlite
+
+Traditionally, OsmoBSC implemented only an SCCPlite based A-interface, an
+ad-hoc standard encapsulating BSSAP in an IPA Multiplex. Since 2017, OsmoBSC
+supports primarily a proper 3GPP compliant SCCP/M3UA A-interface known as AoIP,
+by a new libosmo-sigtran implementation. In 2018, SCCPlite compatibility was
+added to libosmo-sigtran, re-enabling the option of using an SCCPlite based
+A-interface. For details, see the OsmoSTP manual, chapter "IPA / SCCPlite
+backwards compatibility".
+
+Here is an example configuration of OsmoBSC for SCCPlite, assuming the BSC at
+point-code 1.23.3 and an SCCPlite MSC listening on 127.0.0.1:5000 with own
+point-code 0.23.1:
+
+----
+cs7 instance 0
+ point-code 1.23.3
+ asp asp-clnt-msc-0 5000 0 ipa
+ remote-ip 127.0.0.1
+ as as-clnt-msc-0 ipa
+ asp asp-clnt-msc-0
+ routing-key 0 1.23.3
+ point-code override dpc 0.23.1
+ sccp-address remote_msc
+ point-code 0.23.1
+msc 0
+ msc-addr remote_msc
+----
+
+==== Configure MGCP to connect to an MGW
+
+OsmoBSC uses a media gateway (typically OsmoMGW) to direct RTP streams. By
+default, an MGW is expected to receive MGCP requests on the IANA-registered
+default port for MGCP (2427) on local host (127.0.0.1).
+
+Here is an example configuration for a remote MGW:
+
+----
+msc 0
+ mgw remote-ip 10.9.8.7
+ mgw remote-port 2427
+----
+
+==== Configure Lb to connect to an SMLC
+
+Enable the Lb interface. OsmoBSC will then use the default point-codes to
+establish a connection to the SMLC.
+
+----
+smlc
+ enable
+----
+
+More detailed configuration is described in <<smlc-config>>.
diff --git a/doc/manuals/chapters/smlc.adoc b/doc/manuals/chapters/smlc.adoc
new file mode 100644
index 000000000..7fd3e1295
--- /dev/null
+++ b/doc/manuals/chapters/smlc.adoc
@@ -0,0 +1,73 @@
+== Location Services: Lb interface to SMLC
+
+OsmoBSC and OsmoSMLC support positioning by Timing-Advance (TA), since October
+2020.
+
+A Perform Location Request is initiated by the MSC via BSSMAP on the
+A-interface, for a specific subscriber. The request is typically passed on via
+BSSMAP-LE on the Lb-interface to the SMLC. If required, the SMLC may request the
+subscriber's Timing Advance (a.k.a. Access Delay) from the BSC via BSSLAP
+(encapsulated BSSLAP APDU in a BSSMAP-LE Connection Oriented Information
+message). The SMLC may combine several location and velocity estimate methods to
+form a GAD PDU containing the resulting geographic location information. In
+TA-based positioning, the Timing-Advance information from the BSC is combined
+with the preconfigured latitude and longitude of the serving cell to form a
+location estimate. This is returned to the BSC via the Lb-interface, and in turn
+to the MSC via the A-interface.
+
+[mscgen]
+----
+include::{srcdir}/message-sequences/location_services_ta.msc[]
+----
+
+Location Services (LCS) are described in 3GPP TS 43.059 <<3gpp-ts-43-059>>.
+Messages for LCS on the A-interface (BSSMAP, between BSC and MSC) are described
+in 3GPP TS 48.008 <<3gpp-ts-48-008>>, on the Lb-interface (BSSMAP-LE between BSC
+and SMLC) in 3GPP TS 49.031 <<3gpp-ts-49-031>>. The resulting geographic
+location and possibly velocity information is encoded in GAD, described in 3GPP
+TS 23.032 <<3gpp-ts-23-032>>.
+
+[[smlc-config]]
+=== Configure Lb-interface
+
+All Lb-interface related configuration is found in the `smlc` section of
+OsmoBSC's configuration.
+
+By default, the Lb-interface is disabled in OsmoBSC. It is started by `enable`.
+
+----
+smlc
+ enable
+----
+
+On the Lb-interface, OsmoBSC always uses SSN "BSC (BSSMAP-LE)" (SSN code 250)
+and contacts the remote SMLC on SSN "SMLC (BSSMAP-LE)" (SSN code 252).
+
+The point-codes are configurable, and default to OsmoBSC's local point-code
+0.23.3 (187), and remote SMLC point-code 0.23.6 (190).
+
+To configure a different remote SMLC point-code, first configure an arbitrarily
+named SCCP address in the `cs7` address book, and then apply that to the
+`smlc-addr` configuration:
+
+----
+cs7 instance 0
+ sccp-address my-smlc
+ point-code 0.42.6
+smlc
+ smlc-addr my-smlc
+----
+
+Similarly, OsmoBSC's local point-code on the Lb-interface is configured by the
+`bsc-addr` configuration:
+
+----
+cs7 instance 0
+ sccp-address my-bsc-on-lb
+ point-code 0.42.3
+smlc
+ bsc-addr my-bsc-on-lb
+----
+
+The geographic locations of individual cells are configured at the SMLC. See
+for example OsmoSMLC's user manual <<userman-osmosmlc>>.
diff --git a/doc/manuals/chapters/smscb.adoc b/doc/manuals/chapters/smscb.adoc
new file mode 100644
index 000000000..011aec413
--- /dev/null
+++ b/doc/manuals/chapters/smscb.adoc
@@ -0,0 +1,104 @@
+[[smscb]]
+== SMSCB (Cell Broadcast)
+
+OsmoBSC supports SMS Cell Broadcast (SMSCB) services (CBS). This
+includes the CBSP protocol to interact with a CBC (Cell Broadcast
+Centre) such as OsmoCBC, as well as the scheduling of SMSCB messages on
+both the BASIC and EXTENDED CBCH and transmission of related RSL
+messages to the attached BTS.
+
+More high-level information can be found at
+https://en.wikipedia.org/wiki/Cell_Broadcast and the related
+specification is <<3gpp-ts-23-041>>.
+
+In order to use SMSCB with OsmoBSC, you will need to
+
+* Configure OsmoBSC as either CBSP server or client
+* Use a channel combination including a CBCH on the BTSs
+
+=== Enabling a CBCH channel combination
+
+On the Um interface, SMSCB are transmitted via the CBCH (Cell Broadcast
+Channel). The CBCH is a separate downlink-only logical channel which
+must be activated on any of the BTSs requiring CBSP support.
+
+The channel combination is configured in the `timeslot` node of each TRX.
+
+The two `phys_chan_config` supporting CBCH are `CCCH+SDCCH4+CBCH` and
+`SDCCH/8+CBCH`. Please note that the CBCH steals one of the SDCCH, so
+a SDCCH/4 will only have three remaining SDCCH, and a SDCCH/8 will
+have only seven remaining SDCCH.
+
+=== Configuring the CBSP connection
+
+CBSP is the protocol between BSC and CBC. It operates over TCP.
+
+According to 3GPP TS 48.049, a BSC typically operates as a TCP server,
+and the CBC connects as TCP client. This would require the CBC to have
+out-of-band knowledge of all the BSCs in the network (and their IP
+addresses).
+
+In order to comply with the specifications, OsmoBSC supports this mode
+of operation as CBSP TCP server. However, to make network operation and
+configuration more simple, it also can operate in TCP client mode,
+connecting to the CBC. This way the BSCs need to know the CBC IP
+address, but not vice-versa.
+
+The BSC can operate in either CBSP TCP server mode or CBSP TCP client mode.
+
+The CBC related configuration of OsmoBSC can be found in the `cbc` configuration
+node of the VTY interface.
+
+The default port number for the CBSP server is 48049, according to the CBSP
+specification. Hence it normally suffices to configure only the IP addresses for
+the remote CBC server or the local CBSP server:
+
+.Example: Configure CBSP TCP client to connect to CBC at 1.2.3.4:48049 in osmo-bsc.cfg
+----
+cbc
+ mode client
+ client
+ remote-ip 1.2.3.4
+----
+
+In server mode, the default configuration is 127.0.0.1:48049, so it suffices to
+set `mode server` to accept CBSP connections from localhost:
+
+----
+cbc
+ mode server
+----
+
+To also listen for inbound CBSP connections on all interfaces, both IPv4 and
+IPv6:
+
+.Example: Configure CBSP TCP server to listen on all interfaces in osmo-bsc.cfg
+----
+cbc
+ mode server
+ server
+ local-ip ::
+----
+
+Should non-standard port numbers be required, these can be configured with the
+`client` / `local-port` or the `server` / `remote-port` settings.
+
+The `client` config also supports an explicit local bind for connecting to the
+remote CBC, using `client` / `local-ip` and `local-port`.
+
+IP addresses for client and server can remain configured at the same time, and
+the `mode` command can be used to switch between client and server operation.
+The `mode` command takes immediate effect, no restart of OsmoBSC is required.
+After changing `cbc` IP addresses in the telnet VTY, it is required to switch
+`mode` to `disabled` and back to `client` or `server` to take effect.
+
+.Example: Disable the CBSP link in the telnet VTY
+----
+OsmoBSC> enable
+OsmoBSC# configure terminal
+OsmoBSC(config)# cbc
+OsmoBSC(config-cbc)# mode disabled
+OsmoBSC(config-cbc)# end
+----
+
+For more details on the available configuration commands, please check the OsmoBSC VTY Reference.
diff --git a/doc/manuals/images/osmux-expected-traffic-savings.svg b/doc/manuals/images/osmux-expected-traffic-savings.svg
new file mode 100644
index 000000000..2031c6660
--- /dev/null
+++ b/doc/manuals/images/osmux-expected-traffic-savings.svg
@@ -0,0 +1,822 @@
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="202.485 -865 875.05 682.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 300.0 -334.14304993252364 M 302.5 -334.14304993252364 L 302.5 -334.143 M 302.5 -334.143 A 2.5 2.5 0 1 0 297.5 -334.143 A 2.5 2.5 0 1 0 302.5 -334.143 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 380.0 -541.970310391363 M 382.5 -541.970310391363 L 382.5 -541.97 M 382.5 -541.97 A 2.5 2.5 0 1 0 377.5 -541.97 A 2.5 2.5 0 1 0 382.5 -541.97 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 460.0 -611.2460638776429 M 462.5 -611.2460638776429 L 462.5 -611.246 M 462.5 -611.246 A 2.5 2.5 0 1 0 457.5 -611.246 A 2.5 2.5 0 1 0 462.5 -611.246 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 540.0 -645.8839406207826 M 542.5 -645.8839406207826 L 542.5 -645.884 M 542.5 -645.884 A 2.5 2.5 0 1 0 537.5 -645.884 A 2.5 2.5 0 1 0 542.5 -645.884 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 620.0 -666.6666666666667 M 622.5 -666.6666666666667 L 622.5 -666.667 M 622.5 -666.667 A 2.5 2.5 0 1 0 617.5 -666.667 A 2.5 2.5 0 1 0 622.5 -666.667 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 700.0 -680.5218173639225 M 702.5 -680.5218173639225 L 702.5 -680.522 M 702.5 -680.522 A 2.5 2.5 0 1 0 697.5 -680.522 A 2.5 2.5 0 1 0 702.5 -680.522 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 780.0 -690.4183535762484 M 782.5 -690.4183535762484 L 782.5 -690.418 M 782.5 -690.418 A 2.5 2.5 0 1 0 777.5 -690.418 A 2.5 2.5 0 1 0 782.5 -690.418 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 860.0 -697.8407557354926 M 862.5 -697.8407557354926 L 862.5 -697.841 M 862.5 -697.841 A 2.5 2.5 0 1 0 857.5 -697.841 A 2.5 2.5 0 1 0 862.5 -697.841 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 300.0 -571.65991902834 M 302.5 -571.65991902834 L 302.5 -571.66 M 302.5 -571.66 A 2.5 2.5 0 1 0 297.5 -571.66 A 2.5 2.5 0 1 0 302.5 -571.66 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 380.0 -675.5735492577597 M 382.5 -675.5735492577597 L 382.5 -675.574 M 382.5 -675.574 A 2.5 2.5 0 1 0 377.5 -675.574 A 2.5 2.5 0 1 0 382.5 -675.574 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 460.0 -710.2114260008997 M 462.5 -710.2114260008997 L 462.5 -710.211 M 462.5 -710.211 A 2.5 2.5 0 1 0 457.5 -710.211 A 2.5 2.5 0 1 0 462.5 -710.211 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 540.0 -727.5303643724696 M 542.5 -727.5303643724696 L 542.5 -727.53 M 542.5 -727.53 A 2.5 2.5 0 1 0 537.5 -727.53 A 2.5 2.5 0 1 0 542.5 -727.53 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 620.0 -737.9217273954116 M 622.5 -737.9217273954116 L 622.5 -737.922 M 622.5 -737.922 A 2.5 2.5 0 1 0 617.5 -737.922 A 2.5 2.5 0 1 0 622.5 -737.922 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 700.0 -744.8493027440395 M 702.5 -744.8493027440395 L 702.5 -744.849 M 702.5 -744.849 A 2.5 2.5 0 1 0 697.5 -744.849 A 2.5 2.5 0 1 0 702.5 -744.849 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 780.0 -749.7975708502024 M 782.5 -749.7975708502024 L 782.5 -749.798 M 782.5 -749.798 A 2.5 2.5 0 1 0 777.5 -749.798 A 2.5 2.5 0 1 0 782.5 -749.798 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 860.0 -753.5087719298247 M 862.5 -753.5087719298247 L 862.5 -753.509 M 862.5 -753.509 A 2.5 2.5 0 1 0 857.5 -753.509 A 2.5 2.5 0 1 0 862.5 -753.509 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 300.0 -650.8322087269455 M 302.5 -650.8322087269455 L 302.5 -650.832 M 302.5 -650.832 A 2.5 2.5 0 1 0 297.5 -650.832 A 2.5 2.5 0 1 0 302.5 -650.832 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 380.0 -720.1079622132254 M 382.5 -720.1079622132254 L 382.5 -720.108 M 382.5 -720.108 A 2.5 2.5 0 1 0 377.5 -720.108 A 2.5 2.5 0 1 0 382.5 -720.108 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 460.0 -743.1998800419854 M 462.5 -743.1998800419854 L 462.5 -743.2 M 462.5 -743.2 A 2.5 2.5 0 1 0 457.5 -743.2 A 2.5 2.5 0 1 0 462.5 -743.2 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 540.0 -754.7458389563653 M 542.5 -754.7458389563653 L 542.5 -754.746 M 542.5 -754.746 A 2.5 2.5 0 1 0 537.5 -754.746 A 2.5 2.5 0 1 0 542.5 -754.746 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 620.0 -761.6734143049932 M 622.5 -761.6734143049932 L 622.5 -761.673 M 622.5 -761.673 A 2.5 2.5 0 1 0 617.5 -761.673 A 2.5 2.5 0 1 0 622.5 -761.673 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 700.0 -766.2917978707453 M 702.5 -766.2917978707453 L 702.5 -766.292 M 702.5 -766.292 A 2.5 2.5 0 1 0 697.5 -766.292 A 2.5 2.5 0 1 0 702.5 -766.292 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 780.0 -769.5906432748538 M 782.5 -769.5906432748538 L 782.5 -769.591 M 782.5 -769.591 A 2.5 2.5 0 1 0 777.5 -769.591 A 2.5 2.5 0 1 0 782.5 -769.591 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 860.0 -772.0647773279352 M 862.5 -772.0647773279352 L 862.5 -772.065 M 862.5 -772.065 A 2.5 2.5 0 1 0 857.5 -772.065 A 2.5 2.5 0 1 0 862.5 -772.065 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 300.0 -690.4183535762484 M 302.5 -690.4183535762484 L 302.5 -690.418 M 302.5 -690.418 A 2.5 2.5 0 1 0 297.5 -690.418 A 2.5 2.5 0 1 0 302.5 -690.418 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 380.0 -742.3751686909582 M 382.5 -742.3751686909582 L 382.5 -742.375 M 382.5 -742.375 A 2.5 2.5 0 1 0 377.5 -742.375 A 2.5 2.5 0 1 0 382.5 -742.375 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 460.0 -759.6941070625282 M 462.5 -759.6941070625282 L 462.5 -759.694 M 462.5 -759.694 A 2.5 2.5 0 1 0 457.5 -759.694 A 2.5 2.5 0 1 0 462.5 -759.694 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 540.0 -768.3535762483132 M 542.5 -768.3535762483132 L 542.5 -768.354 M 542.5 -768.354 A 2.5 2.5 0 1 0 537.5 -768.354 A 2.5 2.5 0 1 0 542.5 -768.354 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 620.0 -773.549257759784 M 622.5 -773.549257759784 L 622.5 -773.549 M 622.5 -773.549 A 2.5 2.5 0 1 0 617.5 -773.549 A 2.5 2.5 0 1 0 622.5 -773.549 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 700.0 -777.0130454340982 M 702.5 -777.0130454340982 L 702.5 -777.013 M 702.5 -777.013 A 2.5 2.5 0 1 0 697.5 -777.013 A 2.5 2.5 0 1 0 702.5 -777.013 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 780.0 -779.4871794871794 M 782.5 -779.4871794871794 L 782.5 -779.487 M 782.5 -779.487 A 2.5 2.5 0 1 0 777.5 -779.487 A 2.5 2.5 0 1 0 782.5 -779.487 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 860.0 -781.3427800269906 M 862.5 -781.3427800269906 L 862.5 -781.343 M 862.5 -781.343 A 2.5 2.5 0 1 0 857.5 -781.343 A 2.5 2.5 0 1 0 862.5 -781.343 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 300.0 -714.17004048583 M 302.5 -714.17004048583 L 302.5 -714.17 M 302.5 -714.17 A 2.5 2.5 0 1 0 297.5 -714.17 A 2.5 2.5 0 1 0 302.5 -714.17 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 380.0 -755.7354925775978 M 382.5 -755.7354925775978 L 382.5 -755.735 M 382.5 -755.735 A 2.5 2.5 0 1 0 377.5 -755.735 A 2.5 2.5 0 1 0 382.5 -755.735 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 460.0 -769.5906432748538 M 462.5 -769.5906432748538 L 462.5 -769.591 M 462.5 -769.591 A 2.5 2.5 0 1 0 457.5 -769.591 A 2.5 2.5 0 1 0 462.5 -769.591 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 540.0 -776.5182186234819 M 542.5 -776.5182186234819 L 542.5 -776.518 M 542.5 -776.518 A 2.5 2.5 0 1 0 537.5 -776.518 A 2.5 2.5 0 1 0 542.5 -776.518 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 620.0 -780.6747638326585 M 622.5 -780.6747638326585 L 622.5 -780.675 M 622.5 -780.675 A 2.5 2.5 0 1 0 617.5 -780.675 A 2.5 2.5 0 1 0 622.5 -780.675 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 700.0 -783.4457939721098 M 702.5 -783.4457939721098 L 702.5 -783.446 M 702.5 -783.446 A 2.5 2.5 0 1 0 697.5 -783.446 A 2.5 2.5 0 1 0 702.5 -783.446 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 780.0 -785.4251012145751 M 782.5 -785.4251012145751 L 782.5 -785.425 M 782.5 -785.425 A 2.5 2.5 0 1 0 777.5 -785.425 A 2.5 2.5 0 1 0 782.5 -785.425 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 860.0 -786.9095816464237 M 862.5 -786.9095816464237 L 862.5 -786.91 M 862.5 -786.91 A 2.5 2.5 0 1 0 857.5 -786.91 A 2.5 2.5 0 1 0 862.5 -786.91 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 300.0 -730.004498425551 M 302.5 -730.004498425551 L 302.5 -730.004 M 302.5 -730.004 A 2.5 2.5 0 1 0 297.5 -730.004 A 2.5 2.5 0 1 0 302.5 -730.004 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 380.0 -764.6423751686909 M 382.5 -764.6423751686909 L 382.5 -764.642 M 382.5 -764.642 A 2.5 2.5 0 1 0 377.5 -764.642 A 2.5 2.5 0 1 0 382.5 -764.642 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 460.0 -776.1883340830709 M 462.5 -776.1883340830709 L 462.5 -776.188 M 462.5 -776.188 A 2.5 2.5 0 1 0 457.5 -776.188 A 2.5 2.5 0 1 0 462.5 -776.188 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 540.0 -781.9613135402609 M 542.5 -781.9613135402609 L 542.5 -781.961 M 542.5 -781.961 A 2.5 2.5 0 1 0 537.5 -781.961 A 2.5 2.5 0 1 0 542.5 -781.961 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 620.0 -785.4251012145751 M 622.5 -785.4251012145751 L 622.5 -785.425 M 622.5 -785.425 A 2.5 2.5 0 1 0 617.5 -785.425 A 2.5 2.5 0 1 0 622.5 -785.425 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 700.0 -787.7342929974509 M 702.5 -787.7342929974509 L 702.5 -787.734 M 702.5 -787.734 A 2.5 2.5 0 1 0 697.5 -787.734 A 2.5 2.5 0 1 0 702.5 -787.734 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 780.0 -789.383715699505 M 782.5 -789.383715699505 L 782.5 -789.384 M 782.5 -789.384 A 2.5 2.5 0 1 0 777.5 -789.384 A 2.5 2.5 0 1 0 782.5 -789.384 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 860.0 -790.620782726046 M 862.5 -790.620782726046 L 862.5 -790.621 M 862.5 -790.621 A 2.5 2.5 0 1 0 857.5 -790.621 A 2.5 2.5 0 1 0 862.5 -790.621 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 300.0 -741.3148255253518 M 302.5 -741.3148255253518 L 302.5 -741.315 M 302.5 -741.315 A 2.5 2.5 0 1 0 297.5 -741.315 A 2.5 2.5 0 1 0 302.5 -741.315 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 380.0 -771.004434162329 M 382.5 -771.004434162329 L 382.5 -771.004 M 382.5 -771.004 A 2.5 2.5 0 1 0 377.5 -771.004 A 2.5 2.5 0 1 0 382.5 -771.004 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 460.0 -780.9009703746547 M 462.5 -780.9009703746547 L 462.5 -780.901 M 462.5 -780.901 A 2.5 2.5 0 1 0 457.5 -780.901 A 2.5 2.5 0 1 0 462.5 -780.901 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 540.0 -785.8492384808173 M 542.5 -785.8492384808173 L 542.5 -785.849 M 542.5 -785.849 A 2.5 2.5 0 1 0 537.5 -785.849 A 2.5 2.5 0 1 0 542.5 -785.849 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 620.0 -788.8181993445152 M 622.5 -788.8181993445152 L 622.5 -788.818 M 622.5 -788.818 A 2.5 2.5 0 1 0 617.5 -788.818 A 2.5 2.5 0 1 0 622.5 -788.818 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 700.0 -790.7975065869803 M 702.5 -790.7975065869803 L 702.5 -790.798 M 702.5 -790.798 A 2.5 2.5 0 1 0 697.5 -790.798 A 2.5 2.5 0 1 0 702.5 -790.798 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 780.0 -792.2112974744553 M 782.5 -792.2112974744553 L 782.5 -792.211 M 782.5 -792.211 A 2.5 2.5 0 1 0 777.5 -792.211 A 2.5 2.5 0 1 0 782.5 -792.211 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 860.0 -793.2716406400618 M 862.5 -793.2716406400618 L 862.5 -793.272 M 862.5 -793.272 A 2.5 2.5 0 1 0 857.5 -793.272 A 2.5 2.5 0 1 0 862.5 -793.272 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 285 -285 L 285 -865 L 915 -865 L 915 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 250 -250 L 250 -900 L 950 -900 L 950 -250 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 300.0 -749.7975708502024 M 302.5 -749.7975708502024 L 302.5 -749.798 M 302.5 -749.798 A 2.5 2.5 0 1 0 297.5 -749.798 A 2.5 2.5 0 1 0 302.5 -749.798 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 380.0 -775.7759784075574 M 382.5 -775.7759784075574 L 382.5 -775.776 M 382.5 -775.776 A 2.5 2.5 0 1 0 377.5 -775.776 A 2.5 2.5 0 1 0 382.5 -775.776 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 460.0 -784.4354475933424 M 462.5 -784.4354475933424 L 462.5 -784.435 M 462.5 -784.435 A 2.5 2.5 0 1 0 457.5 -784.435 A 2.5 2.5 0 1 0 462.5 -784.435 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 540.0 -788.7651821862348 M 542.5 -788.7651821862348 L 542.5 -788.765 M 542.5 -788.765 A 2.5 2.5 0 1 0 537.5 -788.765 A 2.5 2.5 0 1 0 542.5 -788.765 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 620.0 -791.3630229419704 M 622.5 -791.3630229419704 L 622.5 -791.363 M 622.5 -791.363 A 2.5 2.5 0 1 0 617.5 -791.363 A 2.5 2.5 0 1 0 622.5 -791.363 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 700.0 -793.0949167791274 M 702.5 -793.0949167791274 L 702.5 -793.095 M 702.5 -793.095 A 2.5 2.5 0 1 0 697.5 -793.095 A 2.5 2.5 0 1 0 702.5 -793.095 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 780.0 -794.331983805668 M 782.5 -794.331983805668 L 782.5 -794.332 M 782.5 -794.332 A 2.5 2.5 0 1 0 777.5 -794.332 A 2.5 2.5 0 1 0 782.5 -794.332 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 860.0 -795.2597840755736 M 862.5 -795.2597840755736 L 862.5 -795.26 M 862.5 -795.26 A 2.5 2.5 0 1 0 857.5 -795.26 A 2.5 2.5 0 1 0 862.5 -795.26 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 935.0 -285 L 935.0 -420.0 L 1062.535 -420.0 L 1062.535 -285 Z"/>
+ </clipPath>
+ <clipPath id="clip82">
+ <path d="M 967.5 -410.0 M 970.0 -410.0 L 970 -410 M 970 -410 A 2.5 2.5 0 1 0 965 -410 A 2.5 2.5 0 1 0 970 -410 Z"/>
+ </clipPath>
+ <clipPath id="clip83">
+ <path d="M 967.5 -395.0 M 970.0 -395.0 L 970 -395 M 970 -395 A 2.5 2.5 0 1 0 965 -395 A 2.5 2.5 0 1 0 970 -395 Z"/>
+ </clipPath>
+ <clipPath id="clip84">
+ <path d="M 967.5 -380.0 M 970.0 -380.0 L 970 -380 M 970 -380 A 2.5 2.5 0 1 0 965 -380 A 2.5 2.5 0 1 0 970 -380 Z"/>
+ </clipPath>
+ <clipPath id="clip85">
+ <path d="M 967.5 -365.0 M 970.0 -365.0 L 970 -365 M 970 -365 A 2.5 2.5 0 1 0 965 -365 A 2.5 2.5 0 1 0 970 -365 Z"/>
+ </clipPath>
+ <clipPath id="clip86">
+ <path d="M 967.5 -350.0 M 970.0 -350.0 L 970 -350 M 970 -350 A 2.5 2.5 0 1 0 965 -350 A 2.5 2.5 0 1 0 970 -350 Z"/>
+ </clipPath>
+ <clipPath id="clip87">
+ <path d="M 967.5 -335.0 M 970.0 -335.0 L 970 -335 M 970 -335 A 2.5 2.5 0 1 0 965 -335 A 2.5 2.5 0 1 0 970 -335 Z"/>
+ </clipPath>
+ <clipPath id="clip88">
+ <path d="M 967.5 -320.0 M 970.0 -320.0 L 970 -320 M 970 -320 A 2.5 2.5 0 1 0 965 -320 A 2.5 2.5 0 1 0 970 -320 Z"/>
+ </clipPath>
+ <clipPath id="clip89">
+ <path d="M 967.5 -305.0 M 970.0 -305.0 L 970 -305 M 970 -305 A 2.5 2.5 0 1 0 965 -305 A 2.5 2.5 0 1 0 970 -305 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:3.0;font-family:Helvetica;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.4;">
+ <path d="M 380.0 -300 L 380.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 460.0 -300 L 460.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 540.0 -300 L 540.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 620.0 -300 L 620.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 700.0 -300 L 700.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 780.0 -300 L 780.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 860.0 -300 L 860.0 -850" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 900 -300"/>
+ <path d="M 300 -300 L 900 -300"/>
+ <path d="M 300.0 -300 L 300.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="300.0" y="-255.0">1</text>
+ <path d="M 380.0 -300 L 380.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="380.0" y="-255.0">2</text>
+ <path d="M 460.0 -300 L 460.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="460.0" y="-255.0">3</text>
+ <path d="M 540.0 -300 L 540.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-255.0">4</text>
+ <path d="M 620.0 -300 L 620.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="620.0" y="-255.0">5</text>
+ <path d="M 700.0 -300 L 700.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="700.0" y="-255.0">6</text>
+ <path d="M 780.0 -300 L 780.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="780.0" y="-255.0">7</text>
+ <path d="M 860.0 -300 L 860.0 -270"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="860.0" y="-255.0">8</text>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="545.8199999999999" y="-197.5">Concurrent calls</text>
+ <path d="M 300 -384.61538461538464 L 900 -384.61538461538464" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -469.2307692307692 L 900 -469.2307692307692" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -553.8461538461538 L 900 -553.8461538461538" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -638.4615384615385 L 900 -638.4615384615385" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -723.0769230769231 L 900 -723.0769230769231" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -807.6923076923076 L 900 -807.6923076923076" style="stroke:rgb(179,179,179);stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -850"/>
+ <path d="M 300 -300.0 L 270 -300.0"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-292.5">10%</text>
+ <path d="M 300 -384.61538461538464 L 270 -384.61538461538464"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-377.11538461538464">20%</text>
+ <path d="M 300 -469.2307692307692 L 270 -469.2307692307692"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-461.7307692307692">30%</text>
+ <path d="M 300 -553.8461538461538 L 270 -553.8461538461538"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-546.3461538461538">40%</text>
+ <path d="M 300 -638.4615384615385 L 270 -638.4615384615385"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-630.9615384615385">50%</text>
+ <path d="M 300 -723.0769230769231 L 270 -723.0769230769231"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-715.5769230769231">60%</text>
+ <path d="M 300 -807.6923076923076 L 270 -807.6923076923076"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="239.985" y="-800.1923076923076">70%</text>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,232.485,-529.153)" x="232.485" y="-529.1525">Traffic Saving</text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 300.0 -334.14304993252364 L 380.0 -541.970310391363 L 460.0 -611.2460638776429 L 540.0 -645.8839406207826 L 620.0 -666.6666666666667 L 700.0 -680.5218173639225 L 780.0 -690.4183535762484 L 860.0 -697.8407557354926" style="stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 295.0 -329.14304993252364 L 295.0 -339.14304993252364 L 305.0 -339.14304993252364 L 305.0 -329.14304993252364 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -334.14304993252364 M 302.5 -334.14304993252364 L 302.5 -334.143 M 302.5 -334.143 A 2.5 2.5 0 1 0 297.5 -334.143 A 2.5 2.5 0 1 0 302.5 -334.143 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 375.0 -536.970310391363 L 375.0 -546.970310391363 L 385.0 -546.970310391363 L 385.0 -536.970310391363 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -541.970310391363 M 382.5 -541.970310391363 L 382.5 -541.97 M 382.5 -541.97 A 2.5 2.5 0 1 0 377.5 -541.97 A 2.5 2.5 0 1 0 382.5 -541.97 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 455.0 -606.2460638776429 L 455.0 -616.2460638776429 L 465.0 -616.2460638776429 L 465.0 -606.2460638776429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -611.2460638776429 M 462.5 -611.2460638776429 L 462.5 -611.246 M 462.5 -611.246 A 2.5 2.5 0 1 0 457.5 -611.246 A 2.5 2.5 0 1 0 462.5 -611.246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 535.0 -640.8839406207826 L 535.0 -650.8839406207826 L 545.0 -650.8839406207826 L 545.0 -640.8839406207826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -645.8839406207826 M 542.5 -645.8839406207826 L 542.5 -645.884 M 542.5 -645.884 A 2.5 2.5 0 1 0 537.5 -645.884 A 2.5 2.5 0 1 0 542.5 -645.884 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 615.0 -661.6666666666667 L 615.0 -671.6666666666667 L 625.0 -671.6666666666667 L 625.0 -661.6666666666667 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -666.6666666666667 M 622.5 -666.6666666666667 L 622.5 -666.667 M 622.5 -666.667 A 2.5 2.5 0 1 0 617.5 -666.667 A 2.5 2.5 0 1 0 622.5 -666.667 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 695.0 -675.5218173639225 L 695.0 -685.5218173639225 L 705.0 -685.5218173639225 L 705.0 -675.5218173639225 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -680.5218173639225 M 702.5 -680.5218173639225 L 702.5 -680.522 M 702.5 -680.522 A 2.5 2.5 0 1 0 697.5 -680.522 A 2.5 2.5 0 1 0 702.5 -680.522 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 775.0 -685.4183535762484 L 775.0 -695.4183535762484 L 785.0 -695.4183535762484 L 785.0 -685.4183535762484 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -690.4183535762484 M 782.5 -690.4183535762484 L 782.5 -690.418 M 782.5 -690.418 A 2.5 2.5 0 1 0 777.5 -690.418 A 2.5 2.5 0 1 0 782.5 -690.418 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 855.0 -692.8407557354926 L 855.0 -702.8407557354926 L 865.0 -702.8407557354926 L 865.0 -692.8407557354926 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -697.8407557354926 M 862.5 -697.8407557354926 L 862.5 -697.841 M 862.5 -697.841 A 2.5 2.5 0 1 0 857.5 -697.841 A 2.5 2.5 0 1 0 862.5 -697.841 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 300.0 -571.65991902834 L 380.0 -675.5735492577597 L 460.0 -710.2114260008997 L 540.0 -727.5303643724696 L 620.0 -737.9217273954116 L 700.0 -744.8493027440395 L 780.0 -749.7975708502024 L 860.0 -753.5087719298247" style="stroke:rgb(255,0,0);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip12);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 295.0 -566.65991902834 L 295.0 -576.65991902834 L 305.0 -576.65991902834 L 305.0 -566.65991902834 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -571.65991902834 M 302.5 -571.65991902834 L 302.5 -571.66 M 302.5 -571.66 A 2.5 2.5 0 1 0 297.5 -571.66 A 2.5 2.5 0 1 0 302.5 -571.66 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 375.0 -670.5735492577597 L 375.0 -680.5735492577597 L 385.0 -680.5735492577597 L 385.0 -670.5735492577597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -675.5735492577597 M 382.5 -675.5735492577597 L 382.5 -675.574 M 382.5 -675.574 A 2.5 2.5 0 1 0 377.5 -675.574 A 2.5 2.5 0 1 0 382.5 -675.574 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 455.0 -705.2114260008997 L 455.0 -715.2114260008997 L 465.0 -715.2114260008997 L 465.0 -705.2114260008997 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -710.2114260008997 M 462.5 -710.2114260008997 L 462.5 -710.211 M 462.5 -710.211 A 2.5 2.5 0 1 0 457.5 -710.211 A 2.5 2.5 0 1 0 462.5 -710.211 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 535.0 -722.5303643724696 L 535.0 -732.5303643724696 L 545.0 -732.5303643724696 L 545.0 -722.5303643724696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -727.5303643724696 M 542.5 -727.5303643724696 L 542.5 -727.53 M 542.5 -727.53 A 2.5 2.5 0 1 0 537.5 -727.53 A 2.5 2.5 0 1 0 542.5 -727.53 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 615.0 -732.9217273954116 L 615.0 -742.9217273954116 L 625.0 -742.9217273954116 L 625.0 -732.9217273954116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -737.9217273954116 M 622.5 -737.9217273954116 L 622.5 -737.922 M 622.5 -737.922 A 2.5 2.5 0 1 0 617.5 -737.922 A 2.5 2.5 0 1 0 622.5 -737.922 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 695.0 -739.8493027440395 L 695.0 -749.8493027440395 L 705.0 -749.8493027440395 L 705.0 -739.8493027440395 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -744.8493027440395 M 702.5 -744.8493027440395 L 702.5 -744.849 M 702.5 -744.849 A 2.5 2.5 0 1 0 697.5 -744.849 A 2.5 2.5 0 1 0 702.5 -744.849 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 775.0 -744.7975708502024 L 775.0 -754.7975708502024 L 785.0 -754.7975708502024 L 785.0 -744.7975708502024 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -749.7975708502024 M 782.5 -749.7975708502024 L 782.5 -749.798 M 782.5 -749.798 A 2.5 2.5 0 1 0 777.5 -749.798 A 2.5 2.5 0 1 0 782.5 -749.798 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 855.0 -748.5087719298247 L 855.0 -758.5087719298247 L 865.0 -758.5087719298247 L 865.0 -748.5087719298247 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -753.5087719298247 M 862.5 -753.5087719298247 L 862.5 -753.509 M 862.5 -753.509 A 2.5 2.5 0 1 0 857.5 -753.509 A 2.5 2.5 0 1 0 862.5 -753.509 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip21);">
+ <path d="M 300.0 -650.8322087269455 L 380.0 -720.1079622132254 L 460.0 -743.1998800419854 L 540.0 -754.7458389563653 L 620.0 -761.6734143049932 L 700.0 -766.2917978707453 L 780.0 -769.5906432748538 L 860.0 -772.0647773279352" style="stroke:rgb(0,0,138);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip22);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 295.0 -645.8322087269455 L 295.0 -655.8322087269455 L 305.0 -655.8322087269455 L 305.0 -645.8322087269455 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -650.8322087269455 M 302.5 -650.8322087269455 L 302.5 -650.832 M 302.5 -650.832 A 2.5 2.5 0 1 0 297.5 -650.832 A 2.5 2.5 0 1 0 302.5 -650.832 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 375.0 -715.1079622132254 L 375.0 -725.1079622132254 L 385.0 -725.1079622132254 L 385.0 -715.1079622132254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -720.1079622132254 M 382.5 -720.1079622132254 L 382.5 -720.108 M 382.5 -720.108 A 2.5 2.5 0 1 0 377.5 -720.108 A 2.5 2.5 0 1 0 382.5 -720.108 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip25);">
+ <path d="M 455.0 -738.1998800419854 L 455.0 -748.1998800419854 L 465.0 -748.1998800419854 L 465.0 -738.1998800419854 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -743.1998800419854 M 462.5 -743.1998800419854 L 462.5 -743.2 M 462.5 -743.2 A 2.5 2.5 0 1 0 457.5 -743.2 A 2.5 2.5 0 1 0 462.5 -743.2 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip26);">
+ <path d="M 535.0 -749.7458389563653 L 535.0 -759.7458389563653 L 545.0 -759.7458389563653 L 545.0 -749.7458389563653 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -754.7458389563653 M 542.5 -754.7458389563653 L 542.5 -754.746 M 542.5 -754.746 A 2.5 2.5 0 1 0 537.5 -754.746 A 2.5 2.5 0 1 0 542.5 -754.746 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 615.0 -756.6734143049932 L 615.0 -766.6734143049932 L 625.0 -766.6734143049932 L 625.0 -756.6734143049932 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -761.6734143049932 M 622.5 -761.6734143049932 L 622.5 -761.673 M 622.5 -761.673 A 2.5 2.5 0 1 0 617.5 -761.673 A 2.5 2.5 0 1 0 622.5 -761.673 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 695.0 -761.2917978707453 L 695.0 -771.2917978707453 L 705.0 -771.2917978707453 L 705.0 -761.2917978707453 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -766.2917978707453 M 702.5 -766.2917978707453 L 702.5 -766.292 M 702.5 -766.292 A 2.5 2.5 0 1 0 697.5 -766.292 A 2.5 2.5 0 1 0 702.5 -766.292 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 775.0 -764.5906432748538 L 775.0 -774.5906432748538 L 785.0 -774.5906432748538 L 785.0 -764.5906432748538 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -769.5906432748538 M 782.5 -769.5906432748538 L 782.5 -769.591 M 782.5 -769.591 A 2.5 2.5 0 1 0 777.5 -769.591 A 2.5 2.5 0 1 0 782.5 -769.591 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 855.0 -767.0647773279352 L 855.0 -777.0647773279352 L 865.0 -777.0647773279352 L 865.0 -767.0647773279352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -772.0647773279352 M 862.5 -772.0647773279352 L 862.5 -772.065 M 862.5 -772.065 A 2.5 2.5 0 1 0 857.5 -772.065 A 2.5 2.5 0 1 0 862.5 -772.065 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip31);">
+ <path d="M 300.0 -690.4183535762484 L 380.0 -742.3751686909582 L 460.0 -759.6941070625282 L 540.0 -768.3535762483132 L 620.0 -773.549257759784 L 700.0 -777.0130454340982 L 780.0 -779.4871794871794 L 860.0 -781.3427800269906" style="stroke:rgb(179,179,179);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip32);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 295.0 -685.4183535762484 L 295.0 -695.4183535762484 L 305.0 -695.4183535762484 L 305.0 -685.4183535762484 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -690.4183535762484 M 302.5 -690.4183535762484 L 302.5 -690.418 M 302.5 -690.418 A 2.5 2.5 0 1 0 297.5 -690.418 A 2.5 2.5 0 1 0 302.5 -690.418 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 375.0 -737.3751686909582 L 375.0 -747.3751686909582 L 385.0 -747.3751686909582 L 385.0 -737.3751686909582 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -742.3751686909582 M 382.5 -742.3751686909582 L 382.5 -742.375 M 382.5 -742.375 A 2.5 2.5 0 1 0 377.5 -742.375 A 2.5 2.5 0 1 0 382.5 -742.375 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 455.0 -754.6941070625282 L 455.0 -764.6941070625282 L 465.0 -764.6941070625282 L 465.0 -754.6941070625282 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -759.6941070625282 M 462.5 -759.6941070625282 L 462.5 -759.694 M 462.5 -759.694 A 2.5 2.5 0 1 0 457.5 -759.694 A 2.5 2.5 0 1 0 462.5 -759.694 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 535.0 -763.3535762483132 L 535.0 -773.3535762483132 L 545.0 -773.3535762483132 L 545.0 -763.3535762483132 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -768.3535762483132 M 542.5 -768.3535762483132 L 542.5 -768.354 M 542.5 -768.354 A 2.5 2.5 0 1 0 537.5 -768.354 A 2.5 2.5 0 1 0 542.5 -768.354 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 615.0 -768.549257759784 L 615.0 -778.549257759784 L 625.0 -778.549257759784 L 625.0 -768.549257759784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -773.549257759784 M 622.5 -773.549257759784 L 622.5 -773.549 M 622.5 -773.549 A 2.5 2.5 0 1 0 617.5 -773.549 A 2.5 2.5 0 1 0 622.5 -773.549 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 695.0 -772.0130454340982 L 695.0 -782.0130454340982 L 705.0 -782.0130454340982 L 705.0 -772.0130454340982 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -777.0130454340982 M 702.5 -777.0130454340982 L 702.5 -777.013 M 702.5 -777.013 A 2.5 2.5 0 1 0 697.5 -777.013 A 2.5 2.5 0 1 0 702.5 -777.013 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 775.0 -774.4871794871794 L 775.0 -784.4871794871794 L 785.0 -784.4871794871794 L 785.0 -774.4871794871794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -779.4871794871794 M 782.5 -779.4871794871794 L 782.5 -779.487 M 782.5 -779.487 A 2.5 2.5 0 1 0 777.5 -779.487 A 2.5 2.5 0 1 0 782.5 -779.487 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 855.0 -776.3427800269906 L 855.0 -786.3427800269906 L 865.0 -786.3427800269906 L 865.0 -776.3427800269906 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -781.3427800269906 M 862.5 -781.3427800269906 L 862.5 -781.343 M 862.5 -781.343 A 2.5 2.5 0 1 0 857.5 -781.343 A 2.5 2.5 0 1 0 862.5 -781.343 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip41);">
+ <path d="M 300.0 -714.17004048583 L 380.0 -755.7354925775978 L 460.0 -769.5906432748538 L 540.0 -776.5182186234819 L 620.0 -780.6747638326585 L 700.0 -783.4457939721098 L 780.0 -785.4251012145751 L 860.0 -786.9095816464237" style="stroke:rgb(142,188,142);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip42);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 295.0 -709.17004048583 L 295.0 -719.17004048583 L 305.0 -719.17004048583 L 305.0 -709.17004048583 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -714.17004048583 M 302.5 -714.17004048583 L 302.5 -714.17 M 302.5 -714.17 A 2.5 2.5 0 1 0 297.5 -714.17 A 2.5 2.5 0 1 0 302.5 -714.17 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 375.0 -750.7354925775978 L 375.0 -760.7354925775978 L 385.0 -760.7354925775978 L 385.0 -750.7354925775978 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -755.7354925775978 M 382.5 -755.7354925775978 L 382.5 -755.735 M 382.5 -755.735 A 2.5 2.5 0 1 0 377.5 -755.735 A 2.5 2.5 0 1 0 382.5 -755.735 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 455.0 -764.5906432748538 L 455.0 -774.5906432748538 L 465.0 -774.5906432748538 L 465.0 -764.5906432748538 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -769.5906432748538 M 462.5 -769.5906432748538 L 462.5 -769.591 M 462.5 -769.591 A 2.5 2.5 0 1 0 457.5 -769.591 A 2.5 2.5 0 1 0 462.5 -769.591 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 535.0 -771.5182186234819 L 535.0 -781.5182186234819 L 545.0 -781.5182186234819 L 545.0 -771.5182186234819 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -776.5182186234819 M 542.5 -776.5182186234819 L 542.5 -776.518 M 542.5 -776.518 A 2.5 2.5 0 1 0 537.5 -776.518 A 2.5 2.5 0 1 0 542.5 -776.518 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 615.0 -775.6747638326585 L 615.0 -785.6747638326585 L 625.0 -785.6747638326585 L 625.0 -775.6747638326585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -780.6747638326585 M 622.5 -780.6747638326585 L 622.5 -780.675 M 622.5 -780.675 A 2.5 2.5 0 1 0 617.5 -780.675 A 2.5 2.5 0 1 0 622.5 -780.675 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 695.0 -778.4457939721098 L 695.0 -788.4457939721098 L 705.0 -788.4457939721098 L 705.0 -778.4457939721098 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -783.4457939721098 M 702.5 -783.4457939721098 L 702.5 -783.446 M 702.5 -783.446 A 2.5 2.5 0 1 0 697.5 -783.446 A 2.5 2.5 0 1 0 702.5 -783.446 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip49);">
+ <path d="M 775.0 -780.4251012145751 L 775.0 -790.4251012145751 L 785.0 -790.4251012145751 L 785.0 -780.4251012145751 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -785.4251012145751 M 782.5 -785.4251012145751 L 782.5 -785.425 M 782.5 -785.425 A 2.5 2.5 0 1 0 777.5 -785.425 A 2.5 2.5 0 1 0 782.5 -785.425 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip50);">
+ <path d="M 855.0 -781.9095816464237 L 855.0 -791.9095816464237 L 865.0 -791.9095816464237 L 865.0 -781.9095816464237 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -786.9095816464237 M 862.5 -786.9095816464237 L 862.5 -786.91 M 862.5 -786.91 A 2.5 2.5 0 1 0 857.5 -786.91 A 2.5 2.5 0 1 0 862.5 -786.91 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 300.0 -730.004498425551 L 380.0 -764.6423751686909 L 460.0 -776.1883340830709 L 540.0 -781.9613135402609 L 620.0 -785.4251012145751 L 700.0 -787.7342929974509 L 780.0 -789.383715699505 L 860.0 -790.620782726046" style="stroke:rgb(188,182,107);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 295.0 -725.004498425551 L 295.0 -735.004498425551 L 305.0 -735.004498425551 L 305.0 -725.004498425551 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -730.004498425551 M 302.5 -730.004498425551 L 302.5 -730.004 M 302.5 -730.004 A 2.5 2.5 0 1 0 297.5 -730.004 A 2.5 2.5 0 1 0 302.5 -730.004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 375.0 -759.6423751686909 L 375.0 -769.6423751686909 L 385.0 -769.6423751686909 L 385.0 -759.6423751686909 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -764.6423751686909 M 382.5 -764.6423751686909 L 382.5 -764.642 M 382.5 -764.642 A 2.5 2.5 0 1 0 377.5 -764.642 A 2.5 2.5 0 1 0 382.5 -764.642 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 455.0 -771.1883340830709 L 455.0 -781.1883340830709 L 465.0 -781.1883340830709 L 465.0 -771.1883340830709 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -776.1883340830709 M 462.5 -776.1883340830709 L 462.5 -776.188 M 462.5 -776.188 A 2.5 2.5 0 1 0 457.5 -776.188 A 2.5 2.5 0 1 0 462.5 -776.188 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 535.0 -776.9613135402609 L 535.0 -786.9613135402609 L 545.0 -786.9613135402609 L 545.0 -776.9613135402609 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -781.9613135402609 M 542.5 -781.9613135402609 L 542.5 -781.961 M 542.5 -781.961 A 2.5 2.5 0 1 0 537.5 -781.961 A 2.5 2.5 0 1 0 542.5 -781.961 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 615.0 -780.4251012145751 L 615.0 -790.4251012145751 L 625.0 -790.4251012145751 L 625.0 -780.4251012145751 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -785.4251012145751 M 622.5 -785.4251012145751 L 622.5 -785.425 M 622.5 -785.425 A 2.5 2.5 0 1 0 617.5 -785.425 A 2.5 2.5 0 1 0 622.5 -785.425 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 695.0 -782.7342929974509 L 695.0 -792.7342929974509 L 705.0 -792.7342929974509 L 705.0 -782.7342929974509 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -787.7342929974509 M 702.5 -787.7342929974509 L 702.5 -787.734 M 702.5 -787.734 A 2.5 2.5 0 1 0 697.5 -787.734 A 2.5 2.5 0 1 0 702.5 -787.734 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 775.0 -784.383715699505 L 775.0 -794.383715699505 L 785.0 -794.383715699505 L 785.0 -784.383715699505 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -789.383715699505 M 782.5 -789.383715699505 L 782.5 -789.384 M 782.5 -789.384 A 2.5 2.5 0 1 0 777.5 -789.384 A 2.5 2.5 0 1 0 782.5 -789.384 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 855.0 -785.620782726046 L 855.0 -795.620782726046 L 865.0 -795.620782726046 L 865.0 -785.620782726046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -790.620782726046 M 862.5 -790.620782726046 L 862.5 -790.621 M 862.5 -790.621 A 2.5 2.5 0 1 0 857.5 -790.621 A 2.5 2.5 0 1 0 862.5 -790.621 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 300.0 -741.3148255253518 L 380.0 -771.004434162329 L 460.0 -780.9009703746547 L 540.0 -785.8492384808173 L 620.0 -788.8181993445152 L 700.0 -790.7975065869803 L 780.0 -792.2112974744553 L 860.0 -793.2716406400618" style="stroke:rgb(77,77,77);stroke-width:1.2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 295.0 -736.3148255253518 L 295.0 -746.3148255253518 L 305.0 -746.3148255253518 L 305.0 -736.3148255253518 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -741.3148255253518 M 302.5 -741.3148255253518 L 302.5 -741.315 M 302.5 -741.315 A 2.5 2.5 0 1 0 297.5 -741.315 A 2.5 2.5 0 1 0 302.5 -741.315 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 375.0 -766.004434162329 L 375.0 -776.004434162329 L 385.0 -776.004434162329 L 385.0 -766.004434162329 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -771.004434162329 M 382.5 -771.004434162329 L 382.5 -771.004 M 382.5 -771.004 A 2.5 2.5 0 1 0 377.5 -771.004 A 2.5 2.5 0 1 0 382.5 -771.004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 455.0 -775.9009703746547 L 455.0 -785.9009703746547 L 465.0 -785.9009703746547 L 465.0 -775.9009703746547 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -780.9009703746547 M 462.5 -780.9009703746547 L 462.5 -780.901 M 462.5 -780.901 A 2.5 2.5 0 1 0 457.5 -780.901 A 2.5 2.5 0 1 0 462.5 -780.901 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 535.0 -780.8492384808173 L 535.0 -790.8492384808173 L 545.0 -790.8492384808173 L 545.0 -780.8492384808173 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -785.8492384808173 M 542.5 -785.8492384808173 L 542.5 -785.849 M 542.5 -785.849 A 2.5 2.5 0 1 0 537.5 -785.849 A 2.5 2.5 0 1 0 542.5 -785.849 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 615.0 -783.8181993445152 L 615.0 -793.8181993445152 L 625.0 -793.8181993445152 L 625.0 -783.8181993445152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -788.8181993445152 M 622.5 -788.8181993445152 L 622.5 -788.818 M 622.5 -788.818 A 2.5 2.5 0 1 0 617.5 -788.818 A 2.5 2.5 0 1 0 622.5 -788.818 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 695.0 -785.7975065869803 L 695.0 -795.7975065869803 L 705.0 -795.7975065869803 L 705.0 -785.7975065869803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -790.7975065869803 M 702.5 -790.7975065869803 L 702.5 -790.798 M 702.5 -790.798 A 2.5 2.5 0 1 0 697.5 -790.798 A 2.5 2.5 0 1 0 702.5 -790.798 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 775.0 -787.2112974744553 L 775.0 -797.2112974744553 L 785.0 -797.2112974744553 L 785.0 -787.2112974744553 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -792.2112974744553 M 782.5 -792.2112974744553 L 782.5 -792.211 M 782.5 -792.211 A 2.5 2.5 0 1 0 777.5 -792.211 A 2.5 2.5 0 1 0 782.5 -792.211 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 855.0 -788.2716406400618 L 855.0 -798.2716406400618 L 865.0 -798.2716406400618 L 865.0 -788.2716406400618 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -793.2716406400618 M 862.5 -793.2716406400618 L 862.5 -793.272 M 862.5 -793.272 A 2.5 2.5 0 1 0 857.5 -793.272 A 2.5 2.5 0 1 0 862.5 -793.272 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip71);">
+ <path d="M 300.0 -749.7975708502024 L 380.0 -775.7759784075574 L 460.0 -784.4354475933424 L 540.0 -788.7651821862348 L 620.0 -791.3630229419704 L 700.0 -793.0949167791274 L 780.0 -794.331983805668 L 860.0 -795.2597840755736" style="stroke-width:1.2;stroke-dasharray:1.5,1.5;"/>
+ </g>
+ <g style="clip-path:url(#clip72);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 295.0 -744.7975708502024 L 295.0 -754.7975708502024 L 305.0 -754.7975708502024 L 305.0 -744.7975708502024 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -749.7975708502024 M 302.5 -749.7975708502024 L 302.5 -749.798 M 302.5 -749.798 A 2.5 2.5 0 1 0 297.5 -749.798 A 2.5 2.5 0 1 0 302.5 -749.798 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 375.0 -770.7759784075574 L 375.0 -780.7759784075574 L 385.0 -780.7759784075574 L 385.0 -770.7759784075574 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 380.0 -775.7759784075574 M 382.5 -775.7759784075574 L 382.5 -775.776 M 382.5 -775.776 A 2.5 2.5 0 1 0 377.5 -775.776 A 2.5 2.5 0 1 0 382.5 -775.776 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 455.0 -779.4354475933424 L 455.0 -789.4354475933424 L 465.0 -789.4354475933424 L 465.0 -779.4354475933424 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 460.0 -784.4354475933424 M 462.5 -784.4354475933424 L 462.5 -784.435 M 462.5 -784.435 A 2.5 2.5 0 1 0 457.5 -784.435 A 2.5 2.5 0 1 0 462.5 -784.435 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 535.0 -783.7651821862348 L 535.0 -793.7651821862348 L 545.0 -793.7651821862348 L 545.0 -783.7651821862348 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 540.0 -788.7651821862348 M 542.5 -788.7651821862348 L 542.5 -788.765 M 542.5 -788.765 A 2.5 2.5 0 1 0 537.5 -788.765 A 2.5 2.5 0 1 0 542.5 -788.765 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 615.0 -786.3630229419704 L 615.0 -796.3630229419704 L 625.0 -796.3630229419704 L 625.0 -786.3630229419704 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 620.0 -791.3630229419704 M 622.5 -791.3630229419704 L 622.5 -791.363 M 622.5 -791.363 A 2.5 2.5 0 1 0 617.5 -791.363 A 2.5 2.5 0 1 0 622.5 -791.363 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 695.0 -788.0949167791274 L 695.0 -798.0949167791274 L 705.0 -798.0949167791274 L 705.0 -788.0949167791274 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.0 -793.0949167791274 M 702.5 -793.0949167791274 L 702.5 -793.095 M 702.5 -793.095 A 2.5 2.5 0 1 0 697.5 -793.095 A 2.5 2.5 0 1 0 702.5 -793.095 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 775.0 -789.331983805668 L 775.0 -799.331983805668 L 785.0 -799.331983805668 L 785.0 -789.331983805668 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 780.0 -794.331983805668 M 782.5 -794.331983805668 L 782.5 -794.332 M 782.5 -794.332 A 2.5 2.5 0 1 0 777.5 -794.332 A 2.5 2.5 0 1 0 782.5 -794.332 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 855.0 -790.2597840755736 L 855.0 -800.2597840755736 L 865.0 -800.2597840755736 L 865.0 -790.2597840755736 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 860.0 -795.2597840755736 M 862.5 -795.2597840755736 L 862.5 -795.26 M 862.5 -795.26 A 2.5 2.5 0 1 0 857.5 -795.26 A 2.5 2.5 0 1 0 862.5 -795.26 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 935.0 -285 L 935.0 -420.0 L 1062.535 -420.0 L 1062.535 -285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 935.0 -285 L 935.0 -420.0 L 1062.535 -420.0 L 1062.535 -285 Z"/>
+ <path d="M 960.0 -410.0 L 975.0 -410.0" style="stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip82);">
+ <path d="M 962.5 -405.0 L 962.5 -415.0 L 972.5 -415.0 L 972.5 -405.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -410.0 M 970.0 -410.0 L 970 -410 M 970 -410 A 2.5 2.5 0 1 0 965 -410 A 2.5 2.5 0 1 0 970 -410 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-405.0">bfactor 1</text>
+ <path d="M 960.0 -395.0 L 975.0 -395.0" style="stroke:rgb(255,0,0);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip83);">
+ <path d="M 962.5 -390.0 L 962.5 -400.0 L 972.5 -400.0 L 972.5 -390.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -395.0 M 970.0 -395.0 L 970 -395 M 970 -395 A 2.5 2.5 0 1 0 965 -395 A 2.5 2.5 0 1 0 970 -395 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-390.0">bfactor 2</text>
+ <path d="M 960.0 -380.0 L 975.0 -380.0" style="stroke:rgb(0,0,138);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip84);">
+ <path d="M 962.5 -375.0 L 962.5 -385.0 L 972.5 -385.0 L 972.5 -375.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -380.0 M 970.0 -380.0 L 970 -380 M 970 -380 A 2.5 2.5 0 1 0 965 -380 A 2.5 2.5 0 1 0 970 -380 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-375.0">bfactor 3</text>
+ <path d="M 960.0 -365.0 L 975.0 -365.0" style="stroke:rgb(179,179,179);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip85);">
+ <path d="M 962.5 -360.0 L 962.5 -370.0 L 972.5 -370.0 L 972.5 -360.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -365.0 M 970.0 -365.0 L 970 -365 M 970 -365 A 2.5 2.5 0 1 0 965 -365 A 2.5 2.5 0 1 0 970 -365 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-360.0">bfactor 4</text>
+ <path d="M 960.0 -350.0 L 975.0 -350.0" style="stroke:rgb(142,188,142);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip86);">
+ <path d="M 962.5 -345.0 L 962.5 -355.0 L 972.5 -355.0 L 972.5 -345.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -350.0 M 970.0 -350.0 L 970 -350 M 970 -350 A 2.5 2.5 0 1 0 965 -350 A 2.5 2.5 0 1 0 970 -350 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-345.0">bfactor 5</text>
+ <path d="M 960.0 -335.0 L 975.0 -335.0" style="stroke:rgb(188,182,107);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip87);">
+ <path d="M 962.5 -330.0 L 962.5 -340.0 L 972.5 -340.0 L 972.5 -330.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -335.0 M 970.0 -335.0 L 970 -335 M 970 -335 A 2.5 2.5 0 1 0 965 -335 A 2.5 2.5 0 1 0 970 -335 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-330.0">bfactor 6</text>
+ <path d="M 960.0 -320.0 L 975.0 -320.0" style="stroke:rgb(77,77,77);stroke-width:1.2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip88);">
+ <path d="M 962.5 -315.0 L 962.5 -325.0 L 972.5 -325.0 L 972.5 -315.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -320.0 M 970.0 -320.0 L 970 -320 M 970 -320 A 2.5 2.5 0 1 0 965 -320 A 2.5 2.5 0 1 0 970 -320 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-315.0">bfactor 7</text>
+ <path d="M 960.0 -305.0 L 975.0 -305.0" style="stroke-width:1.2;stroke-dasharray:1.5,1.5;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip89);">
+ <path d="M 962.5 -300.0 L 962.5 -310.0 L 972.5 -310.0 L 972.5 -300.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 967.5 -305.0 M 970.0 -305.0 L 970 -305 M 970 -305 A 2.5 2.5 0 1 0 965 -305 A 2.5 2.5 0 1 0 970 -305 Z"/>
+ <text style="font-size:15.0;stroke:none;fill:rgb(0,0,0);" x="975.0" y="-300.0">bfactor 8</text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/doc/manuals/message-sequences/location_services_ta.msc b/doc/manuals/message-sequences/location_services_ta.msc
new file mode 100644
index 000000000..e6bef38ef
--- /dev/null
+++ b/doc/manuals/message-sequences/location_services_ta.msc
@@ -0,0 +1,49 @@
+msc {
+ hscale="2";
+
+ ms[label="MS/BTS"],bsc[label="BSC"],smlc[label="SMLC"],__msc[label="MSC"];
+
+ ||| [label="Location Services (LCS): Perform Location Request using TA"];
+
+ |||;
+ --- [label="MS in DEDICATED MODE (currently active)"];
+
+ ms =>> bsc [label="earlier Measurement Report provides Timing Advance"];
+
+ bsc <<= __msc [label="PERFORM LOCATION REQUEST\n3GPP TS 48.008 3.2.1.71"];
+
+ bsc =>> smlc [label="BSSMAP-LE PERFORM LOCATION REQUEST\n3GPP TS 49.031 9.1\nwith BSSLAP APDU = TA Layer3\n3GPP TS 48.071 4.2.8"];
+
+ smlc rbox smlc [label="SMLC uses TA included in TA Layer3"];
+
+ bsc <<= smlc [label="BSSMAP-LE PERFORM LOCATION RESPONSE\n3GPP TS 49.031 9.2"];
+
+ bsc =>> __msc [label="PERFORM LOCATION RESPONSE\n3GPP TS 48.008 3.2.1.72"];
+
+ ...;
+ ...;
+ --- [label="MS in IDLE MODE (not connected)"];
+
+ bsc <<= __msc [label="PERFORM LOCATION REQUEST\n3GPP TS 48.008 3.2.1.71"];
+
+ bsc =>> smlc [label="BSSMAP-LE PERFORM LOCATION REQUEST\n3GPP TS 49.031 9.1"];
+
+ smlc rbox smlc [label="SMLC needs TA information,\nasks BSC via BSSLAP"];
+
+ bsc <<= smlc [label="BSSMAP-LE CONNECTION ORIENTED INFORMATION\n3GPP TS 49.031 9.12\nwith BSSLAP APDU = TA Request\n3GPP TS 48.071 4.2.1"];
+
+
+ ms <<= bsc [label="RR Paging Request\n3GPP TS 48.018 9.1.22-24"];
+
+ ms =>> bsc [label="RSL CHANNEL REQUIRED\n3GPP TS 48.058 8.5.3\nincludes Access Delay (9.3.17) == Timing Advance"];
+
+ ms =>> bsc [label="RR Paging Response\n3GPP TS 48.018 9.1.25"];
+
+ ms <<= bsc [label="RF CHANNEL RELEASE\n3GPP TS 48.058 8.4.14"];
+
+ bsc =>> smlc [label="BSSMAP-LE CONNECTION ORIENTED INFORMATION\n3GPP TS 49.031 9.12\nwith BSSLAP APDU = TA Response\n3GPP TS 48.071 4.2.2"];
+
+ bsc <<= smlc [label="BSSMAP-LE PERFORM LOCATION RESPONSE\n3GPP TS 49.031 9.2"];
+
+ bsc =>> __msc [label="PERFORM LOCATION RESPONSE\n3GPP TS 48.008 3.2.1.72"];
+}
diff --git a/doc/manuals/message-sequences/mo_call-abis_a.msc b/doc/manuals/message-sequences/mo_call-abis_a.msc
index 4597ab126..ba7f0aa18 100644
--- a/doc/manuals/message-sequences/mo_call-abis_a.msc
+++ b/doc/manuals/message-sequences/mo_call-abis_a.msc
@@ -107,7 +107,7 @@ linecolor="green"];
...;
bsc <- m_sc [label="SCCP DT1 (BSSMAP CLEAR CMD)"];
bsc -> bsc [label="GSCON_EV_A_CLEAR_CMD", textcolor="red", linecolor="red"];
- --- [label="BSC must release terrestrial resoures before reporting CLEAR COMPLETE"];
+ --- [label="BSC must release terrestrial resources before reporting CLEAR COMPLETE"];
mgw <- bsc [label="MGCP DLCX rtpbridge/2@mgw", textcolor="blue", linecolor="blue"];
mgw box mgw [label="Release MSC-facing local RTP port (3000)", textcolor="blue", linecolor="blue"];
mgw -> bsc [label="MGCP DLCX rtpbridge/2@mgw OK", textcolor="blue", linecolor="blue"];
diff --git a/doc/manuals/mgw/classic-bsc.msc b/doc/manuals/mgw/classic-bsc.msc
index 56d288997..97b65131e 100644
--- a/doc/manuals/mgw/classic-bsc.msc
+++ b/doc/manuals/mgw/classic-bsc.msc
@@ -1,5 +1,5 @@
# MO Call on a classic E1 Abis BTS with classic E1 A BSC
-# not actually supported by OsmoBSC (nor planned), for refrence only
+# not actually supported by OsmoBSC (nor planned), for reference only
msc {
hscale=2;
ms [label="MS"], bts [label="E1 BTS"], bsc[label="OsmoBSC"], trau[label="TRAU"], m_sc[label="MSC"];
diff --git a/doc/manuals/osmobsc-usermanual.adoc b/doc/manuals/osmobsc-usermanual.adoc
index eec77d7e7..3c80cee1c 100644
--- a/doc/manuals/osmobsc-usermanual.adoc
+++ b/doc/manuals/osmobsc-usermanual.adoc
@@ -1,4 +1,5 @@
:gfdl-enabled:
+:program-name: OsmoBSC
OsmoBSC User Manual
===================
@@ -11,27 +12,39 @@ include::{srcdir}/chapters/overview.adoc[]
include::{srcdir}/chapters/running.adoc[]
-include::{srcdir}/chapters/control.adoc[]
+include::./common/chapters/vty.adoc[]
-include::{srcdir}/chapters/counters.adoc[]
+include::./common/chapters/logging.adoc[]
+
+include::./common/chapters/cs7-config.adoc[]
+
+include::{srcdir}/chapters/bts.adoc[]
+
+include::{srcdir}/chapters/bts-examples.adoc[]
+
+include::{srcdir}/chapters/bsc.adoc[]
include::{srcdir}/chapters/handover.adoc[]
-include::./common/chapters/vty.adoc[]
+include::{srcdir}/chapters/smscb.adoc[]
-include::./common/chapters/logging.adoc[]
+include::{srcdir}/chapters/mscpool.adoc[]
-include::./common/chapters/bts.adoc[]
+include::{srcdir}/chapters/smlc.adoc[]
-include::{srcdir}/chapters/bts-examples.adoc[]
+include::./common/chapters/counters-overview.adoc[]
-include::./common/chapters/bsc.adoc[]
+include::{srcdir}/chapters/counters.adoc[]
include::./common/chapters/abis.adoc[]
include::./common/chapters/control_if.adoc[]
-include::./common/chapters/cell-broadcast.adoc[]
+include::{srcdir}/chapters/control.adoc[]
+
+include::{srcdir}/chapters/osmux_bsc.adoc[]
+
+include::./common/chapters/vty_cpu_sched.adoc[]
include::./common/chapters/port_numbers.adoc[]
@@ -40,4 +53,3 @@ include::./common/chapters/bibliography.adoc[]
include::./common/chapters/glossary.adoc[]
include::./common/chapters/gfdl.adoc[]
-
diff --git a/doc/manuals/osmobsc-vty-reference.xml b/doc/manuals/osmobsc-vty-reference.xml
index f51e56eff..ec3022c3a 100644
--- a/doc/manuals/osmobsc-vty-reference.xml
+++ b/doc/manuals/osmobsc-vty-reference.xml
@@ -24,12 +24,18 @@
<authorinitials>hf</authorinitials>
<revremark>Update to match osmo-bsc version 0.13.0-305</revremark>
</revision>
+ <revision>
+ <revnumber>v3</revnumber>
+ <date>6th June 2019</date>
+ <authorinitials>dw</authorinitials>
+ <revremark>Update to match osmo-bsc version 1.4.0.84-3f1f</revremark>
+ </revision>
</revhistory>
<title>OsmoBSC VTY Reference</title>
<copyright>
- <year>2012-2014</year>
+ <year>2012-2019</year>
</copyright>
<legalnotice>
diff --git a/doc/manuals/osmux-reference.adoc b/doc/manuals/osmux-reference.adoc
index 929f44203..a6c4085ad 100644
--- a/doc/manuals/osmux-reference.adoc
+++ b/doc/manuals/osmux-reference.adoc
@@ -5,7 +5,7 @@
In case of satellite based GSM systems, the transmission cost on the back-haul
is relatively expensive. The billing for such SAT uplink is usually done in a
-pay-per-byte basis. Thus, reducing the amount of bytes transfered would
+pay-per-byte basis. Thus, reducing the amount of bytes transferred would
significantly reduce the cost of such uplinks. In such environment, even
seemingly small protocol optimizations, eg. message batching and trunking, can
result in significant cost reduction.
@@ -93,7 +93,7 @@ layer 4 protocols are suitable for this application. We detail the reasons
why:
* TCP is a streaming protocol aimed at maximizing the throughput of a stream
- withing the constraints of the underlying transport layer. This feature is
+ within the constraints of the underlying transport layer. This feature is
not really required for the low-bandwidth and low-pps GSM signalling.
Moreover, TCP is stream oriented and does not conserve message boundaries.
As such, the IPA header has to serve as a boundary between messages in the
@@ -114,7 +114,7 @@ good as TCP does) packet loss and copes with packet re-ordering.
LAPD has a very small header (3-5 octets) compared to TCPs 20 bytes. Even if
LAPD is put inside UDP, the combination of 11 to 13 octets still saves a
-noticable number of bytes per packet. Moreover, LAPD has been modified for less
+noticeable number of bytes per packet. Moreover, LAPD has been modified for less
reliable interfaces such as the GSM Um interface (LAPDm), as well as for the
use in satellite systems (LAPsat in ETSI GMR).
@@ -136,7 +136,7 @@ The following FT values are assigned:
* FT == 2: Dummy
* FT == 3: Reserved for Fture Use
-There can be any number of OSmux messages batched up in one underlaying packet.
+There can be any number of OSmux messages batched up in one underlying packet.
In this case, the multiple OSmux messages are simply concatenated, i.e. the
OSmux header control octet directly follows the last octet of the payload of the
previous OSmux message.
@@ -224,7 +224,7 @@ need to have independent timestamp and sequence numbers (related to a 8kHz
clock) as specified in AMR-RTP.
AMR Codec Mode Request (AMR-FT): 4 bits::
-This is a mapping from te AMR FT field (Frame type index) in RFC3267 Section
+This is a mapping from the AMR FT field (Frame type index) in RFC3267 Section
4.3.2. The length of each codec frame needs to be determined from this field. It
is thus guaranteed that all frames for a specific stream in an OSmux batch are
of the same AMR type.
@@ -356,7 +356,7 @@ msc {
=== Batching
-Following chart shows how batching with a factor of 3 works. To easilly
+Following chart shows how batching with a factor of 3 works. To easily
illustrate batching, only uplink and one concurrent call is considered.
It can be seen how 3 RTP packets from MSa arrive to the BSC from the BTS. The
@@ -503,51 +503,8 @@ The following figure shows the growth in traffic saving (in %) depending on the
number of concurrent numbers of callings for a given set of batching factor
values:
-["python2"]
-----
-from pychart import *
-theme.get_options()
-theme.scale_factor = 5
-theme.use_color = 1
-theme.reinitialize()
-
-IP_HEADER=20
-UDP_HEADER=8
-RTP_HEADER=12
-OSMUX_HEADER=4
-AMR59_PAYLOAD=17
-
-def osmux_get_size(calls, payloads):
- return IP_HEADER + UDP_HEADER + (OSMUX_HEADER + AMR59_PAYLOAD * payloads) * calls
-
-def rtp_get_size(calls, payloads):
- return calls * payloads * (IP_HEADER + UDP_HEADER + RTP_HEADER + AMR59_PAYLOAD)
-
-def calc_traffic_saving(calls, payloads):
- return 100 - 100.0 * osmux_get_size(calls, payloads) / rtp_get_size(calls, payloads)
-
-# The first value in each tuple is the X value, and subsequent values are Y values for different lines.
-def gen_table():
- data = []
- for calls in range(1, 9):
- col = (calls,)
- for factor in range(1, 9):
- col += (calc_traffic_saving(calls, factor),)
- data.append(col)
- return data
-
-def do_plot(data):
- xaxis = axis.X(format="/hL%d", tic_interval = 1, label="Concurrent calls")
- yaxis = axis.Y(format="%d%%", tic_interval = 10, label="Traffic Saving")
- ar = area.T(x_axis=xaxis, y_axis=yaxis, y_range=(None,None), x_grid_interval=1, x_grid_style=line_style.gray70_dash3)
- for y in range(1, len(data[0])):
- plot = line_plot.T(label="bfactor "+str(y), data=data, ycol=y, tick_mark=tick_mark.circle1)
- ar.add_plot(plot)
- ar.draw()
-
-data = gen_table()
-do_plot(data)
-----
+// Original python2 pychart code replaced with generated svg in I36b721f895caee9766528e14d854b6aa2a2fac85
+image::images/osmux-expected-traffic-savings.svg[]
The results show a saving of 15.79% with only one concurrent call and with
batching disabled (bfactor 1), that quickly improves with more concurrent calls
@@ -559,7 +516,7 @@ more concurrent calls.
A batching factor of 8 provides very little improvement with regards to batching
4 messages. Still, we risk to degrade user experience. Thus, we consider a
-batching factor of 3 and 4 is adecuate.
+batching factor of 3 and 4 is adequate.
== Other proposed follow-up works
diff --git a/doc/manuals/regen_doc.sh b/doc/manuals/regen_doc.sh
new file mode 100755
index 000000000..2f9ef74a2
--- /dev/null
+++ b/doc/manuals/regen_doc.sh
@@ -0,0 +1,17 @@
+#!/bin/sh -x
+
+if [ -z "$DOCKER_PLAYGROUND" ]; then
+ echo "You need to set DOCKER_PLAYGROUND"
+ exit 1
+fi
+
+SCRIPT=$(realpath "$0")
+MANUAL_DIR=$(dirname "$SCRIPT")
+
+COMMIT=${COMMIT:-$(git log -1 --format=format:%H)}
+
+cd "$DOCKER_PLAYGROUND/scripts" || exit 1
+
+OSMO_BSC_BRANCH=$COMMIT ./regen_doc.sh osmo-bsc 4242 \
+ "$MANUAL_DIR/chapters/counters_generated.adoc" \
+ "$MANUAL_DIR/vty/bsc_vty_reference.xml"
diff --git a/doc/manuals/vty/bsc_vty_reference.xml b/doc/manuals/vty/bsc_vty_reference.xml
deleted file mode 100644
index f56b951ec..000000000
--- a/doc/manuals/vty/bsc_vty_reference.xml
+++ /dev/null
@@ -1,4846 +0,0 @@
-<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>
- <node id='_common_cmds_'>
- <name>Common Commands</name>
- <description>These commands are available on all VTY nodes. They are listed here only once, to unclutter the VTY reference.</description>
- <command id='help'>
- <params>
- <param name='help' doc='Description of the interactive help system' />
- </params>
- </command>
- <command id='list'>
- <params>
- <param name='list' doc='Print command list' />
- </params>
- </command>
- <command id='write terminal'>
- <params>
- <param name='write' doc='Write running configuration to memory, network, or terminal' />
- <param name='terminal' doc='Write to terminal' />
- </params>
- </command>
- <command id='write file'>
- <params>
- <param name='write' doc='Write running configuration to memory, network, or terminal' />
- <param name='file' doc='Write to configuration file' />
- </params>
- </command>
- <command id='write memory'>
- <params>
- <param name='write' doc='Write running configuration to memory, network, or terminal' />
- <param name='memory' doc='Write configuration to the file (same as write file)' />
- </params>
- </command>
- <command id='write'>
- <params>
- <param name='write' doc='Write running configuration to memory, network, or terminal' />
- </params>
- </command>
- <command id='show running-config'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='running-config' doc='running configuration' />
- </params>
- </command>
- <command id='exit'>
- <params>
- <param name='exit' doc='Exit current mode and down to previous mode' />
- </params>
- </command>
- <command id='end'>
- <params>
- <param name='end' doc='End current mode and change to enable mode.' />
- </params>
- </command>
- </node>
- <node id='view'>
- <name>view</name>
- <command id='show version'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='version' doc='Displays program version' />
- </params>
- </command>
- <command id='show online-help'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='online-help' doc='Online help' />
- </params>
- </command>
- <command id='enable'>
- <params>
- <param name='enable' doc='Turn on privileged mode command' />
- </params>
- </command>
- <command id='terminal length &lt;0-512&gt;'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='length' doc='Set number of lines on a screen' />
- <param name='&lt;0-512&gt;' doc='Number of lines on screen (0 for no pausing)' />
- </params>
- </command>
- <command id='terminal no length'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='length' doc='Set number of lines on a screen' />
- </params>
- </command>
- <command id='who'>
- <params>
- <param name='who' doc='Display who is on vty' />
- </params>
- </command>
- <command id='show history'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='history' doc='Display the session command history' />
- </params>
- </command>
- <command id='show stats'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='stats' doc='Show statistical values' />
- </params>
- </command>
- <command id='show stats level (global|peer|subscriber)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='stats' doc='Show statistical values' />
- <param name='level' doc='Set the maximum group level' />
- <param name='global' doc='Show global groups only' />
- <param name='peer' doc='Show global and network peer related groups' />
- <param name='subscriber' doc='Show global, peer, and subscriber groups' />
- </params>
- </command>
- <command id='show asciidoc counters'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='asciidoc' doc='Asciidoc generation' />
- <param name='counters' doc='Generate table of all registered counters' />
- </params>
- </command>
- <command id='show rate-counters'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='rate-counters' doc='Show all rate counters' />
- </params>
- </command>
- <command id='show network'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='network' doc='Display information about a GSM NETWORK' />
- </params>
- </command>
- <command id='show bts [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='bts' doc='Display information about a BTS' />
- <param name='[&lt;0-255&gt;]' doc='BTS number' />
- </params>
- </command>
- <command id='show rejected-bts'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='rejected-bts' doc='Display recently rejected BTS devices' />
- </params>
- </command>
- <command id='show trx [&lt;0-255&gt;] [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='trx' doc='Display information about a TRX' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- </params>
- </command>
- <command id='show timeslot [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='timeslot' doc='Display information about a TS' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- </params>
- </command>
- <command id='show lchan [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='lchan' doc='Display information about a logical channel' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- <param name='[&lt;0-7&gt;]' doc='Logical Channel Number' />
- </params>
- </command>
- <command id='show lchan summary [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='lchan' doc='Display information about a logical channel' />
- <param name='summary' doc='Short summary' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- <param name='[&lt;0-7&gt;]' doc='Logical Channel Number' />
- </params>
- </command>
- <command id='show conns'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='conns' doc='Display currently active subscriber connections' />
- </params>
- </command>
- <command id='show paging [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='paging' doc='Display information about paging requests of a BTS' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- </params>
- </command>
- <command id='show paging-group &lt;0-255&gt; IMSI'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='paging-group' doc='Display the paging group' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='IMSI' doc='IMSI' />
- </params>
- </command>
- <command id='logging enable'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='enable' doc='Enables logging to this vty' />
- </params>
- </command>
- <command id='logging disable'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='disable' doc='Disables logging to this vty' />
- </params>
- </command>
- <command id='logging filter all (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='all' doc='Do you want to log all messages?' />
- <param name='0' doc='Only print messages matched by other filters' />
- <param name='1' doc='Bypass filter and print all messages' />
- </params>
- </command>
- <command id='logging color (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='color' doc='Configure color-printing for log messages' />
- <param name='0' doc='Don&apos;t use color for printing messages' />
- <param name='1' doc='Use color for printing messages' />
- </params>
- </command>
- <command id='logging timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp' />
- </params>
- </command>
- <command id='logging print extended-timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='extended-timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
- </params>
- </command>
- <command id='logging print category (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem name' />
- </params>
- </command>
- <command id='logging print category-hex (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category-hex' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem nr in hex (&apos;&lt;000b&gt;&apos;)' />
- </params>
- </command>
- <command id='logging print level (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='level' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the log level name' />
- </params>
- </command>
- <command id='logging print file (0|1|basename) [last]'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='file' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the source file and line' />
- <param name='basename' doc='Prefix each log message with the source file&apos;s basename (strip leading paths) and line' />
- <param name='[last]' doc='Log source file info at the end of a log line. If omitted, log source file info just before the log text.' />
- </params>
- </command>
- <command id='logging set-log-mask MASK'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='set-log-mask' doc='Set the logmask of this logging target' />
- <param name='MASK' doc='List of logging categories to log, e.g. &apos;abc:mno:xyz&apos;. Available log categories depend on the specific application, refer to the &apos;logging level&apos; command. Optionally add individual log levels like &apos;abc,1:mno,3:xyz,5&apos;, where the level numbers are LOGL_DEBUG=1 LOGL_INFO=3 LOGL_NOTICE=5 LOGL_ERROR=7 LOGL_FATAL=8' />
- </params>
- </command>
- <command id='logging level (rll|mm|rr|rsl|nm|pag|meas|msc|ho|hodec|ref|nat|ctrl|filter|pcu|lcls|chan|ts|as|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf) (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
- <param name='mm' doc='Layer3 Mobility Management (MM)' />
- <param name='rr' doc='Layer3 Radio Resource (RR)' />
- <param name='rsl' doc='A-bis Radio Signalling Link (RSL)' />
- <param name='nm' doc='A-bis Network Management / O&amp;M (NM/OML)' />
- <param name='pag' doc='Paging Subsystem' />
- <param name='meas' doc='Radio Measurement Processing' />
- <param name='msc' doc='Mobile Switching Center' />
- <param name='ho' doc='Hand-Over Process' />
- <param name='hodec' doc='Hand-Over Decision' />
- <param name='ref' doc='Reference Counting' />
- <param name='nat' doc='GSM 08.08 NAT/Multiplexer' />
- <param name='ctrl' doc='Control interface' />
- <param name='filter' doc='BSC/NAT IMSI based filtering' />
- <param name='pcu' doc='PCU Interface' />
- <param name='lcls' doc='Local Call, Local Switch' />
- <param name='chan' doc='lchan FSM' />
- <param name='ts' doc='timeslot FSM' />
- <param name='as' doc='assignment FSM' />
- <param name='lglobal' doc='Library-internal global log family' />
- <param name='llapd' doc='LAPD in libosmogsm' />
- <param name='linp' doc='A-bis Intput Subsystem' />
- <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
- <param name='lmi' doc='A-bis Input Driver for Signalling' />
- <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
- <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
- <param name='lctrl' doc='Control Interface' />
- <param name='lgtp' doc='GPRS GTP library' />
- <param name='lstats' doc='Statistics messages and logging' />
- <param name='lgsup' doc='Generic Subscriber Update Protocol' />
- <param name='loap' doc='Osmocom Authentication Protocol' />
- <param name='lss7' doc='libosmo-sigtran Signalling System 7' />
- <param name='lsccp' doc='libosmo-sigtran SCCP Implementation' />
- <param name='lsua' doc='libosmo-sigtran SCCP User Adaptation' />
- <param name='lm3ua' doc='libosmo-sigtran MTP3 User Adaptation' />
- <param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
- <param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level set-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='set-all' doc='Once-off set all categories to the given log level. There is no single command to take back these changes -- each category is set to the given level, period.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level force-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Globally force all logging categories to a specific level. This is released by the &apos;no logging level force-all&apos; command. Note: any &apos;logging level &lt;category&gt; &lt;level&gt;&apos; commands will have no visible effect after this, until the forced level is released.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='no logging level force-all'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
- </params>
- </command>
- <command id='show logging vty'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='logging' doc='Show current logging configuration' />
- <param name='vty' doc='Show current logging configuration for this vty' />
- </params>
- </command>
- <command id='show alarms'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='alarms' doc='Show current logging configuration' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH) tree ADDRESS'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- <param name='tree' doc='Display only a specific memory chunk' />
- <param name='ADDRESS' doc='Chunk address (e.g. 0xdeadbeef)' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH) filter REGEXP'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- <param name='filter' doc='Filter chunks using regular expression' />
- <param name='REGEXP' doc='Regular expression' />
- </params>
- </command>
- <command id='show timer [TNNNN]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='timer' doc='GSM Timers' />
- <param name='[TNNNN]' doc='Specific timer to show, or all timers if omitted.' />
- </params>
- </command>
- <command id='show bts &lt;0-255&gt; neighbor arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='bts' doc='Display information about a BTS' />
- <param name='&lt;0-255&gt;' doc='BTS number' />
- <param name='neighbor' doc='Query which cell would be the target for this neighbor ARFCN+BSIC' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='show e1_driver'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_driver' doc='Display information about available E1 drivers' />
- </params>
- </command>
- <command id='show e1_line [line_nr] [stats]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_line' doc='Display information about a E1 line' />
- <param name='[line_nr]' doc='E1 Line Number' />
- <param name='[stats]' doc='Include statistics' />
- </params>
- </command>
- <command id='show e1_timeslot [line_nr] [ts_nr]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_timeslot' doc='Display information about a E1 timeslot' />
- <param name='[line_nr]' doc='E1 Line Number' />
- <param name='[ts_nr]' doc='E1 Timeslot Number' />
- </params>
- </command>
- <command id='show fsm NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm' doc='Show information about finite state machines' />
- <param name='NAME' doc='Display information about a single named finite state machine' />
- </params>
- </command>
- <command id='show fsm all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm' doc='Show information about finite state machines' />
- <param name='all' doc='Display a list of all registered finite state machines' />
- </params>
- </command>
- <command id='show fsm-instances NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm-instances' doc='Show information about finite state machine instances' />
- <param name='NAME' doc='Display a list of all FSM instances of the named finite state machine' />
- </params>
- </command>
- <command id='show fsm-instances all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm-instances' doc='Show information about finite state machine instances' />
- <param name='all' doc='Display a list of all FSM instances of all finite state machine' />
- </params>
- </command>
- <command id='show statistics'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='statistics' doc='Statistics about the BSC' />
- </params>
- </command>
- <command id='show mscs'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='mscs' doc='MSC Connections and State' />
- </params>
- </command>
- <command id='show position'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='position' doc='Position information of the BTS' />
- </params>
- </command>
- <command id='logging filter imsi IMSI'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='imsi' doc='Filter log messages by IMSI' />
- <param name='IMSI' doc='IMSI to be used as filter' />
- </params>
- </command>
- <command id='show subscriber all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='subscriber' doc='Display information about subscribers' />
- <param name='all' doc='All Subscribers' />
- </params>
- </command>
- <command id='show access-list NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='access-list' doc='IMSI access list' />
- <param name='NAME' doc='Name of the access list' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; users'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='users' doc='User Table' />
- </params>
- </command>
- <command id='show cs7 (sua|m3ua|ipa) [&lt;0-65534&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='sua' doc='SCCP User Adaptation' />
- <param name='m3ua' doc='MTP3 User Adaptation' />
- <param name='ipa' doc='IPA Multiplex (SCCP Lite)' />
- <param name='[&lt;0-65534&gt;]' doc='Port Number' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; asp'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='asp' doc='Application Server Process (ASP)' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; as (active|all|m3ua|sua)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='as' doc='Application Server (AS)' />
- <param name='active' doc='Display all active ASs' />
- <param name='all' doc='Display all ASs (default)' />
- <param name='m3ua' doc='Display all m3ua ASs' />
- <param name='sua' doc='Display all SUA ASs' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp addressbook'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='addressbook' doc='List all SCCP addressbook entries' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp users'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='users' doc='Show List of SCCP Users registered' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp ssn &lt;0-65535&gt;'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='ssn' doc='Find an SCCP User registered for the given SSN' />
- <param name='&lt;0-65535&gt;' doc='Subsystem Number (SSN)' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp connections'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='connections' doc='Show List of active SCCP connections' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp timers'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signaling Connection Control Part' />
- <param name='timers' doc='Show List of SCCP timers' />
- </params>
- </command>
- </node>
- <node id='enable'>
- <name>enable</name>
- <command id='disable'>
- <params>
- <param name='disable' doc='Turn off privileged mode command' />
- </params>
- </command>
- <command id='configure terminal'>
- <params>
- <param name='configure' doc='Configuration from vty interface' />
- <param name='terminal' doc='Configuration terminal' />
- </params>
- </command>
- <command id='copy running-config startup-config'>
- <params>
- <param name='copy' doc='Copy configuration' />
- <param name='running-config' doc='Copy running config to... ' />
- <param name='startup-config' doc='Copy running config to startup config (same as write file)' />
- </params>
- </command>
- <command id='show startup-config'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='startup-config' doc='Contentes of startup configuration' />
- </params>
- </command>
- <command id='show version'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='version' doc='Displays program version' />
- </params>
- </command>
- <command id='show online-help'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='online-help' doc='Online help' />
- </params>
- </command>
- <command id='terminal length &lt;0-512&gt;'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='length' doc='Set number of lines on a screen' />
- <param name='&lt;0-512&gt;' doc='Number of lines on screen (0 for no pausing)' />
- </params>
- </command>
- <command id='terminal no length'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='length' doc='Set number of lines on a screen' />
- </params>
- </command>
- <command id='who'>
- <params>
- <param name='who' doc='Display who is on vty' />
- </params>
- </command>
- <command id='show history'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='history' doc='Display the session command history' />
- </params>
- </command>
- <command id='terminal monitor'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='monitor' doc='Copy debug output to the current terminal line' />
- </params>
- </command>
- <command id='terminal no monitor'>
- <params>
- <param name='terminal' doc='Set terminal line parameters' />
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='monitor' doc='Copy debug output to the current terminal line' />
- </params>
- </command>
- <command id='show stats'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='stats' doc='Show statistical values' />
- </params>
- </command>
- <command id='show stats level (global|peer|subscriber)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='stats' doc='Show statistical values' />
- <param name='level' doc='Set the maximum group level' />
- <param name='global' doc='Show global groups only' />
- <param name='peer' doc='Show global and network peer related groups' />
- <param name='subscriber' doc='Show global, peer, and subscriber groups' />
- </params>
- </command>
- <command id='show asciidoc counters'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='asciidoc' doc='Asciidoc generation' />
- <param name='counters' doc='Generate table of all registered counters' />
- </params>
- </command>
- <command id='show rate-counters'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='rate-counters' doc='Show all rate counters' />
- </params>
- </command>
- <command id='show network'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='network' doc='Display information about a GSM NETWORK' />
- </params>
- </command>
- <command id='show bts [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='bts' doc='Display information about a BTS' />
- <param name='[&lt;0-255&gt;]' doc='BTS number' />
- </params>
- </command>
- <command id='show rejected-bts'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='rejected-bts' doc='Display recently rejected BTS devices' />
- </params>
- </command>
- <command id='show trx [&lt;0-255&gt;] [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='trx' doc='Display information about a TRX' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- </params>
- </command>
- <command id='show timeslot [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='timeslot' doc='Display information about a TS' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- </params>
- </command>
- <command id='show lchan [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='lchan' doc='Display information about a logical channel' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- <param name='[&lt;0-7&gt;]' doc='Logical Channel Number' />
- </params>
- </command>
- <command id='show lchan summary [&lt;0-255&gt;] [&lt;0-255&gt;] [&lt;0-7&gt;] [&lt;0-7&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='lchan' doc='Display information about a logical channel' />
- <param name='summary' doc='Short summary' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- <param name='[&lt;0-255&gt;]' doc='TRX Number' />
- <param name='[&lt;0-7&gt;]' doc='Timeslot Number' />
- <param name='[&lt;0-7&gt;]' doc='Logical Channel Number' />
- </params>
- </command>
- <command id='show conns'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='conns' doc='Display currently active subscriber connections' />
- </params>
- </command>
- <command id='show paging [&lt;0-255&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='paging' doc='Display information about paging requests of a BTS' />
- <param name='[&lt;0-255&gt;]' doc='BTS Number' />
- </params>
- </command>
- <command id='show paging-group &lt;0-255&gt; IMSI'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='paging-group' doc='Display the paging group' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='IMSI' doc='IMSI' />
- </params>
- </command>
- <command id='handover any'>
- <params>
- <param name='handover' doc='Manually trigger handover (for debugging)' />
- <param name='any' doc='Pick any actively used TCH/F or TCH/H lchan and handover to any other BTS. This is likely to fail if not all BTS are guaranteed to be reachable by the MS.' />
- </params>
- </command>
- <command id='assignment any'>
- <params>
- <param name='assignment' doc='Manually trigger assignment (for debugging)' />
- <param name='any' doc='Pick any actively used TCH/F or TCH/H lchan and re-assign within the same BTS. This will fail if no lchans of the same type are available besides the used one.' />
- </params>
- </command>
- <command id='handover any to arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='handover' doc='Manually trigger handover (for debugging)' />
- <param name='any' doc='Pick any actively used TCH/F or TCH/H lchan to handover to another cell. This is likely to fail outside of a lab setup where you are certain that all MS are able to see the target cell.' />
- <param name='to' doc='&apos;to&apos;' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='logging enable'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='enable' doc='Enables logging to this vty' />
- </params>
- </command>
- <command id='logging disable'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='disable' doc='Disables logging to this vty' />
- </params>
- </command>
- <command id='logging filter all (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='all' doc='Do you want to log all messages?' />
- <param name='0' doc='Only print messages matched by other filters' />
- <param name='1' doc='Bypass filter and print all messages' />
- </params>
- </command>
- <command id='logging color (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='color' doc='Configure color-printing for log messages' />
- <param name='0' doc='Don&apos;t use color for printing messages' />
- <param name='1' doc='Use color for printing messages' />
- </params>
- </command>
- <command id='logging timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp' />
- </params>
- </command>
- <command id='logging print extended-timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='extended-timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
- </params>
- </command>
- <command id='logging print category (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem name' />
- </params>
- </command>
- <command id='logging print category-hex (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category-hex' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem nr in hex (&apos;&lt;000b&gt;&apos;)' />
- </params>
- </command>
- <command id='logging print level (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='level' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the log level name' />
- </params>
- </command>
- <command id='logging print file (0|1|basename) [last]'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='file' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the source file and line' />
- <param name='basename' doc='Prefix each log message with the source file&apos;s basename (strip leading paths) and line' />
- <param name='[last]' doc='Log source file info at the end of a log line. If omitted, log source file info just before the log text.' />
- </params>
- </command>
- <command id='logging set-log-mask MASK'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='set-log-mask' doc='Set the logmask of this logging target' />
- <param name='MASK' doc='List of logging categories to log, e.g. &apos;abc:mno:xyz&apos;. Available log categories depend on the specific application, refer to the &apos;logging level&apos; command. Optionally add individual log levels like &apos;abc,1:mno,3:xyz,5&apos;, where the level numbers are LOGL_DEBUG=1 LOGL_INFO=3 LOGL_NOTICE=5 LOGL_ERROR=7 LOGL_FATAL=8' />
- </params>
- </command>
- <command id='logging level (rll|mm|rr|rsl|nm|pag|meas|msc|ho|hodec|ref|nat|ctrl|filter|pcu|lcls|chan|ts|as|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf) (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
- <param name='mm' doc='Layer3 Mobility Management (MM)' />
- <param name='rr' doc='Layer3 Radio Resource (RR)' />
- <param name='rsl' doc='A-bis Radio Signalling Link (RSL)' />
- <param name='nm' doc='A-bis Network Management / O&amp;M (NM/OML)' />
- <param name='pag' doc='Paging Subsystem' />
- <param name='meas' doc='Radio Measurement Processing' />
- <param name='msc' doc='Mobile Switching Center' />
- <param name='ho' doc='Hand-Over Process' />
- <param name='hodec' doc='Hand-Over Decision' />
- <param name='ref' doc='Reference Counting' />
- <param name='nat' doc='GSM 08.08 NAT/Multiplexer' />
- <param name='ctrl' doc='Control interface' />
- <param name='filter' doc='BSC/NAT IMSI based filtering' />
- <param name='pcu' doc='PCU Interface' />
- <param name='lcls' doc='Local Call, Local Switch' />
- <param name='chan' doc='lchan FSM' />
- <param name='ts' doc='timeslot FSM' />
- <param name='as' doc='assignment FSM' />
- <param name='lglobal' doc='Library-internal global log family' />
- <param name='llapd' doc='LAPD in libosmogsm' />
- <param name='linp' doc='A-bis Intput Subsystem' />
- <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
- <param name='lmi' doc='A-bis Input Driver for Signalling' />
- <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
- <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
- <param name='lctrl' doc='Control Interface' />
- <param name='lgtp' doc='GPRS GTP library' />
- <param name='lstats' doc='Statistics messages and logging' />
- <param name='lgsup' doc='Generic Subscriber Update Protocol' />
- <param name='loap' doc='Osmocom Authentication Protocol' />
- <param name='lss7' doc='libosmo-sigtran Signalling System 7' />
- <param name='lsccp' doc='libosmo-sigtran SCCP Implementation' />
- <param name='lsua' doc='libosmo-sigtran SCCP User Adaptation' />
- <param name='lm3ua' doc='libosmo-sigtran MTP3 User Adaptation' />
- <param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
- <param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level set-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='set-all' doc='Once-off set all categories to the given log level. There is no single command to take back these changes -- each category is set to the given level, period.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level force-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Globally force all logging categories to a specific level. This is released by the &apos;no logging level force-all&apos; command. Note: any &apos;logging level &lt;category&gt; &lt;level&gt;&apos; commands will have no visible effect after this, until the forced level is released.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='no logging level force-all'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
- </params>
- </command>
- <command id='show logging vty'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='logging' doc='Show current logging configuration' />
- <param name='vty' doc='Show current logging configuration for this vty' />
- </params>
- </command>
- <command id='show alarms'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='alarms' doc='Show current logging configuration' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH) tree ADDRESS'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- <param name='tree' doc='Display only a specific memory chunk' />
- <param name='ADDRESS' doc='Chunk address (e.g. 0xdeadbeef)' />
- </params>
- </command>
- <command id='show talloc-context (application|all) (full|brief|DEPTH) filter REGEXP'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='talloc-context' doc='Show talloc memory hierarchy' />
- <param name='application' doc='Application&apos;s context' />
- <param name='all' doc='All contexts, if NULL-context tracking is enabled' />
- <param name='full' doc='Display a full talloc memory hierarchy' />
- <param name='brief' doc='Display a brief talloc memory hierarchy' />
- <param name='DEPTH' doc='Specify required maximal depth value' />
- <param name='filter' doc='Filter chunks using regular expression' />
- <param name='REGEXP' doc='Regular expression' />
- </params>
- </command>
- <command id='show timer [TNNNN]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='timer' doc='GSM Timers' />
- <param name='[TNNNN]' doc='Specific timer to show, or all timers if omitted.' />
- </params>
- </command>
- <command id='show bts &lt;0-255&gt; neighbor arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='bts' doc='Display information about a BTS' />
- <param name='&lt;0-255&gt;' doc='BTS number' />
- <param name='neighbor' doc='Query which cell would be the target for this neighbor ARFCN+BSIC' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='drop bts connection &lt;0-65535&gt; (oml|rsl)'>
- <params>
- <param name='drop' doc='Debug/Simulation command to drop Abis/IP BTS' />
- <param name='bts' doc='Debug/Simulation command to drop Abis/IP BTS' />
- <param name='connection' doc='Debug/Simulation command to drop Abis/IP BTS' />
- <param name='&lt;0-65535&gt;' doc='BTS NR' />
- <param name='oml' doc='Drop OML Connection' />
- <param name='rsl' doc='Drop RSL Connection' />
- </params>
- </command>
- <command id='restart-bts &lt;0-65535&gt;'>
- <params>
- <param name='restart-bts' doc='Restart ip.access nanoBTS through OML' />
- <param name='&lt;0-65535&gt;' doc='BTS Number' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; resend-system-information'>
- <params>
- <param name='bts' doc='BTS Specific Commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='resend-system-information' doc='Re-generate + re-send BCCH SYSTEM INFORMATION' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; trx &lt;0-255&gt; timeslot &lt;0-7&gt; pdch (activate|deactivate)'>
- <params>
- <param name='bts' doc='BTS for manual command' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='trx' doc='TRX for manual command' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='timeslot' doc='Timeslot for manual command' />
- <param name='&lt;0-7&gt;' doc='Timeslot Number' />
- <param name='pdch' doc='Packet Data Channel' />
- <param name='activate' doc='Activate Dynamic PDCH/TCH (-&gt; PDCH mode)' />
- <param name='deactivate' doc='Deactivate Dynamic PDCH/TCH (-&gt; TCH mode)' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; trx &lt;0-255&gt; timeslot &lt;0-7&gt; sub-slot &lt;0-7&gt; (activate|deactivate) (hr|fr|efr|amr) [&lt;0-7&gt;]'>
- <params>
- <param name='bts' doc='BTS for manual command' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='trx' doc='TRX for manual command' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='timeslot' doc='Timeslot for manual command' />
- <param name='&lt;0-7&gt;' doc='Timeslot Number' />
- <param name='sub-slot' doc='Sub-slot for manual command' />
- <param name='&lt;0-7&gt;' doc='Sub-slot Number' />
- <param name='activate' doc='Manual Channel Activation (e.g. for BER test)' />
- <param name='deactivate' doc='Manual Channel Deactivation (e.g. for BER test)' />
- <param name='hr' doc='Half-Rate v1' />
- <param name='fr' doc='Full-Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multi-Rate' />
- <param name='[&lt;0-7&gt;]' doc='AMR Mode' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; trx &lt;0-255&gt; timeslot &lt;0-7&gt; sub-slot &lt;0-7&gt; mdcx A.B.C.D &lt;0-65535&gt;'>
- <params>
- <param name='bts' doc='BTS for manual command' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='trx' doc='TRX for manual command' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='timeslot' doc='Timeslot for manual command' />
- <param name='&lt;0-7&gt;' doc='Timeslot Number' />
- <param name='sub-slot' doc='Sub-slot for manual command' />
- <param name='&lt;0-7&gt;' doc='Sub-slot Number' />
- <param name='mdcx' doc='Modify RTP Connection' />
- <param name='A.B.C.D' doc='MGW IP Address' />
- <param name='&lt;0-65535&gt;' doc='MGW UDP Port' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; trx &lt;0-255&gt; timeslot &lt;0-7&gt; sub-slot &lt;0-7&gt; handover &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='BTS for manual command' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='trx' doc='TRX for manual command' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='timeslot' doc='Timeslot for manual command' />
- <param name='&lt;0-7&gt;' doc='Timeslot Number' />
- <param name='sub-slot' doc='Sub-slot for manual command' />
- <param name='&lt;0-7&gt;' doc='Sub-slot Number' />
- <param name='handover' doc='Manually trigger handover (for debugging)' />
- <param name='&lt;0-255&gt;' doc='New BTS Number' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; trx &lt;0-255&gt; timeslot &lt;0-7&gt; sub-slot &lt;0-7&gt; assignment'>
- <params>
- <param name='bts' doc='BTS for manual command' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='trx' doc='TRX for manual command' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='timeslot' doc='Timeslot for manual command' />
- <param name='&lt;0-7&gt;' doc='Timeslot Number' />
- <param name='sub-slot' doc='Sub-slot for manual command' />
- <param name='&lt;0-7&gt;' doc='Sub-slot Number' />
- <param name='assignment' doc='Manually trigger assignment (for debugging)' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; smscb-command &lt;1-4&gt; HEXSTRING'>
- <params>
- <param name='bts' doc='BTS related commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='smscb-command' doc='SMS Cell Broadcast' />
- <param name='&lt;1-4&gt;' doc='Last Valid Block' />
- <param name='HEXSTRING' doc='Hex Encoded SMSCB message (up to 88 octets)' />
- </params>
- </command>
- <command id='ctrl-interface generate-trap TRAP VALUE'>
- <params>
- <param name='ctrl-interface' doc='Commands related to the CTRL Interface' />
- <param name='generate-trap' doc='Generate a TRAP for test purpose' />
- <param name='TRAP' doc='Identity/Name of the TRAP variable' />
- <param name='VALUE' doc='Value of the TRAP variable' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; oml class (site-manager|bts|radio-carrier|baseband-transceiver|channel|adjc|handover|power-contorl|btse|rack|test|envabtse|bport|gprs-nse|gprs-cell|gprs-nsvc|siemenshw) instance &lt;0-255&gt; &lt;0-255&gt; &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='BTS related commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='oml' doc='Manipulate the OML managed objects' />
- <param name='class' doc='Object Class' />
- <param name='site-manager' doc='Site Manager Object' />
- <param name='bts' doc='BTS Object' />
- <param name='radio-carrier' doc='Radio Carrier Object' />
- <param name='baseband-transceiver' doc='Baseband Transceiver Object' />
- <param name='channel' doc='Channel (Timeslot) Object' />
- <param name='adjc' doc='Adjacent Object (Siemens)' />
- <param name='handover' doc='Handover Object (Siemens)' />
- <param name='power-contorl' doc='Power Control Object (Siemens)' />
- <param name='btse' doc='BTSE Object (Siemens)' />
- <param name='rack' doc='Rack Object (Siemens)' />
- <param name='test' doc='Test Object (Siemens)' />
- <param name='envabtse' doc='ENVABTSE Object (Siemens)' />
- <param name='bport' doc='BPORT Object (Siemens)' />
- <param name='gprs-nse' doc='GPRS NSE Object (ip.access/osmo-bts)' />
- <param name='gprs-cell' doc='GPRS Cell Object (ip.acecss/osmo-bts)' />
- <param name='gprs-nsvc' doc='GPRS NSVC Object (ip.acecss/osmo-bts)' />
- <param name='siemenshw' doc='SIEMENSHW Object (Siemens)' />
- <param name='instance' doc='Object Instance' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='&lt;0-255&gt;' doc='TS Number' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; oml class &lt;0-255&gt; instance &lt;0-255&gt; &lt;0-255&gt; &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='BTS related commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='oml' doc='Manipulate the OML managed objects' />
- <param name='class' doc='Object Class' />
- <param name='&lt;0-255&gt;' doc='Object Class' />
- <param name='instance' doc='Object Instance' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='&lt;0-255&gt;' doc='TRX Number' />
- <param name='&lt;0-255&gt;' doc='TS Number' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; om2000 class (trxc|ts|tf|is|con|dp|cf|tx|rx) &lt;0-255&gt; &lt;0-255&gt; &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='BTS related commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='om2000' doc='Manipulate the OM2000 managed objects' />
- <param name='class' doc='Object Class' />
- <param name='trxc' doc='TRX Controller' />
- <param name='ts' doc='Timeslot' />
- <param name='tf' doc='Timing Function' />
- <param name='is' doc='Interface Switch' />
- <param name='con' doc='Abis Concentrator' />
- <param name='dp' doc='Digital Path' />
- <param name='cf' doc='Central Function' />
- <param name='tx' doc='Transmitter' />
- <param name='rx' doc='Receiver' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='&lt;0-255&gt;' doc='Associated SO Instance' />
- <param name='&lt;0-255&gt;' doc='Instance Number' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt; om2000 class &lt;0-255&gt; &lt;0-255&gt; &lt;0-255&gt; &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='BTS related commands' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='om2000' doc='Manipulate the OML managed objects' />
- <param name='class' doc='Object Class' />
- <param name='&lt;0-255&gt;' doc='Object Class' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- <param name='&lt;0-255&gt;' doc='Associated SO Instance' />
- <param name='&lt;0-255&gt;' doc='Instance Number' />
- </params>
- </command>
- <command id='show e1_driver'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_driver' doc='Display information about available E1 drivers' />
- </params>
- </command>
- <command id='show e1_line [line_nr] [stats]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_line' doc='Display information about a E1 line' />
- <param name='[line_nr]' doc='E1 Line Number' />
- <param name='[stats]' doc='Include statistics' />
- </params>
- </command>
- <command id='show e1_timeslot [line_nr] [ts_nr]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='e1_timeslot' doc='Display information about a E1 timeslot' />
- <param name='[line_nr]' doc='E1 Line Number' />
- <param name='[ts_nr]' doc='E1 Timeslot Number' />
- </params>
- </command>
- <command id='show fsm NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm' doc='Show information about finite state machines' />
- <param name='NAME' doc='Display information about a single named finite state machine' />
- </params>
- </command>
- <command id='show fsm all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm' doc='Show information about finite state machines' />
- <param name='all' doc='Display a list of all registered finite state machines' />
- </params>
- </command>
- <command id='show fsm-instances NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm-instances' doc='Show information about finite state machine instances' />
- <param name='NAME' doc='Display a list of all FSM instances of the named finite state machine' />
- </params>
- </command>
- <command id='show fsm-instances all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='fsm-instances' doc='Show information about finite state machine instances' />
- <param name='all' doc='Display a list of all FSM instances of all finite state machine' />
- </params>
- </command>
- <command id='show statistics'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='statistics' doc='Statistics about the BSC' />
- </params>
- </command>
- <command id='show mscs'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='mscs' doc='MSC Connections and State' />
- </params>
- </command>
- <command id='show position'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='position' doc='Position information of the BTS' />
- </params>
- </command>
- <command id='logging filter imsi IMSI'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='imsi' doc='Filter log messages by IMSI' />
- <param name='IMSI' doc='IMSI to be used as filter' />
- </params>
- </command>
- <command id='show subscriber all'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='subscriber' doc='Display information about subscribers' />
- <param name='all' doc='All Subscribers' />
- </params>
- </command>
- <command id='generate-location-state-trap &lt;0-255&gt;'>
- <params>
- <param name='generate-location-state-trap' doc='Generate location state report' />
- <param name='&lt;0-255&gt;' doc='BTS to report' />
- </params>
- </command>
- <command id='show access-list NAME'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='access-list' doc='IMSI access list' />
- <param name='NAME' doc='Name of the access list' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; users'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='users' doc='User Table' />
- </params>
- </command>
- <command id='show cs7 (sua|m3ua|ipa) [&lt;0-65534&gt;]'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='sua' doc='SCCP User Adaptation' />
- <param name='m3ua' doc='MTP3 User Adaptation' />
- <param name='ipa' doc='IPA Multiplex (SCCP Lite)' />
- <param name='[&lt;0-65534&gt;]' doc='Port Number' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; asp'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='asp' doc='Application Server Process (ASP)' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; as (active|all|m3ua|sua)'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='as' doc='Application Server (AS)' />
- <param name='active' doc='Display all active ASs' />
- <param name='all' doc='Display all ASs (default)' />
- <param name='m3ua' doc='Display all m3ua ASs' />
- <param name='sua' doc='Display all SUA ASs' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp addressbook'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='addressbook' doc='List all SCCP addressbook entries' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp users'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='users' doc='Show List of SCCP Users registered' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp ssn &lt;0-65535&gt;'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='ssn' doc='Find an SCCP User registered for the given SSN' />
- <param name='&lt;0-65535&gt;' doc='Subsystem Number (SSN)' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp connections'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='connections' doc='Show List of active SCCP connections' />
- </params>
- </command>
- <command id='show cs7 instance &lt;0-15&gt; sccp timers'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='An instance of the SS7 stack' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- <param name='sccp' doc='Signaling Connection Control Part' />
- <param name='timers' doc='Show List of SCCP timers' />
- </params>
- </command>
- </node>
- <node id='config'>
- <name>config</name>
- <command id='hostname WORD'>
- <params>
- <param name='hostname' doc='Set system&apos;s network name' />
- <param name='WORD' doc='This system&apos;s network name' />
- </params>
- </command>
- <command id='no hostname [HOSTNAME]'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='hostname' doc='Reset system&apos;s network name' />
- <param name='[HOSTNAME]' doc='Host name of this router' />
- </params>
- </command>
- <command id='password (8|) WORD'>
- <params>
- <param name='password' doc='Assign the terminal connection password' />
- <param name='8' doc='Specifies a HIDDEN password will follow' />
- <param name='' doc='dummy string ' />
- <param name='WORD' doc='The HIDDEN line password string' />
- </params>
- </command>
- <command id='password LINE'>
- <params>
- <param name='password' doc='Assign the terminal connection password' />
- <param name='LINE' doc='The UNENCRYPTED (cleartext) line password' />
- </params>
- </command>
- <command id='enable password (8|) WORD'>
- <params>
- <param name='enable' doc='Modify enable password parameters' />
- <param name='password' doc='Assign the privileged level password' />
- <param name='8' doc='Specifies a HIDDEN password will follow' />
- <param name='' doc='dummy string ' />
- <param name='WORD' doc='The HIDDEN &apos;enable&apos; password string' />
- </params>
- </command>
- <command id='enable password LINE'>
- <params>
- <param name='enable' doc='Modify enable password parameters' />
- <param name='password' doc='Assign the privileged level password' />
- <param name='LINE' doc='The UNENCRYPTED (cleartext) &apos;enable&apos; password' />
- </params>
- </command>
- <command id='no enable password'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='enable' doc='Modify enable password parameters' />
- <param name='password' doc='Assign the privileged level password' />
- </params>
- </command>
- <command id='banner motd default'>
- <params>
- <param name='banner' doc='Set banner string' />
- <param name='motd' doc='Strings for motd' />
- <param name='default' doc='Default string' />
- </params>
- </command>
- <command id='banner motd file [FILE]'>
- <params>
- <param name='banner' doc='Set banner' />
- <param name='motd' doc='Banner for motd' />
- <param name='file' doc='Banner from a file' />
- <param name='[FILE]' doc='Filename' />
- </params>
- </command>
- <command id='no banner motd'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='banner' doc='Set banner string' />
- <param name='motd' doc='Strings for motd' />
- </params>
- </command>
- <command id='service terminal-length &lt;0-512&gt;'>
- <params>
- <param name='service' doc='Set up miscellaneous service' />
- <param name='terminal-length' doc='System wide terminal length configuration' />
- <param name='&lt;0-512&gt;' doc='Number of lines of VTY (0 means no line control)' />
- </params>
- </command>
- <command id='no service terminal-length [&lt;0-512&gt;]'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='service' doc='Set up miscellaneous service' />
- <param name='terminal-length' doc='System wide terminal length configuration' />
- <param name='[&lt;0-512&gt;]' doc='Number of lines of VTY (0 means no line control)' />
- </params>
- </command>
- <command id='line vty'>
- <params>
- <param name='line' doc='Configure a terminal line' />
- <param name='vty' doc='Virtual terminal' />
- </params>
- </command>
- <command id='service advanced-vty'>
- <params>
- <param name='service' doc='Set up miscellaneous service' />
- <param name='advanced-vty' doc='Enable advanced mode vty interface' />
- </params>
- </command>
- <command id='no service advanced-vty'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='service' doc='Set up miscellaneous service' />
- <param name='advanced-vty' doc='Enable advanced mode vty interface' />
- </params>
- </command>
- <command id='show history'>
- <params>
- <param name='show' doc='Show running system information' />
- <param name='history' doc='Display the session command history' />
- </params>
- </command>
- <command id='stats reporter statsd'>
- <params>
- <param name='stats' doc='Configure stats sub-system' />
- <param name='reporter' doc='Configure a stats reporter' />
- <param name='statsd' doc='Report to a STATSD server' />
- </params>
- </command>
- <command id='no stats reporter statsd'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='stats' doc='Configure stats sub-system' />
- <param name='reporter' doc='Configure a stats reporter' />
- <param name='statsd' doc='Report to a STATSD server' />
- </params>
- </command>
- <command id='stats reporter log'>
- <params>
- <param name='stats' doc='Configure stats sub-system' />
- <param name='reporter' doc='Configure a stats reporter' />
- <param name='log' doc='Report to the logger' />
- </params>
- </command>
- <command id='no stats reporter log'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='stats' doc='Configure stats sub-system' />
- <param name='reporter' doc='Configure a stats reporter' />
- <param name='log' doc='Report to the logger' />
- </params>
- </command>
- <command id='stats interval &lt;1-65535&gt;'>
- <params>
- <param name='stats' doc='Configure stats sub-system' />
- <param name='interval' doc='Set the reporting interval' />
- <param name='&lt;1-65535&gt;' doc='Interval in seconds' />
- </params>
- </command>
- <command id='network'>
- <params>
- <param name='network' doc='Configure the GSM network' />
- </params>
- </command>
- <command id='log stderr'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='stderr' doc='Logging via STDERR of the process' />
- </params>
- </command>
- <command id='no log stderr'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='log' doc='Configure logging sub-system' />
- <param name='stderr' doc='Logging via STDERR of the process' />
- </params>
- </command>
- <command id='log file .FILENAME'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='file' doc='Logging to text file' />
- <param name='.FILENAME' doc='Filename' />
- </params>
- </command>
- <command id='no log file .FILENAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='log' doc='Configure logging sub-system' />
- <param name='file' doc='Logging to text file' />
- <param name='.FILENAME' doc='Filename' />
- </params>
- </command>
- <command id='log alarms &lt;2-32700&gt;'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='alarms' doc='Logging alarms to osmo_strrb' />
- <param name='&lt;2-32700&gt;' doc='Maximum number of messages to log' />
- </params>
- </command>
- <command id='no log alarms'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='log' doc='Configure logging sub-system' />
- <param name='alarms' doc='Logging alarms to osmo_strrb' />
- </params>
- </command>
- <command id='log syslog (authpriv|cron|daemon|ftp|lpr|mail|news|user|uucp)'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='syslog' doc='Logging via syslog' />
- <param name='authpriv' doc='Security/authorization messages facility' />
- <param name='cron' doc='Clock daemon (cron/at) facility' />
- <param name='daemon' doc='General system daemon facility' />
- <param name='ftp' doc='Ftp daemon facility' />
- <param name='lpr' doc='Line printer facility' />
- <param name='mail' doc='Mail facility' />
- <param name='news' doc='News facility' />
- <param name='user' doc='Generic facility' />
- <param name='uucp' doc='UUCP facility' />
- </params>
- </command>
- <command id='log syslog local &lt;0-7&gt;'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='syslog' doc='Logging via syslog' />
- <param name='local' doc='Syslog LOCAL facility' />
- <param name='&lt;0-7&gt;' doc='Local facility number' />
- </params>
- </command>
- <command id='no log syslog'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='log' doc='Configure logging sub-system' />
- <param name='syslog' doc='Logging via syslog' />
- </params>
- </command>
- <command id='log gsmtap [HOSTNAME]'>
- <params>
- <param name='log' doc='Configure logging sub-system' />
- <param name='gsmtap' doc='Logging via GSMTAP' />
- <param name='[HOSTNAME]' doc='Host name to send the GSMTAP logging to (UDP port 4729)' />
- </params>
- </command>
- <command id='e1_input'>
- <params>
- <param name='e1_input' doc='Configure E1/T1/J1 TDM input' />
- </params>
- </command>
- <command id='msc [&lt;0-1000&gt;]'>
- <params>
- <param name='msc' doc='Configure MSC details' />
- <param name='[&lt;0-1000&gt;]' doc='MSC connection to configure' />
- </params>
- </command>
- <command id='bsc'>
- <params>
- <param name='bsc' doc='Configure BSC' />
- </params>
- </command>
- <command id='ctrl'>
- <params>
- <param name='ctrl' doc='Configure the Control Interface' />
- </params>
- </command>
- <command id='cs7 instance &lt;0-15&gt;'>
- <params>
- <param name='cs7' doc='ITU-T Signaling System 7' />
- <param name='instance' doc='Configure a SS7 Instance' />
- <param name='&lt;0-15&gt;' doc='An instance of the SS7 stack' />
- </params>
- </command>
- </node>
- <node id='config-log'>
- <name>config-log</name>
- <command id='logging filter all (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='all' doc='Do you want to log all messages?' />
- <param name='0' doc='Only print messages matched by other filters' />
- <param name='1' doc='Bypass filter and print all messages' />
- </params>
- </command>
- <command id='logging color (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='color' doc='Configure color-printing for log messages' />
- <param name='0' doc='Don&apos;t use color for printing messages' />
- <param name='1' doc='Use color for printing messages' />
- </params>
- </command>
- <command id='logging timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp' />
- </params>
- </command>
- <command id='logging print extended-timestamp (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='extended-timestamp' doc='Configure log message timestamping' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
- </params>
- </command>
- <command id='logging print category (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem name' />
- </params>
- </command>
- <command id='logging print category-hex (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='category-hex' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with category/subsystem nr in hex (&apos;&lt;000b&gt;&apos;)' />
- </params>
- </command>
- <command id='logging print level (0|1)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='level' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the log level name' />
- </params>
- </command>
- <command id='logging print file (0|1|basename) [last]'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='print' doc='Log output settings' />
- <param name='file' doc='Configure log message' />
- <param name='0' doc='Don&apos;t prefix each log message' />
- <param name='1' doc='Prefix each log message with the source file and line' />
- <param name='basename' doc='Prefix each log message with the source file&apos;s basename (strip leading paths) and line' />
- <param name='[last]' doc='Log source file info at the end of a log line. If omitted, log source file info just before the log text.' />
- </params>
- </command>
- <command id='logging level (rll|mm|rr|rsl|nm|pag|meas|msc|ho|hodec|ref|nat|ctrl|filter|pcu|lcls|chan|ts|as|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp|lstats|lgsup|loap|lss7|lsccp|lsua|lm3ua|lmgcp|ljibuf) (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
- <param name='mm' doc='Layer3 Mobility Management (MM)' />
- <param name='rr' doc='Layer3 Radio Resource (RR)' />
- <param name='rsl' doc='A-bis Radio Signalling Link (RSL)' />
- <param name='nm' doc='A-bis Network Management / O&amp;M (NM/OML)' />
- <param name='pag' doc='Paging Subsystem' />
- <param name='meas' doc='Radio Measurement Processing' />
- <param name='msc' doc='Mobile Switching Center' />
- <param name='ho' doc='Hand-Over Process' />
- <param name='hodec' doc='Hand-Over Decision' />
- <param name='ref' doc='Reference Counting' />
- <param name='nat' doc='GSM 08.08 NAT/Multiplexer' />
- <param name='ctrl' doc='Control interface' />
- <param name='filter' doc='BSC/NAT IMSI based filtering' />
- <param name='pcu' doc='PCU Interface' />
- <param name='lcls' doc='Local Call, Local Switch' />
- <param name='chan' doc='lchan FSM' />
- <param name='ts' doc='timeslot FSM' />
- <param name='as' doc='assignment FSM' />
- <param name='lglobal' doc='Library-internal global log family' />
- <param name='llapd' doc='LAPD in libosmogsm' />
- <param name='linp' doc='A-bis Intput Subsystem' />
- <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
- <param name='lmi' doc='A-bis Input Driver for Signalling' />
- <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
- <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
- <param name='lctrl' doc='Control Interface' />
- <param name='lgtp' doc='GPRS GTP library' />
- <param name='lstats' doc='Statistics messages and logging' />
- <param name='lgsup' doc='Generic Subscriber Update Protocol' />
- <param name='loap' doc='Osmocom Authentication Protocol' />
- <param name='lss7' doc='libosmo-sigtran Signalling System 7' />
- <param name='lsccp' doc='libosmo-sigtran SCCP Implementation' />
- <param name='lsua' doc='libosmo-sigtran SCCP User Adaptation' />
- <param name='lm3ua' doc='libosmo-sigtran MTP3 User Adaptation' />
- <param name='lmgcp' doc='libosmo-mgcp Media Gateway Control Protocol' />
- <param name='ljibuf' doc='libosmo-netif Jitter Buffer' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level set-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='set-all' doc='Once-off set all categories to the given log level. There is no single command to take back these changes -- each category is set to the given level, period.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='logging level force-all (debug|info|notice|error|fatal)'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Globally force all logging categories to a specific level. This is released by the &apos;no logging level force-all&apos; command. Note: any &apos;logging level &lt;category&gt; &lt;level&gt;&apos; commands will have no visible effect after this, until the forced level is released.' />
- <param name='debug' doc='Log debug messages and higher levels' />
- <param name='info' doc='Log informational messages and higher levels' />
- <param name='notice' doc='Log noticeable messages and higher levels' />
- <param name='error' doc='Log error messages and higher levels' />
- <param name='fatal' doc='Log only fatal messages' />
- </params>
- </command>
- <command id='no logging level force-all'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='logging' doc='Configure logging' />
- <param name='level' doc='Set the log level for a specified category' />
- <param name='force-all' doc='Release any globally forced log level set with &apos;logging level force-all &lt;level&gt;&apos;' />
- </params>
- </command>
- <command id='logging filter imsi IMSI'>
- <params>
- <param name='logging' doc='Configure logging' />
- <param name='filter' doc='Filter log messages' />
- <param name='imsi' doc='Filter log messages by IMSI' />
- <param name='IMSI' doc='IMSI to be used as filter' />
- </params>
- </command>
- </node>
- <node id='config-stats'>
- <name>config-stats</name>
- <command id='local-ip ADDR'>
- <params>
- <param name='local-ip' doc='Set the IP address to which we bind locally' />
- <param name='ADDR' doc='IP Address' />
- </params>
- </command>
- <command id='no local-ip'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='local-ip' doc='Set the IP address to which we bind locally' />
- </params>
- </command>
- <command id='remote-ip ADDR'>
- <params>
- <param name='remote-ip' doc='Set the remote IP address to which we connect' />
- <param name='ADDR' doc='IP Address' />
- </params>
- </command>
- <command id='remote-port &lt;1-65535&gt;'>
- <params>
- <param name='remote-port' doc='Set the remote port to which we connect' />
- <param name='&lt;1-65535&gt;' doc='Remote port number' />
- </params>
- </command>
- <command id='mtu &lt;100-65535&gt;'>
- <params>
- <param name='mtu' doc='Set the maximum packet size' />
- <param name='&lt;100-65535&gt;' doc='Size in byte' />
- </params>
- </command>
- <command id='no mtu'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='mtu' doc='Set the maximum packet size' />
- </params>
- </command>
- <command id='prefix PREFIX'>
- <params>
- <param name='prefix' doc='Set the item name prefix' />
- <param name='PREFIX' doc='The prefix string' />
- </params>
- </command>
- <command id='no prefix'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='prefix' doc='Set the item name prefix' />
- </params>
- </command>
- <command id='level (global|peer|subscriber)'>
- <params>
- <param name='level' doc='Set the maximum group level' />
- <param name='global' doc='Report global groups only' />
- <param name='peer' doc='Report global and network peer related groups' />
- <param name='subscriber' doc='Report global, peer, and subscriber groups' />
- </params>
- </command>
- <command id='enable'>
- <params>
- <param name='enable' doc='Enable the reporter' />
- </params>
- </command>
- <command id='disable'>
- <params>
- <param name='disable' doc='Disable the reporter' />
- </params>
- </command>
- </node>
- <node id='config-line'>
- <name>config-line</name>
- <command id='login'>
- <params>
- <param name='login' doc='Enable password checking' />
- </params>
- </command>
- <command id='no login'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='login' doc='Enable password checking' />
- </params>
- </command>
- <command id='bind A.B.C.D'>
- <params>
- <param name='bind' doc='Accept VTY telnet connections on local interface' />
- <param name='A.B.C.D' doc='Local interface IP address (default: 127.0.0.1)' />
- </params>
- </command>
- </node>
- <node id='config-e1_input'>
- <name>config-e1_input</name>
- <command id='e1_line &lt;0-255&gt; driver (misdn|misdn_lapd|dahdi|ipa|unixsocket)'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='driver' doc='Set driver for this line' />
- <param name='misdn' doc='mISDN supported E1 Card (kernel LAPD)' />
- <param name='misdn_lapd' doc='mISDN supported E1 Card (userspace LAPD)' />
- <param name='dahdi' doc='DAHDI supported E1/T1/J1 Card' />
- <param name='ipa' doc='IPA TCP/IP input' />
- <param name='unixsocket' doc='HSL TCP/IP input' />
- </params>
- </command>
- <command id='e1_line &lt;0-255&gt; port &lt;0-255&gt;'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='port' doc='Set physical port/span/card number' />
- <param name='&lt;0-255&gt;' doc='E1/T1 Port/Span/Card number' />
- </params>
- </command>
- <command id='e1_line &lt;0-255&gt; socket .SOCKET'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='socket' doc='Set socket path for unixsocket' />
- <param name='.SOCKET' doc='socket path' />
- </params>
- </command>
- <command id='e1_line &lt;0-255&gt; name .LINE'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='name' doc='Set name for this line' />
- <param name='.LINE' doc='Human readable name' />
- </params>
- </command>
- <command id='e1_line &lt;0-255&gt; keepalive'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='keepalive' doc='Enable keep-alive probing' />
- </params>
- </command>
- <command id='e1_line &lt;0-255&gt; keepalive &lt;1-300&gt; &lt;1-20&gt; &lt;1-300&gt;'>
- <params>
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='keepalive' doc='Enable keep-alive probing' />
- <param name='&lt;1-300&gt;' doc='Idle interval in seconds before probes are sent' />
- <param name='&lt;1-20&gt;' doc='Number of probes to sent' />
- <param name='&lt;1-300&gt;' doc='Delay between probe packets in seconds' />
- </params>
- </command>
- <command id='no e1_line &lt;0-255&gt; keepalive'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='e1_line' doc='Configure E1/T1/J1 Line' />
- <param name='&lt;0-255&gt;' doc='Line Number' />
- <param name='keepalive' doc='Enable keep-alive probing' />
- </params>
- </command>
- <command id='ipa bind A.B.C.D'>
- <params>
- <param name='ipa' doc='ipa driver config' />
- <param name='bind' doc='Set ipa local bind address' />
- <param name='A.B.C.D' doc='Listen on this IP address (default 0.0.0.0)' />
- </params>
- </command>
- </node>
- <node id='config-ctrl'>
- <name>config-ctrl</name>
- <command id='bind A.B.C.D'>
- <params>
- <param name='bind' doc='Set bind address to listen for Control connections' />
- <param name='A.B.C.D' doc='Local IP address (default 127.0.0.1)' />
- </params>
- </command>
- </node>
- <node id='config-cs7'>
- <name>config-cs7</name>
- <command id='description .TEXT'>
- <params>
- <param name='description' doc='Save human-readable description of the object' />
- <param name='.TEXT' doc='Text until the end of the line' />
- </params>
- </command>
- <command id='network-indicator (international | national | reserved | spare)'>
- <params>
- <param name='network-indicator' doc='Configure the Network Indicator' />
- <param name='international' doc='International Network' />
- <param name='national' doc='National Network' />
- <param name='reserved' doc='Reserved Network' />
- <param name='spare' doc='Spare Network' />
- </params>
- </command>
- <command id='point-code POINT_CODE'>
- <params>
- <param name='point-code' doc='Configure the local Point Code' />
- <param name='POINT_CODE' doc='Point Code' />
- </params>
- </command>
- <command id='point-code format &lt;1-24&gt; [&lt;1-23&gt;] [&lt;1-22&gt;]'>
- <params>
- <param name='point-code' doc='Point Code' />
- <param name='format' doc='Configure Point Code Format' />
- <param name='&lt;1-24&gt;' doc='Length of first PC component' />
- <param name='[&lt;1-23&gt;]' doc='Length of second PC component' />
- <param name='[&lt;1-22&gt;]' doc='Length of third PC component' />
- </params>
- </command>
- <command id='point-code format default'>
- <params>
- <param name='point-code' doc='Point Code' />
- <param name='format' doc='Configure Point Code Format' />
- <param name='default' doc='Default Point Code Format (3.8.3)' />
- </params>
- </command>
- <command id='point-code delimiter (default|dash)'>
- <params>
- <param name='point-code' doc='Point Code' />
- <param name='delimiter' doc='Configure Point Code Delimiter' />
- <param name='default' doc='Use dot as delimiter' />
- <param name='dash' doc='User dash as delimiter' />
- </params>
- </command>
- <command id='xua rkm routing-key-allocation (static-only|dynamic-permitted)'>
- <params>
- <param name='xua' doc='SIGTRAN xxxUA related' />
- <param name='rkm' doc='Routing Key Management' />
- <param name='routing-key-allocation' doc='Routing Key Management Allocation Policy' />
- <param name='static-only' doc='Only static (pre-confgured) Routing Keys permitted' />
- <param name='dynamic-permitted' doc='Dynamically allocate Routing Keys for what ASPs request' />
- </params>
- </command>
- <command id='asp NAME &lt;0-65535&gt; &lt;0-65535&gt; (sua|m3ua|ipa)'>
- <params>
- <param name='asp' doc='Configure Application Server Process' />
- <param name='NAME' doc='Name of ASP' />
- <param name='&lt;0-65535&gt;' doc='Remote SCTP port number' />
- <param name='&lt;0-65535&gt;' doc='Local SCTP port number' />
- <param name='sua' doc='SCCP User Adaptation' />
- <param name='m3ua' doc='MTP3 User Adaptation' />
- <param name='ipa' doc='IPA Multiplex (SCCP Lite)' />
- </params>
- </command>
- <command id='no asp NAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='asp' doc='Disable Application Server Process' />
- <param name='NAME' doc='Name of ASP' />
- </params>
- </command>
- <command id='as NAME (sua|m3ua|ipa)'>
- <params>
- <param name='as' doc='Configure an Application Server' />
- <param name='NAME' doc='Name of the Application Server' />
- <param name='sua' doc='SCCP User Adaptation' />
- <param name='m3ua' doc='MTP3 User Adaptation' />
- <param name='ipa' doc='IPA Multiplex (SCCP Lite)' />
- </params>
- </command>
- <command id='no as NAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='as' doc='Disable Application Server' />
- <param name='NAME' doc='Name of AS' />
- </params>
- </command>
- <command id='sccp-address NAME'>
- <params>
- <param name='sccp-address' doc='Create/Modify an SCCP addressbook entry' />
- <param name='NAME' doc='Name of the SCCP Address' />
- </params>
- </command>
- <command id='no sccp-address NAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='sccp-address' doc='Delete an SCCP addressbook entry' />
- <param name='NAME' doc='Name of the SCCP Address' />
- </params>
- </command>
- <command id='sccp-timer (conn_est|ias|iar|rel|repeat_rel|int|guard|reset|reassembly) &lt;1-999999&gt;'>
- <params>
- <param name='sccp-timer' doc='Configure SCCP timer values, see ITU-T Q.714' />
- <param name='conn_est' doc='Waiting for connection confirm message, 1 to 2 minutes (default: 60)' />
- <param name='ias' doc='Send keep-alive: on an idle connection, delay before sending an Idle Timer message, 5 to 10 minutes (default: 420)' />
- <param name='iar' doc='Receive keep-alive: on an idle connection, delay until considering a connection as stale, 11 to 21 minutes (default: 900)' />
- <param name='rel' doc='Waiting for release complete message, 10 to 20 seconds (default: 10)' />
- <param name='repeat_rel' doc='Waiting for release complete message; or to repeat sending released message after the initial expiry, 10 to 20 seconds (default: 10)' />
- <param name='int' doc='Waiting for release complete message; or to release connection resources, freeze the LRN and alert a maintenance function after the initial expiry, extending to 1 minute (default: 60)' />
- <param name='guard' doc='Waiting to resume normal procedure for temporary connection sections during the restart procedure, 23 to 25 minutes (default: 1380)' />
- <param name='reset' doc='Waiting to release temporary connection section or alert maintenance function after reset request message is sent, 10 to 20 seconds (default: 10)' />
- <param name='reassembly' doc='Waiting to receive all the segments of the remaining segments, single segmented message after receiving the first segment, 10 to 20 seconds (default: 10)' />
- <param name='&lt;1-999999&gt;' doc='Timer value, in seconds' />
- </params>
- </command>
- </node>
- <node id='config-cs7-as'>
- <name>config-cs7-as</name>
- <command id='description .TEXT'>
- <params>
- <param name='description' doc='Save human-readable description of the object' />
- <param name='.TEXT' doc='Text until the end of the line' />
- </params>
- </command>
- <command id='asp NAME'>
- <params>
- <param name='asp' doc='Specify that a given ASP is part of this AS' />
- <param name='NAME' doc='Name of ASP to be added to AS' />
- </params>
- </command>
- <command id='no asp NAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='asp' doc='Specify ASP to be removed from this AS' />
- <param name='NAME' doc='Name of ASP to be removed' />
- </params>
- </command>
- <command id='traffic-mode (broadcast | loadshare | roundrobin | override)'>
- <params>
- <param name='traffic-mode' doc='Specifies traffic mode of operation of the ASP within the AS' />
- <param name='broadcast' doc='Broadcast to all ASP within AS' />
- <param name='loadshare' doc='Share Load among all ASP within AS' />
- <param name='roundrobin' doc='Round-Robin between all ASP within AS' />
- <param name='override' doc='Override' />
- </params>
- </command>
- <command id='recovery-timeout &lt;1-2000&gt;'>
- <params>
- <param name='recovery-timeout' doc='Specifies the recovery timeout value in milliseconds' />
- <param name='&lt;1-2000&gt;' doc='Recovery Timeout in Milliseconds' />
- </params>
- </command>
- <command id='qos-class &lt;0-255&gt;'>
- <params>
- <param name='qos-class' doc='Specity QoS Class of AS' />
- <param name='&lt;0-255&gt;' doc='QoS Class of AS' />
- </params>
- </command>
- <command id='routing-key RCONTEXT DPC'>
- <params>
- <param name='routing-key' doc='Define a routing key' />
- <param name='RCONTEXT' doc='Routing context number' />
- <param name='DPC' doc='Destination Point Code' />
- </params>
- </command>
- <command id='routing-key RCONTEXT DPC si (aal2|bicc|b-isup|h248|isup|sat-isup|sccp|tup)'>
- <params>
- <param name='routing-key' doc='Define a routing key' />
- <param name='RCONTEXT' doc='Routing context number' />
- <param name='DPC' doc='Destination Point Code' />
- <param name='si' doc='Match on Service Indicator' />
- <param name='aal2' doc='ATM Adaption Layer 2' />
- <param name='bicc' doc='Bearer Independent Call Control' />
- <param name='b-isup' doc='Broadband ISDN User Part' />
- <param name='h248' doc='H.248' />
- <param name='isup' doc='ISDN User Part' />
- <param name='sat-isup' doc='Sattelite ISDN User Part' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='tup' doc='Telephony User Part' />
- </params>
- </command>
- <command id='routing-key RCONTEXT DPC ssn SSN'>
- <params>
- <param name='routing-key' doc='Define a routing key' />
- <param name='RCONTEXT' doc='Routing context number' />
- <param name='DPC' doc='Destination Point Code' />
- <param name='ssn' doc='Match on Sub-System Number' />
- <param name='SSN' doc='Sub-System Number to match on' />
- </params>
- </command>
- <command id='routing-key RCONTEXT DPC si (aal2|bicc|b-isup|h248|isup|sat-isup|sccp|tup) ssn SSN'>
- <params>
- <param name='routing-key' doc='Define a routing key' />
- <param name='RCONTEXT' doc='Routing context number' />
- <param name='DPC' doc='Destination Point Code' />
- <param name='si' doc='Match on Service Indicator' />
- <param name='aal2' doc='ATM Adaption Layer 2' />
- <param name='bicc' doc='Bearer Independent Call Control' />
- <param name='b-isup' doc='Broadband ISDN User Part' />
- <param name='h248' doc='H.248' />
- <param name='isup' doc='ISDN User Part' />
- <param name='sat-isup' doc='Sattelite ISDN User Part' />
- <param name='sccp' doc='Signalling Connection Control Part' />
- <param name='tup' doc='Telephony User Part' />
- <param name='ssn' doc='Match on Sub-System Number' />
- <param name='SSN' doc='Sub-System Number to match on' />
- </params>
- </command>
- <command id='point-code override dpc PC'>
- <params>
- <param name='point-code' doc='Point Code Specific Features' />
- <param name='override' doc='Override (force) a point-code to hard-coded value' />
- <param name='dpc' doc='Override Source Point Code' />
- <param name='PC' doc='Override Destination Point Code' />
- </params>
- </command>
- </node>
- <node id='config-cs7-asp'>
- <name>config-cs7-asp</name>
- <command id='description .TEXT'>
- <params>
- <param name='description' doc='Save human-readable description of the object' />
- <param name='.TEXT' doc='Text until the end of the line' />
- </params>
- </command>
- <command id='remote-ip A.B.C.D'>
- <params>
- <param name='remote-ip' doc='Specify Remote IP Address of ASP' />
- <param name='A.B.C.D' doc='Remote IP Address of ASP' />
- </params>
- </command>
- <command id='local-ip A.B.C.D'>
- <params>
- <param name='local-ip' doc='Specify Local IP Address from which to contact ASP' />
- <param name='A.B.C.D' doc='Local IP Address from which to contact of ASP' />
- </params>
- </command>
- <command id='qos-class &lt;0-255&gt;'>
- <params>
- <param name='qos-class' doc='Specify QoS Class of ASP' />
- <param name='&lt;0-255&gt;' doc='QoS Class of ASP' />
- </params>
- </command>
- <command id='block'>
- <params>
- <param name='block' doc='Allows a SCTP Association with ASP, but doesn&apos;t let it become active' />
- </params>
- </command>
- <command id='shutdown'>
- <params>
- <param name='shutdown' doc='Terminates SCTP association; New associations will be rejected' />
- </params>
- </command>
- </node>
- <node id='config-cs7-sccpaddr'>
- <name>config-cs7-sccpaddr</name>
- <command id='no point-code'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='point-code' doc='Remove point-code Number' />
- </params>
- </command>
- <command id='no subsystem-number'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='subsystem-number' doc='Remove Subsystem Number' />
- </params>
- </command>
- <command id='no global-title'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='global-title' doc='Remove Global Title' />
- </params>
- </command>
- <command id='routing-indicator (GT|PC|IP)'>
- <params>
- <param name='routing-indicator' doc='Add Routing Indicator' />
- <param name='GT' doc='by global-title' />
- <param name='PC' doc='by point-code' />
- <param name='IP' doc='by ip-address' />
- </params>
- </command>
- <command id='point-code POINT_CODE'>
- <params>
- <param name='point-code' doc='Add point-code Number' />
- <param name='POINT_CODE' doc='PC' />
- </params>
- </command>
- <command id='subsystem-number &lt;0-4294967295&gt;'>
- <params>
- <param name='subsystem-number' doc='Add Subsystem Number' />
- <param name='&lt;0-4294967295&gt;' doc='SSN' />
- </params>
- </command>
- <command id='global-title'>
- <params>
- <param name='global-title' doc='Add/Modify Global Title' />
- </params>
- </command>
- </node>
- <node id='config-cs7-sccpaddr-gt'>
- <name>config-cs7-sccpaddr-gt</name>
- <command id='global-title-indicator &lt;0-15&gt;'>
- <params>
- <param name='global-title-indicator' doc='Set Global Title Indicator' />
- <param name='&lt;0-15&gt;' doc='GTI' />
- </params>
- </command>
- <command id='translation-type &lt;0-255&gt;'>
- <params>
- <param name='translation-type' doc='Set Global Title Translation Type' />
- <param name='&lt;0-255&gt;' doc='TT' />
- </params>
- </command>
- <command id='numbering-plan-indicator &lt;0-15&gt;'>
- <params>
- <param name='numbering-plan-indicator' doc='Set Global Title Numbering Plan Indicator' />
- <param name='&lt;0-15&gt;' doc='NPI' />
- </params>
- </command>
- <command id='nature-of-address-indicator &lt;0-127&gt;'>
- <params>
- <param name='nature-of-address-indicator' doc='Set Global Title Nature of Address Indicator' />
- <param name='&lt;0-127&gt;' doc='NAI' />
- </params>
- </command>
- <command id='digits DIGITS'>
- <params>
- <param name='digits' doc='Set Global Title Digits' />
- <param name='DIGITS' doc='Number digits' />
- </params>
- </command>
- </node>
- <node id='config-net'>
- <name>config-net</name>
- <command id='network country code &lt;1-999&gt;'>
- <params>
- <param name='network' doc='Set the GSM network country code' />
- <param name='country' doc='Country commands' />
- <param name='code' doc='Code commands' />
- <param name='&lt;1-999&gt;' doc='Network Country Code to use' />
- </params>
- </command>
- <command id='mobile network code &lt;0-999&gt;'>
- <params>
- <param name='mobile' doc='Set the GSM mobile network code' />
- <param name='network' doc='Network Commands' />
- <param name='code' doc='Code commands' />
- <param name='&lt;0-999&gt;' doc='Mobile Network Code to use' />
- </params>
- </command>
- <command id='encryption a5 &lt;0-3&gt; [&lt;0-3&gt;] [&lt;0-3&gt;] [&lt;0-3&gt;]'>
- <params>
- <param name='encryption' doc='Encryption options' />
- <param name='a5' doc='GSM A5 Air Interface Encryption' />
- <param name='&lt;0-3&gt;' doc='A5/n Algorithm Number' />
- <param name='[&lt;0-3&gt;]' doc='A5/n Algorithm Number' />
- <param name='[&lt;0-3&gt;]' doc='A5/n Algorithm Number' />
- <param name='[&lt;0-3&gt;]' doc='A5/n Algorithm Number' />
- </params>
- </command>
- <command id='timezone &lt;-19-19&gt; (0|15|30|45)'>
- <params>
- <param name='timezone' doc='Set the Timezone Offset of the network' />
- <param name='&lt;-19-19&gt;' doc='Timezone offset (hours)' />
- <param name='0' doc='Timezone offset (00 minutes)' />
- <param name='15' doc='Timezone offset (15 minutes)' />
- <param name='30' doc='Timezone offset (30 minutes)' />
- <param name='45' doc='Timezone offset (45 minutes)' />
- </params>
- </command>
- <command id='timezone &lt;-19-19&gt; (0|15|30|45) &lt;0-2&gt;'>
- <params>
- <param name='timezone' doc='Set the Timezone Offset of the network' />
- <param name='&lt;-19-19&gt;' doc='Timezone offset (hours)' />
- <param name='0' doc='Timezone offset (00 minutes)' />
- <param name='15' doc='Timezone offset (15 minutes)' />
- <param name='30' doc='Timezone offset (30 minutes)' />
- <param name='45' doc='Timezone offset (45 minutes)' />
- <param name='&lt;0-2&gt;' doc='DST offset (hours)' />
- </params>
- </command>
- <command id='no timezone'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='timezone' doc='Disable network timezone override, use system tz' />
- </params>
- </command>
- <command id='periodic location update &lt;6-1530&gt;'>
- <params>
- <param name='periodic' doc='Periodic Location Updating Interval' />
- <param name='location' doc='Periodic Location Updating Interval' />
- <param name='update' doc='Periodic Location Updating Interval' />
- <param name='&lt;6-1530&gt;' doc='Periodic Location Updating Interval in Minutes' />
- </params>
- </command>
- <command id='no periodic location update'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='periodic' doc='Periodic Location Updating Interval' />
- <param name='location' doc='Periodic Location Updating Interval' />
- <param name='update' doc='Periodic Location Updating Interval' />
- </params>
- </command>
- <command id='meas-feed destination ADDR &lt;0-65535&gt;'>
- <params>
- <param name='meas-feed' doc='Measurement Report export' />
- <param name='destination' doc='Where to forward Measurement Report feeds' />
- <param name='ADDR' doc='address or hostname' />
- <param name='&lt;0-65535&gt;' doc='port number' />
- </params>
- </command>
- <command id='meas-feed scenario NAME'>
- <params>
- <param name='meas-feed' doc='Measurement Report export' />
- <param name='scenario' doc='Set a name to include in the Measurement Report feeds' />
- <param name='NAME' doc='Name string, up to 31 characters' />
- </params>
- </command>
- <command id='timer TNNNN (default|&lt;1-65535&gt;)'>
- <params>
- <param name='timer' doc='Configure GSM Timers' />
- <param name='TNNNN' doc='T-number, optionally preceded by &apos;t&apos; or &apos;T&apos;.See also &apos;show timer&apos; for a list of available timers.' />
- <param name='default' doc='Set to default timer value' />
- <param name='&lt;1-65535&gt;' doc='Timer value' />
- </params>
- </command>
- <command id='neci (0|1)'>
- <params>
- <param name='neci' doc='New Establish Cause Indication' />
- <param name='0' doc='Don&apos;t set the NECI bit' />
- <param name='1' doc='Set the NECI bit' />
- </params>
- </command>
- <command id='paging any use tch (0|1)'>
- <params>
- <param name='paging' doc='Assign a TCH when receiving a Paging Any request' />
- <param name='any' doc='Any Channel' />
- <param name='use' doc='Use' />
- <param name='tch' doc='TCH' />
- <param name='0' doc='Do not use TCH for Paging Request Any' />
- <param name='1' doc='Do use TCH for Paging Request Any' />
- </params>
- </command>
- <command id='bts &lt;0-255&gt;'>
- <params>
- <param name='bts' doc='Select a BTS to configure' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- </params>
- </command>
- <command id='handover (0|1|default)'>
- <params>
- <param name='handover' doc='Handover general config' />
- <param name='0' doc='Disable in-call handover' />
- <param name='1' doc='Enable in-call handover' />
- <param name='default' doc='Enable/disable handover: Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover algorithm (1|2|default)'>
- <params>
- <param name='handover' doc='Handover general config' />
- <param name='algorithm' doc='Choose algorithm for handover decision' />
- <param name='1' doc='Algorithm 1: trigger handover based on comparing current cell and neighbor RxLev and RxQual, only.' />
- <param name='2' doc='Algorithm 2: trigger handover on RxLev/RxQual, and also to balance the load across several cells. Consider available codecs. Prevent repeated handover by penalty timers.' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxlev averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='averaging' doc='How many RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxqual averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxqual' doc='Received-Quality averaging' />
- <param name='averaging' doc='How many RxQual measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxQual averaging: Number of values to average over' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxlev neighbor averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='neighbor' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='averaging' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='Neighbor RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 power budget interval (&lt;1-99&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='interval' doc='How often to check for a better cell (SACCH frames)' />
- <param name='&lt;1-99&gt;' doc='Check for stronger neighbor every N number of SACCH frames' />
- <param name='default' doc='Use default (6), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 power budget hysteresis (&lt;0-999&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='hysteresis' doc='How many dB stronger must a neighbor be to become a HO candidate' />
- <param name='&lt;0-999&gt;' doc='Neighbor&apos;s strength difference in dB' />
- <param name='default' doc='Use default (3), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 maximum distance (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='maximum' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='distance' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='&lt;0-9999&gt;' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxlev averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='averaging' doc='How many RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxqual averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxqual' doc='Received-Quality averaging' />
- <param name='averaging' doc='How many RxQual measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxQual averaging: Number of values to average over' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxlev neighbor averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='neighbor' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='averaging' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='Neighbor RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 power budget interval (&lt;1-99&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='interval' doc='How often to check for a better cell (SACCH frames)' />
- <param name='&lt;1-99&gt;' doc='Check for stronger neighbor every N number of SACCH frames' />
- <param name='default' doc='Use default (6), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 power budget hysteresis (&lt;0-999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='hysteresis' doc='How many dB stronger must a neighbor be to become a HO candidate' />
- <param name='&lt;0-999&gt;' doc='Neighbor&apos;s strength difference in dB' />
- <param name='default' doc='Use default (3), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 maximum distance (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='maximum' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='distance' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='&lt;0-9999&gt;' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 assignment (0|1|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='assignment' doc='Enable or disable in-call channel re-assignment' />
- <param name='0' doc='Disable in-call assignment' />
- <param name='1' doc='Enable in-call assignment' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 tdma-measurement (full|subset|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='tdma-measurement' doc='Define measurement set of TDMA frames' />
- <param name='full' doc='Full set of 102/104 TDMA frames' />
- <param name='subset' doc='Sub set of 4 TDMA frames (SACCH)' />
- <param name='default' doc='Use default (subset), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min rxlev (&lt;-110--50&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min' doc='Minimum Level/Quality thresholds before triggering HO' />
- <param name='rxlev' doc='How weak may RxLev of an MS become before triggering HO' />
- <param name='&lt;-110--50&gt;' doc='minimum RxLev (dBm)' />
- <param name='default' doc='Use default (-100), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min rxqual (&lt;0-7&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min' doc='Minimum Level/Quality thresholds before triggering HO' />
- <param name='rxqual' doc='How bad may RxQual of an MS become before triggering HO' />
- <param name='&lt;0-7&gt;' doc='minimum RxQual' />
- <param name='default' doc='Use default (5), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 afs-bias rxlev (&lt;0-20&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='afs-bias' doc='Configure bias to prefer AFS (AMR on TCH/F) over other codecs' />
- <param name='rxlev' doc='RxLev improvement bias for AFS over other codecs' />
- <param name='&lt;0-20&gt;' doc='Virtual RxLev improvement (dB)' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 afs-bias rxqual (&lt;0-7&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='afs-bias' doc='Configure bias to prefer AFS (AMR on TCH/F) over other codecs' />
- <param name='rxqual' doc='RxQual improvement bias for AFS over other codecs' />
- <param name='&lt;0-7&gt;' doc='Virtual RxQual improvement' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min-free-slots tch/f (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min-free-slots' doc='Minimum free TCH timeslots before cell is considered congested' />
- <param name='tch/f' doc='Minimum free TCH/F timeslots before cell is considered congested' />
- <param name='&lt;0-9999&gt;' doc='Number of TCH/F slots' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min-free-slots tch/h (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min-free-slots' doc='Minimum free TCH timeslots before cell is considered congested' />
- <param name='tch/h' doc='Minimum free TCH/H timeslots before cell is considered congested' />
- <param name='&lt;0-9999&gt;' doc='Number of TCH/H slots' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 max-handovers (&lt;1-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='max-handovers' doc='Maximum number of concurrent handovers allowed per cell' />
- <param name='&lt;1-9999&gt;' doc='Number' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time max-distance (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='max-distance' doc='Time to suspend handovers after leaving this cell due to exceeding max distance' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (300), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time failed-ho (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='failed-ho' doc='Time to suspend handovers after handover failure to this cell' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (60), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time failed-assignment (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='failed-assignment' doc='Time to suspend handovers after assignment failure in this cell' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (60), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 retries (&lt;0-9&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='retries' doc='Immediately retry on handover/assignment failure' />
- <param name='&lt;0-9&gt;' doc='Number of retries' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 congestion-check (disabled|&lt;1-999&gt;|now)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='congestion-check' doc='Configure congestion check interval' />
- <param name='disabled' doc='Disable congestion checking, do not handover based on cell overload' />
- <param name='&lt;1-999&gt;' doc='Congestion check interval in seconds (default 10)' />
- <param name='now' doc='Manually trigger a congestion check to run right now' />
- </params>
- </command>
- </node>
- <node id='config-net-bts'>
- <name>config-net-bts</name>
- <command id='type (unknown|bs11|nanobts|rbs2000|nokia_site|sysmobts)'>
- <params>
- <param name='type' doc='BTS Vendor/Type' />
- <param name='unknown' doc='Unknown BTS Type' />
- <param name='bs11' doc='Siemens BTS (BS-11 or compatible)' />
- <param name='nanobts' doc='ip.access nanoBTS or compatible' />
- <param name='rbs2000' doc='Ericsson RBS2000 Series' />
- <param name='nokia_site' doc='Nokia {Metro,Ultra,In}Site' />
- <param name='sysmobts' doc='sysmocom sysmoBTS' />
- </params>
- </command>
- <command id='description .TEXT'>
- <params>
- <param name='description' doc='Save human-readable description of the object' />
- <param name='.TEXT' doc='Text until the end of the line' />
- </params>
- </command>
- <command id='no description'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='description' doc='Remove description of the object' />
- </params>
- </command>
- <command id='band BAND'>
- <params>
- <param name='band' doc='Set the frequency band of this BTS' />
- <param name='BAND' doc='Frequency band' />
- </params>
- </command>
- <command id='cell_identity &lt;0-65535&gt;'>
- <params>
- <param name='cell_identity' doc='Set the Cell identity of this BTS' />
- <param name='&lt;0-65535&gt;' doc='Cell Identity' />
- </params>
- </command>
- <command id='dtx uplink [force]'>
- <params>
- <param name='dtx' doc='Configure discontinuous transmission' />
- <param name='uplink' doc='Enable Uplink DTX for this BTS' />
- <param name='[force]' doc='MS &apos;shall&apos; use DTXu instead of &apos;may&apos; use (might not be supported by older phones).' />
- </params>
- </command>
- <command id='dtx downlink'>
- <params>
- <param name='dtx' doc='Configure discontinuous transmission' />
- <param name='downlink' doc='Enable Downlink DTX for this BTS' />
- </params>
- </command>
- <command id='no dtx uplink'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='dtx' doc='Configure discontinuous transmission' />
- <param name='uplink' doc='Disable Uplink DTX for this BTS' />
- </params>
- </command>
- <command id='no dtx downlink'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='dtx' doc='Configure discontinuous transmission' />
- <param name='downlink' doc='Disable Downlink DTX for this BTS' />
- </params>
- </command>
- <command id='location_area_code &lt;0-65535&gt;'>
- <params>
- <param name='location_area_code' doc='Set the Location Area Code (LAC) of this BTS' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- </params>
- </command>
- <command id='base_station_id_code &lt;0-63&gt;'>
- <params>
- <param name='base_station_id_code' doc='Set the Base Station Identity Code (BSIC) of this BTS' />
- <param name='&lt;0-63&gt;' doc='BSIC of this BTS' />
- </params>
- </command>
- <command id='ip.access unit_id &lt;0-65534&gt; &lt;0-255&gt;'>
- <params>
- <param name='ip.access' doc='Abis/IP specific options' />
- <param name='unit_id' doc='Set the IPA BTS Unit ID' />
- <param name='&lt;0-65534&gt;' doc='Unit ID (Site)' />
- <param name='&lt;0-255&gt;' doc='Unit ID (BTS)' />
- </params>
- </command>
- <command id='ip.access rsl-ip A.B.C.D'>
- <params>
- <param name='ip.access' doc='Abis/IP specific options' />
- <param name='rsl-ip' doc='Set the IPA RSL IP Address of the BSC' />
- <param name='A.B.C.D' doc='Destination IP address for RSL connection' />
- </params>
- </command>
- <command id='nokia_site skip-reset (0|1)'>
- <params>
- <param name='nokia_site' doc='Nokia *Site related commands' />
- <param name='skip-reset' doc='Skip the reset step during bootstrap process of this BTS' />
- <param name='0' doc='Do NOT skip the reset' />
- <param name='1' doc='Skip the reset' />
- </params>
- </command>
- <command id='nokia_site no-local-rel-conf (0|1)'>
- <params>
- <param name='nokia_site' doc='Nokia *Site related commands' />
- <param name='no-local-rel-conf' doc='Do not wait for RELease CONFirm message when releasing channel locally' />
- <param name='0' doc='Wait for RELease CONFirm' />
- <param name='1' doc='Do not wait for RELease CONFirm' />
- </params>
- </command>
- <command id='nokia_site bts-reset-timer &lt;15-100&gt;'>
- <params>
- <param name='nokia_site' doc='Nokia *Site related commands' />
- <param name='bts-reset-timer' doc='The amount of time (in sec.) between BTS_RESET is sent,' />
- <param name='&lt;15-100&gt;' doc='and the BTS is being bootstrapped.' />
- </params>
- </command>
- <command id='oml ip.access stream_id &lt;0-255&gt; line E1_LINE'>
- <params>
- <param name='oml' doc='Organization &amp; Maintenance Link' />
- <param name='ip.access' doc='A-bis/IP Specific Options' />
- <param name='stream_id' doc='Set the ip.access Stream ID of the OML link of this BTS' />
- <param name='&lt;0-255&gt;' doc='Stream Identifier' />
- <param name='line' doc='Virtual E1 Line Number' />
- <param name='E1_LINE' doc='Virtual E1 Line Number' />
- </params>
- </command>
- <command id='oml e1 line E1_LINE timeslot &lt;1-31&gt; sub-slot (0|1|2|3|full)'>
- <params>
- <param name='oml' doc='Organization &amp; Maintenance Link' />
- <param name='e1' doc='OML E1/T1 Configuration' />
- <param name='line' doc='E1/T1 line number to be used for OML' />
- <param name='E1_LINE' doc='E1/T1 line number to be used for OML' />
- <param name='timeslot' doc='E1/T1 timeslot to be used for OML' />
- <param name='&lt;1-31&gt;' doc='E1/T1 timeslot to be used for OML' />
- <param name='sub-slot' doc='E1/T1 sub-slot to be used for OML' />
- <param name='0' doc='Use E1/T1 sub-slot 0' />
- <param name='1' doc='Use E1/T1 sub-slot 1' />
- <param name='2' doc='Use E1/T1 sub-slot 2' />
- <param name='3' doc='Use E1/T1 sub-slot 3' />
- <param name='full' doc='Use full E1 slot 3' />
- </params>
- </command>
- <command id='oml e1 tei &lt;0-63&gt;'>
- <params>
- <param name='oml' doc='Organization &amp; Maintenance Link' />
- <param name='e1' doc='OML E1/T1 Configuration' />
- <param name='tei' doc='Set the TEI to be used for OML' />
- <param name='&lt;0-63&gt;' doc='TEI Number' />
- </params>
- </command>
- <command id='channel allocator (ascending|descending)'>
- <params>
- <param name='channel' doc='Channnel Allocator' />
- <param name='allocator' doc='Channel Allocator' />
- <param name='ascending' doc='Allocate Timeslots and Transceivers in ascending order' />
- <param name='descending' doc='Allocate Timeslots and Transceivers in descending order' />
- </params>
- </command>
- <command id='rach tx integer &lt;0-15&gt;'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='tx' doc='Set the raw tx integer value in RACH Control parameters IE' />
- <param name='integer' doc='Set the raw tx integer value in RACH Control parameters IE' />
- <param name='&lt;0-15&gt;' doc='Raw tx integer value in RACH Control parameters IE' />
- </params>
- </command>
- <command id='rach max transmission (1|2|4|7)'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='max' doc='Set the maximum number of RACH burst transmissions' />
- <param name='transmission' doc='Set the maximum number of RACH burst transmissions' />
- <param name='1' doc='Maximum number of 1 RACH burst transmissions' />
- <param name='2' doc='Maximum number of 2 RACH burst transmissions' />
- <param name='4' doc='Maximum number of 4 RACH burst transmissions' />
- <param name='7' doc='Maximum number of 7 RACH burst transmissions' />
- </params>
- </command>
- <command id='channel-descrption attach (0|1)'>
- <params>
- <param name='channel-descrption' doc='Channel Description' />
- <param name='attach' doc='Set if attachment is required' />
- <param name='0' doc='Attachment is NOT required' />
- <param name='1' doc='Attachment is required (standard)' />
- </params>
- </command>
- <command id='channel-descrption bs-pa-mfrms &lt;2-9&gt;'>
- <params>
- <param name='channel-descrption' doc='Channel Description' />
- <param name='bs-pa-mfrms' doc='Set number of multiframe periods for paging groups' />
- <param name='&lt;2-9&gt;' doc='Number of multiframe periods for paging groups' />
- </params>
- </command>
- <command id='channel-descrption bs-ag-blks-res &lt;0-7&gt;'>
- <params>
- <param name='channel-descrption' doc='Channel Description' />
- <param name='bs-ag-blks-res' doc='Set number of blocks reserved for access grant' />
- <param name='&lt;0-7&gt;' doc='Number of blocks reserved for access grant' />
- </params>
- </command>
- <command id='rach nm busy threshold &lt;0-255&gt;'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='nm' doc='Network Management' />
- <param name='busy' doc='Set the NM Busy Threshold' />
- <param name='threshold' doc='Set the NM Busy Threshold' />
- <param name='&lt;0-255&gt;' doc='NM Busy Threshold in dB' />
- </params>
- </command>
- <command id='rach nm load average &lt;0-65535&gt;'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='nm' doc='Network Management' />
- <param name='load' doc='Set the NM Loadaverage Slots value' />
- <param name='average' doc='Set the NM Loadaverage Slots value' />
- <param name='&lt;0-65535&gt;' doc='NM Loadaverage Slots value' />
- </params>
- </command>
- <command id='cell barred (0|1)'>
- <params>
- <param name='cell' doc='Should this cell be barred from access?' />
- <param name='barred' doc='Should this cell be barred from access?' />
- <param name='0' doc='Cell should NOT be barred' />
- <param name='1' doc='Cell should be barred' />
- </params>
- </command>
- <command id='rach emergency call allowed (0|1)'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='emergency' doc='Should this cell allow emergency calls?' />
- <param name='call' doc='Should this cell allow emergency calls?' />
- <param name='allowed' doc='Should this cell allow emergency calls?' />
- <param name='0' doc='Do NOT allow emergency calls' />
- <param name='1' doc='Allow emergency calls' />
- </params>
- </command>
- <command id='rach access-control-class (0|1|2|3|4|5|6|7|8|9|11|12|13|14|15) (barred|allowed)'>
- <params>
- <param name='rach' doc='Random Access Control Channel' />
- <param name='access-control-class' doc='Set access control class' />
- <param name='0' doc='Access control class 0' />
- <param name='1' doc='Access control class 1' />
- <param name='2' doc='Access control class 2' />
- <param name='3' doc='Access control class 3' />
- <param name='4' doc='Access control class 4' />
- <param name='5' doc='Access control class 5' />
- <param name='6' doc='Access control class 6' />
- <param name='7' doc='Access control class 7' />
- <param name='8' doc='Access control class 8' />
- <param name='9' doc='Access control class 9' />
- <param name='11' doc='Access control class 11 for PLMN use' />
- <param name='12' doc='Access control class 12 for security services' />
- <param name='13' doc='Access control class 13 for public utilities (e.g. water/gas suppliers)' />
- <param name='14' doc='Access control class 14 for emergency services' />
- <param name='15' doc='Access control class 15 for PLMN staff' />
- <param name='barred' doc='barred to use access control class' />
- <param name='allowed' doc='allowed to use access control class' />
- </params>
- </command>
- <command id='ms max power &lt;0-40&gt;'>
- <params>
- <param name='ms' doc='MS Options' />
- <param name='max' doc='Maximum transmit power of the MS' />
- <param name='power' doc='Maximum transmit power of the MS' />
- <param name='&lt;0-40&gt;' doc='Maximum transmit power of the MS in dBm' />
- </params>
- </command>
- <command id='cell reselection hysteresis &lt;0-14&gt;'>
- <params>
- <param name='cell' doc='Cell Parameters' />
- <param name='reselection' doc='Cell re-selection parameters' />
- <param name='hysteresis' doc='Cell Re-Selection Hysteresis in dB' />
- <param name='&lt;0-14&gt;' doc='Cell Re-Selection Hysteresis in dB' />
- </params>
- </command>
- <command id='rxlev access min &lt;0-63&gt;'>
- <params>
- <param name='rxlev' doc='Minimum RxLev needed for cell access' />
- <param name='access' doc='Minimum RxLev needed for cell access' />
- <param name='min' doc='Minimum RxLev needed for cell access' />
- <param name='&lt;0-63&gt;' doc='Minimum RxLev needed for cell access (better than -110dBm)' />
- </params>
- </command>
- <command id='cell bar qualify (0|1)'>
- <params>
- <param name='cell' doc='Cell Parameters' />
- <param name='bar' doc='Cell Bar Qualify' />
- <param name='qualify' doc='Cell Bar Qualify' />
- <param name='0' doc='Set CBQ to 0' />
- <param name='1' doc='Set CBQ to 1' />
- </params>
- </command>
- <command id='cell reselection offset &lt;0-126&gt;'>
- <params>
- <param name='cell' doc='Cell Parameters' />
- <param name='reselection' doc='Cell Re-Selection Parameters' />
- <param name='offset' doc='Cell Re-Selection Offset (CRO) in dB' />
- <param name='&lt;0-126&gt;' doc='Cell Re-Selection Offset (CRO) in dB' />
- </params>
- </command>
- <command id='temporary offset &lt;0-60&gt;'>
- <params>
- <param name='temporary' doc='Cell selection temporary negative offset' />
- <param name='offset' doc='Cell selection temporary negative offset' />
- <param name='&lt;0-60&gt;' doc='Cell selection temporary negative offset in dB' />
- </params>
- </command>
- <command id='temporary offset infinite'>
- <params>
- <param name='temporary' doc='Cell selection temporary negative offset' />
- <param name='offset' doc='Cell selection temporary negative offset' />
- <param name='infinite' doc='Sets cell selection temporary negative offset to infinity' />
- </params>
- </command>
- <command id='penalty time &lt;20-620&gt;'>
- <params>
- <param name='penalty' doc='Cell selection penalty time' />
- <param name='time' doc='Cell selection penalty time' />
- <param name='&lt;20-620&gt;' doc='Cell selection penalty time in seconds (by 20s increments)' />
- </params>
- </command>
- <command id='penalty time reserved'>
- <params>
- <param name='penalty' doc='Cell selection penalty time' />
- <param name='time' doc='Cell selection penalty time' />
- <param name='reserved' doc='Set cell selection penalty time to reserved value 31, (indicate that CELL_RESELECT_OFFSET is subtracted from C2 and TEMPORARY_OFFSET is ignored)' />
- </params>
- </command>
- <command id='radio-link-timeout &lt;4-64&gt;'>
- <params>
- <param name='radio-link-timeout' doc='Radio link timeout criterion (BTS side)' />
- <param name='&lt;4-64&gt;' doc='Radio link timeout value (lost SACCH block)' />
- </params>
- </command>
- <command id='radio-link-timeout infinite'>
- <params>
- <param name='radio-link-timeout' doc='Radio link timeout criterion (BTS side)' />
- <param name='infinite' doc='Infinite Radio link timeout value (use only for BTS RF testing)' />
- </params>
- </command>
- <command id='gprs mode (none|gprs|egprs)'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='mode' doc='GPRS Mode for this BTS' />
- <param name='none' doc='GPRS Disabled on this BTS' />
- <param name='gprs' doc='GPRS Enabled on this BTS' />
- <param name='egprs' doc='EGPRS (EDGE) Enabled on this BTS' />
- </params>
- </command>
- <command id='gprs 11bit_rach_support_for_egprs (0|1)'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='11bit_rach_support_for_egprs' doc='11 bit RACH options' />
- <param name='0' doc='Disable 11 bit RACH for EGPRS' />
- <param name='1' doc='Enable 11 bit RACH for EGPRS' />
- </params>
- </command>
- <command id='gprs ns timer (tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries) &lt;0-255&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='ns' doc='Network Service' />
- <param name='timer' doc='Network Service Timer' />
- <param name='tns-block' doc='(un)blocking Timer (Tns-block) timeout' />
- <param name='tns-block-retries' doc='(un)blocking Timer (Tns-block) number of retries' />
- <param name='tns-reset' doc='Reset Timer (Tns-reset) timeout' />
- <param name='tns-reset-retries' doc='Reset Timer (Tns-reset) number of retries' />
- <param name='tns-test' doc='Test Timer (Tns-test) timeout' />
- <param name='tns-alive' doc='Alive Timer (Tns-alive) timeout' />
- <param name='tns-alive-retries' doc='Alive Timer (Tns-alive) number of retries' />
- <param name='&lt;0-255&gt;' doc='Timer Value' />
- </params>
- </command>
- <command id='gprs routing area &lt;0-255&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='routing' doc='GPRS Routing Area Code' />
- <param name='area' doc='GPRS Routing Area Code' />
- <param name='&lt;0-255&gt;' doc='GPRS Routing Area Code' />
- </params>
- </command>
- <command id='gprs network-control-order (nc0|nc1|nc2)'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='network-control-order' doc='GPRS Network Control Order' />
- <param name='nc0' doc='MS controlled cell re-selection, no measurement reporting' />
- <param name='nc1' doc='MS controlled cell re-selection, MS sends measurement reports' />
- <param name='nc2' doc='Network controlled cell re-selection, MS sends measurement reports' />
- </params>
- </command>
- <command id='gprs control-ack-type-rach'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='control-ack-type-rach' doc='Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to four access bursts format instead of default RLC/MAC control block' />
- </params>
- </command>
- <command id='no gprs control-ack-type-rach'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='control-ack-type-rach' doc='Set GPRS Control Ack Type for PACKET CONTROL ACKNOWLEDGMENT message to four access bursts format instead of default RLC/MAC control block' />
- </params>
- </command>
- <command id='gprs cell bvci &lt;2-65535&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='cell' doc='GPRS Cell Settings' />
- <param name='bvci' doc='GPRS BSSGP VC Identifier' />
- <param name='&lt;2-65535&gt;' doc='GPRS BSSGP VC Identifier' />
- </params>
- </command>
- <command id='gprs cell timer (blocking-timer|blocking-retries|unblocking-retries|reset-timer|reset-retries|suspend-timer|suspend-retries|resume-timer|resume-retries|capability-update-timer|capability-update-retries) &lt;0-255&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='cell' doc='Cell / BSSGP' />
- <param name='timer' doc='Cell/BSSGP Timer' />
- <param name='blocking-timer' doc='Tbvc-block timeout' />
- <param name='blocking-retries' doc='Tbvc-block retries' />
- <param name='unblocking-retries' doc='Tbvc-unblock retries' />
- <param name='reset-timer' doc='Tbvcc-reset timeout' />
- <param name='reset-retries' doc='Tbvc-reset retries' />
- <param name='suspend-timer' doc='Tbvc-suspend timeout' />
- <param name='suspend-retries' doc='Tbvc-suspend retries' />
- <param name='resume-timer' doc='Tbvc-resume timeout' />
- <param name='resume-retries' doc='Tbvc-resume retries' />
- <param name='capability-update-timer' doc='Tbvc-capa-update timeout' />
- <param name='capability-update-retries' doc='Tbvc-capa-update retries' />
- <param name='&lt;0-255&gt;' doc='Timer Value' />
- </params>
- </command>
- <command id='gprs nsei &lt;0-65535&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='nsei' doc='GPRS NS Entity Identifier' />
- <param name='&lt;0-65535&gt;' doc='GPRS NS Entity Identifier' />
- </params>
- </command>
- <command id='gprs nsvc &lt;0-1&gt; nsvci &lt;0-65535&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='nsvc' doc='Network Service Virtual Connection (NS-VC)' />
- <param name='&lt;0-1&gt;' doc='NSVC Logical Number' />
- <param name='nsvci' doc='NS Virtual Connection Identifier' />
- <param name='&lt;0-65535&gt;' doc='GPRS NS VC Identifier' />
- </params>
- </command>
- <command id='gprs nsvc &lt;0-1&gt; local udp port &lt;0-65535&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='nsvc' doc='Network Service Virtual Connection (NS-VC)' />
- <param name='&lt;0-1&gt;' doc='NSVC Logical Number' />
- <param name='local' doc='GPRS NS Local UDP Port' />
- <param name='udp' doc='GPRS NS Local UDP Port' />
- <param name='port' doc='GPRS NS Local UDP Port' />
- <param name='&lt;0-65535&gt;' doc='GPRS NS Local UDP Port Number' />
- </params>
- </command>
- <command id='gprs nsvc &lt;0-1&gt; remote udp port &lt;0-65535&gt;'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='nsvc' doc='Network Service Virtual Connection (NS-VC)' />
- <param name='&lt;0-1&gt;' doc='NSVC Logical Number' />
- <param name='remote' doc='GPRS NS Remote UDP Port' />
- <param name='udp' doc='GPRS NS Remote UDP Port' />
- <param name='port' doc='GPRS NS Remote UDP Port' />
- <param name='&lt;0-65535&gt;' doc='GPRS NS Remote UDP Port Number' />
- </params>
- </command>
- <command id='gprs nsvc &lt;0-1&gt; remote ip A.B.C.D'>
- <params>
- <param name='gprs' doc='GPRS Packet Network' />
- <param name='nsvc' doc='Network Service Virtual Connection (NS-VC)' />
- <param name='&lt;0-1&gt;' doc='NSVC Logical Number' />
- <param name='remote' doc='GPRS NS Remote IP Address' />
- <param name='ip' doc='GPRS NS Remote IP Address' />
- <param name='A.B.C.D' doc='GPRS NS Remote IP Address' />
- </params>
- </command>
- <command id='paging free &lt;-1-1024&gt;'>
- <params>
- <param name='paging' doc='Paging options' />
- <param name='free' doc='Only page when having a certain amount of free slots' />
- <param name='&lt;-1-1024&gt;' doc='amount of required free paging slots. -1 to disable' />
- </params>
- </command>
- <command id='system-information (1|2|3|4|5|6|7|8|9|10|13|16|17|18|19|20|2bis|2ter|2quater|5bis|5ter) mode (static|computed)'>
- <params>
- <param name='system-information' doc='System Information Messages' />
- <param name='1' doc='System Information Type 1' />
- <param name='2' doc='System Information Type 2' />
- <param name='3' doc='System Information Type 3' />
- <param name='4' doc='System Information Type 4' />
- <param name='5' doc='System Information Type 5' />
- <param name='6' doc='System Information Type 6' />
- <param name='7' doc='System Information Type 7' />
- <param name='8' doc='System Information Type 8' />
- <param name='9' doc='System Information Type 9' />
- <param name='10' doc='System Information Type 10' />
- <param name='13' doc='System Information Type 13' />
- <param name='16' doc='System Information Type 16' />
- <param name='17' doc='System Information Type 17' />
- <param name='18' doc='System Information Type 18' />
- <param name='19' doc='System Information Type 19' />
- <param name='20' doc='System Information Type 20' />
- <param name='2bis' doc='System Information Type 2bis' />
- <param name='2ter' doc='System Information Type 2ter' />
- <param name='2quater' doc='System Information Type 2quater' />
- <param name='5bis' doc='System Information Type 5bis' />
- <param name='5ter' doc='System Information Type 5ter' />
- <param name='mode' doc='System Information Mode' />
- <param name='static' doc='Static user-specified' />
- <param name='computed' doc='Dynamic, BSC-computed' />
- </params>
- </command>
- <command id='system-information (1|2|3|4|5|6|7|8|9|10|13|16|17|18|19|20|2bis|2ter|2quater|5bis|5ter) static HEXSTRING'>
- <params>
- <param name='system-information' doc='System Information Messages' />
- <param name='1' doc='System Information Type 1' />
- <param name='2' doc='System Information Type 2' />
- <param name='3' doc='System Information Type 3' />
- <param name='4' doc='System Information Type 4' />
- <param name='5' doc='System Information Type 5' />
- <param name='6' doc='System Information Type 6' />
- <param name='7' doc='System Information Type 7' />
- <param name='8' doc='System Information Type 8' />
- <param name='9' doc='System Information Type 9' />
- <param name='10' doc='System Information Type 10' />
- <param name='13' doc='System Information Type 13' />
- <param name='16' doc='System Information Type 16' />
- <param name='17' doc='System Information Type 17' />
- <param name='18' doc='System Information Type 18' />
- <param name='19' doc='System Information Type 19' />
- <param name='20' doc='System Information Type 20' />
- <param name='2bis' doc='System Information Type 2bis' />
- <param name='2ter' doc='System Information Type 2ter' />
- <param name='2quater' doc='System Information Type 2quater' />
- <param name='5bis' doc='System Information Type 5bis' />
- <param name='5ter' doc='System Information Type 5ter' />
- <param name='static' doc='Static System Information filling' />
- <param name='HEXSTRING' doc='Static user-specified SI content in HEX notation' />
- </params>
- </command>
- <command id='early-classmark-sending (allowed|forbidden)'>
- <params>
- <param name='early-classmark-sending' doc='Early Classmark Sending' />
- <param name='allowed' doc='Early Classmark Sending is allowed' />
- <param name='forbidden' doc='Early Classmark Sending is forbidden' />
- </params>
- </command>
- <command id='early-classmark-sending-3g (allowed|forbidden)'>
- <params>
- <param name='early-classmark-sending-3g' doc='3G Early Classmark Sending' />
- <param name='allowed' doc='3G Early Classmark Sending is allowed' />
- <param name='forbidden' doc='3G Early Classmark Sending is forbidden' />
- </params>
- </command>
- <command id='neighbor-list mode (automatic|manual|manual-si5)'>
- <params>
- <param name='neighbor-list' doc='Neighbor List' />
- <param name='mode' doc='Mode of Neighbor List generation' />
- <param name='automatic' doc='Automatically from all BTS in this OpenBSC' />
- <param name='manual' doc='Manual' />
- <param name='manual-si5' doc='Manual with different lists for SI2 and SI5' />
- </params>
- </command>
- <command id='neighbor-list (add|del) arfcn &lt;0-1023&gt;'>
- <params>
- <param name='neighbor-list' doc='Neighbor List' />
- <param name='add' doc='Add to manual neighbor list' />
- <param name='del' doc='Delete from manual neighbor list' />
- <param name='arfcn' doc='ARFCN of neighbor' />
- <param name='&lt;0-1023&gt;' doc='ARFCN of neighbor' />
- </params>
- </command>
- <command id='si5 neighbor-list (add|del) arfcn &lt;0-1023&gt;'>
- <params>
- <param name='si5' doc='SI5 Neighbor List' />
- <param name='neighbor-list' doc='SI5 Neighbor List' />
- <param name='add' doc='Add to manual SI5 neighbor list' />
- <param name='del' doc='Delete from SI5 manual neighbor list' />
- <param name='arfcn' doc='ARFCN of neighbor' />
- <param name='&lt;0-1023&gt;' doc='ARFCN of neighbor' />
- </params>
- </command>
- <command id='si2quater neighbor-list add earfcn &lt;0-65535&gt; thresh-hi &lt;0-31&gt; thresh-lo &lt;0-32&gt; prio &lt;0-8&gt; qrxlv &lt;0-32&gt; meas &lt;0-8&gt;'>
- <params>
- <param name='si2quater' doc='SI2quater Neighbor List' />
- <param name='neighbor-list' doc='SI2quater Neighbor List' />
- <param name='add' doc='Add to manual SI2quater neighbor list' />
- <param name='earfcn' doc='EARFCN of neighbor' />
- <param name='&lt;0-65535&gt;' doc='EARFCN of neighbor' />
- <param name='thresh-hi' doc='threshold high bits' />
- <param name='&lt;0-31&gt;' doc='threshold high bits' />
- <param name='thresh-lo' doc='threshold low bits' />
- <param name='&lt;0-32&gt;' doc='threshold low bits (32 means NA)' />
- <param name='prio' doc='priority' />
- <param name='&lt;0-8&gt;' doc='priority (8 means NA)' />
- <param name='qrxlv' doc='QRXLEVMIN' />
- <param name='&lt;0-32&gt;' doc='QRXLEVMIN (32 means NA)' />
- <param name='meas' doc='measurement bandwidth' />
- <param name='&lt;0-8&gt;' doc='measurement bandwidth (8 means NA)' />
- </params>
- </command>
- <command id='si2quater neighbor-list del earfcn &lt;0-65535&gt;'>
- <params>
- <param name='si2quater' doc='SI2quater Neighbor List' />
- <param name='neighbor-list' doc='SI2quater Neighbor List' />
- <param name='del' doc='Delete from SI2quater manual neighbor list' />
- <param name='earfcn' doc='EARFCN of neighbor' />
- <param name='&lt;0-65535&gt;' doc='EARFCN' />
- </params>
- </command>
- <command id='si2quater neighbor-list add uarfcn &lt;0-16383&gt; &lt;0-511&gt; &lt;0-1&gt;'>
- <params>
- <param name='si2quater' doc='SI2quater Neighbor List' />
- <param name='neighbor-list' doc='SI2quater Neighbor List' />
- <param name='add' doc='Add to manual SI2quater neighbor list' />
- <param name='uarfcn' doc='UARFCN of neighbor' />
- <param name='&lt;0-16383&gt;' doc='UARFCN of neighbor' />
- <param name='&lt;0-511&gt;' doc='scrambling code' />
- <param name='&lt;0-1&gt;' doc='diversity bit' />
- </params>
- </command>
- <command id='si2quater neighbor-list del uarfcn &lt;0-16383&gt; &lt;0-511&gt;'>
- <params>
- <param name='si2quater' doc='SI2quater Neighbor List' />
- <param name='neighbor-list' doc='SI2quater Neighbor List' />
- <param name='del' doc='Delete from SI2quater manual neighbor list' />
- <param name='uarfcn' doc='UARFCN of neighbor' />
- <param name='&lt;0-16383&gt;' doc='UARFCN' />
- <param name='&lt;0-511&gt;' doc='scrambling code' />
- </params>
- </command>
- <command id='rf-lock-exclude'>
- <params>
- <param name='rf-lock-exclude' doc='Exclude this BTS from the global RF Lock' />
- </params>
- </command>
- <command id='no rf-lock-exclude'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='rf-lock-exclude' doc='Exclude this BTS from the global RF Lock' />
- </params>
- </command>
- <command id='force-combined-si'>
- <params>
- <param name='force-combined-si' doc='Force the generation of a single SI (no ter/bis)' />
- </params>
- </command>
- <command id='no force-combined-si'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='force-combined-si' doc='Force the generation of a single SI (no ter/bis)' />
- </params>
- </command>
- <command id='codec-support fr'>
- <params>
- <param name='codec-support' doc='Codec Support settings' />
- <param name='fr' doc='Fullrate' />
- </params>
- </command>
- <command id='codec-support fr (hr|efr|amr)'>
- <params>
- <param name='codec-support' doc='Codec Support settings' />
- <param name='fr' doc='Fullrate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- </params>
- </command>
- <command id='codec-support fr (hr|efr|amr) (hr|efr|amr)'>
- <params>
- <param name='codec-support' doc='Codec Support settings' />
- <param name='fr' doc='Fullrate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- </params>
- </command>
- <command id='codec-support fr (hr|efr|amr) (hr|efr|amr) (hr|efr|amr)'>
- <params>
- <param name='codec-support' doc='Codec Support settings' />
- <param name='fr' doc='Fullrate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- </params>
- </command>
- <command id='codec-support fr (hr|efr|amr) (hr|efr|amr) (hr|efr|amr) (hr|efr|amr)'>
- <params>
- <param name='codec-support' doc='Codec Support settings' />
- <param name='fr' doc='Fullrate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- <param name='hr' doc='Half Rate' />
- <param name='efr' doc='Enhanced Full Rate' />
- <param name='amr' doc='Adaptive Multirate' />
- </params>
- </command>
- <command id='depends-on-bts &lt;0-255&gt;'>
- <params>
- <param name='depends-on-bts' doc='This BTS can only be started if another one is up' />
- <param name='&lt;0-255&gt;' doc='BTS Number' />
- </params>
- </command>
- <command id='depeneds-on-bts &lt;0-255&gt;'>
- <params>
- <param name='depeneds-on-bts' doc='Negate a command or set its defaults' />
- <param name='&lt;0-255&gt;' doc='This BTS can only be started if another one is up' />
- </params>
- </command>
- <command id='amr tch-f modes (0|1|2|3|4|5|6|7)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- </params>
- </command>
- <command id='amr tch-f modes (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- </params>
- </command>
- <command id='amr tch-f modes (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- </params>
- </command>
- <command id='amr tch-f modes (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='6' doc='10,2k' />
- <param name='7' doc='12,2k' />
- </params>
- </command>
- <command id='amr tch-f threshold (ms|bts) &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f threshold (ms|bts) &lt;0-63&gt; &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f threshold (ms|bts) &lt;0-63&gt; &lt;0-63&gt; &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f hysteresis (ms|bts) &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f hysteresis (ms|bts) &lt;0-15&gt; &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f hysteresis (ms|bts) &lt;0-15&gt; &lt;0-15&gt; &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-f start-mode (auto|1|2|3|4)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-f' doc='Full Rate' />
- <param name='start-mode' doc='Initial codec to use with AMR' />
- <param name='auto' doc='Automatically' />
- <param name='1' doc='First codec' />
- <param name='2' doc='Second codec' />
- <param name='3' doc='Third codec' />
- <param name='4' doc='Fourth codec' />
- </params>
- </command>
- <command id='amr tch-h modes (0|1|2|3|4|5)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- </params>
- </command>
- <command id='amr tch-h modes (0|1|2|3|4|5) (0|1|2|3|4|5)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- </params>
- </command>
- <command id='amr tch-h modes (0|1|2|3|4|5) (0|1|2|3|4|5) (0|1|2|3|4|5)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- </params>
- </command>
- <command id='amr tch-h modes (0|1|2|3|4|5) (0|1|2|3|4|5) (0|1|2|3|4|5) (0|1|2|3|4|5)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='modes' doc='Codec modes to use with AMR codec' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- <param name='0' doc='4,75k' />
- <param name='1' doc='5,15k' />
- <param name='2' doc='5,90k' />
- <param name='3' doc='6,70k' />
- <param name='4' doc='7,40k' />
- <param name='5' doc='7,95k' />
- </params>
- </command>
- <command id='amr tch-h threshold (ms|bts) &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h threshold (ms|bts) &lt;0-63&gt; &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h threshold (ms|bts) &lt;0-63&gt; &lt;0-63&gt; &lt;0-63&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='threshold' doc='AMR threshold between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- <param name='&lt;0-63&gt;' doc='Threshold between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h hysteresis (ms|bts) &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h hysteresis (ms|bts) &lt;0-15&gt; &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h hysteresis (ms|bts) &lt;0-15&gt; &lt;0-15&gt; &lt;0-15&gt;'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='hysteresis' doc='AMR hysteresis between codecs' />
- <param name='ms' doc='MS side' />
- <param name='bts' doc='BTS side' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- <param name='&lt;0-15&gt;' doc='Hysteresis between codec 1 and 2' />
- </params>
- </command>
- <command id='amr tch-h start-mode (auto|1|2|3|4)'>
- <params>
- <param name='amr' doc='Adaptive Multi Rate settings' />
- <param name='tch-h' doc='Half Rate' />
- <param name='start-mode' doc='Initial codec to use with AMR' />
- <param name='auto' doc='Automatically' />
- <param name='1' doc='First codec' />
- <param name='2' doc='Second codec' />
- <param name='3' doc='Third codec' />
- <param name='4' doc='Fourth codec' />
- </params>
- </command>
- <command id='pcu-socket PATH'>
- <params>
- <param name='pcu-socket' doc='PCU Socket Path for using OsmoPCU co-located with BSC (legacy BTS)' />
- <param name='PATH' doc='Path in the file system for the unix-domain PCU socket' />
- </params>
- </command>
- <command id='access-control-class-ramping'>
- <params>
- <param name='access-control-class-ramping' doc='Enable Access Control Class ramping' />
- </params>
- </command>
- <command id='no access-control-class-ramping'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='access-control-class-ramping' doc='Disable Access Control Class ramping' />
- </params>
- </command>
- <command id='access-control-class-ramping-step-interval (&lt;30-600&gt;|dynamic)'>
- <params>
- <param name='access-control-class-ramping-step-interval' doc='Configure Access Control Class ramping step interval' />
- <param name='&lt;30-600&gt;' doc='Set a fixed step interval (in seconds)' />
- <param name='dynamic' doc='Use dynamic step interval based on BTS channel load' />
- </params>
- </command>
- <command id='access-control-class-ramping-step-size (&lt;1-10&gt;)'>
- <params>
- <param name='access-control-class-ramping-step-size' doc='Configure Access Control Class ramping step size' />
- <param name='&lt;1-10&gt;' doc='Set the number of Access Control Classes to enable per ramping step' />
- </params>
- </command>
- <command id='neighbor bts &lt;0-255&gt;'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='bts' doc='Add Neighbor cell by local BTS number' />
- <param name='&lt;0-255&gt;' doc='BTS number' />
- </params>
- </command>
- <command id='neighbor lac &lt;0-65535&gt;'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='lac' doc='Add Neighbor cell by LAC' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- </params>
- </command>
- <command id='neighbor lac-ci &lt;0-65535&gt; &lt;0-65535&gt;'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='lac-ci' doc='Add Neighbor cell by LAC and CI' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- <param name='&lt;0-65535&gt;' doc='CI' />
- </params>
- </command>
- <command id='neighbor cgi &lt;0-999&gt; &lt;0-999&gt; &lt;0-65535&gt; &lt;0-65535&gt;'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='cgi' doc='Add Neighbor cell by cgi' />
- <param name='&lt;0-999&gt;' doc='MCC' />
- <param name='&lt;0-999&gt;' doc='MNC' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- <param name='&lt;0-65535&gt;' doc='CI' />
- </params>
- </command>
- <command id='neighbor lac &lt;0-65535&gt; arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='lac' doc='Add Neighbor cell by LAC' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='neighbor lac-ci &lt;0-65535&gt; &lt;0-65535&gt; arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='lac-ci' doc='Add Neighbor cell by LAC and CI' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- <param name='&lt;0-65535&gt;' doc='CI' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='neighbor cgi &lt;0-999&gt; &lt;0-999&gt; &lt;0-65535&gt; &lt;0-65535&gt; arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='neighbor' doc='Manage local and remote-BSS neighbor cells' />
- <param name='cgi' doc='Add Neighbor cell by cgi' />
- <param name='&lt;0-999&gt;' doc='MCC' />
- <param name='&lt;0-999&gt;' doc='MNC' />
- <param name='&lt;0-65535&gt;' doc='LAC' />
- <param name='&lt;0-65535&gt;' doc='CI' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='no neighbor bts &lt;0-255&gt;'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='neighbor' doc='Remove local or remote-BSS neighbor cell' />
- <param name='bts' doc='Neighbor cell by local BTS number' />
- <param name='&lt;0-255&gt;' doc='BTS number' />
- </params>
- </command>
- <command id='no neighbor arfcn &lt;0-1023&gt; bsic (&lt;0-63&gt;|any)'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='neighbor' doc='Remove local or remote-BSS neighbor cell' />
- <param name='arfcn' doc='ARFCN of neighbor cell' />
- <param name='&lt;0-1023&gt;' doc='ARFCN value' />
- <param name='bsic' doc='BSIC of neighbor cell' />
- <param name='&lt;0-63&gt;' doc='BSIC value' />
- <param name='any' doc='for all BSICs / use any BSIC in this ARFCN' />
- </params>
- </command>
- <command id='trx &lt;0-255&gt;'>
- <params>
- <param name='trx' doc='Radio Transceiver' />
- <param name='&lt;0-255&gt;' doc='Select a TRX to configure' />
- </params>
- </command>
- <command id='is-connection-list (add|del) &lt;0-2047&gt; &lt;0-2047&gt; &lt;0-255&gt;'>
- <params>
- <param name='is-connection-list' doc='Interface Switch Connection List' />
- <param name='add' doc='Add to IS list' />
- <param name='del' doc='Delete from IS list' />
- <param name='&lt;0-2047&gt;' doc='ICP1' />
- <param name='&lt;0-2047&gt;' doc='ICP2' />
- <param name='&lt;0-255&gt;' doc='Contiguity Index' />
- </params>
- </command>
- <command id='abis-lower-transport (single-timeslot|super-channel)'>
- <params>
- <param name='abis-lower-transport' doc='Configure thee Abis Lower Transport' />
- <param name='single-timeslot' doc='Single Timeslot (classic Abis)' />
- <param name='super-channel' doc='SuperChannel (Packet Abis)' />
- </params>
- </command>
- <command id='con-connection-group &lt;1-31&gt;'>
- <params>
- <param name='con-connection-group' doc='Configure a CON (Concentrator) Connection Group' />
- <param name='&lt;1-31&gt;' doc='CON Connection Group Number' />
- </params>
- </command>
- <command id='del-connection-group &lt;1-31&gt;'>
- <params>
- <param name='del-connection-group' doc='Delete a CON (Concentrator) Connection Group' />
- <param name='&lt;1-31&gt;' doc='CON Connection Group Number' />
- </params>
- </command>
- <command id='handover (0|1|default)'>
- <params>
- <param name='handover' doc='Handover general config' />
- <param name='0' doc='Disable in-call handover' />
- <param name='1' doc='Enable in-call handover' />
- <param name='default' doc='Enable/disable handover: Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover algorithm (1|2|default)'>
- <params>
- <param name='handover' doc='Handover general config' />
- <param name='algorithm' doc='Choose algorithm for handover decision' />
- <param name='1' doc='Algorithm 1: trigger handover based on comparing current cell and neighbor RxLev and RxQual, only.' />
- <param name='2' doc='Algorithm 2: trigger handover on RxLev/RxQual, and also to balance the load across several cells. Consider available codecs. Prevent repeated handover by penalty timers.' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxlev averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='averaging' doc='How many RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxqual averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxqual' doc='Received-Quality averaging' />
- <param name='averaging' doc='How many RxQual measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxQual averaging: Number of values to average over' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 window rxlev neighbor averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='neighbor' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='averaging' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='Neighbor RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 power budget interval (&lt;1-99&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='interval' doc='How often to check for a better cell (SACCH frames)' />
- <param name='&lt;1-99&gt;' doc='Check for stronger neighbor every N number of SACCH frames' />
- <param name='default' doc='Use default (6), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 power budget hysteresis (&lt;0-999&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='hysteresis' doc='How many dB stronger must a neighbor be to become a HO candidate' />
- <param name='&lt;0-999&gt;' doc='Neighbor&apos;s strength difference in dB' />
- <param name='default' doc='Use default (3), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover1 maximum distance (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover1' doc='Handover options for handover decision algorithm 1' />
- <param name='maximum' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='distance' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='&lt;0-9999&gt;' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxlev averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='averaging' doc='How many RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxqual averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxqual' doc='Received-Quality averaging' />
- <param name='averaging' doc='How many RxQual measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='RxQual averaging: Number of values to average over' />
- <param name='default' doc='Use default (1), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 window rxlev neighbor averaging (&lt;1-10&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='window' doc='Measurement averaging settings' />
- <param name='rxlev' doc='Received-Level averaging' />
- <param name='neighbor' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='averaging' doc='How many Neighbor RxLev measurements are used for averaging' />
- <param name='&lt;1-10&gt;' doc='Neighbor RxLev averaging: Number of values to average over' />
- <param name='default' doc='Use default (10), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 power budget interval (&lt;1-99&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='interval' doc='How often to check for a better cell (SACCH frames)' />
- <param name='&lt;1-99&gt;' doc='Check for stronger neighbor every N number of SACCH frames' />
- <param name='default' doc='Use default (6), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 power budget hysteresis (&lt;0-999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='power' doc='Neighbor cell power triggering' />
- <param name='budget' doc='Neighbor cell power triggering' />
- <param name='hysteresis' doc='How many dB stronger must a neighbor be to become a HO candidate' />
- <param name='&lt;0-999&gt;' doc='Neighbor&apos;s strength difference in dB' />
- <param name='default' doc='Use default (3), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 maximum distance (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='maximum' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='distance' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='&lt;0-9999&gt;' doc='Maximum Timing-Advance value (i.e. MS distance) before triggering HO' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 assignment (0|1|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='assignment' doc='Enable or disable in-call channel re-assignment' />
- <param name='0' doc='Disable in-call assignment' />
- <param name='1' doc='Enable in-call assignment' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 tdma-measurement (full|subset|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='tdma-measurement' doc='Define measurement set of TDMA frames' />
- <param name='full' doc='Full set of 102/104 TDMA frames' />
- <param name='subset' doc='Sub set of 4 TDMA frames (SACCH)' />
- <param name='default' doc='Use default (subset), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min rxlev (&lt;-110--50&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min' doc='Minimum Level/Quality thresholds before triggering HO' />
- <param name='rxlev' doc='How weak may RxLev of an MS become before triggering HO' />
- <param name='&lt;-110--50&gt;' doc='minimum RxLev (dBm)' />
- <param name='default' doc='Use default (-100), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min rxqual (&lt;0-7&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min' doc='Minimum Level/Quality thresholds before triggering HO' />
- <param name='rxqual' doc='How bad may RxQual of an MS become before triggering HO' />
- <param name='&lt;0-7&gt;' doc='minimum RxQual' />
- <param name='default' doc='Use default (5), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 afs-bias rxlev (&lt;0-20&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='afs-bias' doc='Configure bias to prefer AFS (AMR on TCH/F) over other codecs' />
- <param name='rxlev' doc='RxLev improvement bias for AFS over other codecs' />
- <param name='&lt;0-20&gt;' doc='Virtual RxLev improvement (dB)' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 afs-bias rxqual (&lt;0-7&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='afs-bias' doc='Configure bias to prefer AFS (AMR on TCH/F) over other codecs' />
- <param name='rxqual' doc='RxQual improvement bias for AFS over other codecs' />
- <param name='&lt;0-7&gt;' doc='Virtual RxQual improvement' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min-free-slots tch/f (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min-free-slots' doc='Minimum free TCH timeslots before cell is considered congested' />
- <param name='tch/f' doc='Minimum free TCH/F timeslots before cell is considered congested' />
- <param name='&lt;0-9999&gt;' doc='Number of TCH/F slots' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 min-free-slots tch/h (&lt;0-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='min-free-slots' doc='Minimum free TCH timeslots before cell is considered congested' />
- <param name='tch/h' doc='Minimum free TCH/H timeslots before cell is considered congested' />
- <param name='&lt;0-9999&gt;' doc='Number of TCH/H slots' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 max-handovers (&lt;1-9999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='max-handovers' doc='Maximum number of concurrent handovers allowed per cell' />
- <param name='&lt;1-9999&gt;' doc='Number' />
- <param name='default' doc='Use default (9999), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time max-distance (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='max-distance' doc='Time to suspend handovers after leaving this cell due to exceeding max distance' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (300), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time failed-ho (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='failed-ho' doc='Time to suspend handovers after handover failure to this cell' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (60), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 penalty-time failed-assignment (&lt;0-99999&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='penalty-time' doc='Set penalty times to wait between repeated handovers' />
- <param name='failed-assignment' doc='Time to suspend handovers after assignment failure in this cell' />
- <param name='&lt;0-99999&gt;' doc='Seconds' />
- <param name='default' doc='Use default (60), remove explicit setting on this node' />
- </params>
- </command>
- <command id='handover2 retries (&lt;0-9&gt;|default)'>
- <params>
- <param name='handover2' doc='Handover options for handover decision algorithm 2' />
- <param name='retries' doc='Immediately retry on handover/assignment failure' />
- <param name='&lt;0-9&gt;' doc='Number of retries' />
- <param name='default' doc='Use default (0), remove explicit setting on this node' />
- </params>
- </command>
- </node>
- <node id='config-net-bts-trx'>
- <name>config-net-bts-trx</name>
- <command id='arfcn &lt;0-1023&gt;'>
- <params>
- <param name='arfcn' doc='Set the ARFCN for this TRX' />
- <param name='&lt;0-1023&gt;' doc='Absolute Radio Frequency Channel Number' />
- </params>
- </command>
- <command id='description .TEXT'>
- <params>
- <param name='description' doc='Save human-readable description of the object' />
- <param name='.TEXT' doc='Text until the end of the line' />
- </params>
- </command>
- <command id='no description'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='description' doc='Remove description of the object' />
- </params>
- </command>
- <command id='nominal power &lt;0-100&gt;'>
- <params>
- <param name='nominal' doc='Nominal TRX RF Power in dBm' />
- <param name='power' doc='Nominal TRX RF Power in dBm' />
- <param name='&lt;0-100&gt;' doc='Nominal TRX RF Power in dBm' />
- </params>
- </command>
- <command id='max_power_red &lt;0-100&gt;'>
- <params>
- <param name='max_power_red' doc='Reduction of maximum BS RF Power (relative to nominal power)' />
- <param name='&lt;0-100&gt;' doc='Reduction of maximum BS RF Power in dB' />
- </params>
- </command>
- <command id='rsl e1 line E1_LINE timeslot &lt;1-31&gt; sub-slot (0|1|2|3|full)'>
- <params>
- <param name='rsl' doc='RSL Parameters' />
- <param name='e1' doc='E1/T1 interface to be used for RSL' />
- <param name='line' doc='E1/T1 interface to be used for RSL' />
- <param name='E1_LINE' doc='E1/T1 Line Number to be used for RSL' />
- <param name='timeslot' doc='E1/T1 Timeslot to be used for RSL' />
- <param name='&lt;1-31&gt;' doc='E1/T1 Timeslot to be used for RSL' />
- <param name='sub-slot' doc='E1/T1 Sub-slot to be used for RSL' />
- <param name='0' doc='E1/T1 Sub-slot 0 is to be used for RSL' />
- <param name='1' doc='E1/T1 Sub-slot 1 is to be used for RSL' />
- <param name='2' doc='E1/T1 Sub-slot 2 is to be used for RSL' />
- <param name='3' doc='E1/T1 Sub-slot 3 is to be used for RSL' />
- <param name='full' doc='E1/T1 full timeslot is to be used for RSL' />
- </params>
- </command>
- <command id='rsl e1 tei &lt;0-63&gt;'>
- <params>
- <param name='rsl' doc='RSL Parameters' />
- <param name='e1' doc='Set the TEI to be used for RSL' />
- <param name='tei' doc='Set the TEI to be used for RSL' />
- <param name='&lt;0-63&gt;' doc='TEI to be used for RSL' />
- </params>
- </command>
- <command id='rf_locked (0|1)'>
- <params>
- <param name='rf_locked' doc='Set or unset the RF Locking (Turn off RF of the TRX)' />
- <param name='0' doc='TRX is NOT RF locked (active)' />
- <param name='1' doc='TRX is RF locked (turned off)' />
- </params>
- </command>
- <command id='timeslot &lt;0-7&gt;'>
- <params>
- <param name='timeslot' doc='Select a Timeslot to configure' />
- <param name='&lt;0-7&gt;' doc='Timeslot number' />
- </params>
- </command>
- </node>
- <node id='config-net-bts-trx-ts'>
- <name>config-net-bts-trx-ts</name>
- <command id='phys_chan_config (none|ccch|ccch+sdcch4|tch/f|tch/h|sdcch8|pdch|tch/f_pdch|unknown|ccch+sdcch4+cbch|sdcch8+cbch|tch/f_tch/h_pdch)'>
- <params>
- <param name='phys_chan_config' doc='Physical Channel Combination' />
- <param name='none' doc='Physical Channel not configured' />
- <param name='ccch' doc='FCCH + SCH + BCCH + CCCH (Comb. IV)' />
- <param name='ccch+sdcch4' doc='FCCH + SCH + BCCH + CCCH + 4 SDCCH + 2 SACCH (Comb. V)' />
- <param name='tch/f' doc='TCH/F + FACCH/F + SACCH (Comb. I)' />
- <param name='tch/h' doc='2 TCH/H + 2 FACCH/H + 2 SACCH (Comb. II)' />
- <param name='sdcch8' doc='8 SDCCH + 4 SACCH (Comb. VII)' />
- <param name='pdch' doc='Packet Data Channel for GPRS/EDGE' />
- <param name='tch/f_pdch' doc='Dynamic TCH/F or GPRS PDCH' />
- <param name='unknown' doc='Unknown / Unsupported channel combination' />
- <param name='ccch+sdcch4+cbch' doc='FCCH + SCH + BCCH + CCCH + CBCH + 3 SDCCH + 2 SACCH (Comb. V)' />
- <param name='sdcch8+cbch' doc='7 SDCCH + 4 SACCH + CBCH (Comb. VII)' />
- <param name='tch/f_tch/h_pdch' doc='Dynamic TCH/F or TCH/H or GPRS PDCH' />
- </params>
- </command>
- <command id='training_sequence_code &lt;0-7&gt;'>
- <params>
- <param name='training_sequence_code' doc='Training Sequence Code of the Timeslot' />
- <param name='&lt;0-7&gt;' doc='TSC' />
- </params>
- </command>
- <command id='hopping enabled (0|1)'>
- <params>
- <param name='hopping' doc='Configure frequency hopping' />
- <param name='enabled' doc='Enable or disable frequency hopping' />
- <param name='0' doc='Disable frequency hopping' />
- <param name='1' doc='Enable frequency hopping' />
- </params>
- </command>
- <command id='hopping sequence-number &lt;0-63&gt;'>
- <params>
- <param name='hopping' doc='Configure frequency hopping' />
- <param name='sequence-number' doc='Which hopping sequence to use for this channel' />
- <param name='&lt;0-63&gt;' doc='Hopping Sequence Number (HSN)' />
- </params>
- </command>
- <command id='hopping maio &lt;0-63&gt;'>
- <params>
- <param name='hopping' doc='Configure frequency hopping' />
- <param name='maio' doc='Which hopping MAIO to use for this channel' />
- <param name='&lt;0-63&gt;' doc='Mobile Allocation Index Offset (MAIO)' />
- </params>
- </command>
- <command id='hopping arfcn add &lt;0-1023&gt;'>
- <params>
- <param name='hopping' doc='Configure frequency hopping' />
- <param name='arfcn' doc='Configure hopping ARFCN list' />
- <param name='add' doc='Add an entry to the hopping ARFCN list' />
- <param name='&lt;0-1023&gt;' doc='ARFCN' />
- </params>
- </command>
- <command id='hopping arfcn del &lt;0-1023&gt;'>
- <params>
- <param name='hopping' doc='Configure frequency hopping' />
- <param name='arfcn' doc='Configure hopping ARFCN list' />
- <param name='del' doc='Delete an entry to the hopping ARFCN list' />
- <param name='&lt;0-1023&gt;' doc='ARFCN' />
- </params>
- </command>
- <command id='e1 line E1_LINE timeslot &lt;1-31&gt; sub-slot (0|1|2|3|full)'>
- <params>
- <param name='e1' doc='E1/T1 channel connected to this on-air timeslot' />
- <param name='line' doc='E1/T1 channel connected to this on-air timeslot' />
- <param name='E1_LINE' doc='E1/T1 line connected to this on-air timeslot' />
- <param name='timeslot' doc='E1/T1 timeslot connected to this on-air timeslot' />
- <param name='&lt;1-31&gt;' doc='E1/T1 timeslot connected to this on-air timeslot' />
- <param name='sub-slot' doc='E1/T1 sub-slot connected to this on-air timeslot' />
- <param name='0' doc='E1/T1 sub-slot 0 connected to this on-air timeslot' />
- <param name='1' doc='E1/T1 sub-slot 1 connected to this on-air timeslot' />
- <param name='2' doc='E1/T1 sub-slot 2 connected to this on-air timeslot' />
- <param name='3' doc='E1/T1 sub-slot 3 connected to this on-air timeslot' />
- <param name='full' doc='Full E1/T1 timeslot connected to this on-air timeslot' />
- </params>
- </command>
- </node>
- <node id='oml'>
- <name>oml</name>
- <command id='change-adm-state (locked|unlocked|shutdown|null)'>
- <params>
- <param name='change-adm-state' doc='Change the Administrative State' />
- <param name='locked' doc='Locked' />
- <param name='unlocked' doc='Unlocked' />
- <param name='shutdown' doc='Shutdown' />
- <param name='null' doc='NULL' />
- </params>
- </command>
- <command id='opstart'>
- <params>
- <param name='opstart' doc='Send an OPSTART message to the object' />
- </params>
- </command>
- </node>
- <node id='config-msc'>
- <name>config-msc</name>
- <command id='core-mobile-network-code &lt;1-999&gt;'>
- <params>
- <param name='core-mobile-network-code' doc='Use this network code for the core network' />
- <param name='&lt;1-999&gt;' doc='MNC value' />
- </params>
- </command>
- <command id='core-mobile-country-code &lt;1-999&gt;'>
- <params>
- <param name='core-mobile-country-code' doc='Use this country code for the core network' />
- <param name='&lt;1-999&gt;' doc='MCC value' />
- </params>
- </command>
- <command id='core-location-area-code &lt;0-65535&gt;'>
- <params>
- <param name='core-location-area-code' doc='Use this location area code for the core network' />
- <param name='&lt;0-65535&gt;' doc='LAC value' />
- </params>
- </command>
- <command id='core-cell-identity &lt;0-65535&gt;'>
- <params>
- <param name='core-cell-identity' doc='Use this cell identity for the core network' />
- <param name='&lt;0-65535&gt;' doc='CI value' />
- </params>
- </command>
- <command id='ip.access rtp-base &lt;1-65000&gt;'>
- <params>
- <param name='ip.access' doc='IP.ACCESS specific' />
- <param name='rtp-base' doc='Set the rtp-base port for the RTP stream' />
- <param name='&lt;1-65000&gt;' doc='Port number' />
- </params>
- </command>
- <command id='codec-list .LIST'>
- <params>
- <param name='codec-list' doc='Set the allowed audio codecs' />
- <param name='.LIST' doc='List of audio codecs, e.g. fr3 fr1 hr3' />
- </params>
- </command>
- <command id='bsc-welcome-text .TEXT'>
- <params>
- <param name='bsc-welcome-text' doc='Set the USSD notification to be sent' />
- <param name='.TEXT' doc='Text to be sent' />
- </params>
- </command>
- <command id='no bsc-welcome-text'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='bsc-welcome-text' doc='Clear the USSD notification to be sent' />
- </params>
- </command>
- <command id='bsc-msc-lost-text .TEXT'>
- <params>
- <param name='bsc-msc-lost-text' doc='Set the USSD notification to be sent on MSC connection loss' />
- <param name='.TEXT' doc='Text to be sent' />
- </params>
- </command>
- <command id='no bsc-msc-lost-text'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='bsc-msc-lost-text' doc='Clear the USSD notification to be sent on MSC connection loss' />
- </params>
- </command>
- <command id='bsc-grace-text .TEXT'>
- <params>
- <param name='bsc-grace-text' doc='Set the USSD notification to be sent when the MSC has entered the grace period' />
- <param name='.TEXT' doc='Text to be sent' />
- </params>
- </command>
- <command id='no bsc-grace-text'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='bsc-grace-text' doc='Clear the USSD notification to be sent when the MSC has entered the grace period' />
- </params>
- </command>
- <command id='type (normal|local)'>
- <params>
- <param name='type' doc='Select the MSC type' />
- <param name='normal' doc='Plain GSM MSC' />
- <param name='local' doc='Special MSC for local call routing' />
- </params>
- </command>
- <command id='allow-emergency (allow|deny)'>
- <params>
- <param name='allow-emergency' doc='Allow CM ServiceRequests with type emergency' />
- <param name='allow' doc='Allow' />
- <param name='deny' doc='Deny' />
- </params>
- </command>
- <command id='local-prefix REGEXP'>
- <params>
- <param name='local-prefix' doc='Prefix for local numbers' />
- <param name='REGEXP' doc='REGEXP used' />
- </params>
- </command>
- <command id='amr-config 12_2k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='12_2k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 10_2k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='10_2k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 7_95k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='7_95k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 7_40k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='7_40k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 6_70k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='6_70k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 5_90k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='5_90k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 5_15k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='5_15k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='amr-config 4_75k (allowed|forbidden)'>
- <params>
- <param name='amr-config' doc='AMR Multirate Configuration' />
- <param name='4_75k' doc='Bitrate' />
- <param name='allowed' doc='Allowed' />
- <param name='forbidden' doc='Forbidden' />
- </params>
- </command>
- <command id='lcls-mode (disabled|mgw-loop)'>
- <params>
- <param name='lcls-mode' doc='Configure 3GPP LCLS (Local Call, Local Switch)' />
- <param name='disabled' doc='Disable LCLS for all calls of this MSC' />
- <param name='mgw-loop' doc='Enable LCLS with loopping traffic in MGW' />
- </params>
- </command>
- <command id='lcls-codec-mismatch (allowed|forbidden)'>
- <params>
- <param name='lcls-codec-mismatch' doc='Allow 3GPP LCLS (Local Call, Local Switch) when call legs use different codec/rate' />
- <param name='allowed' doc='Allow LCLS only only for calls that use the same codec/rate on both legs' />
- <param name='forbidden' doc='Do not Allow LCLS for calls that use a different codec/rate on both legs' />
- </params>
- </command>
- <command id='access-list-name NAME'>
- <params>
- <param name='access-list-name' doc='Set the name of the access list to use.' />
- <param name='NAME' doc='The name of the to be used access list.' />
- </params>
- </command>
- <command id='no access-list-name'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='access-list-name' doc='Remove the access list from the NAT.' />
- </params>
- </command>
- <command id='bsc-addr NAME'>
- <params>
- <param name='bsc-addr' doc='Calling Address (local address of this BSC)' />
- <param name='NAME' doc='SCCP address name' />
- </params>
- </command>
- <command id='msc-addr NAME'>
- <params>
- <param name='msc-addr' doc='Called Address (remote address of the MSC)' />
- <param name='NAME' doc='SCCP address name' />
- </params>
- </command>
- <command id='asp-protocol (m3ua|sua|ipa)'>
- <params>
- <param name='asp-protocol' doc='A interface protocol to use for this MSC)' />
- <param name='m3ua' doc='MTP3 User Adaptation' />
- <param name='sua' doc='SCCP User Adaptation' />
- <param name='ipa' doc='IPA Multiplex (SCCP Lite)' />
- </params>
- </command>
- <command id='mgw local-ip A.B.C.D'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='local-ip' doc='local bind to connect to MGW from' />
- <param name='A.B.C.D' doc='local bind IP address' />
- </params>
- </command>
- <command id='mgw local-port &lt;0-65535&gt;'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='local-port' doc='local port to connect to MGW from' />
- <param name='&lt;0-65535&gt;' doc='local bind port' />
- </params>
- </command>
- <command id='mgw remote-ip A.B.C.D'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='remote-ip' doc='remote IP address to reach the MGW at' />
- <param name='A.B.C.D' doc='remote IP address' />
- </params>
- </command>
- <command id='mgw remote-port &lt;0-65535&gt;'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='remote-port' doc='remote port to reach the MGW at' />
- <param name='&lt;0-65535&gt;' doc='remote port' />
- </params>
- </command>
- <command id='mgw endpoint-range &lt;1-65534&gt; &lt;1-65534&gt;'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='endpoint-range' doc='usable range of endpoint identifiers' />
- <param name='&lt;1-65534&gt;' doc='set first usable endpoint identifier' />
- <param name='&lt;1-65534&gt;' doc='set last usable endpoint identifier' />
- </params>
- </command>
- <command id='mgw bts-base &lt;0-65534&gt;'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='bts-base' doc='First UDP port allocated for the BTS side' />
- <param name='&lt;0-65534&gt;' doc='UDP Port number' />
- </params>
- </command>
- <command id='mgw x-osmo-ign call-id'>
- <params>
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='x-osmo-ign' doc='Set a (non-standard) X-Osmo-IGN header in all CRCX messages for RTP streams associated with this MSC, useful for A/SCCPlite MSCs, since osmo-bsc cannot know the MSC&apos;s chosen CallID. This is enabled by default for A/SCCPlite connections, disabled by default for all others.' />
- <param name='call-id' doc='Send &apos;X-Osmo-IGN: C&apos; to ignore CallID mismatches. See OsmoMGW.' />
- </params>
- </command>
- <command id='no mgw x-osmo-ign'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='mgw' doc='Configure MGCP connection to Media Gateway' />
- <param name='x-osmo-ign' doc='Do not send X-Osmo-IGN MGCP header to this MSC' />
- </params>
- </command>
- </node>
- <node id='om2k'>
- <name>om2k</name>
- <command id='reset-command'>
- <params>
- <param name='reset-command' doc='Reset the MO' />
- </params>
- </command>
- <command id='start-request'>
- <params>
- <param name='start-request' doc='Start the MO' />
- </params>
- </command>
- <command id='status-request'>
- <params>
- <param name='status-request' doc='Get the MO Status' />
- </params>
- </command>
- <command id='connect-command'>
- <params>
- <param name='connect-command' doc='Connect the MO' />
- </params>
- </command>
- <command id='disconnect-command'>
- <params>
- <param name='disconnect-command' doc='Disconnect the MO' />
- </params>
- </command>
- <command id='enable-request'>
- <params>
- <param name='enable-request' doc='Enable the MO' />
- </params>
- </command>
- <command id='disable-request'>
- <params>
- <param name='disable-request' doc='Disable the MO' />
- </params>
- </command>
- <command id='operational-info &lt;0-1&gt;'>
- <params>
- <param name='operational-info' doc='Set operational information' />
- <param name='&lt;0-1&gt;' doc='Set operational info to 0 or 1' />
- </params>
- </command>
- <command id='test-request'>
- <params>
- <param name='test-request' doc='Test the MO' />
- </params>
- </command>
- <command id='capabilities-request'>
- <params>
- <param name='capabilities-request' doc='Request MO capabilities' />
- </params>
- </command>
- <command id='configuration-request'>
- <params>
- <param name='configuration-request' doc='Send the configuration request for current MO' />
- </params>
- </command>
- </node>
- <node id='om2k-con-group'>
- <name>om2k-con-group</name>
- <command id='con-path (add|del) &lt;0-2047&gt; &lt;0-255&gt; deconcentrated &lt;0-63&gt;'>
- <params>
- <param name='con-path' doc='CON Path (In/Out)' />
- <param name='add' doc='Add CON Path to Concentration Group' />
- <param name='del' doc='Delete CON Path from Concentration Group' />
- <param name='&lt;0-2047&gt;' doc='CON Conection Point' />
- <param name='&lt;0-255&gt;' doc='Contiguity Index' />
- <param name='deconcentrated' doc='De-concentrated in/outlet' />
- <param name='&lt;0-63&gt;' doc='TEI Value' />
- </params>
- </command>
- <command id='con-path (add|del) &lt;0-2047&gt; &lt;0-255&gt; concentrated &lt;1-16&gt;'>
- <params>
- <param name='con-path' doc='CON Path (In/Out)' />
- <param name='add' doc='Add CON Path to Concentration Group' />
- <param name='del' doc='Delete CON Path from Concentration Group' />
- <param name='&lt;0-2047&gt;' doc='CON Conection Point' />
- <param name='&lt;0-255&gt;' doc='Contiguity Index' />
- <param name='concentrated' doc='Concentrated in/outlet' />
- <param name='&lt;1-16&gt;' doc='Tag Number' />
- </params>
- </command>
- </node>
- <node id='config-bsc'>
- <name>config-bsc</name>
- <command id='mid-call-text .TEXT'>
- <params>
- <param name='mid-call-text' doc='Set the USSD notification sent to running calls when switching from Grace to Off.' />
- <param name='.TEXT' doc='Text to be sent' />
- </params>
- </command>
- <command id='mid-call-timeout NR'>
- <params>
- <param name='mid-call-timeout' doc='Switch from Grace to Off in NR seconds.' />
- <param name='NR' doc='Timeout in seconds' />
- </params>
- </command>
- <command id='bsc-rf-socket PATH'>
- <params>
- <param name='bsc-rf-socket' doc='Set the filename for the RF control interface.' />
- <param name='PATH' doc='RF Control path' />
- </params>
- </command>
- <command id='bsc-auto-rf-off &lt;1-65000&gt;'>
- <params>
- <param name='bsc-auto-rf-off' doc='Disable RF on MSC Connection' />
- <param name='&lt;1-65000&gt;' doc='Timeout' />
- </params>
- </command>
- <command id='no bsc-auto-rf-off'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='bsc-auto-rf-off' doc='Disable RF on MSC Connection' />
- </params>
- </command>
- <command id='missing-msc-text .TEXT'>
- <params>
- <param name='missing-msc-text' doc='Set the USSD notification to be send when a MSC has not been found.' />
- <param name='.TEXT' doc='Text to be sent' />
- </params>
- </command>
- <command id='no missing-msc-text'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='missing-msc-text' doc='Clear the USSD notification to be send when a MSC has not been found.' />
- </params>
- </command>
- <command id='access-list-name NAME'>
- <params>
- <param name='access-list-name' doc='Set the name of the access list to use.' />
- <param name='NAME' doc='The name of the to be used access list.' />
- </params>
- </command>
- <command id='no access-list-name'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='access-list-name' doc='Remove the access list from the BSC' />
- </params>
- </command>
- <command id='access-list NAME imsi-allow [REGEXP]'>
- <params>
- <param name='access-list' doc='Access list commands' />
- <param name='NAME' doc='Name of the access list' />
- <param name='imsi-allow' doc='Add allowed IMSI to the list' />
- <param name='[REGEXP]' doc='Regexp for IMSIs' />
- </params>
- </command>
- <command id='access-list NAME imsi-deny [REGEXP] (&lt;0-256&gt;) (&lt;0-256&gt;)'>
- <params>
- <param name='access-list' doc='Access list commands' />
- <param name='NAME' doc='Name of the access list' />
- <param name='imsi-deny' doc='Add denied IMSI to the list' />
- <param name='[REGEXP]' doc='Regexp for IMSIs' />
- <param name='&lt;0-256&gt;' doc='CM Service Reject reason' />
- <param name='&lt;0-256&gt;' doc='LU Reject reason' />
- </params>
- </command>
- <command id='no access-list NAME'>
- <params>
- <param name='no' doc='Negate a command or set its defaults' />
- <param name='access-list' doc='Remove an access-list by name' />
- <param name='NAME' doc='The access-list to remove' />
- </params>
- </command>
- </node>
-</vtydoc>
diff --git a/doc/manuals/vty/libbsc_vty_additions.xml b/doc/manuals/vty/libbsc_vty_additions.xml
index 868539850..869625235 100644
--- a/doc/manuals/vty/libbsc_vty_additions.xml
+++ b/doc/manuals/vty/libbsc_vty_additions.xml
@@ -11,7 +11,7 @@
<child_of nodeid='14' />
<name>BTS Configuration</name>
<description>This is the configuration of a single BTS.</description>
- <command id='oml ip.access stream_id &lt;0-255&gt; line E1_LINE'>
+ <command id='oml ipa stream-id &lt;0-255&gt; line E1_LINE'>
<description>
Set the IPA stream identifier for the OML link within the IPA
multiplex. Must be the same as on the BTS side. The default
@@ -34,13 +34,13 @@
Only applies to Ericsson OML2000 based BTSs.
</description>
</command>
- <command id='channel-descrption attach (0|1)'>
+ <command id='channel-description attach (0|1)'>
<description>
Configure whether the IMSI ATTACH (and DETACH) procedures
shall be used by MS in this cell. The default should be enabled.
</description>
</command>
- <command id='ip.access rsl-ip A.B.C.D'>
+ <command id='ipa rsl-ip A.B.C.D'>
<description>
Configure the IP address of the BSC used for RSL. Abis/IP
BTSs, including OsmoBTS and the nanoBTS will be instructed to
@@ -96,7 +96,7 @@
re-selection.
</description>
</command>
- <command id='ip.access unit_id &lt;0-65534&gt; &lt;0-255&gt;'>
+ <command id='ipa unit-id &lt;0-65534&gt; &lt;0-255&gt;'>
<description>
The ip.access unit ID is a parameter of the IPA
Signalling-over-IP multiplex. It is administratively
@@ -118,7 +118,7 @@
<description>
The periodic location updating interval determines how often
the MS will periodically perform a LOCATION UPDATE procedure,
- despite not having actuall changed location. The value is
+ despite not having actually changed location. The value is
specified in minutes.
</description>
</command>
@@ -160,7 +160,7 @@
0) - which is also the default configuration.</warning>
</description>
</command>
- <command id='channel-descrption bs-ag-blks-res &lt;0-7&gt;'>
+ <command id='channel-description bs-ag-blks-res &lt;0-7&gt;'>
<description>
Using this command, you can specify how many blocks of the
downlink CCCH should be reserved for exclusive usage as AGCH.
diff --git a/include/mISDNif.h b/include/mISDNif.h
index 8e065d24b..c8588cd60 100644
--- a/include/mISDNif.h
+++ b/include/mISDNif.h
@@ -46,7 +46,7 @@
#define MISDN_RELEASE 20
/* primitives for information exchange
- * generell format
+ * general format
* <16 bit 0 >
* <8 bit command>
* BIT 8 = 1 LAYER private
@@ -65,7 +65,7 @@
#define MISDN_CMDMASK 0xff00
#define MISDN_LAYERMASK 0x00ff
-/* generell commands */
+/* general commands */
#define OPEN_CHANNEL 0x0100
#define CLOSE_CHANNEL 0x0200
#define CONTROL_CHANNEL 0x0300
@@ -110,7 +110,7 @@
#define DL_UNITDATA_IND 0x3108
#define DL_INFORMATION_IND 0x0008
-/* intern layer 2 managment */
+/* intern layer 2 management */
#define MDL_ASSIGN_REQ 0x1804
#define MDL_ASSIGN_IND 0x1904
#define MDL_REMOVE_REQ 0x1A04
diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 02a4ad8e2..1f066b618 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -3,14 +3,15 @@ noinst_HEADERS = \
abis_nm.h \
abis_om2000.h \
abis_rsl.h \
- acc_ramp.h \
+ acc.h \
arfcn_range_encode.h \
assignment_fsm.h \
- bsc_msg_filter.h \
bsc_rll.h \
bsc_subscriber.h \
bsc_subscr_conn_fsm.h \
bss.h \
+ bts.h \
+ bts_trx.h \
bts_ipaccess_nanobts_omlattr.h \
chan_alloc.h \
codec_pref.h \
@@ -18,9 +19,7 @@ noinst_HEADERS = \
debug.h \
e1_config.h \
gsm_04_08_rr.h \
- gsm_04_80.h \
gsm_data.h \
- gsm_timers.h \
handover.h \
handover_cfg.h \
handover_decision.h \
@@ -28,15 +27,18 @@ noinst_HEADERS = \
handover_fsm.h \
handover_vty.h \
ipaccess.h \
+ lb.h \
lchan_fsm.h \
lchan_rtp_fsm.h \
lchan_select.h \
+ lcs_loc_req.h \
+ lcs_ta_req.h \
meas_feed.h \
meas_rep.h \
misdn.h \
- mgw_endpoint_fsm.h \
neighbor_ident.h \
network_listen.h \
+ nm_common_fsm.h \
openbscdefines.h \
osmo_bsc.h \
osmo_bsc_grace.h \
@@ -47,14 +49,15 @@ noinst_HEADERS = \
paging.h \
pcu_if.h \
pcuif_proto.h \
+ bssmap_reset.h \
rest_octets.h \
rs232.h \
signal.h \
system_information.h \
timeslot_fsm.h \
- ussd.h \
vty.h \
gsm_08_08.h \
penalty_timers.h \
osmo_bsc_lcls.h \
+ smscb.h \
$(NULL)
diff --git a/include/osmocom/bsc/a_reset.h b/include/osmocom/bsc/a_reset.h
index a09972e18..dd44ea5c1 100644
--- a/include/osmocom/bsc/a_reset.h
+++ b/include/osmocom/bsc/a_reset.h
@@ -23,9 +23,9 @@
struct bsc_msc_data;
/* Create and start state machine which handles the reset/reset-ack procedure */
-void a_reset_alloc(struct bsc_msc_data *msc, const char *name, void *cb);
+void a_reset_alloc(struct bsc_msc_data *msc, const char *name);
-/* Confirm that we sucessfully received a reset acknowlege message */
+/* Confirm that we successfully received a reset acknowledge message */
void a_reset_ack_confirm(struct bsc_msc_data *msc);
/* Report a failed connection */
diff --git a/include/osmocom/bsc/abis_nm.h b/include/osmocom/bsc/abis_nm.h
index 45bbe2c02..bfafa63ed 100644
--- a/include/osmocom/bsc/abis_nm.h
+++ b/include/osmocom/bsc/abis_nm.h
@@ -1,4 +1,4 @@
-/* GSM Network Management messages on the A-bis interface
+/* GSM Network Management messages on the A-bis interface
* 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */
/* (C) 2008-2009 by Harald Welte <laforge@gnumonks.org>
@@ -27,6 +27,7 @@
#include <osmocom/gsm/protocol/gsm_12_21.h>
#include <osmocom/bsc/gsm_data.h>
+#include <osmocom/bsc/signal.h>
/* max number of attributes represented as 3GPP TS 52.021 §9.4.62 SW Description array */
#define MAX_BTS_ATTR 5
@@ -150,7 +151,7 @@ int abis_nm_ipaccess_restart(struct gsm_bts_trx *trx);
int abis_nm_ipaccess_set_attr(struct gsm_bts *bts, uint8_t obj_class,
uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
uint8_t *attr, uint8_t attr_len);
-int abis_nm_ipaccess_rsl_connect(struct gsm_bts_trx *trx,
+int abis_nm_ipaccess_rsl_connect(struct gsm_bts_trx *trx,
uint32_t ip, uint16_t port, uint8_t stream);
void abis_nm_ipaccess_cgi(uint8_t *buf, struct gsm_bts *bts);
int ipac_parse_bcch_info(struct ipac_bcch_info *binf, uint8_t *buf);
@@ -170,9 +171,14 @@ void abis_nm_queue_send_next(struct gsm_bts *bts); /* for bs11_config. */
int abis_nm_select_newest_sw(const struct abis_nm_sw_desc *sw, const size_t len);
+struct nm_fail_rep_signal_data *abis_nm_fail_evt_rep_parse(struct msgb *mb, struct gsm_bts *bts);
+
/* Helper functions for updating attributes */
int abis_nm_update_max_power_red(struct gsm_bts_trx *trx);
struct gsm_bts_trx_ts *abis_nm_get_ts(const struct msgb *oml_msg);
+#define LOGPFOH(ss, lvl, foh, fmt, args ...) LOGP(ss, lvl, "%s: " fmt, abis_nm_dump_foh(foh), ## args)
+#define DEBUGPFOH(ss, foh, fmt, args ...) LOGPFOH(ss, LOGL_DEBUG, foh, fmt, ## args)
+
#endif /* _NM_H */
diff --git a/include/osmocom/bsc/abis_om2000.h b/include/osmocom/bsc/abis_om2000.h
index b093a0350..0d48c0c2f 100644
--- a/include/osmocom/bsc/abis_om2000.h
+++ b/include/osmocom/bsc/abis_om2000.h
@@ -24,11 +24,13 @@
enum abis_om2k_mo_cls {
OM2K_MO_CLS_TRXC = 0x01,
+ OM2K_MO_CLS_TG = 0x02,
OM2K_MO_CLS_TS = 0x03,
OM2K_MO_CLS_TF = 0x04,
OM2K_MO_CLS_IS = 0x05,
OM2K_MO_CLS_CON = 0x06,
OM2K_MO_CLS_DP = 0x07,
+ OM2K_MO_CLS_MCTR = 0x08,
OM2K_MO_CLS_CF = 0x0a,
OM2K_MO_CLS_TX = 0x0b,
OM2K_MO_CLS_RX = 0x0c,
@@ -111,7 +113,9 @@ int abis_om2k_tx_test_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
int abis_om2k_tx_op_info(struct gsm_bts *bts, const struct abis_om2k_mo *mo,
uint8_t operational);
int abis_om2k_tx_cap_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
+int abis_om2k_tx_arb(struct gsm_bts *bts, struct abis_om2k_mo *mo, uint16_t req, uint8_t *buf, int buf_len);
int abis_om2k_tx_is_conf_req(struct gsm_bts *bts);
+int abis_om2k_tx_con_conf_req(struct gsm_bts *bts);
int abis_om2k_tx_tf_conf_req(struct gsm_bts *bts);
int abis_om2k_tx_rx_conf_req(struct gsm_bts_trx *trx);
int abis_om2k_tx_tx_conf_req(struct gsm_bts_trx *trx);
diff --git a/include/osmocom/bsc/abis_rsl.h b/include/osmocom/bsc/abis_rsl.h
index 098d2e6ee..964e282b5 100644
--- a/include/osmocom/bsc/abis_rsl.h
+++ b/include/osmocom/bsc/abis_rsl.h
@@ -43,8 +43,9 @@ int rsl_sacch_filling(struct gsm_bts_trx *trx, uint8_t type,
int rsl_tx_chan_activ(struct gsm_lchan *lchan, uint8_t act_type, uint8_t ho_ref);
int rsl_chan_mode_modify_req(struct gsm_lchan *ts);
int rsl_encryption_cmd(struct msgb *msg);
-int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len,
- uint8_t *ms_ident, uint8_t chan_needed, bool is_gprs);
+int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group,
+ const struct osmo_mobile_identity *mi,
+ uint8_t chan_needed, bool is_gprs);
int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val);
int rsl_tx_imm_assignment(struct gsm_lchan *lchan);
int rsl_tx_imm_ass_rej(struct gsm_bts *bts, struct gsm48_req_ref *rqd_ref);
@@ -60,7 +61,7 @@ int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len,
/* Siemens vendor-specific RSL extensions */
int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci);
-/* ip.access specfic RSL extensions */
+/* ip.access specific RSL extensions */
struct msgb *rsl_make_ipacc_mdcx(const struct gsm_lchan *lchan, uint32_t dest_ip, uint16_t dest_port);
int rsl_tx_ipacc_crcx(const struct gsm_lchan *lchan);
int rsl_tx_ipacc_mdcx(const struct gsm_lchan *lchan);
@@ -85,12 +86,13 @@ int rsl_sacch_info_modify(struct gsm_lchan *lchan, uint8_t type,
const uint8_t *data, int len);
int rsl_chan_bs_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int db);
-int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int dbm);
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan);
/* SMSCB functionality */
int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number,
struct rsl_ie_cb_cmd_type cb_command,
- const uint8_t *data, int len);
+ bool use_extended_cbch, const uint8_t *data, int len);
+int rsl_etws_pn_command(struct gsm_bts *bts, uint8_t chan_nr, const uint8_t *data, int len);
/* some Nokia specific stuff */
int rsl_nokia_si_begin(struct gsm_bts_trx *trx);
@@ -116,5 +118,8 @@ int ipacc_payload_type(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type);
int rsl_tx_rf_chan_release(struct gsm_lchan *lchan);
+void abis_rsl_chan_rqd_queue_poll(struct gsm_bts *bts);
+void abis_rsl_chan_rqd_queue_flush(struct gsm_bts *bts);
+
#endif /* RSL_MT_H */
diff --git a/include/osmocom/bsc/acc_ramp.h b/include/osmocom/bsc/acc.h
index efb12b088..c7be38cb3 100644
--- a/include/osmocom/bsc/acc_ramp.h
+++ b/include/osmocom/bsc/acc.h
@@ -27,6 +27,40 @@
#include <osmocom/core/timer.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
+#define ACC_MGR_QUANTUM_DEFAULT 20 /* 20 seconds */
+
+/* Manage rotating subset of allowed Access Class as per configuration */
+struct acc_mgr {
+ struct gsm_bts *bts; /*!< backpointer to BTS using this ACC manager */
+ /* Administrative Maximum Number of ACC 0-9 to be allowed at the same time.
+ Configurable through VTY cmd "access-control-class-roundrobin",
+ defaults to all allowed (10) */
+ uint8_t len_allowed_adm;
+ /* Further limiting the number of ACC to use. It may be lower due
+ to ramping, based for instance on channel or system load. */
+ uint8_t len_allowed_ramp;
+
+ /* Time until next subset is generated */
+ uint32_t rotation_time_sec;
+ struct osmo_timer_list rotate_timer;
+
+ /* Bitmask containing subset of allowed ACC 0-9 on current rotation iteration */
+ uint16_t allowed_subset_mask;
+ /* Number of bits (ACC) set in allowed_subset_mask: 0->min(len_allowed_ramp, len_allowed_adm) */
+ uint8_t allowed_subset_mask_count;
+ /* Number of ACC 0-9 allowed as per adminsitrative (permanent) config. */
+ uint8_t allowed_permanent_count;
+};
+
+void acc_mgr_init(struct acc_mgr *acc_mgr, struct gsm_bts *bts);
+uint8_t acc_mgr_get_len_allowed_adm(struct acc_mgr *acc_mgr);
+uint8_t acc_mgr_get_len_allowed_ramp(struct acc_mgr *acc_mgr);
+void acc_mgr_set_len_allowed_adm(struct acc_mgr *acc_mgr, uint8_t len_allowed_adm);
+void acc_mgr_set_len_allowed_ramp(struct acc_mgr *acc_mgr, uint8_t len_allowed_ramp);
+void acc_mgr_set_rotation_time(struct acc_mgr *acc_mgr, uint32_t rotation_time_sec);
+void acc_mgr_perm_subset_changed(struct acc_mgr *acc_mgr, struct gsm48_rach_control *rach_control);
+void acc_mgr_apply_acc(struct acc_mgr *acc_mgr, struct gsm48_rach_control *rach_control);
+
/*!
* Access control class (ACC) ramping is used to slowly make the cell available to
* an increasing number of MS. This avoids overload at startup time in cases where
@@ -37,9 +71,12 @@
#define ACC_RAMP_STEP_SIZE_DEFAULT ACC_RAMP_STEP_SIZE_MIN
#define ACC_RAMP_STEP_SIZE_MAX 10 /* allow all ACC in one step (effectively disables ramping) */
-#define ACC_RAMP_STEP_INTERVAL_MIN 30 /* 30 seconds */
+#define ACC_RAMP_STEP_INTERVAL_MIN 5 /* 5 seconds */
#define ACC_RAMP_STEP_INTERVAL_MAX 600 /* 10 minutes */
+#define ACC_RAMP_CHAN_LOAD_THRESHOLD_LOW 71
+#define ACC_RAMP_CHAN_LOAD_THRESHOLD_UP 89
+
/*!
* Data structure used to manage ACC ramping. Please avoid setting or reading fields
* in this structure directly. Use the accessor functions below instead.
@@ -50,17 +87,6 @@ struct acc_ramp {
bool acc_ramping_enabled; /*!< whether ACC ramping is enabled */
/*!
- * Bitmask which keeps track of access control classes that are currently denied
- * access. The function acc_ramp_apply() uses this mask to modulate bits from
- * octets 2 and 3 in RACH Control Parameters (see 3GPP 44.018 10.5.2.29).
- * Ramping is only concerned with ACCs 0-9. While any of the bits 0-9 is set,
- * the corresponding ACC is barred.
- * ACCs 11-15 should always be allowed, and ACC 10 denies emergency calls for
- * all ACCs from 0-9 inclusive; these ACCs are ignored in this implementation.
- */
- uint16_t barred_accs;
-
- /*!
* This controls the maximum number of ACCs to allow per ramping step (1 - 10).
* The compile-time default value is ACC_RAMP_STEP_SIZE_DEFAULT.
* This value can be changed by VTY configuration.
@@ -71,11 +97,20 @@ struct acc_ramp {
/*!
* Ramping step interval in seconds.
* This value depends on the current BTS channel load average, unless
- * it has been overriden by VTY configuration.
+ * it has been overridden by VTY configuration.
*/
unsigned int step_interval_sec;
- bool step_interval_is_fixed;
struct osmo_timer_list step_timer;
+
+ /*!
+ * Channel Load Upper/Lower Thresholds:
+ * They control how ramping subset size of allowed ACCs changes in
+ * relation to current channel load (%, 0-100): Under the lower
+ * threshold, subset size may be increased; above the upper threshold,
+ * subset size may be decreased.
+ */
+ unsigned int chan_load_lower_threshold;
+ unsigned int chan_load_upper_threshold;
};
/*!
@@ -118,44 +153,17 @@ static inline unsigned int acc_ramp_get_step_interval(struct acc_ramp *acc_ramp)
}
/*!
- * If the step interval is dynamic, return true, else return false.
- * \param[in] acc_ramp Pointer to acc_ramp structure.
- */
-static inline bool acc_ramp_step_interval_is_dynamic(struct acc_ramp *acc_ramp)
-{
- return !(acc_ramp->step_interval_is_fixed);
-}
-
-/*!
- * Return bitmasks which correspond to access control classes that are currently
- * denied access. Ramping is only concerned with those bits which control access
- * for ACCs 0-9, and any of the other bits will always be set to zero in these masks, i.e.
- * it is safe to OR these bitmasks with the corresponding fields in struct gsm48_rach_control.
- * \param[in] acc_ramp Pointer to acc_ramp structure.
- */
-static inline uint8_t acc_ramp_get_barred_t2(struct acc_ramp *acc_ramp)
-{
- return ((acc_ramp->barred_accs >> 8) & 0x03);
-};
-static inline uint8_t acc_ramp_get_barred_t3(struct acc_ramp *acc_ramp)
-{
- return (acc_ramp->barred_accs & 0xff);
-}
-
-/*!
- * Potentially mark certain Access Control Classes (ACCs) as barred in accordance to ACC ramping.
- * \param[in] rach_control RACH control parameters in which barred ACCs will be configured.
+ * Return the current ACC ramp step interval (in seconds)
* \param[in] acc_ramp Pointer to acc_ramp structure.
*/
-static inline void acc_ramp_apply(struct gsm48_rach_control *rach_control, struct acc_ramp *acc_ramp)
+static inline unsigned int acc_ramp_is_running(struct acc_ramp *acc_ramp)
{
- rach_control->t2 |= acc_ramp_get_barred_t2(acc_ramp);
- rach_control->t3 |= acc_ramp_get_barred_t3(acc_ramp);
+ return acc_ramp->step_interval_sec;
}
void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts);
int acc_ramp_set_step_size(struct acc_ramp *acc_ramp, unsigned int step_size);
int acc_ramp_set_step_interval(struct acc_ramp *acc_ramp, unsigned int step_interval);
-void acc_ramp_set_step_interval_dynamic(struct acc_ramp *acc_ramp);
+int acc_ramp_set_chan_load_thresholds(struct acc_ramp *acc_ramp, unsigned int low_threshold, unsigned int up_threshold);
void acc_ramp_trigger(struct acc_ramp *acc_ramp);
void acc_ramp_abort(struct acc_ramp *acc_ramp);
diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h
index 0c2094e3a..e5f48d1d1 100644
--- a/include/osmocom/bsc/bsc_msc_data.h
+++ b/include/osmocom/bsc/bsc_msc_data.h
@@ -29,8 +29,11 @@
#define _OSMO_MSC_DATA_H
#include "debug.h"
+#include "osmo_bsc_lcls.h"
+#include "osmux.h"
#include <osmocom/core/timer.h>
+#include <osmocom/core/select.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
@@ -42,30 +45,77 @@
#include <osmocom/core/fsm.h>
#include <osmocom/gsm/gsm23003.h>
-#include <regex.h>
#include <errno.h>
struct osmo_bsc_rf;
struct gsm_network;
+/* Constants for the MSC rate counters */
enum {
- MSC_CON_TYPE_NORMAL,
- MSC_CON_TYPE_LOCAL,
+ /* Rx message counters */
+ MSC_CTR_BSSMAP_RX_UDT_RESET_ACKNOWLEDGE,
+ MSC_CTR_BSSMAP_RX_UDT_RESET,
+ MSC_CTR_BSSMAP_RX_UDT_PAGING,
+ MSC_CTR_BSSMAP_RX_UDT_UNKNOWN,
+ MSC_CTR_BSSMAP_RX_DT1_CLEAR_CMD,
+ MSC_CTR_BSSMAP_RX_DT1_CIPHER_MODE_CMD,
+ MSC_CTR_BSSMAP_RX_DT1_ASSIGMENT_RQST,
+ MSC_CTR_BSSMAP_RX_DT1_LCLS_CONNECT_CTRL,
+ MSC_CTR_BSSMAP_RX_DT1_HANDOVER_CMD,
+ MSC_CTR_BSSMAP_RX_DT1_CLASSMARK_RQST,
+ MSC_CTR_BSSMAP_RX_DT1_CONFUSION,
+ MSC_CTR_BSSMAP_RX_DT1_COMMON_ID,
+ MSC_CTR_BSSMAP_RX_DT1_UNKNOWN,
+ MSC_CTR_BSSMAP_RX_DT1_DTAP,
+ MSC_CTR_BSSMAP_RX_DT1_DTAP_ERROR,
+ MSC_CTR_BSSMAP_RX_DT1_PERFORM_LOCATION_REQUEST,
+ MSC_CTR_BSSMAP_RX_DT1_PERFORM_LOCATION_ABORT,
+
+ /* Tx message counters (per connection type) */
+ MSC_CTR_BSSMAP_TX_BSS_MANAGEMENT,
+ MSC_CTR_BSSMAP_TX_DTAP,
+ MSC_CTR_BSSMAP_TX_UNKNOWN,
+ MSC_CTR_BSSMAP_TX_SHORT,
+ MSC_CTR_BSSMAP_TX_ERR_CONN_NOT_READY,
+ MSC_CTR_BSSMAP_TX_ERR_SEND,
+ MSC_CTR_BSSMAP_TX_SUCCESS,
+
+ /* Tx message counters (per message type) */
+ MSC_CTR_BSSMAP_TX_UDT_RESET,
+ MSC_CTR_BSSMAP_TX_UDT_RESET_ACK,
+ MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST,
+ MSC_CTR_BSSMAP_TX_DT1_CLEAR_COMPLETE,
+ MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_FAILURE,
+ MSC_CTR_BSSMAP_TX_DT1_ASSIGMENT_COMPLETE,
+ MSC_CTR_BSSMAP_TX_DT1_SAPI_N_REJECT,
+ MSC_CTR_BSSMAP_TX_DT1_CIPHER_COMPLETE,
+ MSC_CTR_BSSMAP_TX_DT1_CIPHER_REJECT,
+ MSC_CTR_BSSMAP_TX_DT1_CLASSMARK_UPDATE,
+ MSC_CTR_BSSMAP_TX_DT1_LCLS_CONNECT_CTRL_ACK,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_REQUIRED,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_PERFORMED,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_RQST_ACKNOWLEDGE,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_DETECT,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_COMPLETE,
+ MSC_CTR_BSSMAP_TX_DT1_HANDOVER_FAILURE,
+ MSC_CTR_BSSMAP_TX_DT1_DTAP,
+ MSC_CTR_BSSMAP_TX_DT1_PERFORM_LOCATION_RESPONSE_SUCCESS,
+ MSC_CTR_BSSMAP_TX_DT1_PERFORM_LOCATION_RESPONSE_FAILURE,
+
+ MSC_CTR_MSCPOOL_SUBSCR_NEW,
+ MSC_CTR_MSCPOOL_SUBSCR_REATTACH,
+ MSC_CTR_MSCPOOL_SUBSCR_KNOWN,
+ MSC_CTR_MSCPOOL_SUBSCR_PAGED,
+ MSC_CTR_MSCPOOL_SUBSCR_ATTACH_LOST,
+ MSC_CTR_MSCPOOL_EMERG_FORWARDED,
};
-enum bsc_lcls_mode {
- BSC_LCLS_MODE_DISABLED,
- BSC_LCLS_MODE_MGW_LOOP,
- BSC_LCLS_MODE_BTS_LOOP,
+/* Constants for the MSC stats */
+enum {
+ MSC_STAT_MSC_LINKS_ACTIVE,
+ MSC_STAT_MSC_LINKS_TOTAL,
};
-extern const struct value_string bsc_lcls_mode_names[];
-
-static inline const char *bsc_lcls_mode_name(enum bsc_lcls_mode m)
-{
- return get_value_string(bsc_lcls_mode_names, m);
-}
-
/*! /brief Information on a remote MSC for libbsc.
*/
struct bsc_msc_data {
@@ -75,39 +125,23 @@ struct bsc_msc_data {
struct gsm_network *network;
int allow_emerg;
- int type;
-
- /* local call routing */
- char *local_pref;
- regex_t local_pref_reg;
-
/* Connection data */
struct osmo_plmn_id core_plmn;
- int core_lac;
- int core_ci;
- int rtp_base;
- bool is_authenticated;
/* audio codecs */
struct gsm48_multi_rate_conf amr_conf;
+ bool amr_octet_aligned;
struct gsm_audio_support **audio_support;
int audio_length;
enum bsc_lcls_mode lcls_mode;
bool lcls_codec_mismatch_allow;
- /* ussd welcome text */
- char *ussd_welcome_txt;
-
int nr;
- /* ussd msc connection lost text */
- char *ussd_msc_lost_txt;
-
- /* ussd text when MSC has entered the grace period */
- char *ussd_grace_txt;
-
- char *acc_lst_name;
+ /* structures for keeping rate counters and gauge stats */
+ struct rate_ctr_group *msc_ctrs;
+ struct osmo_stat_item_group *msc_statg;
/* Sigtran connection data */
struct {
@@ -135,36 +169,31 @@ struct bsc_msc_data {
/* Pointer to the osmo-fsm that controls the
* BSSMAP RESET procedure */
- struct osmo_fsm_inst *reset_fsm;
+ struct bssmap_reset *bssmap_reset;
} a;
uint32_t x_osmo_ign;
bool x_osmo_ign_configured;
-};
-
-/*
- * Per BSC data.
- */
-struct osmo_bsc_data {
- struct gsm_network *network;
-
- /* msc configuration */
- struct llist_head mscs;
- /* rf ctl related bits */
- char *mid_call_txt;
- int mid_call_timeout;
- char *rf_ctrl_name;
- struct osmo_bsc_rf *rf_ctrl;
- int auto_off_timeout;
+ /* Whether we want to use Osmux against this MSC. Controlled via VTY */
+ enum osmux_usage use_osmux;
+ /* Whether we detected the MSC supports Osmux (during BSSMAP_RESET) */
+ bool remote_supports_osmux;
- /* ussd text when there is no MSC available */
- char *ussd_no_msc_txt;
-
- char *acc_lst_name;
+ /* Proxy between IPA/SCCPlite encapsulated MGCP and UDP */
+ struct {
+ /* local (BSC) IP address to be used */
+ char *local_addr;
+ /* local (BSC) UDP port to be used to talk with MGW */
+ uint16_t local_port;
+ /* UDP socket for proxying MGCP via SCCPlite/IPA */
+ struct osmo_fd ofd;
+ } mgcp_ipa;
+
+ struct osmo_nri_ranges *nri_ranges;
+ bool allow_attach;
};
-
int osmo_bsc_msc_init(struct bsc_msc_data *msc);
int osmo_bsc_sccp_init(struct gsm_network *gsmnet);
@@ -173,6 +202,9 @@ int osmo_bsc_audio_init(struct gsm_network *network);
struct bsc_msc_data *osmo_msc_data_find(struct gsm_network *, int);
struct bsc_msc_data *osmo_msc_data_alloc(struct gsm_network *, int);
+
+struct osmo_cell_global_id *cgi_for_msc(struct bsc_msc_data *msc, struct gsm_bts *bts);
+
/* Helper function to calculate the port number for a given
* timeslot/multiplex. This functionality is needed to support
* the sccp-lite scenario where the MGW is handled externally */
@@ -193,5 +225,25 @@ static inline int mgcp_port_to_cic(uint16_t port, uint16_t base)
return (port - base) / 2;
}
+static inline bool msc_is_aoip(const struct bsc_msc_data *msc)
+{
+ switch (msc->a.asp_proto) {
+ case OSMO_SS7_ASP_PROT_SUA:
+ case OSMO_SS7_ASP_PROT_M3UA:
+ return true;
+ default:
+ return false;
+ }
+}
+
+static inline bool msc_is_sccplite(const struct bsc_msc_data *msc)
+{
+ switch (msc->a.asp_proto) {
+ case OSMO_SS7_ASP_PROT_IPA:
+ return true;
+ default:
+ return false;
+ }
+}
#endif
diff --git a/include/osmocom/bsc/bsc_msg_filter.h b/include/osmocom/bsc/bsc_msg_filter.h
deleted file mode 100644
index fe8748526..000000000
--- a/include/osmocom/bsc/bsc_msg_filter.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#pragma once
-
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/msgfile.h>
-#include <osmocom/core/linuxrbtree.h>
-#include <osmocom/core/linuxlist.h>
-
-#include <regex.h>
-
-struct vty;
-struct gsm48_hdr;
-
-struct bsc_filter_reject_cause {
- int lu_reject_cause;
- int cm_reject_cause;
-};
-
-struct bsc_filter_barr_entry {
- struct rb_node node;
-
- char *imsi;
- int cm_reject_cause;
- int lu_reject_cause;
-};
-
-enum bsc_filter_acc_ctr {
- ACC_LIST_LOCAL_FILTER,
- ACC_LIST_GLOBAL_FILTER,
-};
-
-struct bsc_msg_acc_lst {
- struct llist_head list;
-
- /* counter */
- struct rate_ctr_group *stats;
-
- /* the name of the list */
- const char *name;
- struct llist_head fltr_list;
-};
-
-struct bsc_msg_acc_lst_entry {
- struct llist_head list;
-
- /* the filter */
- char *imsi_allow;
- regex_t imsi_allow_re;
- char *imsi_deny;
- regex_t imsi_deny_re;
-
- /* reject reasons for the access lists */
- int cm_reject_cause;
- int lu_reject_cause;
-};
-
-enum {
- FLT_CON_TYPE_NONE,
- FLT_CON_TYPE_LU,
- FLT_CON_TYPE_CM_SERV_REQ,
- FLT_CON_TYPE_PAG_RESP,
- FLT_CON_TYPE_SSA,
- FLT_CON_TYPE_LOCAL_REJECT,
- FLT_CON_TYPE_OTHER,
-};
-
-
-struct bsc_filter_state {
- char *imsi;
- int imsi_checked;
- int con_type;
-};
-
-struct bsc_filter_request {
- void *ctx;
- struct rb_root *black_list;
- struct llist_head *access_lists;
- const char *local_lst_name;
- const char *global_lst_name;
- int bsc_nr;
-};
-
-/**
- * Content filtering.
- */
-int bsc_msg_filter_initial(struct gsm48_hdr *hdr, size_t size,
- struct bsc_filter_request *req,
- int *con_type, char **imsi,
- struct bsc_filter_reject_cause *cause);
-int bsc_msg_filter_data(struct gsm48_hdr *hdr, size_t size,
- struct bsc_filter_request *req,
- struct bsc_filter_state *state,
- struct bsc_filter_reject_cause *cause);
-
-/* IMSI allow/deny handling */
-struct bsc_msg_acc_lst *bsc_msg_acc_lst_find(struct llist_head *lst, const char *name);
-struct bsc_msg_acc_lst *bsc_msg_acc_lst_get(void *ctx, struct llist_head *lst, const char *name);
-void bsc_msg_acc_lst_delete(struct bsc_msg_acc_lst *lst);
-
-struct bsc_msg_acc_lst_entry *bsc_msg_acc_lst_entry_create(struct bsc_msg_acc_lst *);
-int bsc_msg_acc_lst_check_allow(struct bsc_msg_acc_lst *lst, const char *imsi);
-
-void bsc_msg_acc_lst_vty_init(void *ctx, struct llist_head *lst, int node);
-void bsc_msg_acc_lst_write(struct vty *vty);
diff --git a/include/osmocom/bsc/bsc_subscr_conn_fsm.h b/include/osmocom/bsc/bsc_subscr_conn_fsm.h
index f5ed7bdd8..142d535c2 100644
--- a/include/osmocom/bsc/bsc_subscr_conn_fsm.h
+++ b/include/osmocom/bsc/bsc_subscr_conn_fsm.h
@@ -1,17 +1,23 @@
#pragma once
+#include <osmocom/gsm/protocol/gsm_08_08.h>
+#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/core/fsm.h>
+#define BSUB_USE_CONN "conn"
+
enum gscon_fsm_event {
/* local SCCP stack tells us incoming conn from MSC */
GSCON_EV_A_CONN_IND,
/* RSL side requests CONNECT to MSC */
- GSCON_EV_A_CONN_REQ,
+ GSCON_EV_MO_COMPL_L3,
/* MSC confirms the SCCP connection */
GSCON_EV_A_CONN_CFM,
/* MSC has sent BSSMAP CLEAR CMD */
GSCON_EV_A_CLEAR_CMD,
/* MSC SCCP disconnect indication */
GSCON_EV_A_DISC_IND,
+ /* MSC has sent a BSSMAP COMMON ID */
+ GSCON_EV_A_COMMON_ID_IND,
GSCON_EV_ASSIGNMENT_START,
GSCON_EV_ASSIGNMENT_END,
@@ -38,12 +44,19 @@ enum gscon_fsm_event {
GSCON_EV_FORGET_LCHAN,
GSCON_EV_FORGET_MGW_ENDPOINT,
+
+ GSCON_EV_LCS_LOC_REQ_END,
+};
+
+struct gscon_clear_cmd_data {
+ enum gsm0808_cause cause_0808;
+ bool is_csfb;
};
struct gsm_subscriber_connection;
struct gsm_network;
struct msgb;
-struct mgwep_ci;
+struct osmo_mgcpc_ep_ci;
struct assignment_request;
struct gsm_lchan;
@@ -57,26 +70,26 @@ void gscon_submit_rsl_dtap(struct gsm_subscriber_connection *conn,
struct msgb *msg, int link_id, int allow_sacch);
int gscon_sigtran_send(struct gsm_subscriber_connection *conn, struct msgb *msg);
-struct mgw_endpoint *gscon_ensure_mgw_endpoint(struct gsm_subscriber_connection *conn,
- uint16_t msc_assigned_cic);
+struct osmo_mgcpc_ep *gscon_ensure_mgw_endpoint(struct gsm_subscriber_connection *conn,
+ uint16_t msc_assigned_cic, struct gsm_lchan *for_lchan);
bool gscon_connect_mgw_to_msc(struct gsm_subscriber_connection *conn,
struct gsm_lchan *for_lchan,
const char *addr, uint16_t port,
struct osmo_fsm_inst *notify,
uint32_t event_success, uint32_t event_failure,
void *notify_data,
- struct mgwep_ci **created_ci);
+ struct osmo_mgcpc_ep_ci **created_ci);
void gscon_start_assignment(struct gsm_subscriber_connection *conn,
struct assignment_request *req);
void gscon_change_primary_lchan(struct gsm_subscriber_connection *conn, struct gsm_lchan *new_lchan);
-void gscon_release_lchans(struct gsm_subscriber_connection *conn, bool do_rr_release);
+void gscon_release_lchans(struct gsm_subscriber_connection *conn, bool do_rr_release, enum gsm48_rr_cause cause_rr);
void gscon_lchan_releasing(struct gsm_subscriber_connection *conn, struct gsm_lchan *lchan);
void gscon_forget_lchan(struct gsm_subscriber_connection *conn, struct gsm_lchan *lchan);
-void gscon_forget_mgw_endpoint_ci(struct gsm_subscriber_connection *conn, struct mgwep_ci *ci);
+void gscon_forget_mgw_endpoint_ci(struct gsm_subscriber_connection *conn, struct osmo_mgcpc_ep_ci *ci);
bool gscon_is_aoip(struct gsm_subscriber_connection *conn);
bool gscon_is_sccplite(struct gsm_subscriber_connection *conn);
diff --git a/include/osmocom/bsc/bsc_subscriber.h b/include/osmocom/bsc/bsc_subscriber.h
index 93b353935..6fffafdb3 100644
--- a/include/osmocom/bsc/bsc_subscriber.h
+++ b/include/osmocom/bsc/bsc_subscriber.h
@@ -5,40 +5,47 @@
#include <stdint.h>
#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/use_count.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
+#include <osmocom/gsm/gsm48.h>
struct log_target;
struct bsc_subscr {
struct llist_head entry;
- int use_count;
+ struct osmo_use_count use_count;
char imsi[GSM23003_IMSI_MAX_DIGITS+1];
uint32_t tmsi;
- uint16_t lac;
};
const char *bsc_subscr_name(struct bsc_subscr *bsub);
const char *bsc_subscr_id(struct bsc_subscr *bsub);
struct bsc_subscr *bsc_subscr_find_or_create_by_imsi(struct llist_head *list,
- const char *imsi);
+ const char *imsi,
+ const char *use_token);
struct bsc_subscr *bsc_subscr_find_or_create_by_tmsi(struct llist_head *list,
- uint32_t tmsi);
+ uint32_t tmsi,
+ const char *use_token);
+struct bsc_subscr *bsc_subscr_find_or_create_by_mi(struct llist_head *list, const struct osmo_mobile_identity *mi,
+ const char *use_token);
struct bsc_subscr *bsc_subscr_find_by_imsi(struct llist_head *list,
- const char *imsi);
+ const char *imsi,
+ const char *use_token);
struct bsc_subscr *bsc_subscr_find_by_tmsi(struct llist_head *list,
- uint32_t tmsi);
+ uint32_t tmsi,
+ const char *use_token);
+struct bsc_subscr *bsc_subscr_find_by_mi(struct llist_head *list, const struct osmo_mobile_identity *mi,
+ const char *use_token);
void bsc_subscr_set_imsi(struct bsc_subscr *bsub, const char *imsi);
-struct bsc_subscr *_bsc_subscr_get(struct bsc_subscr *bsub,
- const char *file, int line);
-struct bsc_subscr *_bsc_subscr_put(struct bsc_subscr *bsub,
- const char *file, int line);
-#define bsc_subscr_get(bsub) _bsc_subscr_get(bsub, __FILE__, __LINE__)
-#define bsc_subscr_put(bsub) _bsc_subscr_put(bsub, __FILE__, __LINE__)
+#define bsc_subscr_get(bsc_subscr, use) \
+ OSMO_ASSERT(osmo_use_count_get_put(&(bsc_subscr)->use_count, use, 1) == 0)
+#define bsc_subscr_put(bsc_subscr, use) \
+ OSMO_ASSERT(osmo_use_count_get_put(&(bsc_subscr)->use_count, use, -1) == 0)
void log_set_filter_bsc_subscr(struct log_target *target,
struct bsc_subscr *bsub);
diff --git a/include/osmocom/bsc/bss.h b/include/osmocom/bsc/bss.h
index ecb68d627..b8945db50 100644
--- a/include/osmocom/bsc/bss.h
+++ b/include/osmocom/bsc/bss.h
@@ -11,6 +11,7 @@ extern int bsc_shutdown_net(struct gsm_network *net);
/* register all supported BTS */
extern int bts_init(void);
+extern int bts_model_unknown_init(void);
extern int bts_model_bs11_init(void);
extern int bts_model_rbs2k_init(void);
extern int bts_model_nanobts_init(void);
diff --git a/include/osmocom/bsc/bssmap_reset.h b/include/osmocom/bsc/bssmap_reset.h
new file mode 100644
index 000000000..560c54307
--- /dev/null
+++ b/include/osmocom/bsc/bssmap_reset.h
@@ -0,0 +1,29 @@
+/* Manage RESET and disconnection detection on BSSMAP and BSSMAP-LE */
+#pragma once
+
+enum bssmap_reset_fsm_event {
+ BSSMAP_RESET_EV_RX_RESET,
+ BSSMAP_RESET_EV_RX_RESET_ACK,
+ BSSMAP_RESET_EV_CONN_CFM_SUCCESS,
+ BSSMAP_RESET_EV_CONN_CFM_FAILURE,
+};
+
+struct bssmap_reset_cfg {
+ int conn_cfm_failure_threshold;
+ struct {
+ void (*tx_reset)(void *data);
+ void (*tx_reset_ack)(void *data);
+ void (*link_up)(void *data);
+ void (*link_lost)(void *data);
+ } ops;
+ void *data;
+};
+
+struct bssmap_reset {
+ struct osmo_fsm_inst *fi;
+ struct bssmap_reset_cfg cfg;
+ int conn_cfm_failures;
+};
+
+struct bssmap_reset *bssmap_reset_alloc(void *ctx, const char *label, const struct bssmap_reset_cfg *cfg);
+bool bssmap_reset_is_conn_ready(const struct bssmap_reset *bssmap_reset);
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
new file mode 100644
index 000000000..fd2ac320b
--- /dev/null
+++ b/include/osmocom/bsc/bts.h
@@ -0,0 +1,627 @@
+#pragma once
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <stdbool.h>
+
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/bitvec.h>
+#include <osmocom/gsm/tlv.h>
+#include <osmocom/gsm/bts_features.h>
+
+#include <osmocom/abis/e1_input.h>
+
+#include "osmocom/bsc/gsm_data.h"
+#include "osmocom/bsc/bts_trx.h"
+
+enum bts_counter_id {
+ BTS_CTR_CHREQ_TOTAL,
+ BTS_CTR_CHREQ_SUCCESSFUL,
+ BTS_CTR_CHREQ_NO_CHANNEL,
+ BTS_CTR_CHAN_RF_FAIL,
+ BTS_CTR_CHAN_RLL_ERR,
+ BTS_CTR_BTS_OML_FAIL,
+ BTS_CTR_BTS_RSL_FAIL,
+ BTS_CTR_CODEC_AMR_F,
+ BTS_CTR_CODEC_AMR_H,
+ BTS_CTR_CODEC_EFR,
+ BTS_CTR_CODEC_V1_FR,
+ BTS_CTR_CODEC_V1_HR,
+ BTS_CTR_PAGING_ATTEMPTED,
+ BTS_CTR_PAGING_ALREADY,
+ BTS_CTR_PAGING_RESPONDED,
+ BTS_CTR_PAGING_EXPIRED,
+ BTS_CTR_PAGING_NO_ACTIVE_PAGING,
+ BTS_CTR_PAGING_MSC_FLUSH,
+ BTS_CTR_CHAN_ACT_TOTAL,
+ BTS_CTR_CHAN_ACT_NACK,
+ BTS_CTR_RSL_UNKNOWN,
+ BTS_CTR_RSL_IPA_NACK,
+ BTS_CTR_RSL_DELETE_IND,
+ BTS_CTR_MODE_MODIFY_NACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_UNUSED,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_ACTIV_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RF_RELEASE_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_BORKEN,
+ BTS_CTR_LCHAN_BORKEN_FROM_UNKNOWN,
+ BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_ACK,
+ BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_NACK,
+ BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK,
+ BTS_CTR_LCHAN_BORKEN_EV_VTY,
+ BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK,
+ BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED,
+ BTS_CTR_TS_BORKEN_FROM_UNUSED,
+ BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_ACT,
+ BTS_CTR_TS_BORKEN_FROM_PDCH,
+ BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_DEACT,
+ BTS_CTR_TS_BORKEN_FROM_IN_USE,
+ BTS_CTR_TS_BORKEN_FROM_BORKEN,
+ BTS_CTR_TS_BORKEN_FROM_UNKNOWN,
+ BTS_CTR_TS_BORKEN_EV_PDCH_ACT_ACK_NACK,
+ BTS_CTR_TS_BORKEN_EV_PDCH_DEACT_ACK_NACK,
+ BTS_CTR_TS_BORKEN_EV_TEARDOWN,
+ BTS_CTR_ASSIGNMENT_ATTEMPTED,
+ BTS_CTR_ASSIGNMENT_COMPLETED,
+ BTS_CTR_ASSIGNMENT_STOPPED,
+ BTS_CTR_ASSIGNMENT_NO_CHANNEL,
+ BTS_CTR_ASSIGNMENT_TIMEOUT,
+ BTS_CTR_ASSIGNMENT_FAILED,
+ BTS_CTR_ASSIGNMENT_ERROR,
+ BTS_CTR_HANDOVER_ATTEMPTED,
+ BTS_CTR_HANDOVER_COMPLETED,
+ BTS_CTR_HANDOVER_STOPPED,
+ BTS_CTR_HANDOVER_NO_CHANNEL,
+ BTS_CTR_HANDOVER_TIMEOUT,
+ BTS_CTR_HANDOVER_FAILED,
+ BTS_CTR_HANDOVER_ERROR,
+ BTS_CTR_INTRA_CELL_HO_ATTEMPTED,
+ BTS_CTR_INTRA_CELL_HO_COMPLETED,
+ BTS_CTR_INTRA_CELL_HO_STOPPED,
+ BTS_CTR_INTRA_CELL_HO_NO_CHANNEL,
+ BTS_CTR_INTRA_CELL_HO_TIMEOUT,
+ BTS_CTR_INTRA_CELL_HO_FAILED,
+ BTS_CTR_INTRA_CELL_HO_ERROR,
+ BTS_CTR_INTRA_BSC_HO_ATTEMPTED,
+ BTS_CTR_INTRA_BSC_HO_COMPLETED,
+ BTS_CTR_INTRA_BSC_HO_STOPPED,
+ BTS_CTR_INTRA_BSC_HO_NO_CHANNEL,
+ BTS_CTR_INTRA_BSC_HO_TIMEOUT,
+ BTS_CTR_INTRA_BSC_HO_FAILED,
+ BTS_CTR_INTRA_BSC_HO_ERROR,
+ BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED,
+ BTS_CTR_INTER_BSC_HO_OUT_COMPLETED,
+ BTS_CTR_INTER_BSC_HO_OUT_STOPPED,
+ BTS_CTR_INTER_BSC_HO_OUT_TIMEOUT,
+ BTS_CTR_INTER_BSC_HO_OUT_FAILED,
+ BTS_CTR_INTER_BSC_HO_OUT_ERROR,
+ BTS_CTR_INTER_BSC_HO_IN_ATTEMPTED,
+ BTS_CTR_INTER_BSC_HO_IN_COMPLETED,
+ BTS_CTR_INTER_BSC_HO_IN_STOPPED,
+ BTS_CTR_INTER_BSC_HO_IN_NO_CHANNEL,
+ BTS_CTR_INTER_BSC_HO_IN_FAILED,
+ BTS_CTR_INTER_BSC_HO_IN_TIMEOUT,
+ BTS_CTR_INTER_BSC_HO_IN_ERROR,
+};
+
+extern const struct rate_ctr_desc bts_ctr_description[];
+extern const struct rate_ctr_group_desc bts_ctrg_desc;
+
+enum {
+ BTS_STAT_CHAN_LOAD_AVERAGE,
+ BTS_STAT_CHAN_CCCH_SDCCH4_USED,
+ BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL,
+ BTS_STAT_CHAN_TCH_F_USED,
+ BTS_STAT_CHAN_TCH_F_TOTAL,
+ BTS_STAT_CHAN_TCH_H_USED,
+ BTS_STAT_CHAN_TCH_H_TOTAL,
+ BTS_STAT_CHAN_SDCCH8_USED,
+ BTS_STAT_CHAN_SDCCH8_TOTAL,
+ BTS_STAT_CHAN_TCH_F_PDCH_USED,
+ BTS_STAT_CHAN_TCH_F_PDCH_TOTAL,
+ BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED,
+ BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL,
+ BTS_STAT_CHAN_SDCCH8_CBCH_USED,
+ BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL,
+ BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_USED,
+ BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_TOTAL,
+ BTS_STAT_T3122,
+ BTS_STAT_RACH_BUSY,
+ BTS_STAT_RACH_ACCESS,
+ BTS_STAT_OML_CONNECTED,
+ BTS_STAT_RSL_CONNECTED,
+ BTS_STAT_LCHAN_BORKEN,
+ BTS_STAT_TS_BORKEN,
+};
+
+extern const struct osmo_stat_item_desc bts_stat_desc[];
+extern const struct osmo_stat_item_group_desc bts_statg_desc;
+
+enum gsm_bts_type {
+ GSM_BTS_TYPE_UNKNOWN,
+ GSM_BTS_TYPE_BS11,
+ GSM_BTS_TYPE_NANOBTS,
+ GSM_BTS_TYPE_RBS2000,
+ GSM_BTS_TYPE_NOKIA_SITE,
+ GSM_BTS_TYPE_OSMOBTS,
+ _NUM_GSM_BTS_TYPE
+};
+extern const struct value_string bts_type_names[_NUM_GSM_BTS_TYPE+1];
+extern const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1];
+
+enum gsm_bts_type_variant {
+ BTS_UNKNOWN,
+ BTS_OSMO_LITECELL15,
+ BTS_OSMO_OCTPHY,
+ BTS_OSMO_SYSMO,
+ BTS_OSMO_TRX,
+ _NUM_BTS_VARIANT
+};
+
+/* Used by OML layer for BTS Attribute reporting */
+enum bts_attribute {
+ BTS_TYPE_VARIANT,
+ BTS_SUB_MODEL,
+ TRX_PHY_VERSION,
+};
+
+struct vty;
+
+struct gsm_bts_model {
+ struct llist_head list;
+
+ enum gsm_bts_type type;
+ enum gsm_bts_type_variant variant;
+ const char *name;
+
+ bool started;
+ int (*start)(struct gsm_network *net);
+ int (*oml_rcvmsg)(struct msgb *msg);
+ char * (*oml_status)(const struct gsm_bts *bts);
+
+ void (*e1line_bind_ops)(struct e1inp_line *line);
+
+ void (*config_write_bts)(struct vty *vty, struct gsm_bts *bts);
+ void (*config_write_trx)(struct vty *vty, struct gsm_bts_trx *trx);
+ void (*config_write_ts)(struct vty *vty, struct gsm_bts_trx_ts *ts);
+
+ /* Should SI2bis and SI2ter be disabled by default on this BTS model? */
+ bool force_combined_si;
+
+ struct tlv_definition nm_att_tlvdef;
+
+ /* features of a given BTS model set via gsm_bts_model_register() locally */
+ struct bitvec features;
+ uint8_t _features_data[MAX_BTS_FEATURES/8];
+};
+
+/* BTS Site Manager */
+struct gsm_bts_sm {
+ struct gsm_abis_mo mo;
+ /* nanoBTS and old versions of osmo-bts behaves this way due to
+ broken FSMs not following TS 12.21: they never do
+ Dependency->Offline transition, but they should be OPSTARTed
+ nevertheless during Dependnecy state to work. This field is
+ used by all dependent NM objects. */
+ bool peer_has_no_avstate_offline;
+};
+
+/* One BTS */
+struct gsm_bts {
+ /* list header in net->bts_list */
+ struct llist_head list;
+
+ /* Geographical location of the BTS */
+ struct llist_head loc_list;
+
+ /* number of this BTS in network */
+ uint8_t nr;
+ /* human readable name / description */
+ char *description;
+ /* Cell Identity */
+ uint16_t cell_identity;
+ /* location area code of this BTS */
+ uint16_t location_area_code;
+ /* Base Station Identification Code (BSIC), lower 3 bits is BCC,
+ * which is used as TSC for the CCCH */
+ uint8_t bsic;
+ /* type of BTS */
+ enum gsm_bts_type type;
+ enum gsm_bts_type_variant variant;
+ struct gsm_bts_model *model;
+ enum gsm_band band;
+ char version[MAX_VERSION_LENGTH];
+ char sub_model[MAX_VERSION_LENGTH];
+
+ /* features of a given BTS set/reported via OML */
+ struct bitvec features;
+ uint8_t _features_data[MAX_BTS_FEATURES/8];
+
+ /* Connected PCU version (if any) */
+ char pcu_version[MAX_VERSION_LENGTH];
+
+ /* maximum Tx power that the MS is permitted to use in this cell */
+ int ms_max_power;
+
+ /* how do we talk OML with this TRX? */
+ struct gsm_e1_subslot oml_e1_link;
+ uint8_t oml_tei;
+ struct e1inp_sign_link *oml_link;
+ /* Timer to use for deferred drop of OML link, see \ref ipaccess_drop_oml_deferred */
+ struct osmo_timer_list oml_drop_link_timer;
+ /* when OML link was established */
+ time_t uptime;
+
+ /* Abis network management O&M handle */
+ struct abis_nm_h *nmh;
+
+ struct gsm_abis_mo mo;
+
+ /* number of this BTS on given E1 link */
+ uint8_t bts_nr;
+
+ /* DTX features of this BTS */
+ enum gsm48_dtx_mode dtxu;
+ bool dtxd;
+
+ /* paging state and control */
+ struct gsm_bts_paging_state paging;
+
+ /* CCCH is on C0 */
+ struct gsm_bts_trx *c0;
+
+ struct gsm_bts_sm site_mgr;
+
+ /* bitmask of all SI that are present/valid in si_buf */
+ uint32_t si_valid;
+ /* 3GPP TS 44.018 Table 10.5.2.33b.1 INDEX and COUNT for SI2quater */
+ uint8_t si2q_index; /* distinguish individual SI2quater messages */
+ uint8_t si2q_count; /* si2q_index for the last (highest indexed) individual SI2quater message */
+ /* buffers where we put the pre-computed SI */
+ sysinfo_buf_t si_buf[_MAX_SYSINFO_TYPE][SI2Q_MAX_NUM];
+ /* offsets used while generating SI2quater */
+ size_t e_offset;
+ size_t u_offset;
+ /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. Some nanoBTS fail upon
+ * receival of empty SI disabling unsupported SI. see OS#3707. */
+ bool si_unused_send_empty;
+
+ /* ip.access Unit ID's have Site/BTS/TRX layout */
+ union {
+ struct {
+ uint16_t site_id;
+ uint16_t bts_id;
+ uint32_t flags;
+ uint32_t rsl_ip;
+ } ip_access;
+ struct {
+ struct {
+ struct gsm_abis_mo mo;
+ } cclk;
+ struct {
+ struct gsm_abis_mo mo;
+ } rack;
+ struct gsm_envabtse envabtse[4];
+ } bs11;
+ struct {
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ struct llist_head conn_groups;
+ } cf;
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ struct llist_head conn_groups;
+ } is;
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ struct llist_head conn_groups;
+ } con;
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ } dp;
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ } tf;
+ struct {
+ struct om2k_mo om2k_mo;
+ struct gsm_abis_mo mo;
+ } mctr;
+ uint32_t use_superchannel:1;
+ struct {
+ uint16_t limit;
+ uint16_t active;
+ } om2k_version[16];
+ } rbs2000;
+ struct {
+ uint8_t bts_type;
+ unsigned int configured:1, /* we sent the config data request */
+ skip_reset:1, /* skip reset at bootstrap */
+ no_loc_rel_cnf:1, /* don't wait for RSL REL CONF */
+ bts_reset_timer_cnf, /* timer for BTS RESET */
+ did_reset:1, /* we received a RESET ACK */
+ wait_reset:2; /* we are waiting for reset to complete */
+ struct osmo_timer_list reset_timer;
+ } nokia;
+ };
+
+ /* Not entirely sure how ip.access specific this is */
+ struct {
+ enum bts_gprs_mode mode;
+ struct {
+ struct gsm_abis_mo mo;
+ uint16_t nsei;
+ uint8_t timer[7];
+ } nse;
+ struct {
+ struct gsm_abis_mo mo;
+ uint16_t bvci;
+ uint8_t timer[11];
+ struct gprs_rlc_cfg rlc_cfg;
+ } cell;
+ struct gsm_bts_gprs_nsvc nsvc[2];
+ uint8_t rac;
+ uint8_t net_ctrl_ord;
+ bool ctrl_ack_type_use_block;
+ bool egprs_pkt_chan_request;
+ } gprs;
+
+ /* threshold (in percent) when BTS shall send CCCH LOAD IND */
+ int ccch_load_ind_thresh;
+
+ /* RACH NM values */
+ int rach_b_thresh;
+ int rach_ldavg_slots;
+
+ /* transceivers */
+ int num_trx;
+ struct llist_head trx_list;
+
+ /* SI related items */
+ int force_combined_si;
+ bool force_combined_si_set;
+ int bcch_change_mark;
+
+ /* Abis NM queue */
+ struct llist_head abis_queue;
+ int abis_nm_pend;
+
+ struct gsm_network *network;
+
+ /* should the channel allocator allocate channels from high TRX to TRX0,
+ * rather than starting from TRX0 and go upwards? */
+ int chan_alloc_reverse;
+
+ enum neigh_list_manual_mode neigh_list_manual_mode;
+ /* parameters from which we build SYSTEM INFORMATION */
+ struct {
+ struct gsm48_rach_control rach_control;
+ uint8_t ncc_permitted;
+ struct gsm48_cell_sel_par cell_sel_par;
+ struct gsm48_si_selection_params cell_ro_sel_par; /* rest octet */
+ struct gsm48_cell_options cell_options;
+ struct gsm48_control_channel_descr chan_desc;
+ struct bitvec neigh_list;
+ struct bitvec cell_alloc;
+ struct bitvec si5_neigh_list;
+ struct osmo_earfcn_si2q si2quater_neigh_list;
+ size_t uarfcn_length; /* index for uarfcn and scramble lists */
+ struct {
+ /* bitmask large enough for all possible ARFCN's */
+ uint8_t neigh_list[1024/8];
+ uint8_t cell_alloc[1024/8];
+ /* If the user wants a different neighbor list in SI5 than in SI2 */
+ uint8_t si5_neigh_list[1024/8];
+ uint8_t meas_bw_list[MAX_EARFCN_LIST];
+ uint16_t earfcn_list[MAX_EARFCN_LIST];
+ uint16_t uarfcn_list[MAX_EARFCN_LIST];
+ uint16_t scramble_list[MAX_EARFCN_LIST];
+ } data;
+ } si_common;
+ bool early_classmark_allowed;
+ bool early_classmark_allowed_3g;
+ /* for testing only: Have an infinitely long radio link timeout */
+ bool infinite_radio_link_timeout;
+
+ /* do we use static (user-defined) system information messages? (bitmask) */
+ uint32_t si_mode_static;
+
+ /* access control class ramping */
+ struct acc_mgr acc_mgr;
+ struct acc_ramp acc_ramp;
+
+ /* exclude the BTS from the global RF Lock handling */
+ int excl_from_rf_lock;
+
+ /* supported codecs beside FR */
+ struct bts_codec_conf codec;
+
+ /* BTS dependencies bit field */
+ uint32_t depends_on[256/(8*4)];
+
+ /* full and half rate multirate config */
+ struct amr_multirate_conf mr_full;
+ struct amr_multirate_conf mr_half;
+
+ /* PCU socket state */
+ char *pcu_sock_path;
+ struct pcu_sock_state *pcu_state;
+
+ struct rate_ctr_group *bts_ctrs;
+ struct osmo_stat_item_group *bts_statg;
+
+ struct handover_cfg *ho;
+
+ /* A list of struct gsm_bts_ref, indicating neighbors of this BTS.
+ * When the si_common neigh_list is in automatic mode, it is populated from this list as well as
+ * gsm_network->neighbor_bss_cells. */
+ struct llist_head local_neighbors;
+
+ /* BTS-specific overrides for timer values from struct gsm_network. */
+ uint8_t T3122; /* ASSIGNMENT REJECT wait indication */
+ bool T3113_dynamic; /* Calculate T3113 timeout dynamically based on BTS channel config and load */
+
+ /* Periodic channel load measurements are used to maintain T3122. */
+ struct load_counter chan_load_samples[7];
+ int chan_load_samples_idx;
+ uint8_t chan_load_avg; /* current channel load average in percent (0 - 100). */
+
+ /* cell broadcast system */
+ struct osmo_timer_list cbch_timer;
+ struct bts_smscb_chan_state cbch_basic;
+ struct bts_smscb_chan_state cbch_extended;
+ struct osmo_timer_list etws_timer; /* when to stop ETWS PN */
+
+ struct llist_head oml_fail_rep;
+ struct llist_head chan_rqd_queue;
+};
+
+#define GSM_BTS_SI2Q(bts, i) (struct gsm48_system_information_type_2quater *)((bts)->si_buf[SYSINFO_TYPE_2quater][i])
+#define GSM_BTS_HAS_SI(bts, i) ((bts)->si_valid & (1 << i))
+#define GSM_BTS_SI(bts, i) (void *)((bts)->si_buf[i][0])
+
+/* this actually refers to the IPA transport, not the BTS model */
+static inline int is_ipaccess_bts(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_NANOBTS:
+ case GSM_BTS_TYPE_OSMOBTS:
+ return 1;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static inline int is_sysmobts_v2(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_OSMOBTS:
+ return 1;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static inline int is_siemens_bts(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_BS11:
+ return 1;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static inline int is_nokia_bts(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_NOKIA_SITE:
+ return 1;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static inline int is_ericsson_bts(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_RBS2000:
+ return 1;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static inline int is_e1_bts(const struct gsm_bts *bts)
+{
+ switch (bts->type) {
+ case GSM_BTS_TYPE_BS11:
+ case GSM_BTS_TYPE_RBS2000:
+ case GSM_BTS_TYPE_NOKIA_SITE:
+ return 1;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static inline const struct osmo_location_area_id *bts_lai(struct gsm_bts *bts)
+{
+ static struct osmo_location_area_id lai;
+ lai = (struct osmo_location_area_id){
+ .plmn = bts->network->plmn,
+ .lac = bts->location_area_code,
+ };
+ return &lai;
+}
+
+static inline struct gsm_bts *gsm_bts_sm_get_bts(struct gsm_bts_sm *site_mgr) {
+ return (struct gsm_bts *)container_of(site_mgr, struct gsm_bts, site_mgr);
+}
+
+struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, uint8_t bts_num);
+
+char *gsm_bts_name(const struct gsm_bts *bts);
+
+bool gsm_bts_matches_lai(const struct gsm_bts *bts, const struct osmo_location_area_id *lai);
+bool gsm_bts_matches_cell_id(const struct gsm_bts *bts, const struct gsm0808_cell_id *cell_id);
+
+int gsm_bts_local_neighbor_add(struct gsm_bts *bts, struct gsm_bts *neighbor);
+int gsm_bts_local_neighbor_del(struct gsm_bts *bts, const struct gsm_bts *neighbor);
+
+/* return the gsm_lchan for the CBCH (if it exists at all) */
+struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);
+
+int gsm_set_bts_type(struct gsm_bts *bts, enum gsm_bts_type type);
+
+struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num);
+
+int bts_gprs_mode_is_compat(struct gsm_bts *bts, enum bts_gprs_mode mode);
+
+unsigned long long bts_uptime(const struct gsm_bts *bts);
+
+char *get_model_oml_status(const struct gsm_bts *bts);
+/* reset the state of all MO in the BTS */
+void gsm_bts_mo_reset(struct gsm_bts *bts);
+
+/* dependency handling */
+void bts_depend_mark(struct gsm_bts *bts, int dep);
+void bts_depend_clear(struct gsm_bts *bts, int dep);
+int bts_depend_check(struct gsm_bts *bts);
+int bts_depend_is_depedency(struct gsm_bts *base, struct gsm_bts *other);
+
+int gsm_bts_get_radio_link_timeout(const struct gsm_bts *bts);
+void gsm_bts_set_radio_link_timeout(struct gsm_bts *bts, int value);
+
+void gsm_bts_all_ts_dispatch(struct gsm_bts *bts, uint32_t ts_ev, void *data);
+
+int bts_count_free_ts(struct gsm_bts *bts, enum gsm_phys_chan_config pchan);
+
+int gsm_bts_set_system_infos(struct gsm_bts *bts);
+
+int gsm_bts_model_register(struct gsm_bts_model *model);
+struct gsm_bts_model *bts_model_find(enum gsm_bts_type type);
+
+enum gsm_bts_type str2btstype(const char *arg);
+const char *btstype2str(enum gsm_bts_type type);
+
+enum bts_attribute str2btsattr(const char *s);
+const char *btsatttr2str(enum bts_attribute v);
+
+enum gsm_bts_type_variant str2btsvariant(const char *arg);
+const char *btsvariant2str(enum gsm_bts_type_variant v);
diff --git a/include/osmocom/bsc/bts_trx.h b/include/osmocom/bsc/bts_trx.h
new file mode 100644
index 000000000..5888c6318
--- /dev/null
+++ b/include/osmocom/bsc/bts_trx.h
@@ -0,0 +1,100 @@
+#pragma once
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <stdbool.h>
+
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/timer.h>
+#include <osmocom/core/bitvec.h>
+#include <osmocom/gsm/tlv.h>
+
+#include <osmocom/abis/e1_input.h>
+
+#include "osmocom/bsc/gsm_data.h"
+
+struct gsm_bts;
+
+#define TRX_NR_TS 8
+
+struct gsm_bts_bb_trx {
+ struct gsm_abis_mo mo;
+};
+
+/* One TRX in a BTS */
+struct gsm_bts_trx {
+ /* list header in bts->trx_list */
+ struct llist_head list;
+
+ struct gsm_bts *bts;
+ /* number of this TRX in the BTS */
+ uint8_t nr;
+ /* human readable name / description */
+ char *description;
+ /* how do we talk RSL with this TRX? */
+ struct gsm_e1_subslot rsl_e1_link;
+ uint8_t rsl_tei;
+ struct e1inp_sign_link *rsl_link;
+
+ /* Timeout for initiating the RSL connection. */
+ struct osmo_timer_list rsl_connect_timeout;
+
+ /* Some BTS (specifically Ericsson RBS) have a per-TRX OML Link */
+ struct e1inp_sign_link *oml_link;
+
+ struct gsm_abis_mo mo;
+ struct tlv_parsed nm_attr;
+ struct gsm_bts_bb_trx bb_transc;
+
+ uint16_t arfcn;
+ int nominal_power; /* in dBm */
+ unsigned int max_power_red; /* in actual dB */
+
+ union {
+ struct {
+ struct {
+ struct gsm_abis_mo mo;
+ } bbsig;
+ struct {
+ struct gsm_abis_mo mo;
+ } pa;
+ } bs11;
+ struct {
+ unsigned int test_state;
+ uint8_t test_nr;
+ struct rxlev_stats rxlev_stat;
+ } ipaccess;
+ struct {
+ struct {
+ struct om2k_mo om2k_mo;
+ } trxc;
+ struct {
+ struct om2k_mo om2k_mo;
+ } rx;
+ struct {
+ struct om2k_mo om2k_mo;
+ } tx;
+ } rbs2000;
+ };
+ struct gsm_bts_trx_ts ts[TRX_NR_TS];
+};
+
+static inline struct gsm_bts_trx *gsm_bts_bb_trx_get_trx(struct gsm_bts_bb_trx *bb_transc) {
+ return (struct gsm_bts_trx *)container_of(bb_transc, struct gsm_bts_trx, bb_transc);
+}
+
+struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
+char *gsm_trx_name(const struct gsm_bts_trx *trx);
+
+struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
+ int *rc);
+
+void gsm_trx_lock_rf(struct gsm_bts_trx *trx, bool locked, const char *reason);
+bool trx_is_usable(const struct gsm_bts_trx *trx);
+
+void gsm_trx_all_ts_dispatch(struct gsm_bts_trx *trx, uint32_t ts_ev, void *data);
+int trx_count_free_ts(struct gsm_bts_trx *trx, enum gsm_phys_chan_config pchan);
+bool trx_has_valid_pchan_config(const struct gsm_bts_trx *trx);
+
+int gsm_bts_trx_set_system_infos(struct gsm_bts_trx *trx);
diff --git a/include/osmocom/bsc/chan_alloc.h b/include/osmocom/bsc/chan_alloc.h
index 97f6cb2db..b509e3e6d 100644
--- a/include/osmocom/bsc/chan_alloc.h
+++ b/include/osmocom/bsc/chan_alloc.h
@@ -24,9 +24,6 @@
struct gsm_subscriber_connection;
-/* Allocate a logical channel (SDCCH, TCH, ...) */
-struct gsm_lchan *lchan_alloc(struct gsm_bts *bts, enum gsm_chan_t type, int allow_bigger);
-
/* Free a logical channel (SDCCH, TCH, ...) */
void lchan_free(struct gsm_lchan *lchan);
diff --git a/include/osmocom/bsc/codec_pref.h b/include/osmocom/bsc/codec_pref.h
index 51340c118..adefe0473 100644
--- a/include/osmocom/bsc/codec_pref.h
+++ b/include/osmocom/bsc/codec_pref.h
@@ -9,14 +9,19 @@ struct gsm_audio_support;
struct bts_codec_conf;
struct bsc_msc_data;
struct gsm_bts;
+struct channel_mode_and_rate;
-int match_codec_pref(enum gsm48_chan_mode *chan_mode,
- bool *full_rate,
- uint16_t *s15_s0,
+enum rate_pref {
+ RATE_PREF_NONE,
+ RATE_PREF_HR,
+ RATE_PREF_FR,
+};
+
+int match_codec_pref(struct channel_mode_and_rate *ch_mode_rate,
const struct gsm0808_channel_type *ct,
const struct gsm0808_speech_codec_list *scl,
const struct bsc_msc_data *msc,
- const struct gsm_bts *bts);
+ const struct gsm_bts *bts, enum rate_pref rate_pref);
void gen_bss_supported_codec_list(struct gsm0808_speech_codec_list *scl,
const struct bsc_msc_data *msc,
diff --git a/include/osmocom/bsc/debug.h b/include/osmocom/bsc/debug.h
index e78ba59a8..4ad61b42e 100644
--- a/include/osmocom/bsc/debug.h
+++ b/include/osmocom/bsc/debug.h
@@ -19,7 +19,6 @@ enum {
DHO,
DHODEC,
DREF,
- DNAT,
DCTRL,
DFILTER,
DPCU,
@@ -27,5 +26,14 @@ enum {
DCHAN,
DTS,
DAS,
+ DCBS,
+ DLCS,
+ DRESET,
Debug_LastEntry,
};
+
+#define LOG_BTS(bts, subsys, level, fmt, args...) \
+ LOGP(subsys, level, "(bts=%d) " fmt, (bts)->nr, ## args)
+
+#define LOG_TRX(trx, subsys, level, fmt, args...) \
+ LOGP(subsys, level, "(bts=%d,trx=%d) " fmt, (trx)->bts->nr, (trx)->nr, ## args)
diff --git a/include/osmocom/bsc/gsm_04_08_rr.h b/include/osmocom/bsc/gsm_04_08_rr.h
index 8e4f78785..91dcbe35a 100644
--- a/include/osmocom/bsc/gsm_04_08_rr.h
+++ b/include/osmocom/bsc/gsm_04_08_rr.h
@@ -1,6 +1,7 @@
#pragma once
#include <stdint.h>
+#include <osmocom/core/msgb.h>
struct amr_mode;
struct amr_multirate_conf;
@@ -11,7 +12,6 @@ struct gsm_lchan;
struct gsm_meas_rep;
struct gsm_network;
struct gsm_subscriber_connection;
-struct msgb;
void gsm_net_update_ctype(struct gsm_network *network);
enum gsm_chan_t get_ctype_by_chreq(struct gsm_network *network, uint8_t ra);
@@ -19,8 +19,6 @@ int get_reason_by_chreq(uint8_t ra, int neci);
int gsm48_send_rr_release(struct gsm_lchan *lchan);
int send_siemens_mrpci(struct gsm_lchan *lchan,
uint8_t *classmark2_lv);
-int gsm48_handle_paging_resp(struct gsm_subscriber_connection *conn,
- struct msgb *msg, struct bsc_subscr *bsub);
int gsm48_send_rr_classmark_enquiry(struct gsm_lchan *lchan);
int gsm48_send_rr_ciph_mode(struct gsm_lchan *lchan, int want_imeisv);
int gsm48_multirate_config(uint8_t *lv, const struct gsm48_multi_rate_conf *mr_conf,
@@ -29,6 +27,8 @@ struct msgb *gsm48_make_ho_cmd(struct gsm_lchan *new_lchan, uint8_t power_comman
int gsm48_send_ho_cmd(struct gsm_lchan *old_lchan, struct gsm_lchan *new_lchan,
uint8_t power_command, uint8_t ho_ref);
int gsm48_send_rr_ass_cmd(struct gsm_lchan *dest_lchan, struct gsm_lchan *lchan, uint8_t power_command);
+int gsm48_send_rr_app_info(struct gsm_lchan *lchan, uint8_t apdu_id, uint8_t apdu_flags,
+ const uint8_t *apdu_data, ssize_t apdu_data_len);
int gsm48_lchan_modify(struct gsm_lchan *lchan, uint8_t mode);
int gsm48_rx_rr_modif_ack(struct msgb *msg);
int gsm48_parse_meas_rep(struct gsm_meas_rep *rep, struct msgb *msg);
@@ -37,9 +37,6 @@ int gsm48_tx_mm_serv_rej(struct gsm_subscriber_connection *conn,
enum gsm48_reject_value value);
struct msgb *gsm48_create_mm_serv_rej(enum gsm48_reject_value value);
-int gsm48_extract_mi(uint8_t *classmark2_lv, int length, char *mi_string, uint8_t *mi_type);
-int gsm48_paging_extract_mi(struct gsm48_pag_resp *resp, int length,
- char *mi_string, uint8_t *mi_type);
struct msgb *gsm48_create_loc_upd_rej(uint8_t cause);
struct msgb *gsm48_create_rr_status(uint8_t cause);
diff --git a/include/osmocom/bsc/gsm_04_80.h b/include/osmocom/bsc/gsm_04_80.h
deleted file mode 100644
index 649ffe19f..000000000
--- a/include/osmocom/bsc/gsm_04_80.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-struct gsm_subscriber_connection;
-
-int bsc_send_ussd_notify(struct gsm_subscriber_connection *conn, int level,
- const char *text);
-int bsc_send_ussd_release_complete(struct gsm_subscriber_connection *conn);
diff --git a/include/osmocom/bsc/gsm_08_08.h b/include/osmocom/bsc/gsm_08_08.h
index 524129560..da5e2f1ac 100644
--- a/include/osmocom/bsc/gsm_08_08.h
+++ b/include/osmocom/bsc/gsm_08_08.h
@@ -6,11 +6,10 @@
struct gsm_subscriber_connection;
-void bsc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci);
+void bsc_sapi_n_reject(struct gsm_subscriber_connection *conn, uint8_t dlci, enum gsm0808_cause cause);
void bsc_cipher_mode_compl(struct gsm_subscriber_connection *conn, struct msgb *msg, uint8_t chosen_encr);
-int bsc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg, uint16_t chosen_channel);
+int bsc_compl_l3(struct gsm_lchan *lchan, struct msgb *msg, uint16_t chosen_channel);
void bsc_dtap(struct gsm_subscriber_connection *conn, uint8_t link_id, struct msgb *msg);
-int bsc_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause);
void bsc_cm_update(struct gsm_subscriber_connection *conn,
const uint8_t *cm2, uint8_t cm2_len,
const uint8_t *cm3, uint8_t cm3_len);
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 20901420e..ed40e360f 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -2,21 +2,22 @@
#define _GSM_DATA_H
#include <stdint.h>
-#include <regex.h>
#include <sys/types.h>
#include <stdbool.h>
-#include <stdint.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/rate_ctr.h>
#include <osmocom/core/select.h>
+#include <osmocom/core/socket.h>
#include <osmocom/core/stats.h>
#include <osmocom/core/stat_item.h>
#include <osmocom/gsm/bts_features.h>
#include <osmocom/gsm/protocol/gsm_08_08.h>
+#include <osmocom/gsm/protocol/gsm_48_049.h>
#include <osmocom/gsm/gsm0808.h>
#include <osmocom/gsm/gsm48.h>
#include <osmocom/core/fsm.h>
+#include <osmocom/core/tdef.h>
#include <osmocom/crypt/auth.h>
@@ -29,18 +30,18 @@
#include <osmocom/gsm/protocol/gsm_12_21.h>
#include <osmocom/abis/e1_input.h>
#include <osmocom/bsc/meas_rep.h>
-#include <osmocom/bsc/bsc_msg_filter.h>
-#include <osmocom/bsc/acc_ramp.h>
-#include <osmocom/bsc/gsm_timers.h>
+#include <osmocom/bsc/acc.h>
#include <osmocom/bsc/neighbor_ident.h>
+#include <osmocom/bsc/osmux.h>
#define GSM_T3122_DEFAULT 10
struct mgcp_client_conf;
struct mgcp_client;
-struct mgcp_ctx;
struct gsm0808_cell_id;
-struct mgw_endpoint;
+struct osmo_mgcpc_ep;
+struct gsm_bts;
+struct gsm_bts_trx;
/** annotations for msgb ownership */
#define __uses
@@ -50,11 +51,11 @@ struct mgw_endpoint;
struct bsc_subscr;
struct gprs_ra_id;
struct handover;
+struct osmo_sccp_instance;
+struct smlc_config;
#define OBSC_LINKID_CB(__msgb) (__msgb)->cb[3]
-#define tmsi_from_string(str) strtoul(str, NULL, 10)
-
/* 3-bit long values */
#define EARFCN_PRIO_INVALID 8
#define EARFCN_MEAS_BW_INVALID 8
@@ -99,19 +100,39 @@ enum subscr_sccp_state {
SUBSCR_SCCP_ST_CONNECTED
};
+enum channel_rate {
+ CH_RATE_SDCCH,
+ CH_RATE_HALF,
+ CH_RATE_FULL,
+};
+
+struct channel_mode_and_rate {
+ enum gsm48_chan_mode chan_mode;
+ enum channel_rate chan_rate;
+ uint16_t s15_s0;
+};
+
+/* Information retrieved during an Assignment Request from the MSC. This is storage of the Assignment instructions
+ * parsed from the Assignment Request message, to pass on until the gscon and assignment FSMs have decided whether an
+ * Assignment is actually going to be carried out. Should remain unchanged after initial decoding. */
struct assignment_request {
bool aoip;
uint16_t msc_assigned_cic;
- char msc_rtp_addr[INET_ADDRSTRLEN];
+ char msc_rtp_addr[INET6_ADDRSTRLEN];
uint16_t msc_rtp_port;
+ bool use_osmux;
+ uint8_t osmux_cid;
- enum gsm48_chan_mode chan_mode;
- bool full_rate;
- uint16_t s15_s0;
+ /* Rate/codec setting in preference order (need at least 1 !) */
+ int n_ch_mode_rate;
+ struct channel_mode_and_rate ch_mode_rate[3];
};
+/* State of an ongoing Assignment, while the assignment_fsm is still busy. This serves as state separation to keep the
+ * currently used lchan and gscon unmodified until the outcome of an Assignment is known. If the Assignment fails, this
+ * state is simply discarded, and the gscon carries on with the original lchan remaining unchanged. */
struct assignment_fsm_data {
struct assignment_request req;
bool requires_voice_stream;
@@ -122,7 +143,7 @@ struct assignment_fsm_data {
/* Whether this assignment triggered creation of the MGW endpoint: if the assignment
* fails, we will release that again as soon as possible. (If false, the endpoint already
* existed before or isn't needed at all.)*/
- struct mgwep_ci *created_ci_for_msc;
+ struct osmo_mgcpc_ep_ci *created_ci_for_msc;
enum gsm0808_cause failure_cause;
enum gsm48_rr_cause rr_cause;
@@ -165,12 +186,16 @@ struct handover_in_req {
struct gsm0808_speech_codec_list scl;
struct gsm0808_encrypt_info ei;
struct gsm_classmark classmark;
+ /* chosen_encr_alg reflects the encoded value as in RSL_ENC_ALG_A5(a5_numer):
+ * chosen_encr_alg == 1 means A5/0 i.e. no encryption, chosen_encr_alg == 4 means A5/3.
+ * chosen_encr_alg == 0 means no such IE was present. */
+ uint8_t chosen_encr_alg;
struct gsm0808_cell_id cell_id_serving;
char cell_id_serving_name[64];
struct gsm0808_cell_id cell_id_target;
char cell_id_target_name[64];
uint16_t msc_assigned_cic;
- char msc_assigned_rtp_addr[INET_ADDRSTRLEN];
+ char msc_assigned_rtp_addr[INET6_ADDRSTRLEN];
uint16_t msc_assigned_rtp_port;
};
@@ -187,7 +212,7 @@ struct handover {
struct gsm_lchan *new_lchan;
bool async;
struct handover_in_req inter_bsc_in;
- struct mgwep_ci *created_ci_for_msc;
+ struct osmo_mgcpc_ep_ci *created_ci_for_msc;
};
/* active radio connection of a mobile subscriber */
@@ -204,17 +229,19 @@ struct gsm_subscriber_connection {
/* back pointers */
struct gsm_network *network;
- /* the primary / currently active lchan to the BTS/subscriber */
+ /* the primary / currently active lchan to the BTS/subscriber. During Assignment and Handover, separate lchans
+ * are kept in the .assignment or .handover sub-structs, respectively, so that this lchan remains unaffected
+ * until Assignment or Handover have actually succeeded. */
struct gsm_lchan *lchan;
+ /* Only valid during an ongoing Assignment; might be overwritten at any time by a failed Assignment attempt.
+ * Once an Assignment was successful, all relevant state must be copied out of this sub-struct. */
struct assignment_fsm_data assignment;
- /* handover information, if a handover is pending for this conn. */
+ /* handover information, if a handover is pending for this conn. Valid only during an ongoing Handover
+ * operation. If a Handover was successful, all relevant state must be copied out of this sub-struct. */
struct handover ho;
- /* buffer/cache for classmark of the ME of the subscriber */
- struct gsm_classmark classmark;
-
/* Queue DTAP messages during handover/assignment (msgb_enqueue()/msgb_dequeue())*/
struct llist_head dtap_queue;
unsigned int dtap_queue_len;
@@ -235,18 +262,9 @@ struct gsm_subscriber_connection {
/* flag to prevent multiple simultaneous ciphering commands */
int ciphering_handled;
- /* state related to welcome USSD */
- uint8_t new_subscriber;
-
- /* state related to osmo_bsc_filter.c */
- struct bsc_filter_state filter_state;
-
/* SCCP connection associatd with this subscriber_connection */
struct {
- /* for advanced ping/pong */
- int send_ping;
-
- /* SCCP connection realted */
+ /* SCCP connection related */
struct bsc_msc_data *msc;
/* Sigtran connection ID */
@@ -259,16 +277,16 @@ struct gsm_subscriber_connection {
uint16_t msc_assigned_cic;
/* RTP address where the MSC expects us to send the RTP stream coming from the BTS. */
- char msc_assigned_rtp_addr[INET_ADDRSTRLEN];
+ char msc_assigned_rtp_addr[INET6_ADDRSTRLEN];
uint16_t msc_assigned_rtp_port;
/* The endpoint at the MGW used to join both BTS and MSC side connections, e.g.
* "rtpbridge/23@mgw". */
- struct mgw_endpoint *mgw_endpoint;
+ struct osmo_mgcpc_ep *mgw_endpoint;
- /* The connection identifier of the mgw_endpoint used to transceive RTP towards the MSC.
+ /* The connection identifier of the osmo_mgcpc_ep used to transceive RTP towards the MSC.
* (The BTS side CI is handled by struct gsm_lchan and the lchan_fsm.) */
- struct mgwep_ci *mgw_endpoint_ci_msc;
+ struct osmo_mgcpc_ep_ci *mgw_endpoint_ci_msc;
} user_plane;
/* LCLS (local call, local switch) related state */
@@ -282,6 +300,28 @@ struct gsm_subscriber_connection {
/* pointer to "other" connection, if Call Leg Relocation was successful */
struct gsm_subscriber_connection *other;
} lcls;
+
+ /* MS Power Class, TS 05.05 sec 4.1.1 "Mobile station". 0 means unset. */
+ uint8_t ms_power_class:3;
+
+ bool rx_clear_command;
+
+ /* Location Services handling for this subscriber */
+ struct {
+ /* FSM to handle Perform Location Request coming in from the MSC via A interface,
+ * and receive BSSMAP-LE responses from the SMLC. */
+ struct lcs_loc_req *loc_req;
+
+ /* FSM to handle BSSLAP requests coming in from the SMLC via Lb interface.
+ * BSSLAP APDU are encapsulated in BSSMAP-LE Connection Oriented Information messages. */
+ struct lcs_bsslap *bsslap;
+
+ /* Lb interface to the SMLC: BSSMAP-LE/SCCP connection associated with this subscriber */
+ struct {
+ int conn_id;
+ enum subscr_sccp_state state;
+ } lb;
+ } lcs;
};
@@ -310,7 +350,6 @@ enum gsm_chreq_reason_t {
use 4 as magic number for BCCH hack - see osmo-bts-../oml.c:opstart_compl() */
#define CCCH_LCHAN 4
-#define TRX_NR_TS 8
#define TS_MAX_LCHAN 8
#define HARDCODED_ARFCN 123
@@ -354,6 +393,12 @@ struct gsm_abis_mo {
struct gsm_nm_state nm_state;
struct tlv_parsed *nm_attr;
struct gsm_bts *bts;
+ struct osmo_fsm_inst *fi;
+ bool opstart_sent;
+ bool adm_unlock_sent;
+ bool set_attr_sent;
+ bool set_attr_ack_received;
+ bool force_rf_lock;
};
/* Ericsson OM2000 Managed Object */
@@ -373,7 +418,10 @@ struct om2k_mo {
#define A38_XOR_MAX_KEY_LEN 16
#define A38_COMP128_KEY_LEN 16
#define RSL_ENC_ALG_A5(x) (x+1)
-#define MAX_EARFCN_LIST 32
+/* Up to 16 SI2quater are multiplexed; each fits 3 EARFCNS, so the practical maximum is 3*16.
+ * The real maximum that fits in a total of 16 SI2quater rest octets also depends on the bits left by other SI2quater
+ * rest octets elements, so to really fit 48 EARFCNs most other SI2quater elements need to be omitted. */
+#define MAX_EARFCN_LIST (3*16)
/* is the data link established? who established it? */
#define LCHAN_SAPI_UNUSED 0
@@ -509,10 +557,14 @@ struct lchan_activate_info {
/* This always is for a specific lchan, so its lchan->type indicates full or half rate.
* When a dyn TS was selected, the lchan->type has been set to the desired rate. */
enum gsm48_chan_mode chan_mode;
+ struct gsm_encr encr;
+ /* AMR config */
uint16_t s15_s0;
bool requires_voice_stream;
bool wait_before_switching_rtp; /*< true = requires LCHAN_EV_READY_TO_SWITCH_RTP */
uint16_t msc_assigned_cic;
+ /* During intra-BSC handover, we keep the MGW endpoint intact and just re-route to the new lchan. This
+ * activate_info is for the new lchan, the re_use_mgw_endpoint_from_lchan points at the old lchan. */
struct gsm_lchan *re_use_mgw_endpoint_from_lchan;
};
@@ -527,7 +579,7 @@ struct gsm_lchan {
struct osmo_fsm_inst *fi;
struct osmo_fsm_inst *fi_rtp;
- struct mgwep_ci *mgw_endpoint_ci_bts;
+ struct osmo_mgcpc_ep_ci *mgw_endpoint_ci_bts;
struct {
struct lchan_activate_info info;
@@ -545,6 +597,7 @@ struct gsm_lchan {
* flag, so that the lchan will gracefully release at the next sensible junction. */
bool requested;
bool do_rr_release;
+ enum gsm48_rr_cause rr_cause;
/* There is an RSL error cause of value 0, so we need a separate flag. */
bool in_error;
@@ -554,6 +607,9 @@ struct gsm_lchan {
/* If a release event is being handled, ignore other ricocheting release events until that
* release handling has concluded. */
bool in_release_handler;
+
+ /* is this release at the end of a CSFB call? */
+ bool is_csfb;
} release;
/* The logical channel type */
@@ -572,6 +628,8 @@ struct gsm_lchan {
/* AMR bits */
uint8_t mr_ms_lv[7];
uint8_t mr_bts_lv[7];
+ /* AMR bits were based on these rate bits: */
+ uint16_t s15_s0;
/* Established data link layer services */
uint8_t sapis[8];
@@ -610,6 +668,13 @@ struct gsm_lchan {
struct gsm48_req_ref *rqd_ref;
struct gsm_subscriber_connection *conn;
+
+ /* Depending on the preferences that where submitted together with
+ * the assignment and the current channel load, the BSC has to select
+ * one of the offered codec/rates. The final selection by the BSC is
+ * stored here and is used when sending the assignment complete or
+ * when performing a handover procedure. */
+ struct channel_mode_and_rate ch_mode_rate;
};
/* One Timeslot in a TRX */
@@ -673,129 +738,8 @@ struct gsm_bts_trx_ts {
struct gsm_lchan lchan[TS_MAX_LCHAN];
};
-/* One TRX in a BTS */
-struct gsm_bts_trx {
- /* list header in bts->trx_list */
- struct llist_head list;
-
- struct gsm_bts *bts;
- /* number of this TRX in the BTS */
- uint8_t nr;
- /* human readable name / description */
- char *description;
- /* how do we talk RSL with this TRX? */
- struct gsm_e1_subslot rsl_e1_link;
- uint8_t rsl_tei;
- struct e1inp_sign_link *rsl_link;
-
- /* Timeout for initiating the RSL connection. */
- struct osmo_timer_list rsl_connect_timeout;
-
- /* Some BTS (specifically Ericsson RBS) have a per-TRX OML Link */
- struct e1inp_sign_link *oml_link;
-
- struct gsm_abis_mo mo;
- struct tlv_parsed nm_attr;
- struct {
- struct gsm_abis_mo mo;
- } bb_transc;
-
- uint16_t arfcn;
- int nominal_power; /* in dBm */
- unsigned int max_power_red; /* in actual dB */
-
- union {
- struct {
- struct {
- struct gsm_abis_mo mo;
- } bbsig;
- struct {
- struct gsm_abis_mo mo;
- } pa;
- } bs11;
- struct {
- unsigned int test_state;
- uint8_t test_nr;
- struct rxlev_stats rxlev_stat;
- } ipaccess;
- struct {
- struct {
- struct om2k_mo om2k_mo;
- } trxc;
- struct {
- struct om2k_mo om2k_mo;
- } rx;
- struct {
- struct om2k_mo om2k_mo;
- } tx;
- } rbs2000;
- };
- struct gsm_bts_trx_ts ts[TRX_NR_TS];
-};
-
-#define GSM_BTS_SI2Q(bts, i) (struct gsm48_system_information_type_2quater *)((bts)->si_buf[SYSINFO_TYPE_2quater][i])
-#define GSM_BTS_HAS_SI(bts, i) ((bts)->si_valid & (1 << i))
-#define GSM_BTS_SI(bts, i) (void *)((bts)->si_buf[i][0])
#define GSM_LCHAN_SI(lchan, i) (void *)((lchan)->si.buf[i][0])
-enum gsm_bts_type {
- GSM_BTS_TYPE_UNKNOWN,
- GSM_BTS_TYPE_BS11,
- GSM_BTS_TYPE_NANOBTS,
- GSM_BTS_TYPE_RBS2000,
- GSM_BTS_TYPE_NOKIA_SITE,
- GSM_BTS_TYPE_OSMOBTS,
- _NUM_GSM_BTS_TYPE
-};
-
-enum gsm_bts_type_variant {
- BTS_UNKNOWN,
- BTS_OSMO_LITECELL15,
- BTS_OSMO_OCTPHY,
- BTS_OSMO_SYSMO,
- BTS_OSMO_TRX,
- _NUM_BTS_VARIANT
-};
-
-/* Used by OML layer for BTS Attribute reporting */
-enum bts_attribute {
- BTS_TYPE_VARIANT,
- BTS_SUB_MODEL,
- TRX_PHY_VERSION,
-};
-
-struct vty;
-
-struct gsm_bts_model {
- struct llist_head list;
-
- enum gsm_bts_type type;
- enum gsm_bts_type_variant variant;
- const char *name;
-
- bool started;
- int (*start)(struct gsm_network *net);
- int (*oml_rcvmsg)(struct msgb *msg);
- char * (*oml_status)(const struct gsm_bts *bts);
-
- void (*e1line_bind_ops)(struct e1inp_line *line);
-
- void (*config_write_bts)(struct vty *vty, struct gsm_bts *bts);
- void (*config_write_trx)(struct vty *vty, struct gsm_bts_trx *trx);
- void (*config_write_ts)(struct vty *vty, struct gsm_bts_trx_ts *ts);
-
- /* Should SI2bis and SI2ter be disabled by default on this BTS model? */
- bool force_combined_si;
-
- struct tlv_definition nm_att_tlvdef;
-
- /* features of a given BTS model set via gsm_bts_model_register() locally */
- struct bitvec features;
- uint8_t _features_data[MAX_BTS_FEATURES/8];
-};
-
-
-
/*
* This keeps track of the paging status of one BTS. It
* includes a number of pending requests, a back pointer
@@ -827,9 +771,7 @@ struct gsm_bts_gprs_nsvc {
int id;
uint16_t nsvci;
uint16_t local_port; /* on the BTS */
- uint16_t remote_port; /* on the SGSN */
- uint32_t remote_ip; /* on the SGSN */
-
+ struct osmo_sockaddr remote;
struct gsm_abis_mo mo;
};
@@ -912,259 +854,57 @@ struct gsm_bts_ref {
struct gsm_bts *bts;
};
-/* One BTS */
-struct gsm_bts {
- /* list header in net->bts_list */
- struct llist_head list;
-
- /* Geographical location of the BTS */
- struct llist_head loc_list;
-
- /* number of ths BTS in network */
+/* A single Page of a SMSCB message */
+struct bts_smscb_page {
+ /* SMSCB message we're part of */
+ struct bts_smscb_message *msg;
+ /* Page Number within message (1 to 15) */
uint8_t nr;
- /* human readable name / description */
- char *description;
- /* Cell Identity */
- uint16_t cell_identity;
- /* location area code of this BTS */
- uint16_t location_area_code;
- /* Base Station Identification Code (BSIC), lower 3 bits is BCC,
- * which is used as TSC for the CCCH */
- uint8_t bsic;
- /* type of BTS */
- enum gsm_bts_type type;
- enum gsm_bts_type_variant variant;
- struct gsm_bts_model *model;
- enum gsm_band band;
- char version[MAX_VERSION_LENGTH];
- char sub_model[MAX_VERSION_LENGTH];
-
- /* features of a given BTS set/reported via OML */
- struct bitvec features;
- uint8_t _features_data[MAX_BTS_FEATURES/8];
-
- /* Connected PCU version (if any) */
- char pcu_version[MAX_VERSION_LENGTH];
-
- /* maximum Tx power that the MS is permitted to use in this cell */
- int ms_max_power;
-
- /* how do we talk OML with this TRX? */
- struct gsm_e1_subslot oml_e1_link;
- uint8_t oml_tei;
- struct e1inp_sign_link *oml_link;
- /* Timer to use for deferred drop of OML link, see \ref ipaccess_drop_oml_deferred */
- struct osmo_timer_list oml_drop_link_timer;
- /* when OML link was established */
- time_t uptime;
-
- /* Abis network management O&M handle */
- struct abis_nm_h *nmh;
-
- struct gsm_abis_mo mo;
-
- /* number of this BTS on given E1 link */
- uint8_t bts_nr;
-
- /* DTX features of this BTS */
- enum gsm48_dtx_mode dtxu;
- bool dtxd;
-
- /* paging state and control */
- struct gsm_bts_paging_state paging;
-
- /* CCCH is on C0 */
- struct gsm_bts_trx *c0;
-
- struct {
- struct gsm_abis_mo mo;
- } site_mgr;
-
- /* bitmask of all SI that are present/valid in si_buf */
- uint32_t si_valid;
- /* 3GPP TS 44.018 Table 10.5.2.33b.1 INDEX and COUNT for SI2quater */
- uint8_t si2q_index; /* distinguish individual SI2quater messages */
- uint8_t si2q_count; /* si2q_index for the last (highest indexed) individual SI2quater message */
- /* buffers where we put the pre-computed SI */
- sysinfo_buf_t si_buf[_MAX_SYSINFO_TYPE][SI2Q_MAX_NUM];
- /* offsets used while generating SI2quater */
- size_t e_offset;
- size_t u_offset;
- /* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. Some nanoBTS fail upon
- * receival of empty SI disabling unsupported SI. see OS#3707. */
- bool si_unused_send_empty;
-
- /* ip.accesss Unit ID's have Site/BTS/TRX layout */
- union {
- struct {
- uint16_t site_id;
- uint16_t bts_id;
- uint32_t flags;
- uint32_t rsl_ip;
- } ip_access;
- struct {
- struct {
- struct gsm_abis_mo mo;
- } cclk;
- struct {
- struct gsm_abis_mo mo;
- } rack;
- struct gsm_envabtse envabtse[4];
- } bs11;
- struct {
- struct {
- struct om2k_mo om2k_mo;
- struct gsm_abis_mo mo;
- struct llist_head conn_groups;
- } cf;
- struct {
- struct om2k_mo om2k_mo;
- struct gsm_abis_mo mo;
- struct llist_head conn_groups;
- } is;
- struct {
- struct om2k_mo om2k_mo;
- struct gsm_abis_mo mo;
- struct llist_head conn_groups;
- } con;
- struct {
- struct om2k_mo om2k_mo;
- struct gsm_abis_mo mo;
- } dp;
- struct {
- struct om2k_mo om2k_mo;
- struct gsm_abis_mo mo;
- } tf;
- uint32_t use_superchannel:1;
- } rbs2000;
- struct {
- uint8_t bts_type;
- unsigned int configured:1,
- skip_reset:1,
- no_loc_rel_cnf:1,
- bts_reset_timer_cnf,
- did_reset:1,
- wait_reset:1;
- struct osmo_timer_list reset_timer;
- } nokia;
- };
-
- /* Not entirely sure how ip.access specific this is */
- struct {
- uint8_t supports_egprs_11bit_rach;
- enum bts_gprs_mode mode;
- struct {
- struct gsm_abis_mo mo;
- uint16_t nsei;
- uint8_t timer[7];
- } nse;
- struct {
- struct gsm_abis_mo mo;
- uint16_t bvci;
- uint8_t timer[11];
- struct gprs_rlc_cfg rlc_cfg;
- } cell;
- struct gsm_bts_gprs_nsvc nsvc[2];
- uint8_t rac;
- uint8_t net_ctrl_ord;
- bool ctrl_ack_type_use_block;
- } gprs;
-
- /* RACH NM values */
- int rach_b_thresh;
- int rach_ldavg_slots;
-
- /* transceivers */
- int num_trx;
- struct llist_head trx_list;
-
- /* SI related items */
- int force_combined_si;
- bool force_combined_si_set;
- int bcch_change_mark;
-
- /* Abis NM queue */
- struct llist_head abis_queue;
- int abis_nm_pend;
-
- struct gsm_network *network;
-
- /* should the channel allocator allocate channels from high TRX to TRX0,
- * rather than starting from TRX0 and go upwards? */
- int chan_alloc_reverse;
+ /* number of valid blocks in data (up to 4) */
+ uint8_t num_blocks;
+ /* up to four blocks of 22 bytes each */
+ uint8_t data[88];
+};
- enum neigh_list_manual_mode neigh_list_manual_mode;
- /* parameters from which we build SYSTEM INFORMATION */
+/* A SMSCB message (received from CBSP) */
+struct bts_smscb_message {
+ /* entry in bts_smscb_chan_state.messages */
+ struct llist_head list;
struct {
- struct gsm48_rach_control rach_control;
- uint8_t ncc_permitted;
- struct gsm48_cell_sel_par cell_sel_par;
- struct gsm48_si_selection_params cell_ro_sel_par; /* rest octet */
- struct gsm48_cell_options cell_options;
- struct gsm48_control_channel_descr chan_desc;
- struct bitvec neigh_list;
- struct bitvec cell_alloc;
- struct bitvec si5_neigh_list;
- struct osmo_earfcn_si2q si2quater_neigh_list;
- size_t uarfcn_length; /* index for uarfcn and scramble lists */
- struct {
- /* bitmask large enough for all possible ARFCN's */
- uint8_t neigh_list[1024/8];
- uint8_t cell_alloc[1024/8];
- /* If the user wants a different neighbor list in SI5 than in SI2 */
- uint8_t si5_neigh_list[1024/8];
- uint8_t meas_bw_list[MAX_EARFCN_LIST];
- uint16_t earfcn_list[MAX_EARFCN_LIST];
- uint16_t uarfcn_list[MAX_EARFCN_LIST];
- uint16_t scramble_list[MAX_EARFCN_LIST];
- } data;
- } si_common;
- bool early_classmark_allowed;
- bool early_classmark_allowed_3g;
- /* for testing only: Have an infinitely long radio link timeout */
- bool infinite_radio_link_timeout;
-
- /* do we use static (user-defined) system information messages? (bitmask) */
- uint32_t si_mode_static;
-
- /* access control class ramping */
- struct acc_ramp acc_ramp;
-
- /* exclude the BTS from the global RF Lock handling */
- int excl_from_rf_lock;
-
- /* supported codecs beside FR */
- struct bts_codec_conf codec;
-
- /* BTS dependencies bit field */
- uint32_t depends_on[256/(8*4)];
-
- /* full and half rate multirate config */
- struct amr_multirate_conf mr_full;
- struct amr_multirate_conf mr_half;
-
- /* PCU socket state */
- char *pcu_sock_path;
- struct pcu_sock_state *pcu_state;
-
- struct rate_ctr_group *bts_ctrs;
- struct osmo_stat_item_group *bts_statg;
-
- struct handover_cfg *ho;
-
- /* A list of struct gsm_bts_ref, indicating neighbors of this BTS.
- * When the si_common neigh_list is in automatic mode, it is populated from this list as well as
- * gsm_network->neighbor_bss_cells. */
- struct llist_head local_neighbors;
+ /* input data from CBSP (CBC) side */
+ uint16_t msg_id;
+ uint16_t serial_nr;
+ enum cbsp_category category;
+ uint16_t rep_period;
+ uint16_t num_bcast_req;
+ uint8_t dcs;
+ } input;
+ /* how often have all pages of this message been broadcast? */
+ uint32_t bcast_count;
+ /* actual page data of this message */
+ uint8_t num_pages; /* up to 15 */
+ struct bts_smscb_page page[15];
+};
- /* BTS-specific overrides for timer values from struct gsm_network. */
- uint8_t T3122; /* ASSIGMENT REJECT wait indication */
- bool T3113_dynamic; /* Calculate T3113 timeout dynamically based on BTS channel config and load */
+/* per-channel (basic/extended) CBCH state for a single BTS */
+struct bts_smscb_chan_state {
+ /* back-pointer to BTS */
+ struct gsm_bts *bts;
+ /* list of bts_smscb_message */
+ struct llist_head messages;
+ /* scheduling array; pointer of SMSCB pages */
+ struct bts_smscb_page **sched_arr;
+ size_t sched_arr_size;
+ /* index of the next to be transmitted page into the scheduler array */
+ size_t next_idx;
+ /* number of messages we have to pause due to overflow */
+ uint8_t overflow;
+};
- /* Periodic channel load measurements are used to maintain T3122. */
- struct load_counter chan_load_samples[7];
- int chan_load_samples_idx;
- uint8_t chan_load_avg; /* current channel load average in percent (0 - 100). */
+struct bts_oml_fail_rep {
+ struct llist_head list;
+ time_t time;
+ struct msgb *mb;
};
/* One rejected BTS */
@@ -1178,29 +918,14 @@ struct gsm_bts_rejected {
time_t time;
};
+extern struct osmo_tdef_group bsc_tdef_group[];
+
struct gsm_network *gsm_network_init(void *ctx);
-struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, uint8_t bts_num);
struct gsm_bts *gsm_bts_num(const struct gsm_network *net, int num);
-bool gsm_bts_matches_lai(const struct gsm_bts *bts, const struct osmo_location_area_id *lai);
-bool gsm_bts_matches_cell_id(const struct gsm_bts *bts, const struct gsm0808_cell_id *cell_id);
struct gsm_bts *gsm_bts_by_cell_id(const struct gsm_network *net,
const struct gsm0808_cell_id *cell_id,
int match_idx);
-int gsm_bts_local_neighbor_add(struct gsm_bts *bts, struct gsm_bts *neighbor);
-int gsm_bts_local_neighbor_del(struct gsm_bts *bts, const struct gsm_bts *neighbor);
-
-struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
-struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num);
-
-enum gsm_bts_type str2btstype(const char *arg);
-const char *btstype2str(enum gsm_bts_type type);
-
-enum bts_attribute str2btsattr(const char *s);
-const char *btsatttr2str(enum bts_attribute v);
-
-enum gsm_bts_type_variant str2btsvariant(const char *arg);
-const char *btsvariant2str(enum gsm_bts_type_variant v);
extern const struct value_string gsm_chreq_descs[];
extern const struct value_string gsm_pchant_names[];
@@ -1212,7 +937,6 @@ static inline const char *gsm_pchan_id(enum gsm_phys_chan_config c)
enum gsm_phys_chan_config gsm_pchan_parse(const char *name);
const char *gsm_lchant_name(enum gsm_chan_t c);
const char *gsm_chreq_name(enum gsm_chreq_reason_t c);
-char *gsm_trx_name(const struct gsm_bts_trx *trx);
char *gsm_ts_name(const struct gsm_bts_trx_ts *ts);
char *gsm_ts_and_pchan_name(const struct gsm_bts_trx_ts *ts);
char *gsm_lchan_name_compute(const struct gsm_lchan *lchan);
@@ -1223,6 +947,8 @@ static inline char *gsm_lchan_name(const struct gsm_lchan *lchan)
}
void gsm_abis_mo_reset(struct gsm_abis_mo *mo);
+void gsm_mo_init(struct gsm_abis_mo *mo, struct gsm_bts *bts,
+ uint8_t obj_class, uint8_t p1, uint8_t p2, uint8_t p3);
struct gsm_nm_state *
gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
@@ -1231,9 +957,6 @@ void *
gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
const struct abis_om_obj_inst *obj_inst);
-/* reset the state of all MO in the BTS */
-void gsm_bts_mo_reset(struct gsm_bts *bts);
-
uint8_t gsm_pchan2chan_nr(enum gsm_phys_chan_config pchan,
uint8_t ts_nr, uint8_t lchan_nr);
uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan);
@@ -1244,95 +967,17 @@ void gsm48_lchan2chan_desc(struct gsm48_chan_desc *cd,
const struct gsm_lchan *lchan);
void gsm48_lchan2chan_desc_as_configured(struct gsm48_chan_desc *cd, const struct gsm_lchan *lchan);
-/* return the gsm_lchan for the CBCH (if it exists at all) */
-struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);
-
-/*
- * help with parsing regexps
- */
-int gsm_parse_reg(void *ctx, regex_t *reg, char **str,
- int argc, const char **argv) __attribute__ ((warn_unused_result));
-
-static inline uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts)
-{
- if (ts->tsc != -1)
- return ts->tsc;
- else
- return ts->trx->bts->bsic & 7;
-}
-
-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
- int *rc);
+uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts);
enum gsm_phys_chan_config ts_pchan(struct gsm_bts_trx_ts *ts);
uint8_t pchan_subslots(enum gsm_phys_chan_config pchan);
bool ts_is_tch(struct gsm_bts_trx_ts *ts);
-static inline struct gsm_bts *conn_get_bts(struct gsm_subscriber_connection *conn) {
- OSMO_ASSERT(conn->lchan);
- return conn->lchan->ts->trx->bts;
-}
-
-enum {
- BTS_CTR_CHREQ_TOTAL,
- BTS_CTR_CHREQ_NO_CHANNEL,
- BTS_CTR_CHAN_RF_FAIL,
- BTS_CTR_CHAN_RLL_ERR,
- BTS_CTR_BTS_OML_FAIL,
- BTS_CTR_BTS_RSL_FAIL,
- BTS_CTR_CODEC_AMR_F,
- BTS_CTR_CODEC_AMR_H,
- BTS_CTR_CODEC_EFR,
- BTS_CTR_CODEC_V1_FR,
- BTS_CTR_CODEC_V1_HR,
- BTS_CTR_PAGING_ATTEMPTED,
- BTS_CTR_PAGING_ALREADY,
- BTS_CTR_PAGING_RESPONDED,
- BTS_CTR_PAGING_EXPIRED,
- BTS_CTR_CHAN_ACT_TOTAL,
- BTS_CTR_CHAN_ACT_NACK,
- BTS_CTR_RSL_UNKNOWN,
- BTS_CTR_RSL_IPA_NACK,
- BTS_CTR_MODE_MODIFY_NACK,
-};
-
-static const struct rate_ctr_desc bts_ctr_description[] = {
- [BTS_CTR_CHREQ_TOTAL] = {"chreq:total", "Received channel requests."},
- [BTS_CTR_CHREQ_NO_CHANNEL] = {"chreq:no_channel", "Sent to MS no channel available."},
- [BTS_CTR_CHAN_RF_FAIL] = {"chan:rf_fail", "Received a RF failure indication from BTS."},
- [BTS_CTR_CHAN_RLL_ERR] = {"chan:rll_err", "Received a RLL failure with T200 cause from BTS."},
- [BTS_CTR_BTS_OML_FAIL] = {"oml_fail", "Received a TEI down on a OML link."},
- [BTS_CTR_BTS_RSL_FAIL] = {"rsl_fail", "Received a TEI down on a OML link."},
- [BTS_CTR_CODEC_AMR_F] = {"codec:amr_f", "Count the usage of AMR/F codec by channel mode requested."},
- [BTS_CTR_CODEC_AMR_H] = {"codec:amr_h", "Count the usage of AMR/H codec by channel mode requested."},
- [BTS_CTR_CODEC_EFR] = {"codec:efr", "Count the usage of EFR codec by channel mode requested."},
- [BTS_CTR_CODEC_V1_FR] = {"codec:fr", "Count the usage of FR codec by channel mode requested."},
- [BTS_CTR_CODEC_V1_HR] = {"codec:hr", "Count the usage of HR codec by channel mode requested."},
-
- [BTS_CTR_PAGING_ATTEMPTED] = {"paging:attempted", "Paging attempts for a subscriber."},
- [BTS_CTR_PAGING_ALREADY] = {"paging:already", "Paging attempts ignored as subsciber was already being paged."},
- [BTS_CTR_PAGING_RESPONDED] = {"paging:responded", "Paging attempts with successful paging response."},
- [BTS_CTR_PAGING_EXPIRED] = {"paging:expired", "Paging Request expired because of timeout T3113."},
- [BTS_CTR_CHAN_ACT_TOTAL] = {"chan_act:total", "Total number of Channel Activations."},
- [BTS_CTR_CHAN_ACT_NACK] = {"chan_act:nack", "Number of Channel Activations that the BTS NACKed"},
- [BTS_CTR_RSL_UNKNOWN] = {"rsl:unknown", "Number of unknown/unsupported RSL messages received from BTS"},
- [BTS_CTR_RSL_IPA_NACK] = {"rsl:ipa_nack", "Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS"},
- [BTS_CTR_MODE_MODIFY_NACK] = {"chan:mode_modify_nack", "Number of Channel Mode Modify NACKs received from BTS"},
-};
-
-static const struct rate_ctr_group_desc bts_ctrg_desc = {
- "bts",
- "base transceiver station",
- OSMO_STATS_CLASS_GLOBAL,
- ARRAY_SIZE(bts_ctr_description),
- bts_ctr_description,
-};
+struct gsm_bts *conn_get_bts(struct gsm_subscriber_connection *conn);
-enum {
- BTS_STAT_CHAN_LOAD_AVERAGE,
- BTS_STAT_T3122,
-};
+void conn_update_ms_power_class(struct gsm_subscriber_connection *conn, uint8_t power_class);
+void lchan_update_ms_power_ctrl_level(struct gsm_lchan *lchan, int ms_power_dbm);
enum {
BSC_CTR_ASSIGNMENT_ATTEMPTED,
@@ -1349,10 +994,25 @@ enum {
BSC_CTR_HANDOVER_TIMEOUT,
BSC_CTR_HANDOVER_FAILED,
BSC_CTR_HANDOVER_ERROR,
+ BSC_CTR_INTRA_CELL_HO_ATTEMPTED,
+ BSC_CTR_INTRA_CELL_HO_COMPLETED,
+ BSC_CTR_INTRA_CELL_HO_STOPPED,
+ BSC_CTR_INTRA_CELL_HO_NO_CHANNEL,
+ BSC_CTR_INTRA_CELL_HO_TIMEOUT,
+ BSC_CTR_INTRA_CELL_HO_FAILED,
+ BSC_CTR_INTRA_CELL_HO_ERROR,
+ BSC_CTR_INTRA_BSC_HO_ATTEMPTED,
+ BSC_CTR_INTRA_BSC_HO_COMPLETED,
+ BSC_CTR_INTRA_BSC_HO_STOPPED,
+ BSC_CTR_INTRA_BSC_HO_NO_CHANNEL,
+ BSC_CTR_INTRA_BSC_HO_TIMEOUT,
+ BSC_CTR_INTRA_BSC_HO_FAILED,
+ BSC_CTR_INTRA_BSC_HO_ERROR,
BSC_CTR_INTER_BSC_HO_OUT_ATTEMPTED,
BSC_CTR_INTER_BSC_HO_OUT_COMPLETED,
BSC_CTR_INTER_BSC_HO_OUT_STOPPED,
BSC_CTR_INTER_BSC_HO_OUT_TIMEOUT,
+ BSC_CTR_INTER_BSC_HO_OUT_FAILED,
BSC_CTR_INTER_BSC_HO_OUT_ERROR,
BSC_CTR_INTER_BSC_HO_IN_ATTEMPTED,
BSC_CTR_INTER_BSC_HO_IN_COMPLETED,
@@ -1364,52 +1024,81 @@ enum {
BSC_CTR_PAGING_ATTEMPTED,
BSC_CTR_PAGING_DETACHED,
BSC_CTR_PAGING_RESPONDED,
+ BSC_CTR_PAGING_NO_ACTIVE_PAGING,
BSC_CTR_UNKNOWN_UNIT_ID,
+ BSC_CTR_MSCPOOL_SUBSCR_NO_MSC,
+ BSC_CTR_MSCPOOL_EMERG_FORWARDED,
+ BSC_CTR_MSCPOOL_EMERG_LOST,
};
static const struct rate_ctr_desc bsc_ctr_description[] = {
- [BSC_CTR_ASSIGNMENT_ATTEMPTED] = {"assignment:attempted", "Assignment attempts."},
- [BSC_CTR_ASSIGNMENT_COMPLETED] = {"assignment:completed", "Assignment completed."},
- [BSC_CTR_ASSIGNMENT_STOPPED] = {"assignment:stopped", "Connection ended during Assignment."},
- [BSC_CTR_ASSIGNMENT_NO_CHANNEL] = {"assignment:no_channel", "Failure to allocate lchan for Assignment."},
- [BSC_CTR_ASSIGNMENT_TIMEOUT] = {"assignment:timeout", "Assignment timed out."},
- [BSC_CTR_ASSIGNMENT_FAILED] = {"assignment:failed", "Received Assignment Failure message."},
- [BSC_CTR_ASSIGNMENT_ERROR] = {"assignment:error", "Assigment failed for other reason."},
-
- [BSC_CTR_HANDOVER_ATTEMPTED] = {"handover:attempted", "Intra-BSC handover attempts."},
- [BSC_CTR_HANDOVER_COMPLETED] = {"handover:completed", "Intra-BSC handover completed."},
- [BSC_CTR_HANDOVER_STOPPED] = {"handover:stopped", "Connection ended during HO."},
- [BSC_CTR_HANDOVER_NO_CHANNEL] = {"handover:no_channel", "Failure to allocate lchan for HO."},
- [BSC_CTR_HANDOVER_TIMEOUT] = {"handover:timeout", "Handover timed out."},
- [BSC_CTR_HANDOVER_FAILED] = {"handover:failed", "Received Handover Fail messages."},
- [BSC_CTR_HANDOVER_ERROR] = {"handover:error", "Re-assigment failed for other reason."},
+ [BSC_CTR_ASSIGNMENT_ATTEMPTED] = {"assignment:attempted", "Assignment attempts"},
+ [BSC_CTR_ASSIGNMENT_COMPLETED] = {"assignment:completed", "Assignment completed"},
+ [BSC_CTR_ASSIGNMENT_STOPPED] = {"assignment:stopped", "Connection ended during Assignment"},
+ [BSC_CTR_ASSIGNMENT_NO_CHANNEL] = {"assignment:no_channel", "Failure to allocate lchan for Assignment"},
+ [BSC_CTR_ASSIGNMENT_TIMEOUT] = {"assignment:timeout", "Assignment timed out"},
+ [BSC_CTR_ASSIGNMENT_FAILED] = {"assignment:failed", "Received Assignment Failure message"},
+ [BSC_CTR_ASSIGNMENT_ERROR] = {"assignment:error", "Assignment failed for other reason"},
+
+ [BSC_CTR_HANDOVER_ATTEMPTED] = {"handover:attempted", "Intra-BSC handover attempts"},
+ [BSC_CTR_HANDOVER_COMPLETED] = {"handover:completed", "Intra-BSC handover completed"},
+ [BSC_CTR_HANDOVER_STOPPED] = {"handover:stopped", "Connection ended during HO"},
+ [BSC_CTR_HANDOVER_NO_CHANNEL] = {"handover:no_channel", "Failure to allocate lchan for HO"},
+ [BSC_CTR_HANDOVER_TIMEOUT] = {"handover:timeout", "Handover timed out"},
+ [BSC_CTR_HANDOVER_FAILED] = {"handover:failed", "Received Handover Fail messages"},
+ [BSC_CTR_HANDOVER_ERROR] = {"handover:error", "Re-assignment failed for other reason"},
+
+ [BSC_CTR_INTRA_CELL_HO_ATTEMPTED] = {"intra_cell_ho:attempted", "Intra-Cell handover attempts"},
+ [BSC_CTR_INTRA_CELL_HO_COMPLETED] = {"intra_cell_ho:completed", "Intra-Cell handover completed"},
+ [BSC_CTR_INTRA_CELL_HO_STOPPED] = {"intra_cell_ho:stopped", "Connection ended during HO"},
+ [BSC_CTR_INTRA_CELL_HO_NO_CHANNEL] = {"intra_cell_ho:no_channel", "Failure to allocate lchan for HO"},
+ [BSC_CTR_INTRA_CELL_HO_TIMEOUT] = {"intra_cell_ho:timeout", "Handover timed out"},
+ [BSC_CTR_INTRA_CELL_HO_FAILED] = {"intra_cell_ho:failed", "Received Handover Fail messages"},
+ [BSC_CTR_INTRA_CELL_HO_ERROR] = {"intra_cell_ho:error", "Re-assignment failed for other reason"},
+
+ [BSC_CTR_INTRA_BSC_HO_ATTEMPTED] = {"intra_bsc_ho:attempted", "Intra-BSC handover attempts"},
+ [BSC_CTR_INTRA_BSC_HO_COMPLETED] = {"intra_bsc_ho:completed", "Intra-BSC handover completed"},
+ [BSC_CTR_INTRA_BSC_HO_STOPPED] = {"intra_bsc_ho:stopped", "Connection ended during HO"},
+ [BSC_CTR_INTRA_BSC_HO_NO_CHANNEL] = {"intra_bsc_ho:no_channel", "Failure to allocate lchan for HO"},
+ [BSC_CTR_INTRA_BSC_HO_TIMEOUT] = {"intra_bsc_ho:timeout", "Handover timed out"},
+ [BSC_CTR_INTRA_BSC_HO_FAILED] = {"intra_bsc_ho:failed", "Received Handover Fail messages"},
+ [BSC_CTR_INTRA_BSC_HO_ERROR] = {"intra_bsc_ho:error", "Re-assignment failed for other reason"},
[BSC_CTR_INTER_BSC_HO_OUT_ATTEMPTED] = {"interbsc_ho_out:attempted",
- "Attempts to handover to remote BSS."},
+ "Attempts to handover to remote BSS"},
[BSC_CTR_INTER_BSC_HO_OUT_COMPLETED] = {"interbsc_ho_out:completed",
- "Handover to remote BSS completed."},
- [BSC_CTR_INTER_BSC_HO_OUT_STOPPED] = {"interbsc_ho_out:stopped", "Connection ended during HO."},
- [BSC_CTR_INTER_BSC_HO_OUT_TIMEOUT] = {"interbsc_ho_out:timeout", "Handover timed out."},
+ "Handover to remote BSS completed"},
+ [BSC_CTR_INTER_BSC_HO_OUT_STOPPED] = {"interbsc_ho_out:stopped", "Connection ended during HO"},
+ [BSC_CTR_INTER_BSC_HO_OUT_TIMEOUT] = {"interbsc_ho_out:timeout", "Handover timed out"},
+ [BSC_CTR_INTER_BSC_HO_OUT_FAILED] = {"interbsc_ho_out:failed", "Received Handover Fail message"},
[BSC_CTR_INTER_BSC_HO_OUT_ERROR] = {"interbsc_ho_out:error",
- "Handover to remote BSS failed for other reason."},
+ "Handover to remote BSS failed for other reason"},
[BSC_CTR_INTER_BSC_HO_IN_ATTEMPTED] = {"interbsc_ho_in:attempted",
- "Attempts to handover from remote BSS."},
+ "Attempts to handover from remote BSS"},
[BSC_CTR_INTER_BSC_HO_IN_COMPLETED] = {"interbsc_ho_in:completed",
- "Handover from remote BSS completed."},
- [BSC_CTR_INTER_BSC_HO_IN_STOPPED] = {"interbsc_ho_in:stopped", "Connection ended during HO."},
+ "Handover from remote BSS completed"},
+ [BSC_CTR_INTER_BSC_HO_IN_STOPPED] = {"interbsc_ho_in:stopped", "Connection ended during HO"},
[BSC_CTR_INTER_BSC_HO_IN_NO_CHANNEL] = {"interbsc_ho_in:no_channel",
- "Failure to allocate lchan for HO."},
- [BSC_CTR_INTER_BSC_HO_IN_TIMEOUT] = {"interbsc_ho_in:timeout", "Handover from remote BSS timed out."},
- [BSC_CTR_INTER_BSC_HO_IN_FAILED] = {"interbsc_ho_in:failed", "Received Handover Fail message."},
+ "Failure to allocate lchan for HO"},
+ [BSC_CTR_INTER_BSC_HO_IN_TIMEOUT] = {"interbsc_ho_in:timeout", "Handover from rem