Projects
osmocom:latest
osmo-bsc
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 12
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/sigtran_compat.h
Deleted
@@ -1,32 +0,0 @@ -#pragma once -#include "../../bscconfig.h" - -#include <osmocom/sigtran/osmo_ss7.h> - -#ifndef SIGTRAN_PRIVATE_STRUCTS - -static inline struct osmo_ss7_as *osmo_ss7_route_get_dest_as(struct osmo_ss7_route *rt) -{ - return rt->dest.as; -} - -static inline uint32_t osmo_ss7_instance_get_id(const struct osmo_ss7_instance *inst) -{ - return inst->cfg.id; -} - -static inline struct osmo_ss7_instance *osmo_ss7_instances_llist_entry(struct llist_head *list) -{ - struct osmo_ss7_instance *pos; - pos = llist_entry(list, struct osmo_ss7_instance, list); - return pos; -} - -static inline enum osmo_ss7_asp_protocol osmo_ss7_as_get_asp_protocol(const struct osmo_ss7_as *as) -{ - return as->cfg.proto; -} - -struct osmo_ss7_asp *osmo_ss7_as_select_asp(struct osmo_ss7_as *as); - -#endif
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/sigtran_compat.c
Deleted
@@ -1,104 +0,0 @@ -/* (C) 2024 by sysmocom s.f.m.c. GmbH <info@sysmocom.de> - * All Rights Reserved - * - * SPDX-License-Identifier: GPL-2.0+ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -#include "../../bscconfig.h" - -#include <osmocom/bsc/sigtran_compat.h> - -#ifndef SIGTRAN_PRIVATE_STRUCTS - -static struct osmo_ss7_asp *ss7_as_select_asp_override(struct osmo_ss7_as *as) -{ - struct osmo_ss7_asp *asp; - unsigned int i; - - /* FIXME: proper selection of the ASP based on the SLS! */ - for (i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) { - asp = as->cfg.aspsi; - if (asp && osmo_ss7_asp_active(asp)) - break; - } - return asp; -} - -static struct osmo_ss7_asp *ss7_as_select_asp_roundrobin(struct osmo_ss7_as *as) -{ - struct osmo_ss7_asp *asp; - unsigned int i; - unsigned int first_idx; - - first_idx = (as->cfg.last_asp_idx_sent + 1) % ARRAY_SIZE(as->cfg.asps); - i = first_idx; - do { - asp = as->cfg.aspsi; - if (asp && osmo_ss7_asp_active(asp)) - break; - i = (i + 1) % ARRAY_SIZE(as->cfg.asps); - } while (i != first_idx); - as->cfg.last_asp_idx_sent = i; - - return asp; -} - -/* returns NULL if multiple ASPs would need to be selected. */ -static struct osmo_ss7_asp *ss7_as_select_asp_broadcast(struct osmo_ss7_as *as) -{ - struct osmo_ss7_asp *asp; - struct osmo_ss7_asp *asp_found = NULL; - - for (unsigned int i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) { - asp = as->cfg.aspsi; - if (!asp || !osmo_ss7_asp_active(asp)) - continue; - if (asp_found) /* >1 ASPs selected, early return */ - return NULL; - asp_found = asp; - } - return asp_found; -} - -struct osmo_ss7_asp *osmo_ss7_as_select_asp(struct osmo_ss7_as *as) -{ - struct osmo_ss7_asp *asp = NULL; - - switch (as->cfg.mode) { - case OSMO_SS7_AS_TMOD_OVERRIDE: - asp = ss7_as_select_asp_override(as); - break; - case OSMO_SS7_AS_TMOD_LOADSHARE: - /* TODO: actually use the SLS value to ensure same SLS goes - * through same ASP. Not strictly required by M3UA RFC, but - * would fit the overall principle. */ - case OSMO_SS7_AS_TMOD_ROUNDROBIN: - asp = ss7_as_select_asp_roundrobin(as); - break; - case OSMO_SS7_AS_TMOD_BCAST: - return ss7_as_select_asp_broadcast(as); - case _NUM_OSMO_SS7_ASP_TMOD: - OSMO_ASSERT(false); - } - - if (!asp) { - LOGPFSM(as->fi, "No selectable ASP in AS\n"); - return NULL; - } - return asp; -} - -#endif
View file
osmo-bsc_1.12.4.dsc -> osmo-bsc_1.13.0.dsc
Changed
@@ -2,13 +2,13 @@ Source: osmo-bsc Binary: osmo-bsc, osmo-bsc-dbg, abisip-find, osmo-bsc-ipaccess-utils, osmo-bsc-bs11-utils, osmo-bsc-meas-utils, osmo-bsc-doc Architecture: any all -Version: 1.12.4 +Version: 1.13.0 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/osmo-bsc Standards-Version: 3.9.8 Vcs-Browser: https://gitea.osmocom.org/cellular-infrastructure/osmo-bsc Vcs-Git: https://gitea.osmocom.org/cellular-infrastructure/osmo-bsc -Build-Depends: debhelper (>= 10), dh-autoreconf, autotools-dev, autoconf, automake, libtool, pkg-config, python3-minimal, libcdk5-dev, libtalloc-dev, libosmocore-dev (>= 1.10.0), libosmo-sigtran-dev (>= 1.9.0), libosmo-abis-dev (>= 1.6.0), libosmo-netif-dev (>= 1.5.0), libosmo-mgcp-client-dev (>= 1.13.0), osmo-gsm-manuals-dev (>= 1.6.0) +Build-Depends: debhelper (>= 10), dh-autoreconf, autotools-dev, autoconf, automake, libtool, pkg-config, python3-minimal, libcdk5-dev, libtalloc-dev, libosmocore-dev (>= 1.11.0), libosmo-sigtran-dev (>= 2.1.0), libosmo-abis-dev (>= 2.0.0), libosmo-netif-dev (>= 1.6.0), libosmo-mgcp-client-dev (>= 1.14.0), osmo-gsm-manuals-dev (>= 1.6.0) Package-List: abisip-find deb net extra arch=any osmo-bsc deb net extra arch=any @@ -18,8 +18,8 @@ osmo-bsc-ipaccess-utils deb net extra arch=any osmo-bsc-meas-utils deb net extra arch=any Checksums-Sha1: - f6da15c161f1f19eaae42610c9278eb0aadfa173 628720 osmo-bsc_1.12.4.tar.xz + acc06432fcd36ca2cd43b9f1db014ebc1b98c264 630676 osmo-bsc_1.13.0.tar.xz Checksums-Sha256: - b3a075093f0964ee8d9522c492963123b93a4f97a4040f3feeb089e790a22a0d 628720 osmo-bsc_1.12.4.tar.xz + 211044cb581d52285c1fdb631671c951ce6a98b62d8c7a2523acd9397f6c0ce8 630676 osmo-bsc_1.13.0.tar.xz Files: - bc036769288ac98158fcb9d084bdb22d 628720 osmo-bsc_1.12.4.tar.xz + 01f6fd5df5f45fc4dbc2e64c4916eed4 630676 osmo-bsc_1.13.0.tar.xz
View file
osmo-bsc_1.12.4.tar.xz/.tarball-version -> osmo-bsc_1.13.0.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -1.12.4 +1.13.0
View file
osmo-bsc_1.12.4.tar.xz/configure.ac -> osmo-bsc_1.13.0.tar.xz/configure.ac
Changed
@@ -61,14 +61,14 @@ AC_SUBST(osmo_ac_meas_vis) dnl checks for libraries -PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.10.0) -PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.10.0) -PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.10.0) -PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.10.0) -PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 1.6.0) -PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.5.0) -PKG_CHECK_MODULES(LIBOSMOSIGTRAN, libosmo-sigtran >= 1.9.0) -PKG_CHECK_MODULES(LIBOSMOMGCPCLIENT, libosmo-mgcp-client >= 1.13.0) +PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.11.0) +PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.11.0) +PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.11.0) +PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.11.0) +PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 2.0.0) +PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.6.0) +PKG_CHECK_MODULES(LIBOSMOSIGTRAN, libosmo-sigtran >= 2.1.0) +PKG_CHECK_MODULES(LIBOSMOMGCPCLIENT, libosmo-mgcp-client >= 1.14.0) dnl checks for header files AC_HEADER_STDC @@ -224,18 +224,6 @@ AC_MSG_RESULT(CFLAGS="$CFLAGS") AC_MSG_RESULT(CPPFLAGS="$CPPFLAGS") -# OS#6617: check if libosmo-sigtran has private structs -# We need to use grep here, can't set the includedir with AC_CHECK_DECL. -m="OS#6617: checking whether libosmo-sigtran has private structs..." -h="$($PKG_CONFIG --variable=includedir libosmo-sigtran)/osmocom/sigtran/osmo_ss7.h" -f=osmo_ss7_as_select_asp -if grep -q "$f" "$h"; then - echo "$m yes ($f in $h)" - AC_DEFINE(SIGTRAN_PRIVATE_STRUCTS, 1, "OS#6617") -else - echo "$m no ($f not in $h)" -fi - dnl Generate the output AM_CONFIG_HEADER(bscconfig.h)
View file
osmo-bsc_1.12.4.tar.xz/contrib/jenkins.sh -> osmo-bsc_1.13.0.tar.xz/contrib/jenkins.sh
Changed
@@ -56,7 +56,7 @@ osmo-build-dep.sh libosmo-netif "" --disable-doxygen osmo-build-dep.sh libosmo-abis -osmo-build-dep.sh libosmo-sigtran +osmo-build-dep.sh libosmo-sigtran "" --disable-doxygen osmo-build-dep.sh osmo-mgw # Additional configure options and depends
View file
osmo-bsc_1.12.4.tar.xz/debian/changelog -> osmo-bsc_1.13.0.tar.xz/debian/changelog
Changed
@@ -1,38 +1,65 @@ -osmo-bsc (1.12.4) unstable; urgency=medium - - * ipaccess_line_update: drop set_priority and set_ip_dscp - - -- Oliver Smith <osmith@sysmocom.de> Mon, 09 Dec 2024 11:46:07 +0100 - -osmo-bsc (1.12.3) unstable; urgency=medium - - Oliver Smith - * contrib/jenkins: libosmo-sccp -> libosmo-sigtran +osmo-bsc (1.13.0) unstable; urgency=medium Pau Espin Pedrol + * bs11: Mark global private variables as static + * bs11: Move model struct further down in the file + * Convert bts->depends_on from bitmask to llist + * Introduce typedef for bts->nr gsm_bts_nr_t + * tests/vty: Validate allocating all possible BTS + * Initial support for >256 BTS + * rsl_rx_pchan_rqd(): Clean up code path + * pcu_tx_rach_ind(): Avoid forwarding chan_rqd to PCU if not expected + * pcu_info_update(): Simplify code path with early return + * Log unsupported PCUIF for bts > 255 + * Remove unused function gsm_bts_by_lac() + * bsc_vty: Use gsm_bts_num() in ho_or_as() + * Clarify code around bts->loc_list + * bts: Make sure bts_location entries in bts->loc_list are freed + * bts: Remove from net->bts_list during talloc destructor + * bts: Remove acc timers during talloc destructor + * gsm_bts_num(): use hashtable to lookup bts + * tests/ctrl/osmo-bsc-neigh-test.cfg: Fix duplicate <LAC,CI> between bts1 and bts2 + * Introduce hashtable to lookup bts by LAC + * Introduce hashtable to lookup bts by CI + * Introduce hashtable to lookup bts by <LAC,CI> + * bsc_ctrl: Use new libosmo-sigtran API osmo_ss7_route_get_dest_as() + * lb: Avoid using osmo_ss7_instance private field + * Use new libosmo-sigtran API osmo_ss7_instance_get_id() + * Use new libosmo-sigtran API osmo_ss7_instances_llist_entry() + * bsc_sccplite_msc_send(): Fix msgb leak + * Use new libosmo-sigtran API osmo_ss7_as_get_asp_protocol() + * Use new libosmo-sigtran API osmo_ss7_as_select_asp() * jenkins.sh: libosmo-netif no longer depends on libosmo-abis + * abis: Fix reusing bts->*_link while it is being destroyed * ipaccess-proxy: Fix wrong cb function passed * Drop use of libosmo-abis osmocom/abis/ipaccess.h * ipaccess-config: Use own e1_input ipaccess driver * ipaccess-config: Remove unused function ipaccess_bts_handle_ccm() + * Drop unneeded use of abis/ipa.h header + * jenkins.sh: No need to build libosmo-sigtran with doxygen + * Fix BTS nr >255 wrapping up during bts allocation + * Use correct bts_nr field during MO init + * cbsp_link: set name on stream - -- Oliver Smith <osmith@sysmocom.de> Fri, 06 Dec 2024 13:22:04 +0100 + Oliver Smith + * contrib/jenkins: libosmo-sccp -> libosmo-sigtran -osmo-bsc (1.12.2) unstable; urgency=medium + Philipp Maier + * pcu_sock: do not receive a TXT ind. with PCU_VERSION for a specific BTS - Oliver Smith - * Add osmo_ss7 APIs + Csaba Sipos + * nokia_site: add some missing message IDs + * nokia_site: add missing element names + * nokia_site: change RSL bootstrap logic + * nokia_site: introduce hopping control for Nokia *Site - Pau Espin Pedrol - * bsc_ctrl: Use new libosmo-sigtran API osmo_ss7_route_get_dest_as() - * lb: Avoid using osmo_ss7_instance private field - * Use new libosmo-sigtran API osmo_ss7_instance_get_id() - * Use new libosmo-sigtran API osmo_ss7_instances_llist_entry() - * bsc_sccplite_msc_send(): Fix msgb leak - * Use new libosmo-sigtran API osmo_ss7_as_get_asp_protocol() - * Use new libosmo-sigtran API osmo_ss7_as_select_asp() + Neels Hofmeyr + * drop unused function decl abis_nm_rx() + + csaba.sipos + * nokia_site: add reset_type attribute - -- Oliver Smith <osmith@sysmocom.de> Wed, 13 Nov 2024 14:42:07 +0100 + -- Oliver Smith <osmith@sysmocom.de> Wed, 12 Feb 2025 13:02:16 +0100 osmo-bsc (1.12.1) unstable; urgency=medium
View file
osmo-bsc_1.12.4.tar.xz/debian/control -> osmo-bsc_1.13.0.tar.xz/debian/control
Changed
@@ -12,11 +12,11 @@ python3-minimal, libcdk5-dev, libtalloc-dev, - libosmocore-dev (>= 1.10.0), - libosmo-sigtran-dev (>= 1.9.0), - libosmo-abis-dev (>= 1.6.0), - libosmo-netif-dev (>= 1.5.0), - libosmo-mgcp-client-dev (>= 1.13.0), + libosmocore-dev (>= 1.11.0), + libosmo-sigtran-dev (>= 2.1.0), + libosmo-abis-dev (>= 2.0.0), + libosmo-netif-dev (>= 1.6.0), + libosmo-mgcp-client-dev (>= 1.14.0), osmo-gsm-manuals-dev (>= 1.6.0) Standards-Version: 3.9.8 Vcs-Git: https://gitea.osmocom.org/cellular-infrastructure/osmo-bsc
View file
osmo-bsc_1.13.0.tar.xz/doc/examples/osmo-bsc/nokia/osmo-bsc.metrosite.RF-hopping.2TRX.cfg
Added
@@ -0,0 +1,160 @@ +! +! OpenBSC configuration saved from vty +! ! +password foo +! +line vty + no login +! +log stderr + logging timestamp 1 + 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 + logging level linp debug + logging level lmgcp notice +e1_input + e1_line 0 driver dahdi + e1_line 0 port 0 +network + network country code 1 + mobile network code 1 + timer t3101 10 + timer t3113 60 + mgw 0 + remote-ip 127.0.0.1 + remote-port 2427 + local-port 2727 + bts 0 + type nokia_site + band GSM1800 + cell_identity 1 + location_area_code 0x0001 + base_station_id_code 63 + training_sequence_code 7 + nokia_site skip-reset 0 + nokia_site no-local-rel-conf 1 + nokia_site bts-reset-timer 30 + nokia_site hopping-mode synthesizer + codec-support fr + neighbor-list mode automatic + + oml e1 line 0 timeslot 1 sub-slot full + oml e1 tei 1 + + trx 0 + arfcn 885 + max_power_red 20 + rsl e1 line 0 timeslot 2 sub-slot full + rsl e1 tei 1 + timeslot 0 + phys_chan_config CCCH+SDCCH4 + hopping enabled 0 + e1 line 0 timeslot 6 sub-slot 0 + timeslot 1 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 6 sub-slot 1 + timeslot 2 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 6 sub-slot 2 + timeslot 3 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 6 sub-slot 3 + timeslot 4 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 7 sub-slot 0 + timeslot 5 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 7 sub-slot 1 + timeslot 6 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 7 sub-slot 2 + timeslot 7 + phys_chan_config SDCCH8 + hopping enabled 0 + e1 line 0 timeslot 7 sub-slot 3 + + trx 1 + arfcn 883 + max_power_red 20 + rsl e1 line 0 timeslot 3 sub-slot full + rsl e1 tei 2 + timeslot 0 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 8 sub-slot 0 + timeslot 1 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 8 sub-slot 1 + timeslot 2 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 8 sub-slot 2 + timeslot 3 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 8 sub-slot 3 + timeslot 4 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 9 sub-slot 0 + timeslot 5 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 9 sub-slot 1 + timeslot 6 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 9 sub-slot 2 + timeslot 7 + phys_chan_config TCH/F + hopping enabled 1 + hopping sequence-number 0 + hopping maio 0 + hopping arfcn add 882 + hopping arfcn add 883 + e1 line 0 timeslot 9 sub-slot 3 + +cs7 instance 0 + point-code 1.23.3 +msc 0 +
View file
osmo-bsc_1.12.4.tar.xz/doc/manuals/chapters/handover.adoc -> osmo-bsc_1.13.0.tar.xz/doc/manuals/chapters/handover.adoc
Changed
@@ -244,7 +244,7 @@ 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 +desirable to use the `neighbor bts <0-65535>` 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 @@ -325,8 +325,8 @@ the neighbor configuration will merely be cached in the BSC's local config. To take actual effect, it is necessary to -- either, re-connect the cell to the BSC (e.g. via `drop bts connection <0-255> oml`) -- or, re-send the System Information using `bts <0-255> resend-system-information`. +- either, re-connect the cell to the BSC (e.g. via `drop bts connection <0-65535> oml`) +- or, re-send the System Information using `bts <0-65535> resend-system-information`. === Configuring Handover Decisions
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/Makefile.am -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/Makefile.am
Changed
@@ -67,5 +67,4 @@ smscb.h \ power_control.h \ vgcs_fsm.h \ - sigtran_compat.h \ $(NULL)
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/abis_nm.h -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/abis_nm.h
Changed
@@ -67,7 +67,6 @@ int abis_nm_tlv_parse(struct tlv_parsed *tp, struct gsm_bts *bts, const uint8_t *buf, int len); int abis_nm_tlv_attr_primary_oml(struct tlv_parsed *tp, struct in_addr *ia, uint16_t *oml_port); int abis_nm_tlv_attr_unit_id(struct tlv_parsed *tp, char* unit_id, size_t buf_len); -int abis_nm_rx(struct msgb *msg); int abis_nm_opstart(struct gsm_bts *bts, uint8_t obj_class, uint8_t i0, uint8_t i1, uint8_t i2); int abis_nm_chg_adm_state(struct gsm_bts *bts, uint8_t obj_class, uint8_t i0, uint8_t i1, uint8_t i2, enum abis_nm_adm_state adm_state);
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/acc.h -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/acc.h
Changed
@@ -53,6 +53,7 @@ }; void acc_mgr_init(struct acc_mgr *acc_mgr, struct gsm_bts *bts); +void acc_mgr_deinit(struct acc_mgr *acc_mgr); 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); @@ -164,6 +165,7 @@ void acc_ramp_global_init(void); void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts); +void acc_ramp_deinit(struct acc_ramp *acc_ramp); 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); int acc_ramp_set_chan_load_thresholds(struct acc_ramp *acc_ramp, unsigned int low_threshold, unsigned int up_threshold);
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/bts.h -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/bts.h
Changed
@@ -5,6 +5,7 @@ #include <stdbool.h> #include <osmocom/core/linuxlist.h> +#include <osmocom/core/hashtable.h> #include <osmocom/core/msgb.h> #include <osmocom/core/bitvec.h> #include <osmocom/gsm/tlv.h> @@ -326,16 +327,31 @@ struct gprs_rlc_cfg rlc_cfg; }; +/* See (struct gsm_bts *)->depends_on */ +struct bts_depends_on_entry { + struct llist_head list; + gsm_bts_nr_t bts_nr; /* See (struct gsm_bts *)->nr */ +}; + /* One BTS */ struct gsm_bts { /* list header in net->bts_list */ struct llist_head list; - /* Geographical location of the BTS */ + /* Geographical location of the BTS, head list of "struct bts_location" */ struct llist_head loc_list; + /*! Entry in hash table network->bts_by_nr. */ + struct hlist_node node_by_nr; + /*! Entry in hash table network->bts_by_lac. */ + struct hlist_node node_by_lac; + /*! Entry in hash table network->bts_by_lac_ci. */ + struct hlist_node node_by_lac_ci; + /*! Entry in hash table network->bts_by_ci. */ + struct hlist_node node_by_ci; + /* number of this BTS in network */ - uint8_t nr; + gsm_bts_nr_t nr; /* human readable name / description */ char *description; /* Cell Identity */ @@ -472,7 +488,8 @@ 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 */ + wait_reset:2, /* we are waiting for reset to complete */ + hopping_mode:1; /* hopping type selection for Nokia */ struct osmo_timer_list reset_timer; } nokia; }; @@ -596,8 +613,8 @@ /* supported codecs beside FR */ struct bts_codec_conf codec; - /* BTS dependencies bit field */ - uint32_t depends_on256/(8*4); + /* BTS dependencies bit field, list of "struct bts_depends_on_entry" */ + struct llist_head depends_on; /* full and half rate multirate config */ struct amr_multirate_conf mr_full; @@ -789,7 +806,7 @@ return &lai; } -struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm, uint8_t bts_num); +struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm, gsm_bts_nr_t bts_num); int gsm_bts_check_cfg(struct gsm_bts *bts); char *gsm_bts_name(const struct gsm_bts *bts); @@ -830,10 +847,10 @@ } /* 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 bts_depend_mark(struct gsm_bts *bts, gsm_bts_nr_t dep); +void bts_depend_clear(struct gsm_bts *bts, gsm_bts_nr_t dep); +bool bts_depend_check(struct gsm_bts *bts); +bool 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);
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/bts_sm.h -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/bts_sm.h
Changed
@@ -68,7 +68,7 @@ return site_mgr->bts0; } -struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, uint8_t bts_num); +struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, gsm_bts_nr_t bts_num); void gsm_bts_sm_mo_reset(struct gsm_bts_sm *bts_sm);
View file
osmo-bsc_1.12.4.tar.xz/include/osmocom/bsc/gsm_data.h -> osmo-bsc_1.13.0.tar.xz/include/osmocom/bsc/gsm_data.h
Changed
@@ -20,7 +20,9 @@ #include <osmocom/core/tdef.h> #include <osmocom/core/time_cc.h> #include <osmocom/core/linuxlist.h> +#include <osmocom/core/hashtable.h> #include <osmocom/core/linuxrbtree.h> +#include <osmocom/core/utils.h> #include <osmocom/crypt/auth.h> @@ -96,6 +98,13 @@ #define DLCI2RSL_LINK_ID(dlci) \ ((dlci & 0xc0) == 0xc0 ? 0x40 : 0x00) | (dlci & 0x07) +typedef uint16_t gsm_bts_nr_t; /* See (struct gsm_bts *)->nr */ +/* BTS_NR_MAX = ((2 << ((sizeof(gsm_bts_nr_t) * 8) - 1)) - 1) + * This is needed as a constant so that the value can be stringified properly: */ +#define BTS_NR_MAX 65535 +#define BTS_NR_MAX_STR OSMO_STRINGIFY_VAL(BTS_NR_MAX) +#define BTS_NR_VTY_ARG_VAL "<0-" BTS_NR_MAX_STR ">" + /* 3-bit long values */ #define EARFCN_PRIO_INVALID 8 #define EARFCN_MEAS_BW_INVALID 8 @@ -881,7 +890,7 @@ struct gsm_network *gsm_network_init(void *ctx); -struct gsm_bts *gsm_bts_num(const struct gsm_network *net, int num); +struct gsm_bts *gsm_bts_num(const struct gsm_network *net, gsm_bts_nr_t num); struct gsm_bts *gsm_bts_by_cell_id(const struct gsm_network *net, const struct gsm0808_cell_id *cell_id, int match_idx); @@ -975,9 +984,14 @@ struct rate_ctr_group *bsc_ctrs; struct osmo_stat_item_group *bsc_statg; - unsigned int num_bts; + gsm_bts_nr_t num_bts; struct llist_head bts_list; struct llist_head bts_rejected; + DECLARE_HASHTABLE(bts_by_nr, 10); + DECLARE_HASHTABLE(bts_by_lac, 10); + DECLARE_HASHTABLE(bts_by_lac_ci, 10); +#define LAC_CI_HASHTABLE_KEY(lac, ci) ((((uint32_t)(ci)) << sizeof(lac)) | (uint32_t)(lac)) + DECLARE_HASHTABLE(bts_by_ci, 10); /* BTS-based counters when we can't find the actual BTS * e.g. when conn->lchan is NULL */ @@ -1085,8 +1099,6 @@ enum gsm_bts_type parse_btstype(const char *arg); const char *btstype2str(enum gsm_bts_type type); -struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac, - struct gsm_bts *start_bts); extern void *tall_bsc_ctx;
View file
osmo-bsc_1.12.4.tar.xz/src/ipaccess/ipaccess-config-e1-driver.c -> osmo-bsc_1.13.0.tar.xz/src/ipaccess/ipaccess-config-e1-driver.c
Changed
@@ -52,7 +52,6 @@ #include <osmocom/netif/stream.h> #include <osmocom/netif/ipa.h> #include <osmocom/abis/e1_input.h> -#include <osmocom/abis/ipa.h> /* default port at BTS for incoming connections */ #define IPACCESS_BTS_LISTEN_OML_PORT 3006 @@ -423,6 +422,8 @@ osmo_stream_cli_set_port(cli, IPACCESS_BTS_LISTEN_OML_PORT); osmo_stream_cli_set_proto(cli, IPPROTO_TCP); osmo_stream_cli_set_nodelay(cli, true); + osmo_stream_cli_set_priority(cli, g_e1inp_ipaccess_config_pars.oml.dscp); + osmo_stream_cli_set_ip_dscp(cli, g_e1inp_ipaccess_config_pars.oml.priority); /* Reconnect is handled by upper layers: */ osmo_stream_cli_set_reconnect_timeout(cli, -1);
View file
osmo-bsc_1.12.4.tar.xz/src/ipaccess/ipaccess-proxy.c -> osmo-bsc_1.13.0.tar.xz/src/ipaccess/ipaccess-proxy.c
Changed
@@ -45,7 +45,6 @@ #include <osmocom/gsm/tlv.h> #include <osmocom/gsm/protocol/ipaccess.h> #include <osmocom/gsm/ipa.h> -#include <osmocom/abis/ipa.h> #include <osmocom/bsc/gsm_data.h> #include <osmocom/bsc/debug.h> #include <osmocom/bsc/ipaccess.h>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/Makefile.am -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/Makefile.am
Changed
@@ -117,7 +117,6 @@ cbch_scheduler.c \ cbsp_link.c \ power_control.c \ - sigtran_compat.c \ $(NULL) libbsc_la_LIBADD = \
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/abis_nm_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/abis_nm_vty.c
Changed
@@ -76,7 +76,7 @@ DEFUN(oml_class_inst, oml_class_inst_cmd, - "bts <0-255> oml class " NM_OBJCLASS_VTY + "bts " BTS_NR_VTY_ARG_VAL " oml class " NM_OBJCLASS_VTY " instance <0-255> <0-255> <0-255>", "BTS related commands\n" "BTS Number\n" "Manipulate the OML managed objects\n" @@ -111,7 +111,7 @@ } DEFUN(oml_classnum_inst, oml_classnum_inst_cmd, - "bts <0-255> oml class <0-255> instance <0-255> <0-255> <0-255>", + "bts " BTS_NR_VTY_ARG_VAL " oml class <0-255> instance <0-255> <0-255> <0-255>", "BTS related commands\n" "BTS Number\n" "Manipulate the OML managed objects\n" "Object Class\n" "Object Class\n"
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/abis_om2000_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/abis_om2000_vty.c
Changed
@@ -79,7 +79,7 @@ #define OM2K_VTY_HELP "Configure OM2K specific parameters\n" DEFUN(om2k_class_inst, om2k_class_inst_cmd, - "bts <0-255> om2000 class " OM2K_OBJCLASS_VTY + "bts " BTS_NR_VTY_ARG_VAL " om2000 class " OM2K_OBJCLASS_VTY " <0-255> <0-255> <0-255>", "BTS related commands\n" "BTS Number\n" "Manipulate the OM2000 managed objects\n" @@ -120,7 +120,7 @@ } DEFUN(om2k_classnum_inst, om2k_classnum_inst_cmd, - "bts <0-255> om2000 class <0-255> <0-255> <0-255> <0-255>", + "bts " BTS_NR_VTY_ARG_VAL " om2000 class <0-255> <0-255> <0-255> <0-255>", "BTS related commands\n" "BTS Number\n" "Manipulate the OML managed objects\n" "Object Class\n" "Object Class\n" @@ -748,7 +748,7 @@ } DEFUN(show_om2k_mo, show_om2k_mo_cmd, - "show bts <0-255> om2k-mo", + "show bts " BTS_NR_VTY_ARG_VAL " om2k-mo", SHOW_STR "Display information about a BTS\n" "BTS number\n" "OM2000 Managed Object information\n") {
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/abis_rsl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/abis_rsl.c
Changed
@@ -1946,26 +1946,27 @@ uint8_t is_11bit; struct gsm_time gsm_time; - /* Process rach request and forward contained information to PCU */ - if (rqd->ref.ra == 0x7F) { + /* Process rach request and forward contained information to PCU: */ + + if (rqd->ref.ra == 0x7F) { /* 11bit RACH */ is_11bit = 1; /* FIXME: Also handle 11 bit rach requests */ - LOGP(DRSL, LOGL_ERROR, "BTS %d eleven bit access burst not supported yet!\n", rqd->bts->nr); + LOG_BTS(rqd->bts, DRSL, LOGL_ERROR, "CHAN RQD 11bit access burst not supported yet!\n"); return -EINVAL; - } else { - is_11bit = 0; - rqd_ta = rqd->ta; - - gsm_time.t1 = rqd->ref.t1; - gsm_time.t2 = rqd->ref.t2; - gsm_time.t3 = rqd->ref.t3_low | (rqd->ref.t3_high << 3); - fn = gsm_gsmtime2fn(&gsm_time); - - LOG_BTS(rqd->bts, DRSL, LOGL_INFO, "CHAN RQD: fn(t1=%u,t3=%u,t2=%u) = %u\n", - gsm_time.t1, gsm_time.t3, gsm_time.t2, fn); } + is_11bit = 0; + rqd_ta = rqd->ta; + + gsm_time.t1 = rqd->ref.t1; + gsm_time.t2 = rqd->ref.t2; + gsm_time.t3 = rqd->ref.t3_low | (rqd->ref.t3_high << 3); + fn = gsm_gsmtime2fn(&gsm_time); + + LOG_BTS(rqd->bts, DRSL, LOGL_INFO, "CHAN RQD: fn(t1=%u,t3=%u,t2=%u) = %u\n", + gsm_time.t1, gsm_time.t3, gsm_time.t2, fn); + return pcu_tx_rach_ind(rqd->bts, rqd_ta, rqd->ref.ra, fn, is_11bit, GSM_L1_BURST_TYPE_ACCESS_0); }
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/acc.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/acc.c
Changed
@@ -296,6 +296,11 @@ acc_mgr_gen_subset(acc_mgr, false); } +void acc_mgr_deinit(struct acc_mgr *acc_mgr) +{ + osmo_timer_del(&acc_mgr->rotate_timer); +} + uint8_t acc_mgr_get_len_allowed_adm(struct acc_mgr *acc_mgr) { return acc_mgr->len_allowed_adm; @@ -475,6 +480,17 @@ } /*! + * Deinitialize an acc_ramp data structure. + * Called when the user is going to free the structure. + * + * \paramin acc_ramp Pointer to acc_ramp structure to be deinitialized. + */ +void acc_ramp_deinit(struct acc_ramp *acc_ramp) +{ + osmo_timer_del(&acc_ramp->step_timer); +} + +/*! * Change the ramping step size which controls how many ACCs will be allowed per ramping step. * Returns negative on error (step_size out of range), else zero. * \paramin acc_ramp Pointer to acc_ramp structure.
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bsc_ctrl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bsc_ctrl.c
Changed
@@ -44,7 +44,6 @@ #include <osmocom/bsc/ctrl.h> #include <osmocom/bsc/handover_ctrl.h> #include <osmocom/bsc/neighbor_ident.h> -#include <osmocom/bsc/sigtran_compat.h> static int verify_net_apply_config_file(struct ctrl_cmd *cmd, const char *value, void *_data) {
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bsc_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bsc_vty.c
Changed
@@ -68,7 +68,6 @@ #include <osmocom/bsc/bsc_msc_data.h> #include <osmocom/bsc/lchan.h> #include <osmocom/bsc/pcu_if.h> -#include <osmocom/bsc/sigtran_compat.h> #include <inttypes.h> @@ -233,7 +232,7 @@ return CMD_SUCCESS; } -DEFUN(show_bts, show_bts_cmd, "show bts <0-255>", +DEFUN(show_bts, show_bts_cmd, "show bts " BTS_NR_VTY_ARG_VAL "", SHOW_STR "Display information about a BTS\n" "BTS number\n") { @@ -274,7 +273,7 @@ return CMD_SUCCESS; } -DEFUN(show_bts_fail_rep, show_bts_fail_rep_cmd, "show bts <0-255> fail-rep reset", +DEFUN(show_bts_fail_rep, show_bts_fail_rep_cmd, "show bts " BTS_NR_VTY_ARG_VAL " fail-rep reset", SHOW_STR "Display information about a BTS\n" "BTS number\n" "OML failure reports\n" "Clear the list of failure reports after showing them\n") @@ -458,7 +457,7 @@ DEFUN(show_trx, show_trx_cmd, - "show trx <0-255> <0-255>", + "show trx " BTS_NR_VTY_ARG_VAL " <0-255>", SHOW_STR "Display information about a TRX\n" BTS_TRX_STR) { @@ -501,7 +500,7 @@ DEFUN(show_ts, show_ts_cmd, - "show timeslot <0-255> <0-255> <0-7>", + "show timeslot " BTS_NR_VTY_ARG_VAL " <0-255> <0-7>", SHOW_STR "Display information about a TS\n" BTS_TRX_TS_STR) { @@ -728,7 +727,7 @@ DEFUN(show_lchan, show_lchan_cmd, - "show lchan <0-255> <0-255> <0-7> <0-7>", + "show lchan " BTS_NR_VTY_ARG_VAL " <0-255> <0-7> <0-7>", SHOW_STR "Display information about a logical channel\n" BTS_TRX_TS_LCHAN_STR) { @@ -737,7 +736,7 @@ DEFUN(show_lchan_summary, show_lchan_summary_cmd, - "show lchan summary <0-255> <0-255> <0-7> <0-7>", + "show lchan summary " BTS_NR_VTY_ARG_VAL " <0-255> <0-7> <0-7>", SHOW_STR "Display information about a logical channel\n" "Short summary (used lchans)\n" BTS_TRX_TS_LCHAN_STR) @@ -747,7 +746,7 @@ DEFUN(show_lchan_summary_all, show_lchan_summary_all_cmd, - "show lchan summary-all <0-255> <0-255> <0-7> <0-7>", + "show lchan summary-all " BTS_NR_VTY_ARG_VAL " <0-255> <0-7> <0-7>", SHOW_STR "Display information about a logical channel\n" "Short summary (all lchans)\n" BTS_TRX_TS_LCHAN_STR) @@ -834,7 +833,6 @@ { struct gsm_network *net = gsmnet_from_vty(vty); struct gsm_subscriber_connection *conn; - struct gsm_bts *bts; struct gsm_bts *new_bts = NULL; unsigned int bts_nr = atoi(argv0); unsigned int trx_nr = atoi(argv1); @@ -846,12 +844,7 @@ unsigned int bts_nr_new = atoi(argv4); /* Lookup the BTS where we want to handover to */ - llist_for_each_entry(bts, &net->bts_list, list) { - if (bts->nr == bts_nr_new) { - new_bts = bts; - break; - } - } + new_bts = gsm_bts_num(net, bts_nr_new); if (!new_bts) { vty_out(vty, "%% Unable to trigger handover, specified bts #%u does not exist %s", @@ -913,7 +906,7 @@ DEFUN(handover_subscr_conn, handover_subscr_conn_cmd, - "bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> handover <0-255>", + "bts " BTS_NR_VTY_ARG_VAL " trx <0-255> timeslot <0-7> sub-slot <0-7> handover " BTS_NR_VTY_ARG_VAL, BTS_NR_TRX_TS_SS_STR2 MANUAL_HANDOVER_STR "New " BTS_NR_STR) @@ -923,7 +916,7 @@ DEFUN(assignment_subscr_conn, assignment_subscr_conn_cmd, - "bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> assignment", + "bts " BTS_NR_VTY_ARG_VAL " trx <0-255> timeslot <0-7> sub-slot <0-7> assignment", BTS_NR_TRX_TS_SS_STR2 MANUAL_ASSIGNMENT_STR) { @@ -1090,7 +1083,7 @@ DEFUN(show_paging, show_paging_cmd, - "show paging <0-255>", + "show paging " BTS_NR_VTY_ARG_VAL "", SHOW_STR "Display information about paging requests of a BTS\n" BTS_NR_STR) { @@ -1121,7 +1114,7 @@ DEFUN(show_paging_group, show_paging_group_cmd, - "show paging-group <0-255> IMSI", + "show paging-group " BTS_NR_VTY_ARG_VAL " IMSI", SHOW_STR "Display the paging group\n" BTS_NR_STR "IMSI\n") { @@ -1314,7 +1307,7 @@ } DEFUN(restart_bts, restart_bts_cmd, - "restart-bts <0-65535>", + "restart-bts " BTS_NR_VTY_ARG_VAL, "Restart ip.access nanoBTS through OML\n" BTS_NR_STR) { @@ -1353,7 +1346,7 @@ DEFUN(bts_resend_sysinfo, bts_resend_sysinfo_cmd, - "bts <0-255> resend-system-information", + "bts " BTS_NR_VTY_ARG_VAL " resend-system-information", "BTS Specific Commands\n" BTS_NR_STR "Re-generate + re-send BCCH SYSTEM INFORMATION\n") { @@ -1387,7 +1380,7 @@ DEFUN(bts_resend_power_ctrl_params, bts_resend_power_ctrl_params_cmd, - "bts <0-255> resend-power-control-defaults", + "bts " BTS_NR_VTY_ARG_VAL " resend-power-control-defaults", "BTS Specific Commands\n" BTS_NR_STR "Re-generate + re-send default MS/BS Power control parameters\n") { @@ -1426,7 +1419,7 @@ DEFUN(bts_c0_power_red, bts_c0_power_red_cmd, - "bts <0-255> c0-power-reduction <0-6>", + "bts " BTS_NR_VTY_ARG_VAL " c0-power-reduction <0-6>", "BTS Specific Commands\n" BTS_NR_STR "BCCH carrier power reduction operation\n" "Power reduction value (in dB, even numbers only)\n") @@ -1470,7 +1463,7 @@ /* this command is now hidden, as it's a low-level debug hack, and people should * instead use osmo-cbc these days */ DEFUN_HIDDEN(smscb_cmd, smscb_cmd_cmd, - "bts <0-255> smscb-command (normal|schedule|default) <1-4> HEXSTRING", + "bts " BTS_NR_VTY_ARG_VAL " smscb-command (normal|schedule|default) <1-4> HEXSTRING", "BTS related commands\n" BTS_NR_STR "SMS Cell Broadcast\n" "Normal (one-shot) SMSCB Message; sent once over Abis+Um\n" @@ -1540,7 +1533,7 @@ } DEFUN(pdch_act, pdch_act_cmd, - "bts <0-255> trx <0-255> timeslot <0-7> pdch (activate|deactivate)", + "bts " BTS_NR_VTY_ARG_VAL " trx <0-255> timeslot <0-7> pdch (activate|deactivate)", BTS_NR_TRX_TS_STR2 "Packet Data Channel\n" "Activate Dynamic PDCH/TCH (-> PDCH mode)\n" @@ -1797,7 +1790,7 @@ * manually in a given mode/codec. This is useful for receiver * performance testing (FER/RBER/...) */ DEFUN(lchan_act, lchan_act_cmd, - "bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> (activate|activate-vamos) (hr|fr|efr|amr|sig) <0-7>", + "bts " BTS_NR_VTY_ARG_VAL " trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> (activate|activate-vamos) (hr|fr|efr|amr|sig) <0-7>", BTS_NR_TRX_TS_STR2 "Primary sub-slot\n" "VAMOS secondary shadow subslot, range <0-1>, only valid for TCH type timeslots\n" SS_NR_STR @@ -1809,7 +1802,7 @@ } DEFUN(lchan_deact, lchan_deact_cmd, - "bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> deactivate", + "bts " BTS_NR_VTY_ARG_VAL " trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> deactivate", BTS_NR_TRX_TS_STR2 "Primary sub-slot\n" "VAMOS secondary shadow subslot, range <0-1>, only valid for TCH type timeslots\n"
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts.c
Changed
@@ -156,9 +156,20 @@ static int gsm_bts_talloc_destructor(struct gsm_bts *bts) { + /* Entries in bts->loc_list are freed by talloc recursively, no need to free them here. */ + + llist_del(&bts->list); + hash_del(&bts->node_by_nr); + hash_del(&bts->node_by_lac); + hash_del(&bts->node_by_lac_ci); + hash_del(&bts->node_by_ci); + paging_destructor(bts); bts_setup_ramp_remove(bts); + acc_ramp_deinit(&bts->acc_ramp); + acc_mgr_deinit(&bts->acc_mgr); + osmo_timer_del(&bts->cbch_timer); bts->site_mgr->bts0 = NULL; @@ -182,7 +193,7 @@ * This part is shared among the thin programs in osmo-bsc/src/utils/. * osmo-bsc requires further initialization that pulls in more dependencies (see * bsc_bts_alloc_register()). */ -struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm, uint8_t bts_num) +struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm, gsm_bts_nr_t bts_num) { struct gsm_bts *bts = talloc_zero(bts_sm, struct gsm_bts); @@ -192,6 +203,17 @@ talloc_set_destructor(bts, gsm_bts_talloc_destructor); bts->nr = bts_num; + + llist_add_tail(&bts->list, &net->bts_list); + hash_add(net->bts_by_nr, &bts->node_by_nr, bts->nr); + net->num_bts++; + + /* Default bts->location_area_code == GSM_LAC_RESERVED_DETACHED, don't add to hashtable: */ + INIT_HLIST_NODE(&bts->node_by_lac); + INIT_HLIST_NODE(&bts->node_by_lac_ci); + /* Default CI = 0: */ + hash_add(net->bts_by_ci, &bts->node_by_ci, bts->cell_identity); + bts->num_trx = 0; INIT_LLIST_HEAD(&bts->trx_list); bts->network = net; @@ -203,7 +225,7 @@ bts->mo.fi = osmo_fsm_inst_alloc(&nm_bts_fsm, bts, bts, LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(bts->mo.fi, "bts%d", bts->nr); - gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff); + gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->bts_nr, 0xff, 0xff); /* 3GPP TS 08.18, chapter 5.4.1: 0 is reserved for signalling */ bts->gprs.cell.bvci = 2; @@ -215,7 +237,7 @@ &bts->gprs.cell, LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(bts->gprs.cell.mo.fi, "gprs-cell%d", bts->nr); gsm_mo_init(&bts->gprs.cell.mo, bts, NM_OC_GPRS_CELL, - bts->nr, 0xff, 0xff); + bts->bts_nr, 0xff, 0xff); /* init statistics */ bts->bts_ctrs = rate_ctr_group_alloc(bts, &bts_ctrg_desc, bts->nr); @@ -343,6 +365,7 @@ INIT_LLIST_HEAD(&bts->neighbors); INIT_LLIST_HEAD(&bts->oml_fail_rep); INIT_LLIST_HEAD(&bts->chan_rqd_queue); + INIT_LLIST_HEAD(&bts->depends_on); /* Don't pin the BTS to any MGW by default: */ bts->mgw_pool_target = -1; @@ -869,37 +892,43 @@ } } -/* Assume there are only 256 possible bts */ -osmo_static_assert(sizeof(((struct gsm_bts *) 0)->nr) == 1, _bts_nr_is_256); -static void depends_calc_index_bit(int bts_nr, int *idx, int *bit) +int bts_depend_mark(struct gsm_bts *bts, gsm_bts_nr_t dep) { - *idx = bts_nr / (8 * 4); - *bit = bts_nr % (8 * 4); + struct bts_depends_on_entry *entry; + entry = talloc_zero(bts, struct bts_depends_on_entry); + if (!entry) { + LOG_BTS(bts, DNM, LOGL_ERROR, "Alloc of struct bts_depends_on_entry failed"); + return -1; + } + entry->bts_nr = dep; + llist_add_tail(&entry->list, &bts->depends_on); + return 0; } -void bts_depend_mark(struct gsm_bts *bts, int dep) +static struct bts_depends_on_entry *bts_depend_find_entry(const struct gsm_bts *bts, gsm_bts_nr_t dep) { - int idx, bit; - depends_calc_index_bit(dep, &idx, &bit); - - bts->depends_onidx |= 1U << bit; + struct bts_depends_on_entry *entry; + llist_for_each_entry(entry, &bts->trx_list, list) { + if (entry->bts_nr == dep) + return entry; + } + return NULL; } -void bts_depend_clear(struct gsm_bts *bts, int dep) +void bts_depend_clear(struct gsm_bts *bts, gsm_bts_nr_t dep) { - int idx, bit; - depends_calc_index_bit(dep, &idx, &bit); - - bts->depends_onidx &= ~(1U << bit); + struct bts_depends_on_entry *entry; + entry = bts_depend_find_entry(bts, dep); + if (!entry) + return; + llist_del(&entry->list); + talloc_free(entry); } -int bts_depend_is_depedency(struct gsm_bts *base, struct gsm_bts *other) +bool bts_depend_is_depedency(struct gsm_bts *base, struct gsm_bts *other) { - int idx, bit; - depends_calc_index_bit(other->nr, &idx, &bit); - - /* Check if there is a depends bit */ - return (base->depends_onidx & (1U << bit)) > 0; + struct bts_depends_on_entry *entry = bts_depend_find_entry(base, other->nr); + return !!entry; } static bool bts_is_online(const struct gsm_bts *bts) @@ -914,7 +943,7 @@ return bts->mo.nm_state.operational == NM_OPSTATE_ENABLED; } -int bts_depend_check(struct gsm_bts *bts) +bool bts_depend_check(struct gsm_bts *bts) { struct gsm_bts *other_bts; @@ -923,9 +952,9 @@ continue; if (bts_is_online(other_bts)) continue; - return 0; + return false; } - return 1; + return true; } /* get the radio link timeout (based on SACCH decode errors, according
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_ctrl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_ctrl.c
Changed
@@ -128,7 +128,7 @@ return CTRL_CMD_REPLY; } - curloc = llist_entry(bts->loc_list.next, struct bts_location, list); + curloc = llist_first_entry(&bts->loc_list, struct bts_location, list); cmd->reply = talloc_asprintf(cmd, "%lu,%s,%f,%f,%f", curloc->tstamp, get_value_string(bts_loc_fix_names, curloc->valid), curloc->lat, curloc->lon, curloc->height); @@ -169,7 +169,7 @@ return CTRL_CMD_ERROR; } - curloc = talloc_zero(tall_bsc_ctx, struct bts_location); + curloc = talloc_zero(bts, struct bts_location); if (!curloc) { talloc_free(tmp); goto oom; @@ -183,14 +183,14 @@ curloc->height = atof(height); talloc_free(tmp); - lastloc = llist_entry(bts->loc_list.next, struct bts_location, list); + lastloc = llist_first_entry_or_null(&bts->loc_list, struct bts_location, list); - /* Add location to the end of the list */ + /* Add location to the start of the list */ llist_add(&curloc->list, &bts->loc_list); ret = get_bts_loc(cmd, data); - if (!location_equal(curloc, lastloc)) + if (!lastloc || !location_equal(curloc, lastloc)) bsc_gen_location_state_trap(bts); cleanup_locations(&bts->loc_list); @@ -711,7 +711,7 @@ CTRL_CMD_DEFINE_WO(bts_neighbor_list_mode, "neighbor-list mode"); /* si2quater neighbor management: delete an EARFCN. - * Format: bts.<0-255>.si2quater-neighbor-list.del.earfcn EARFCN + * Format: bts.<0-65535>.si2quater-neighbor-list.del.earfcn EARFCN * EARFCN is in range 0..65535 */ static int set_bts_si2quater_neighbor_list_del_earfcn(struct ctrl_cmd *cmd, void *data) { @@ -736,7 +736,7 @@ "si2quater-neighbor-list del earfcn"); /* si2quater neighbor management: delete an UARFCN - * Format: bts.<0-255>.si2quater-neighbor-list.del.uarfcn UARFCN,SCRAMBLE + * Format: bts.<0-65535>.si2quater-neighbor-list.del.uarfcn UARFCN,SCRAMBLE * UARFCN is in range 0..16383, SCRAMBLE is in range 0..511 */ static int set_bts_si2quater_neighbor_list_del_uarfcn(struct ctrl_cmd *cmd, void *data) { @@ -827,7 +827,7 @@ } /* si2quater neighbor management: add an EARFCN - * Format: bts.<0-255>.si2quater-neighbor-list.add.earfcn <EARFCN>,<thresh-hi>,<thresh-lo>,<priority>,<QRXLEVMIN>,<measurement bandwidth> + * Format: bts.<0-65535>.si2quater-neighbor-list.add.earfcn <EARFCN>,<thresh-hi>,<thresh-lo>,<priority>,<QRXLEVMIN>,<measurement bandwidth> * EARFCN is in range 0..65535, thresh-hi is in range 0..31, thresh-hi is in range 0..32, * priority is in range 0..8, QRXLEVMIN is in range 0..32, measurement bandwidth is in range 0..8 */ static int set_bts_si2quater_neighbor_list_add_earfcn(struct ctrl_cmd *cmd, void *data) @@ -952,7 +952,7 @@ } /* si2quater neighbor management: add an UARFCN - * Format: bts.<0-255>.si2quater-neighbor-list.add.uarfcn <UARFCN>,<scrambling code>,<diversity bit> + * Format: bts.<0-65535>.si2quater-neighbor-list.add.uarfcn <UARFCN>,<scrambling code>,<diversity bit> * UARFCN is in range 0..16383, scrambling code is in range 0..511 */ static int set_bts_si2quater_neighbor_list_add_uarfcn(struct ctrl_cmd *cmd, void *data) { @@ -1507,7 +1507,7 @@ } /* Return full information about all logical channels in a BTS. - * format: bts.<0-255>.show-lchan.full + * format: bts.<0-65535>.show-lchan.full * result format: New line delimited list of <bts>,<trx>,<ts>,<lchan>,<type>,<connection>,<state>,<last error>,<bs power>, * <ms power>,<interference dbm>, <interference band>,<channel mode>,<imsi>,<tmsi>,<ipa bound ip>,<ipa bound port>, * <ipa bound conn id>,<ipa conn ip>,<ipa conn port>,<ipa conn speech mode>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_ericsson_rbs2000.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_ericsson_rbs2000.c
Changed
@@ -189,6 +189,15 @@ static int bts_model_rbs2k_bts_init(struct gsm_bts *bts) { + if (bts->nr > 0xff) { + /* Currently unsupported, since bts->nr is used directly filling + * in uint8_t abis_om2000 OML fields. See abis_om2k_bts_init(). + */ + LOGP(DNM, LOGL_ERROR, "bts %u type %s > 255 is unsupported! " + "Please configure your bts type %s first in the bts list\n", + bts->nr, bts->model->name, bts->model->name); + return -ENOTSUP; + } abis_om2k_bts_init(bts); return 0; }
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_ipaccess_nanobts.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_ipaccess_nanobts.c
Changed
@@ -506,12 +506,17 @@ /* These are exported because they are used by the VTY interface. */ void ipaccess_drop_rsl(struct gsm_bts_trx *trx, const char *reason) { + struct e1inp_sign_link *link; + if (!trx->rsl_link_primary) return; LOG_TRX(trx, DLINP, LOGL_NOTICE, "Dropping RSL link: %s\n", reason); - e1inp_sign_link_destroy(trx->rsl_link_primary); + /* Mark bts->rsl_link_primary ptr null before calling sign_link_destroy, + * to avoid a callback triggering this same code path. */ + link = trx->rsl_link_primary; trx->rsl_link_primary = NULL; + e1inp_sign_link_destroy(link); osmo_stat_item_dec(osmo_stat_item_group_get_item(trx->bts->bts_statg, BTS_STAT_RSL_CONNECTED), 1); if (trx->bts->c0 == trx) @@ -527,6 +532,7 @@ uint8_t i; struct timespec tp; int rc; + struct e1inp_sign_link *link; /* First of all, remove deferred drop if enabled */ osmo_timer_del(&bts->oml_drop_link_timer); @@ -535,8 +541,11 @@ return; LOG_BTS(bts, DLINP, LOGL_NOTICE, "Dropping OML link: %s\n", reason); - e1inp_sign_link_destroy(bts->oml_link); + /* Mark bts->oml_link ptr null before calling sign_link_destroy, + * to avoid a callback triggering this same code path. */ + link = bts->oml_link; bts->oml_link = NULL; + e1inp_sign_link_destroy(link); rc = osmo_clock_gettime(CLOCK_MONOTONIC, &tp); bts->updowntime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second precision for downtime */ osmo_stat_item_dec(osmo_stat_item_group_get_item(bts->bts_statg, BTS_STAT_OML_CONNECTED), 1); @@ -544,8 +553,9 @@ /* Also drop the associated OSMO link */ OSMO_ASSERT(bts->osmo_link); - e1inp_sign_link_destroy(bts->osmo_link); + link = bts->osmo_link; bts->osmo_link = NULL; + e1inp_sign_link_destroy(link); bts_setup_ramp_remove(bts);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_nokia_site.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_nokia_site.c
Changed
@@ -217,6 +217,7 @@ /* TODO: put in a separate file ? */ static const struct value_string nokia_msgt_name = { + { 0x7F, "NOKIA_BTS_RSSI_VSWR_COUNTERS_REQ" }, { 0x80, "NOKIA_BTS_CONF_DATA" }, { 0x81, "NOKIA_BTS_ACK" }, { 0x82, "NOKIA_BTS_OMU_STARTED" }, @@ -275,6 +276,20 @@ { 0xB7, "NOKIA_BTS_LCS_ANSWER" }, { 0xB8, "NOKIA_BTS_LMU_FN_OFFSET_COMMAND" }, { 0xB9, "NOKIA_BTS_LMU_FN_OFFSET_ANSWER" }, + { 0xBA, "NOKIA_BTS_LAPD_CTR_REP" }, + { 0xBB, "NOKIA_BTS_TRX_CONFIGURATION_UPDATE" }, + { 0xBC, "NOKIA_BTS_DYNAMIC_LOAD_INFO" }, + { 0xBD, "NOKIA_BTS_CONF_DATA_BS2" }, + { 0xBE, "NOKIA_BTS_REGISTRY_REQ" }, + { 0xBF, "NOKIA_BTS_SFS_UPLOAD_REQ" }, + { 0xC0, "NOKIA_BTS_DELAY_MEAS_REQ" }, + { 0xC1, "NOKIA_BTS_DELAY_MEAS_ACK" }, + { 0xC2, "NOKIA_BTS_PABIS_MEAS_REQ" }, + { 0xC3, "NOKIA_BTS_PABIS_MEAS_ACK" }, + { 0xC4, "NOKIA_BSC_RESET_INFO" }, + { 0xC5, "NOKIA_BSC_RESET_COMPL" }, + { 0xC6, "NOKIA_BSC_RESET_COMPL_ANSWER" }, + { 0xC7, "NOKIA_BTS_RSSI_VSWR_COUNTERS" }, { 0, NULL } }; @@ -456,7 +471,88 @@ { 0xAA, "TSC" }, { 0xAB, "Special TX Power Setting" }, { 0xAC, "Optional sync settings" }, + { 0xAD, "STIRC Option Setting" }, + { 0xAE, "Rx Difference Samples Count" }, + { 0xAF, "BTS Object Mapping" }, + { 0xB0, "Abis Mapping" }, + { 0xB1, "LAPDm T200 Values" }, + { 0xB2, "DTRX info" }, + { 0xB3, "Link and Counters" }, + { 0xB4, "TRS and BTS licensing" }, + { 0xB5, "TRX DDU association" }, + { 0xB6, "Power control reason" }, + { 0xB7, "CSDAP" }, + { 0xB8, "BS2 parameters" }, + { 0xB9, "BSC parameters" }, + { 0xBA, "BTS parameters" }, + { 0xBB, "TRX parameters" }, + { 0xBC, "HO parameters" }, + { 0xBD, "POC parameters" }, + { 0xBE, "ADJC parameters" }, + { 0xBF, "ADJC object" }, + { 0xC0, "UADJC parameters" }, + { 0xC1, "UADJC object" }, + { 0xC2, "BTS PCM id" }, + { 0xC3, "Segment Object id" }, + { 0xC4, "Cell load parameters" }, + { 0xC5, "Dynamic cell load info" }, + { 0xC6, "BSC Release information" }, + { 0xC7, "Complete data" }, + { 0xC8, "OMUSIG PCM info" }, + { 0xC9, "Line type" }, + { 0xCA, "Concurrent OMUSIGs priorities" }, + { 0xCB, "OMUSIG Priority" }, + { 0xCC, "OSC support" }, + { 0xCD, "CSDAP id" }, + { 0xCE, "CSDAP parameters" }, + { 0xCF, "Local Switching Counters" }, + { 0xD0, "TX queue handling parameters" }, + { 0xD1, "Valid History Records" }, + { 0xD2, "Measurement Operation Status" }, + { 0xD3, "Abis Delay Counters" }, + { 0xD4, "Abis Measurement channel" }, + { 0xD5, "Packet Abis BCF group configuration" }, + { 0xD6, "Traffic to DSCP mapping" }, + { 0xD7, "UL Shaping parameters" }, + { 0xD8, "Traffic scheduling" }, + { 0xD9, "Random Fill Bits usage" }, + { 0xDA, "Packet Abis BCF group id" }, + { 0xDB, "UDP" }, + { 0xDC, "Backhaul utilization monitor parameters" }, + { 0xDD, "Packet loss monitor parameters" }, + { 0xDE, "Congestion control" }, + { 0xDF, "Congestion reaction hysteresis parameters" }, + { 0xE0, "Multiplexing parameters" }, + { 0xE1, "IP addresses" }, + { 0xE2, "TRX feature capability" }, + { 0xE3, "Packet Abis If configuration" }, + { 0xE4, "BTS IPv4 address C/U-plane" }, + { 0xE5, "IPv4 address" }, + { 0xE6, "Subnet mask" }, + { 0xE7, "BSC IPv4 address C-plane" }, + { 0xE8, "BSC IPv4 address CS U-plane" }, + { 0xE9, "BSC IPv4 address PS U-plane" }, + { 0xEA, "MC-PPP class map" }, + { 0xEB, "SCTP parameters" }, + { 0xEC, "Packet Abis mapping" }, + { 0xED, "Sig ID" }, + { 0xEE, "Packet Abis mapping" }, + { 0xEF, "Measurement Request Type" }, + { 0xF0, "Peer BTS info" }, + { 0xF1, "Packet Abis Counters" }, + { 0xF2, "Waiting time for BSC restarting" }, + { 0xF3, "Peer BCF ID" }, + { 0xF4, "TRX starting mode" }, + { 0xF5, "GSM-R configuration" }, + { 0xF6, "DSCP to VLAN priority mapping" }, + { 0xF7, "TRX Assosiation" }, + { 0xF8, "Power Finetuning" }, + { 0xF9, "Abis Delay Measurement UDP port" }, { 0xFA, "Abis If parameters" }, + { 0xFB, "PDV" }, + { 0xFC, "Horizon BTS parameters" }, + { 0xFD, "reserved" }, + { 0xFE, "Radio Module SW" }, { 0, NULL } }; @@ -502,6 +598,21 @@ return get_value_string(nokia_severity, severity); } +static const struct value_string nokia_reset_type = { + { 0, "OMU reset" }, /* BTS is still able to carry traffic */ + { 1, "Site reset" }, + { 2, "Reserved" }, + { 3, "Autoconfiguration site reset" }, + { 4, "MetroSite VTGA reset" }, + { 5, "Total reset" }, /* Complete reset of Packet Abis BTS and Conversion Function reset */ + { 0, NULL } +}; + +static const char *get_reset_type_string(uint8_t reset_type) +{ + return get_value_string(nokia_reset_type, reset_type); +} + /* TODO: put in a separate file ? */ /* some message IDs */ @@ -525,6 +636,7 @@ #define NOKIA_EI_ADD_INFO 0x51 #define NOKIA_EI_SEVERITY 0x4B #define NOKIA_EI_ALARM_DETAIL 0x94 +#define NOKIA_EI_RESET_TYPE 0x18 #define OM_ALLOC_SIZE 1024 #define OM_HEADROOM_SIZE 128 @@ -1006,7 +1118,7 @@ */ static int make_bts_config(struct gsm_bts *bts, uint8_t bts_type, int n_trx, uint8_t * fu_config, - int need_hopping) + int need_hopping, int hopping_type) { /* is it an InSite BTS ? */ if (bts_type == 0x0E || bts_type == 0x0F || bts_type == 0x10) { /* TODO */ @@ -1036,9 +1148,24 @@ len += (sizeof(bts_config_1) + (n_trx - 1)); memcpy(fu_config + len, bts_config_2, sizeof(bts_config_2)); - /* set hopping mode (Baseband and RF hopping work for the MetroSite) */ - if (need_hopping) - fu_configlen + 2 + 1 = 1; /* 0: no hopping, 1: Baseband hopping, 2: RF hopping */ + /* set hopping mode */ + if (need_hopping) { + switch (hopping_type) { + /* 0: no hopping, 1: Baseband hopping, 2: RF hopping */ + case 0: + LOG_BTS(bts, DNM, LOGL_INFO, "Baseband hopping selected!\n"); + fu_configlen + 2 + 1 = 1; + break; + case 1: + LOG_BTS(bts, DNM, LOGL_INFO, "Synthesizer (RF) hopping selected!\n"); + fu_configlen + 2 + 1 = 2; + break; + default: + LOG_BTS(bts, DNM, LOGL_INFO, "No hopping is selected!\n"); + fu_configlen + 2 + 1 = 0; + break; + } + } len += sizeof(bts_config_2); /* set extended cell radius for each TRX */ @@ -1285,6 +1412,9 @@ int ret; int hopping = 0; int need_hopping = 0; + int hopping_type = 0; + + hopping_type = bts->nokia.hopping_mode; memset(config, 0, sizeof(config)); @@ -1311,7 +1441,7 @@ idx++; } - ret = make_bts_config(bts, bts_type, idx, config + len, need_hopping);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_siemens_bs11.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_siemens_bs11.c
Changed
@@ -32,51 +32,12 @@ #include <osmocom/bsc/timeslot_fsm.h> #include <osmocom/bsc/bts.h> -static int bts_model_bs11_start(struct gsm_network *net); static void bts_model_bs11_e1line_bind_ops(struct e1inp_line *line) { e1inp_line_bind_ops(line, &bts_isdn_e1inp_line_ops); } -static struct gsm_bts_model model_bs11 = { - .type = GSM_BTS_TYPE_BS11, - .name = "bs11", - .start = bts_model_bs11_start, - .oml_rcvmsg = &abis_nm_rcvmsg, - .e1line_bind_ops = bts_model_bs11_e1line_bind_ops, - .nm_att_tlvdef = { - .def = { - NM_ATT_AVAIL_STATUS = { TLV_TYPE_TLV }, - /* BS11 specifics */ - NM_ATT_BS11_ESN_FW_CODE_NO = { TLV_TYPE_TLV }, - NM_ATT_BS11_ESN_HW_CODE_NO = { TLV_TYPE_TLV }, - NM_ATT_BS11_ESN_PCB_SERIAL = { TLV_TYPE_TLV }, - NM_ATT_BS11_BOOT_SW_VERS = { TLV_TYPE_TLV }, - 0xd5 = { TLV_TYPE_TLV }, - 0xa8 = { TLV_TYPE_TLV }, - NM_ATT_BS11_PASSWORD = { TLV_TYPE_TLV }, - NM_ATT_BS11_TXPWR = { TLV_TYPE_TLV }, - NM_ATT_BS11_RSSI_OFFS = { TLV_TYPE_TLV }, - NM_ATT_BS11_LINE_CFG = { TLV_TYPE_TV }, - NM_ATT_BS11_L1_PROT_TYPE = { TLV_TYPE_TV }, - NM_ATT_BS11_BIT_ERR_THESH = { TLV_TYPE_FIXED, 2 }, - NM_ATT_BS11_DIVERSITY = { TLV_TYPE_TLV }, - NM_ATT_BS11_LMT_LOGON_SESSION={ TLV_TYPE_TLV }, - NM_ATT_BS11_LMT_LOGIN_TIME = { TLV_TYPE_TLV }, - NM_ATT_BS11_LMT_USER_ACC_LEV ={ TLV_TYPE_TLV }, - NM_ATT_BS11_LMT_USER_NAME = { TLV_TYPE_TLV }, - NM_ATT_BS11_BTS_STATE = { TLV_TYPE_TLV }, - NM_ATT_BS11_E1_STATE = { TLV_TYPE_TLV }, - NM_ATT_BS11_PLL_MODE = { TLV_TYPE_TLV }, - NM_ATT_BS11_PLL = { TLV_TYPE_TLV }, - NM_ATT_BS11_CCLK_ACCURACY = { TLV_TYPE_TV }, - NM_ATT_BS11_CCLK_TYPE = { TLV_TYPE_TV }, - 0x95 = { TLV_TYPE_FIXED, 2 }, - }, - }, -}; - /* The following definitions are for OM and NM packets that we cannot yet * generate by code but we just pass on */ @@ -95,7 +56,7 @@ emergencyTimer2: 0 minutes */ -unsigned char msg_1 = +static unsigned char msg_1 = { NM_MT_BS11_SET_ATTR, NM_OC_SITE_MANAGER, 0xFF, 0xFF, 0xFF, NM_ATT_BS11_ABIS_EXT_TIME, 0x07, @@ -230,7 +191,7 @@ timerHORequest: 3 ,unit 2 SACCH multiframes */ -unsigned char msg_3 = +static unsigned char msg_3 = { NM_MT_BS11_SET_ATTR, NM_OC_BS11_HANDOVER, 0x00, 0xFF, 0xFF, 0xD0, 0x00, /* enableDelayPowerBudgetHO */ @@ -301,7 +262,7 @@ enableBSPowerControl: 00h = disabled */ -unsigned char msg_4 = +static unsigned char msg_4 = { NM_MT_BS11_SET_ATTR, NM_OC_BS11_PWR_CTRL, 0x00, 0xFF, 0xFF, NM_ATT_BS11_ENA_MS_PWR_CTRL, 0x00, @@ -582,6 +543,44 @@ return 0; } +static struct gsm_bts_model model_bs11 = { + .type = GSM_BTS_TYPE_BS11, + .name = "bs11", + .start = bts_model_bs11_start, + .oml_rcvmsg = &abis_nm_rcvmsg, + .e1line_bind_ops = bts_model_bs11_e1line_bind_ops, + .nm_att_tlvdef = { + .def = { + NM_ATT_AVAIL_STATUS = { TLV_TYPE_TLV }, + /* BS11 specifics */ + NM_ATT_BS11_ESN_FW_CODE_NO = { TLV_TYPE_TLV }, + NM_ATT_BS11_ESN_HW_CODE_NO = { TLV_TYPE_TLV }, + NM_ATT_BS11_ESN_PCB_SERIAL = { TLV_TYPE_TLV }, + NM_ATT_BS11_BOOT_SW_VERS = { TLV_TYPE_TLV }, + 0xd5 = { TLV_TYPE_TLV }, + 0xa8 = { TLV_TYPE_TLV }, + NM_ATT_BS11_PASSWORD = { TLV_TYPE_TLV }, + NM_ATT_BS11_TXPWR = { TLV_TYPE_TLV }, + NM_ATT_BS11_RSSI_OFFS = { TLV_TYPE_TLV }, + NM_ATT_BS11_LINE_CFG = { TLV_TYPE_TV }, + NM_ATT_BS11_L1_PROT_TYPE = { TLV_TYPE_TV }, + NM_ATT_BS11_BIT_ERR_THESH = { TLV_TYPE_FIXED, 2 }, + NM_ATT_BS11_DIVERSITY = { TLV_TYPE_TLV }, + NM_ATT_BS11_LMT_LOGON_SESSION = { TLV_TYPE_TLV }, + NM_ATT_BS11_LMT_LOGIN_TIME = { TLV_TYPE_TLV }, + NM_ATT_BS11_LMT_USER_ACC_LEV = { TLV_TYPE_TLV }, + NM_ATT_BS11_LMT_USER_NAME = { TLV_TYPE_TLV }, + NM_ATT_BS11_BTS_STATE = { TLV_TYPE_TLV }, + NM_ATT_BS11_E1_STATE = { TLV_TYPE_TLV }, + NM_ATT_BS11_PLL_MODE = { TLV_TYPE_TLV }, + NM_ATT_BS11_PLL = { TLV_TYPE_TLV }, + NM_ATT_BS11_CCLK_ACCURACY = { TLV_TYPE_TV }, + NM_ATT_BS11_CCLK_TYPE = { TLV_TYPE_TV }, + 0x95 = { TLV_TYPE_FIXED, 2 }, + }, + }, +}; + int bts_model_bs11_init(void) { model_bs11.features.data = &model_bs11._features_data0;
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_sm.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_sm.c
Changed
@@ -49,7 +49,7 @@ return 0; } -struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, uint8_t bts_num) +struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, gsm_bts_nr_t bts_num) { struct gsm_bts_sm *bts_sm = talloc_zero(net, struct gsm_bts_sm); struct gsm_bts *bts; @@ -75,7 +75,7 @@ bts_sm->gprs.nse.mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts_sm, &bts_sm->gprs.nse, LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(bts_sm->gprs.nse.mo.fi, "nse%d", bts_num); - gsm_mo_init(&bts_sm->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff); + gsm_mo_init(&bts_sm->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->bts_nr, 0xff, 0xff); memcpy(&bts_sm->gprs.nse.timer, bts_nse_timer_default, sizeof(bts_sm->gprs.nse.timer)); @@ -89,12 +89,12 @@ osmo_fsm_inst_update_id_f(bts_sm->gprs.nsvci.mo.fi, "nsvc%d", i); gsm_mo_init(&bts_sm->gprs.nsvci.mo, bts, NM_OC_GPRS_NSVC, - bts->nr, i, 0xff); + bts->bts_nr, i, 0xff); } memcpy(&bts_sm->gprs.nse.timer, bts_nse_timer_default, sizeof(bts_sm->gprs.nse.timer)); gsm_mo_init(&bts_sm->gprs.nse.mo, bts, NM_OC_GPRS_NSE, - bts->nr, 0xff, 0xff); + bts->bts_nr, 0xff, 0xff); return bts_sm; }
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_trx.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_trx.c
Changed
@@ -75,13 +75,13 @@ LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(trx->mo.fi, "bts%d-trx%d", bts->nr, trx->nr); gsm_mo_init(&trx->mo, bts, NM_OC_RADIO_CARRIER, - bts->nr, trx->nr, 0xff); + bts->bts_nr, trx->nr, 0xff); trx->bb_transc.mo.fi = osmo_fsm_inst_alloc(&nm_bb_transc_fsm, trx, &trx->bb_transc, LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(trx->bb_transc.mo.fi, "bts%d-trx%d", bts->nr, trx->nr); gsm_mo_init(&trx->bb_transc.mo, bts, NM_OC_BASEB_TRANSC, - bts->nr, trx->nr, 0xff); + bts->bts_nr, trx->nr, 0xff); for (k = 0; k < TRX_NR_TS; k++) { struct gsm_bts_trx_ts *ts = &trx->tsk; @@ -100,7 +100,7 @@ osmo_fsm_inst_update_id_f(ts->mo.fi, "bts%d-trx%d-ts%d", bts->nr, trx->nr, ts->nr); gsm_mo_init(&ts->mo, bts, NM_OC_CHANNEL, - bts->nr, trx->nr, ts->nr); + bts->bts_nr, trx->nr, ts->nr); ts->hopping.arfcns.data_len = sizeof(ts->hopping.arfcns_data); ts->hopping.arfcns.data = ts->hopping.arfcns_data;
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_trx_ctrl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_trx_ctrl.c
Changed
@@ -123,7 +123,7 @@ } /* Return full information about all logical channels in a TRX. - * format: bts.<0-255>.trx.<0-255>.show-lchan.full + * format: bts.<0-65535>.trx.<0-255>.show-lchan.full * result format: New line delimited list of <bts>,<trx>,<ts>,<lchan>,<type>,<connection>,<state>,<last error>,<bs power>, * <ms power>,<interference dbm>, <interference band>,<channel mode>,<imsi>,<tmsi>,<ipa bound ip>,<ipa bound port>, * <ipa bound conn id>,<ipa conn ip>,<ipa conn port>,<ipa conn speech mode>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_trx_ts_ctrl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_trx_ts_ctrl.c
Changed
@@ -118,7 +118,7 @@ } /* Return full information about all logical channels in a timeslot. - * format: bts.<0-255>.trx.<0-255>.ts.<0-8>.show-lchan.full + * format: bts.<0-65535>.trx.<0-255>.ts.<0-8>.show-lchan.full * result format: New line delimited list of <bts>,<trx>,<ts>,<lchan>,<type>,<connection>,<state>,<last error>,<bs power>, * <ms power>,<interference dbm>, <interference band>,<channel mode>,<imsi>,<tmsi>,<ipa bound ip>,<ipa bound port>, * <ipa bound conn id>,<ipa conn ip>,<ipa conn port>,<ipa conn speech mode>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_trx_ts_lchan_ctrl.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_trx_ts_lchan_ctrl.c
Changed
@@ -37,7 +37,7 @@ } /* power control management: Get lchan's ms power in dBm - * format: bts.<0-255>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.ms-power */ + * format: bts.<0-65535>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.ms-power */ static int get_lchan_ms_power(struct ctrl_cmd *cmd, void *data) { struct gsm_lchan *lchan = cmd->node; @@ -54,7 +54,7 @@ /* power control management: Set lchan's ms power in dBm. * For static ms power control it will change the ms tx power. * For dynamic ms power control it will limit the maximum power level. - * format: bts.<0-255>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.ms-power <ms power> + * format: bts.<0-65535>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.ms-power <ms power> * ms power is in range 0..40 */ static int set_lchan_ms_power(struct ctrl_cmd *cmd, void *data) { @@ -122,7 +122,7 @@ } /* Return full information about a logical channel. - * format: bts.<0-255>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.show.full + * format: bts.<0-65535>.trx.<0-255>.ts.<0-8>.lchan.<0-8>.show.full * result format: <bts>,<trx>,<ts>,<lchan>,<type>,<connection>,<state>,<last error>,<bs power>,<ms power>,<interference dbm>, * <interference band>,<channel mode>,<imsi>,<tmsi>,<ipa bound ip>,<ipa bound port>,<ipa bound conn id>,<ipa conn ip>, * <ipa conn port>,<ipa conn speech mode>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/bts_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/bts_vty.c
Changed
@@ -91,6 +91,12 @@ { 0, NULL } }; +static const struct value_string nokia_hopping_mode_strs = { + { 0, "baseband" }, + { 1, "synthesizer" }, + { 0, NULL } +}; + static struct cmd_node bts_node = { BTS_NODE, "%s(config-net-bts)# ", @@ -106,7 +112,7 @@ /* per-BTS configuration */ DEFUN_ATTR(cfg_bts, cfg_bts_cmd, - "bts <0-255>", + "bts " BTS_NR_VTY_ARG_VAL, "Select a BTS to configure\n" BTS_NR_STR, CMD_ATTR_IMMEDIATE) @@ -258,7 +264,7 @@ cfg_bts_ci_cmd, X(BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK), "cell_identity <0-65535>", - "Set the Cell identity of this BTS\n" "Cell Identity\n") + "Set the Cell identity of this BTS\n" "Cell Identity (default 0)\n") { struct gsm_bts *bts = vty->index; int ci = atoi(argv0); @@ -269,6 +275,13 @@ return CMD_WARNING; } bts->cell_identity = ci; + hash_del(&bts->node_by_ci); + hash_add(bts->network->bts_by_ci, &bts->node_by_ci, bts->cell_identity); + if (bts->location_area_code != GSM_LAC_RESERVED_DETACHED) { + hash_del(&bts->node_by_lac_ci); + hash_add(bts->network->bts_by_lac_ci, &bts->node_by_lac_ci, + LAC_CI_HASHTABLE_KEY(bts->location_area_code, bts->cell_identity)); + } return CMD_SUCCESS; } @@ -278,8 +291,8 @@ X(BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK), "location_area_code (<0-65535>|<0x0000-0xffff>)", "Set the Location Area Code (LAC) of this BTS\n" - "LAC in decimal format\n" - "LAC in hexadecimal format\n") + "LAC in decimal format (default 0, reserved by GSM 04.08)\n" + "LAC in hexadecimal format (default 0x0000, reserved by GSM 04.08)\n") { struct gsm_bts *bts = vty->index; int lac; @@ -293,6 +306,11 @@ } bts->location_area_code = lac; + hash_del(&bts->node_by_lac); + hash_del(&bts->node_by_lac_ci); + hash_add(bts->network->bts_by_lac, &bts->node_by_lac, bts->location_area_code); + hash_add(bts->network->bts_by_lac_ci, &bts->node_by_lac_ci, + LAC_CI_HASHTABLE_KEY(bts->location_area_code, bts->cell_identity)); return CMD_SUCCESS; } @@ -452,6 +470,31 @@ return CMD_SUCCESS; } + +DEFUN_USRATTR(cfg_bts_nokia_site_hopping_mode, + cfg_bts_nokia_site_hopping_mode_cmd, + X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK), + "nokia_site hopping-mode (baseband|synthesizer)", + NOKIA_STR + "Sets the hopping type for Nokia *Site\n" + "Baseband (BB) hopping\n" + "Synthesizer (RF) hopping\n") +{ + struct gsm_bts *bts = vty->index; + + if (!is_nokia_bts(bts)) { + vty_out(vty, "%% BTS is not of Nokia *Site type%s", VTY_NEWLINE); + return CMD_WARNING; + } + + if (!strcmp(argv0, "baseband")) + bts->nokia.hopping_mode = 0; + else + bts->nokia.hopping_mode = 1; + + return CMD_SUCCESS; +} + #define OML_STR "Organization & Maintenance Link\n" #define IPA_STR "A-bis/IP Specific Options\n" @@ -2605,7 +2648,7 @@ } DEFUN_ATTR(cfg_bts_depends_on, cfg_bts_depends_on_cmd, - "depends-on-bts <0-255>", + "depends-on-bts " BTS_NR_VTY_ARG_VAL, "This BTS can only be started if another one is up\n" BTS_NR_STR, CMD_ATTR_IMMEDIATE) { @@ -2633,12 +2676,13 @@ return CMD_WARNING; } - bts_depend_mark(bts, dep); + if (bts_depend_mark(bts, dep) < 0) + return CMD_WARNING; return CMD_SUCCESS; } DEFUN_ATTR(cfg_bts_no_depends_on, cfg_bts_no_depends_on_cmd, - "no depends-on-bts <0-255>", + "no depends-on-bts " BTS_NR_VTY_ARG_VAL, NO_STR "This BTS can only be started if another one is up\n" BTS_NR_STR, CMD_ATTR_IMMEDIATE) { @@ -4490,6 +4534,14 @@ vty_out(vty, "%s", VTY_NEWLINE); } +static void config_write_bts_depends_on(struct vty *vty, const char *prefix, const struct gsm_bts *bts) +{ + struct bts_depends_on_entry *entry; + llist_for_each_entry(entry, &bts->depends_on, list) { + vty_out(vty, "%sdepends-on-bts %u%s", prefix, entry->bts_nr, VTY_NEWLINE); + } +} + static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) { int i; @@ -4679,6 +4731,8 @@ vty_out(vty, " nokia_site no-local-rel-conf %d%s", bts->nokia.no_loc_rel_cnf, VTY_NEWLINE); vty_out(vty, " nokia_site bts-reset-timer %d%s", bts->nokia.bts_reset_timer_cnf, VTY_NEWLINE); + vty_out(vty, " nokia_site hopping-mode %s%s", get_value_string(nokia_hopping_mode_strs, bts->nokia.hopping_mode), VTY_NEWLINE); + /* fall through: Nokia requires "oml e1" parameters also */ default: config_write_e1_link(vty, &bts->oml_e1_link, " oml "); @@ -4775,23 +4829,7 @@ vty_out(vty, " %sforce-combined-si%s", bts->force_combined_si ? "" : "no ", VTY_NEWLINE); - for (i = 0; i < ARRAY_SIZE(bts->depends_on); ++i) { - int j; - - if (bts->depends_oni == 0) - continue; - - for (j = 0; j < sizeof(bts->depends_oni) * 8; ++j) { - int bts_nr; - - if ((bts->depends_oni & (1<<j)) == 0) - continue; - - bts_nr = (i * sizeof(bts->depends_oni) * 8) + j; - vty_out(vty, " depends-on-bts %d%s", bts_nr, VTY_NEWLINE); - } - } - + config_write_bts_depends_on(vty, " ", bts); ho_vty_write_bts(vty, bts); if (bts->top_acch_cap.overpower_db > 0) { @@ -4921,6 +4959,7 @@ install_element(BTS_NODE, &cfg_bts_nokia_site_skip_reset_cmd); install_element(BTS_NODE, &cfg_bts_nokia_site_no_loc_rel_cnf_cmd); install_element(BTS_NODE, &cfg_bts_nokia_site_bts_reset_timer_cnf_cmd); + install_element(BTS_NODE, &cfg_bts_nokia_site_hopping_mode_cmd); install_element(BTS_NODE, &cfg_bts_stream_id_cmd); install_element(BTS_NODE, &cfg_bts_deprecated_stream_id_cmd); install_element(BTS_NODE, &cfg_bts_oml_e1_cmd);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/cbsp_link.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/cbsp_link.c
Changed
@@ -121,6 +121,7 @@ osmo_sock_get_name2(fd)); return -1; } + osmo_stream_srv_set_name(srv, "cbsp"); osmo_stream_srv_set_read_cb(srv, cbsp_srv_read_cb); osmo_stream_srv_set_closed_cb(srv, cbsp_srv_closed_cb); osmo_stream_srv_set_segmentation_cb(srv, osmo_cbsp_segmentation_cb); @@ -240,6 +241,8 @@ OSMO_SOCKADDR_STR_FMT_ARGS(&cbc->client.remote_addr)); if (!cbc->client.cli) { cbc->client.cli = osmo_stream_cli_create(cbc); + OSMO_ASSERT(cbc->client.cli); + osmo_stream_cli_set_name(cbc->client.cli, "cbsp"); osmo_stream_cli_set_data(cbc->client.cli, cbc); osmo_stream_cli_set_connect_cb(cbc->client.cli, cbsp_client_connect_cb); osmo_stream_cli_set_disconnect_cb(cbc->client.cli, cbsp_client_disconnect_cb); @@ -273,6 +276,8 @@ if (!cbc->server.link) { LOGP(DCBS, LOGL_NOTICE, "Creating CBSP Server\n"); cbc->server.link = osmo_stream_srv_link_create(cbc); + OSMO_ASSERT(cbc->server.link); + osmo_stream_srv_link_set_name(cbc->server.link, "cbsp"); osmo_stream_srv_link_set_data(cbc->server.link, cbc); osmo_stream_srv_link_set_accept_cb(cbc->server.link, cbsp_srv_link_accept_cb);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/gsm_data.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/gsm_data.c
Changed
@@ -49,6 +49,8 @@ void *tall_bsc_ctx = NULL; +osmo_static_assert(BTS_NR_MAX == ((2 << ((sizeof(gsm_bts_nr_t) * 8) - 1)) - 1), _gsm_bts_nr_t_size); + void set_ts_e1link(struct gsm_bts_trx_ts *ts, uint8_t e1_nr, uint8_t e1_ts, uint8_t e1_ts_ss) { @@ -57,30 +59,6 @@ ts->e1_link.e1_ts_ss = e1_ts_ss; } -/* Search for a BTS in the given Location Area; optionally start searching - * with start_bts (for continuing to search after the first result) */ -struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac, - struct gsm_bts *start_bts) -{ - struct gsm_bts *bts; - int skip = 0; - - if (start_bts) - skip = 1; - - llist_for_each_entry(bts, &net->bts_list, list) { - if (skip) { - if (start_bts == bts) - skip = 0; - continue; - } - - if (lac == GSM_LAC_RESERVED_ALL_BTS || bts->location_area_code == lac) - return bts; - } - return NULL; -} - static const struct value_string bts_gprs_mode_names = { { BTS_GPRS_NONE, "none" }, { BTS_GPRS_GPRS, "gprs" }, @@ -118,14 +96,10 @@ return NULL; bts = bts_sm->bts0; - net->num_bts++; - bts->type = type; gsm_set_bts_model(bts, model); bts->bsic = bsic; - llist_add_tail(&bts->list, &net->bts_list); - return bts; } @@ -250,18 +224,17 @@ return get_value_string(chreq_names, c); } -struct gsm_bts *gsm_bts_num(const struct gsm_network *net, int num) +struct gsm_bts *gsm_bts_num(const struct gsm_network *net, gsm_bts_nr_t num) { struct gsm_bts *bts; if (num >= net->num_bts) return NULL; - llist_for_each_entry(bts, &net->bts_list, list) { + hash_for_each_possible(net->bts_by_nr, bts, node_by_nr, num) { if (bts->nr == num) return bts; } - return NULL; }
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/lb.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/lb.c
Changed
@@ -32,7 +32,6 @@ #include <osmocom/bsc/lcs_loc_req.h> #include <osmocom/bsc/bssmap_reset.h> #include <osmocom/bsc/gsm_data.h> -#include <osmocom/bsc/sigtran_compat.h> /* Send reset to SMLC */ int bssmap_le_tx_reset(void)
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/neighbor_ident.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/neighbor_ident.c
Changed
@@ -377,7 +377,8 @@ struct gsm_bts *local_neighbor = NULL; struct gsm0808_cell_id_list2 remote_neighbors = { 0 }; - llist_for_each_entry(bts_tmp, &net->bts_list, list) { + hash_for_each_possible(net->bts_by_lac_ci, bts_tmp, node_by_lac_ci, + LAC_CI_HASHTABLE_KEY(lac, cell_id)) { if (bts_tmp->location_area_code != lac) continue; if (bts_tmp->cell_identity != cell_id)
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/neighbor_ident_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/neighbor_ident_vty.c
Changed
@@ -57,7 +57,7 @@ #define CGI_PS_ARGC 5 #define CGI_PS_DOC "Neighbor cell by cgi (Packet Switched, with RAC)\n" "MCC\n" "MNC\n" "LAC\n" "RAC\n" "CI\n" -#define LOCAL_BTS_PARAMS "bts <0-255>" +#define LOCAL_BTS_PARAMS "bts " BTS_NR_VTY_ARG_VAL #define LOCAL_BTS_DOC "Neighbor cell by local BTS number\n" "BTS number\n" static int neighbor_ident_vty_parse_lac(struct vty *vty, struct gsm0808_cell_id *cell_id, const char **argv) @@ -579,7 +579,7 @@ } DEFUN(show_bts_neighbor, show_bts_neighbor_cmd, - "show bts <0-255> neighbor " CELL_AB_VTY_PARAMS, + "show bts " BTS_NR_VTY_ARG_VAL " neighbor " CELL_AB_VTY_PARAMS, SHOW_STR "Display information about a BTS\n" "BTS number\n" "Query which cell would be the target for this neighbor ARFCN+BSIC\n" CELL_AB_VTY_DOC)
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/net_init.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/net_init.c
Changed
@@ -124,6 +124,9 @@ INIT_LLIST_HEAD(&net->bts_list); net->num_bts = 0; + hash_init(net->bts_by_nr); + hash_init(net->bts_by_lac); + hash_init(net->bts_by_ci); net->T_defs = gsm_network_T_defs; osmo_tdefs_reset(net->T_defs);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/osmo_bsc_bssap.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/osmo_bsc_bssap.c
Changed
@@ -150,7 +150,8 @@ if (!osmo_plmn_cmp(&id->lai.plmn, &bsc_gsmnet->plmn)) { int paged = 0; struct gsm_bts *bts; - llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { + hash_for_each_possible(bsc_gsmnet->bts_by_lac_ci, bts, node_by_lac_ci, + LAC_CI_HASHTABLE_KEY(id->lai.lac, id->cell_identity)) { if (bts->location_area_code != id->lai.lac) continue; if (bts->cell_identity != id->cell_identity) @@ -179,7 +180,8 @@ const struct osmo_lac_and_ci_id *id = ¶ms->cil.id_listi.lac_and_ci; int paged = 0; struct gsm_bts *bts; - llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { + hash_for_each_possible(bsc_gsmnet->bts_by_lac_ci, bts, node_by_lac_ci, + LAC_CI_HASHTABLE_KEY(id->lac, id->ci)) { if (bts->location_area_code != id->lac) continue; if (bts->cell_identity != id->ci) @@ -201,7 +203,7 @@ uint16_t ci = params->cil.id_listi.ci; int paged = 0; struct gsm_bts *bts; - llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { + hash_for_each_possible(bsc_gsmnet->bts_by_ci, bts, node_by_ci, ci) { if (bts->cell_identity != ci) continue; page_subscriber(params, bts, GSM_LAC_RESERVED_ALL_BTS); @@ -222,7 +224,7 @@ if (!osmo_plmn_cmp(&id->plmn, &bsc_gsmnet->plmn)) { int paged = 0; struct gsm_bts *bts; - llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { + hash_for_each_possible(bsc_gsmnet->bts_by_lac, bts, node_by_lac, id->lac) { if (bts->location_area_code != id->lac) continue; page_subscriber(params, bts, id->lac); @@ -248,7 +250,7 @@ uint16_t lac = params->cil.id_listi.lac; int paged = 0; struct gsm_bts *bts; - llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { + hash_for_each_possible(bsc_gsmnet->bts_by_lac, bts, node_by_lac, lac) { if (bts->location_area_code != lac) continue; page_subscriber(params, bts, lac);
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/osmo_bsc_msc.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/osmo_bsc_msc.c
Changed
@@ -37,8 +37,6 @@ #include <osmocom/gsm/gsm0808.h> #include <osmocom/gsm/gsm23236.h> -#include <osmocom/abis/ipa.h> - #include <osmocom/mgcp_client/mgcp_client.h> #include <osmocom/mgcp_client/mgcp_client_pool.h>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/osmo_bsc_sigtran.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/osmo_bsc_sigtran.c
Changed
@@ -37,7 +37,6 @@ #include <osmocom/bsc/bts.h> #include <osmocom/bsc/paging.h> #include <osmocom/bsc/bssmap_reset.h> -#include <osmocom/bsc/sigtran_compat.h> #include <osmocom/mgcp_client/mgcp_common.h> #include <osmocom/netif/ipa.h>
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/pcu_sock.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/pcu_sock.c
Changed
@@ -363,15 +363,20 @@ /* Allow test to overwrite it */ __attribute__((weak)) void pcu_info_update(struct gsm_bts *bts) { - if (pcu_connected(bts->network)) { - if (bsc_co_located_pcu(bts)) { - /* In cases where the CCU is connected via an E1 line, we transmit the connection parameters for the - * PDCH before we announce the other BTS related parameters. */ - if (is_e1_bts(bts)) - pcu_tx_e1_ccu_ind(bts); - pcu_tx_info_ind(bts); - } + if (!pcu_connected(bts->network)) + return; + if (!bsc_co_located_pcu(bts)) + return; + if (bts->nr > 0xff) { /* OS#6565 */ + LOG_BTS(bts, DPCU, LOGL_ERROR, "bts id > 255 cannot be configured over PCUIF! GPRS won't work for this BTS!"); + return; } + + /* In cases where the CCU is connected via an E1 line, we transmit the connection parameters for the + * PDCH before we announce the other BTS related parameters. */ + if (is_e1_bts(bts)) + pcu_tx_e1_ccu_ind(bts); + pcu_tx_info_ind(bts); } static int pcu_tx_data_ind(struct gsm_bts_trx_ts *ts, uint8_t sapi, uint32_t fn, @@ -419,10 +424,20 @@ /* Bail if no PCU is connected */ if (!pcu_connected(bts->network)) { - LOG_BTS(bts, DRSL, LOGL_ERROR, "CHAN RQD(GPRS) but PCU not connected!\n"); + LOG_BTS(bts, DPCU, LOGL_ERROR, "CHAN RQD(GPRS) but PCU not connected!\n"); return -ENODEV; } + if (!bsc_co_located_pcu(bts)) { + LOG_BTS(bts, DPCU, LOGL_ERROR, "CHAN RQD(GPRS) on BTS whose PCU is not BSC-colocated!\n"); + return -EINVAL; + } + + if (bts->nr > 0xff) { /* OS#6565 */ + LOG_BTS(bts, DPCU, LOGL_ERROR, "CHAN RQD(GPRS) on bts id > 255 cannot be sent over PCUIF! GPRS won't work for this BTS!"); + return -EINVAL; + } + LOG_BTS(bts, DPCU, LOGL_INFO, "Sending RACH indication: qta=%d, ra=%d, " "fn=%d\n", qta, ra, fn); @@ -650,24 +665,33 @@ return 0; } -static int pcu_rx_txt_ind(struct gsm_bts *bts, +static int pcu_rx_txt_ind(struct gsm_network *net, struct gsm_bts *bts, const struct gsm_pcu_if_txt_ind *txt) { - int rc; + int rc = 0; switch (txt->type) { case PCU_VERSION: - LOG_BTS(bts, DPCU, LOGL_INFO, "OsmoPCU version %s connected\n", + LOGP(DPCU, LOGL_INFO, "OsmoPCU version %s connected\n", txt->text); - rc = pcu_tx_si_all(bts); + + /* we use the reception of the PCU_VERSION as a trigger to make the PCU available for + * all BTSs handled by this process (currently this is exactly one BTS, see FIXME notes) */ + llist_for_each_entry(bts, &net->bts_list, list) { + if (bsc_co_located_pcu(bts)) { + if (pcu_tx_si_all(bts) < 0) + rc = -EINVAL; + } + } if (rc < 0) return -EINVAL; break; case PCU_OML_ALERT: + OSMO_ASSERT(bts); LOG_BTS(bts, DPCU, LOGL_ERROR, "PCU external alarm: %s\n", txt->text); break; default: - LOG_BTS(bts, DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n", + LOGP(DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n", txt->type); return -EINVAL; } @@ -684,25 +708,39 @@ return -EINVAL; \ } \ } while (0) + +#define ENSURE_BTS_OBJECT(bts) \ + do { \ + if ((bts = gsm_bts_num(net, pcu_prim->bts_nr)) == NULL) { \ + LOGP(DPCU, LOGL_ERROR, "Received PCU Prim for non-existent BTS %u\n", pcu_prim->bts_nr); \ + return -EINVAL; \ + } \ + } while (0) + static int pcu_rx(struct gsm_network *net, uint8_t msg_type, struct gsm_pcu_if *pcu_prim, size_t prim_len) { int rc = 0; struct gsm_bts *bts; - bts = gsm_bts_num(net, pcu_prim->bts_nr); - if (!bts) - return -EINVAL; - switch (msg_type) { case PCU_IF_MSG_DATA_REQ: case PCU_IF_MSG_PAG_REQ: CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.data_req); + ENSURE_BTS_OBJECT(bts); rc = pcu_rx_data_req(bts, msg_type, &pcu_prim->u.data_req); break; case PCU_IF_MSG_TXT_IND: CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.txt_ind); - rc = pcu_rx_txt_ind(bts, &pcu_prim->u.txt_ind); + if (pcu_prim->u.txt_ind.type == PCU_VERSION) { + /* A TXT indication that carries the PCU_VERSION is always addressed to the + * receiving process as a whole, which means we will not resolve a specific + * BTS object in this case. */ + rc = pcu_rx_txt_ind(net, NULL, &pcu_prim->u.txt_ind); + } else { + ENSURE_BTS_OBJECT(bts); + rc = pcu_rx_txt_ind(NULL, bts, &pcu_prim->u.txt_ind); + } break; default: LOGP(DPCU, LOGL_ERROR, "Received unknown PCU msg type %d\n", @@ -881,6 +919,11 @@ struct gsm_bts_trx *trx; int j; + if (bts->nr > 0xff) { /* OS#6565 */ + LOG_BTS(bts, DPCU, LOGL_ERROR, "bts id > 255 cannot be configured over PCUIF! GPRS won't work for this BTS!"); + return; + } + /* activate PDCH */ llist_for_each_entry(trx, &bts->trx_list, list) { for (j = 0; j < ARRAY_SIZE(trx->ts); j++) {
View file
osmo-bsc_1.12.4.tar.xz/src/osmo-bsc/smscb_vty.c -> osmo-bsc_1.13.0.tar.xz/src/osmo-bsc/smscb_vty.c
Changed
@@ -391,7 +391,7 @@ } DEFUN(bts_show_cbs, bts_show_cbs_cmd, - "show bts <0-255> smscb (basic|extended)", + "show bts " BTS_NR_VTY_ARG_VAL " smscb (basic|extended)", SHOW_STR "Display information about a BTS\n" "BTS number\n" "SMS Cell Broadcast State\n" "Show only information related to CBCH BASIC\n"
View file
osmo-bsc_1.12.4.tar.xz/tests/acc/acc_test.c -> osmo-bsc_1.13.0.tar.xz/tests/acc/acc_test.c
Changed
@@ -58,9 +58,6 @@ #define bts_del(bts) _bts_del(bts, __func__) static inline void _bts_del(struct gsm_bts *bts, const char *msg) { - osmo_timer_del(&bts->acc_mgr.rotate_timer); - osmo_timer_del(&bts->acc_ramp.step_timer); - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); fprintf(stderr, "BTS deallocated OK in %s()\n", msg); }
View file
osmo-bsc_1.12.4.tar.xz/tests/ctrl/osmo-bsc-neigh-test.cfg -> osmo-bsc_1.13.0.tar.xz/tests/ctrl/osmo-bsc-neigh-test.cfg
Changed
@@ -137,9 +137,9 @@ bts 2 type osmo-bts band DCS1800 - cell_identity 123 + cell_identity 124 location_area_code 0x0001 - base_station_id_code 55 + base_station_id_code 56 ms max power 15 cell reselection hysteresis 4 rxlev access min 0 @@ -158,7 +158,7 @@ gprs routing area 6 trx 0 rf_locked 0 - arfcn 880 + arfcn 881 nominal power 23 ! to use full TRX power, set max_power_red 0 max_power_red 20
View file
osmo-bsc_1.12.4.tar.xz/tests/gsm0408/gsm0408_test.c -> osmo-bsc_1.13.0.tar.xz/tests/gsm0408/gsm0408_test.c
Changed
@@ -137,8 +137,6 @@ #define bts_del(bts) _bts_del(bts, __func__) static inline void _bts_del(struct gsm_bts *bts, const char *msg) { - osmo_timer_del(&bts->acc_mgr.rotate_timer); - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); printf("BTS deallocated OK in %s()\n", msg); }
View file
osmo-bsc_1.12.4.tar.xz/tests/handover/handover_test.c -> osmo-bsc_1.13.0.tar.xz/tests/handover/handover_test.c
Changed
@@ -847,7 +847,7 @@ return trx; } -#define LCHAN_ARGS "lchan <0-255> <0-255> <0-7> <0-7>" +#define LCHAN_ARGS "lchan " BTS_NR_VTY_ARG_VAL " <0-255> <0-7> <0-7>" #define LCHAN_ARGS_DOC "identify an lchan\nBTS nr\nTRX nr\nTimeslot nr\nSubslot nr\n" static struct gsm_lchan *parse_lchan_args(const char **argv) @@ -858,7 +858,7 @@ return &ts->lchanatoi(argv3); } -#define LCHAN_WILDCARD_ARGS "lchan (<0-255>|*) (<0-255>|*) (<0-7>|*) (<0-7>|*)" +#define LCHAN_WILDCARD_ARGS "lchan (" BTS_NR_VTY_ARG_VAL "|*) (<0-255>|*) (<0-7>|*) (<0-7>|*)" #define LCHAN_WILDCARD_ARGS_DOC "identify an lchan\nBTS nr\nall BTS\nTRX nr\nall BTS\nTimeslot nr\nall TS\nSubslot nr\nall subslots\n" static void parse_lchan_wildcard_args(const char **argv, void (*cb)(struct gsm_lchan*, void*), void *cb_data) @@ -1104,7 +1104,7 @@ } DEFUN(res_ind, res_ind_cmd, - "res-ind trx <0-255> <0-255> levels .LEVELS", + "res-ind trx " BTS_NR_VTY_ARG_VAL " <0-255> levels .LEVELS", "Send Resource Indication for a specific TRX, indicating interference levels per lchan\n" "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n" "Indicate interference levels: each level is an index to bts->interf_meas_params.bounds_dbm," @@ -1398,7 +1398,7 @@ } DEFUN(expect_ts_use, expect_ts_use_cmd, - "expect-ts-use trx <0-255> <0-255> states" TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE, + "expect-ts-use trx " BTS_NR_VTY_ARG_VAL " <0-255> states" TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE, "Expect timeslots of a BTS' TRX to be in a specific state\n" "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n" "List of 8 expected TS states\n" @@ -1435,7 +1435,7 @@ } DEFUN(set_arfcn, set_arfcn_cmd, - "set-arfcn trx <0-255> <0-255> <0-1023>", + "set-arfcn trx " BTS_NR_VTY_ARG_VAL " <0-255> <0-1023>", "Set the ARFCN for a BTS' TRX\n" "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n" "Absolute Radio Frequency Channel Number\n") @@ -1467,7 +1467,7 @@ } DEFUN(set_band, set_band_cmd, - "set-band bts <0-255> BAND", + "set-band bts " BTS_NR_VTY_ARG_VAL " BAND", "Set the frequency band for a BTS\n" "Indicate a BTS\n" "BTS nr\n" "Frequency band\n") @@ -1488,7 +1488,7 @@ } DEFUN(set_ts_use, set_ts_use_cmd, - "set-ts-use trx <0-255> <0-255> states" TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE, + "set-ts-use trx " BTS_NR_VTY_ARG_VAL " <0-255> states" TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE TS_USE, "Put timeslots of a BTS' TRX into a specific state\n" "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n" "List of 8 TS states to apply\n"
View file
osmo-bsc_1.12.4.tar.xz/tests/neighbor_ident.vty -> osmo-bsc_1.13.0.tar.xz/tests/neighbor_ident.vty
Changed
@@ -2,13 +2,13 @@ OsmoBSC> list ... - show bts <0-255> neighbor arfcn <0-1023> bsic (<0-63>|any) + show bts <0-65535> neighbor arfcn <0-1023> bsic (<0-63>|any) ... OsmoBSC> enable OsmoBSC# list ... - show bts <0-255> neighbor arfcn <0-1023> bsic (<0-63>|any) + show bts <0-65535> neighbor arfcn <0-1023> bsic (<0-63>|any) ... OsmoBSC# configure terminal @@ -84,7 +84,7 @@ OsmoBSC(config-net)# bts 0 OsmoBSC(config-net-bts)# list ... - neighbor bts <0-255> + neighbor bts <0-65535> neighbor lac <0-65535> neighbor lac-ci <0-65535> <0-65535> neighbor cgi <0-999> <0-999> <0-65535> <0-65535> @@ -93,7 +93,7 @@ neighbor lac-ci <0-65535> <0-65535> arfcn <0-1023> bsic (<0-63>|any) neighbor cgi <0-999> <0-999> <0-65535> <0-65535> arfcn <0-1023> bsic (<0-63>|any) neighbor cgi-ps <0-999> <0-999> <0-65535> <0-255> <0-65535> arfcn <0-1023> bsic (<0-63>|any) - no neighbor bts <0-255> + no neighbor bts <0-65535> no neighbor lac <0-65535> no neighbor lac-ci <0-65535> <0-65535> no neighbor cgi <0-999> <0-999> <0-65535> <0-65535> @@ -113,7 +113,7 @@ cgi-ps Add Neighbor cell by cgi (Packet Switched, with RAC) OsmoBSC(config-net-bts)# neighbor bts ? - <0-255> BTS number + <0-65535> BTS number OsmoBSC(config-net-bts)# neighbor bts 0 ? <cr> @@ -185,7 +185,7 @@ arfcn ARFCN of neighbor cell OsmoBSC(config-net-bts)# no neighbor bts ? - <0-255> BTS number + <0-65535> BTS number OsmoBSC(config-net-bts)# no neighbor bts 0 ? <cr>
View file
osmo-bsc_1.12.4.tar.xz/tests/osmo-bsc.vty -> osmo-bsc_1.13.0.tar.xz/tests/osmo-bsc.vty
Changed
@@ -2,7 +2,7 @@ OsmoBSC# list ... - bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> modify (vamos|non-vamos) tsc <1-4> <0-7> + bts <0-65535> trx <0-255> timeslot <0-7> sub-slot <0-7> modify (vamos|non-vamos) tsc <1-4> <0-7> ... OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 ? @@ -35,15 +35,15 @@ OsmoBSC# list ... - bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> (activate|activate-vamos) (hr|fr|efr|amr|sig) <0-7> - bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> deactivate + bts <0-65535> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> (activate|activate-vamos) (hr|fr|efr|amr|sig) <0-7> + bts <0-65535> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> deactivate ... OsmoBSC# bts? bts BTS Specific Commands OsmoBSC# bts ? - <0-255> BTS Number + <0-65535> BTS Number OsmoBSC# bts 0 ? unblock-setup-ramping Unblock and allow to configure a BTS if kept back by BTS ramping @@ -100,7 +100,7 @@ OsmoBSC# list ... - bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> reassign-to trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> tsc <1-4> <0-7> + bts <0-65535> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> reassign-to trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> tsc <1-4> <0-7> ... OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 reassign-to ?
View file
osmo-bsc_1.12.4.tar.xz/tests/paging/paging_test.c -> osmo-bsc_1.13.0.tar.xz/tests/paging/paging_test.c
Changed
@@ -97,7 +97,6 @@ #define bts_del(bts) _bts_del(bts, __func__) static inline void _bts_del(struct gsm_bts *bts, const char *msg) { - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); fprintf(stderr, "BTS deallocated OK in %s()\n", msg); }
View file
osmo-bsc_1.12.4.tar.xz/tests/vty_test_runner.py -> osmo-bsc_1.13.0.tar.xz/tests/vty_test_runner.py
Changed
@@ -174,6 +174,23 @@ res = self.vty.command("show network") self.assertTrue(res.startswith('BSC is on Country Code') >= 0) + def testTonsOfBTS(self): + self.vty.enable() + self.assertTrue(self.vty.verify("configure terminal",'')) + self.assertTrue(self.vty.verify("network",'')) + num_of_bts = 1000 + for i in range(num_of_bts): + self.assertTrue(self.vty.verify("bts " + str(i),'')) + self.assertEqual(self.vty.node(), 'config-net-bts') + self.checkForEndAndExit() + self.assertTrue(self.vty.verify("trx 0",'')) + self.assertEqual(self.vty.node(), 'config-net-bts-trx') + self.checkForEndAndExit() + self.assertTrue(self.vty.verify("exit",'')) + self.assertEqual(self.vty.node(), 'config-net-bts') + self.assertTrue(self.vty.verify("exit",'')) + self.assertEqual(self.vty.node(), 'config-net') + def add_bsc_test(suite, workdir): if not os.path.isfile(os.path.join(workdir, "src/osmo-bsc/osmo-bsc")):
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.