arehbein has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/30602 )
Change subject: WIP: vty: Add check against sensible default value for ny1 ......................................................................
WIP: vty: Add check against sensible default value for ny1
Related: OS#5475 Change-Id: If3f96a6bd4f9ae32b6421de43c1c5a5d64482089 --- M include/osmocom/bsc/bts.h M src/osmo-bsc/bts.c M src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c 3 files changed, 38 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/02/30602/1
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index 1a84a0e..2167d6e 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -777,6 +777,7 @@ /* return the gsm_lchan for the CBCH (if it exists at all) */ struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);
+unsigned long gsm_bts_check_ny1(struct gsm_bts *bts, unsigned long *ny1_out); int gsm_set_bts_model(struct gsm_bts *bts, struct gsm_bts_model *model); int gsm_set_bts_type(struct gsm_bts *bts, enum gsm_bts_type type);
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index 9be2454..eeef776 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -532,6 +532,16 @@ } }
+ unsigned long ny1; + unsigned long check_ny1_r = gsm_bts_check_ny1(bts, &ny1); + bool ny1_inappropriate = check_ny1_r != 0; + if (ny1_inappropriate) { + unsigned long ny1 = osmo_tdef_get_entry(bts->network->T_defs, -3105)->val; + LOGP(DNM, LOGL_ERROR, "ny1 value (%lu) too low! Lowest recommendation: " + "%lu\n", ny1, check_ny1_r); + return -EINVAL; + } + return 0; }
@@ -640,6 +650,24 @@ return NULL; }
+/* Return 0 iff ny1 satisfies network requirements, otherwise return a suggestion for ny1 */ +unsigned long gsm_bts_check_ny1(struct gsm_bts *bts, unsigned long *ny1_out) +{ + struct gsm_lchan *gl = gsm_bts_get_cbch(bts); + /* TS 44.018 specifies these values for T3124 (ms) depending on the channel type */ + unsigned long T3124; + if (gl) { + T3124 = (gl->type == GSM_LCHAN_SDCCH) ? GSM_T3124_SDCCH : GSM_T3124_OTHER_CH; + } else { + /* Take the higher lower bound to be safe */ + T3124 = GSM_T3124_SDCCH; + } + unsigned long T3105 = osmo_tdef_get_entry(bts->network->T_defs, 3105)->val; + OSMO_ASSERT(T3105 > 0); + *ny1_out = osmo_tdef_get_entry(bts->network->T_defs, -3105)->val; + return (T3105 * *ny1_out > T3124) ? 0 : T3124/T3105 + 1; +} + int gsm_set_bts_model(struct gsm_bts *bts, struct gsm_bts_model *model) { bts->model = model; diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c index 72abe23..47304c3 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c @@ -21,6 +21,7 @@
#include <arpa/inet.h> #include <osmocom/core/msgb.h> +#include <osmocom/core/logging.h> #include <osmocom/bsc/gsm_data.h> #include <osmocom/bsc/abis_nm.h> #include <osmocom/bsc/bts.h> @@ -92,6 +93,14 @@ msgb_tv_put(msgb, NM_ATT_BTS_AIR_TIMER, osmo_tdef_get(bts->network->T_defs, 3105, OSMO_TDEF_MS, -1)/10);
/* NY1 (3GPP TS 12.21 sec 9.4.37), number of retransmissions of physical config */ + unsigned long ny1; + unsigned long check_ny1_r = gsm_bts_check_ny1(bts, &ny1); + bool ny1_inappropriate = check_ny1_r != 0; + if (ny1_inappropriate) { + unsigned long ny1 = osmo_tdef_get_entry(bts->network->T_defs, -3105)->val; + LOGP(DNM, LOGL_NOTICE, "ny1 value (%lu) should be higher. Lowest recommendation: " + "%lu\n", ny1, GSM_NY1_DEFAULT); + } msgb_tv_put(msgb, NM_ATT_NY1, osmo_tdef_get(bts->network->T_defs, -3105, OSMO_TDEF_CUSTOM, GSM_NY1_DEFAULT));
/* BCCH ARFCN (3GPP TS 12.21 sec 9.4.8) */