arehbein has uploaded this change for review.

View Change

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) */

To view, visit change 30602. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: If3f96a6bd4f9ae32b6421de43c1c5a5d64482089
Gerrit-Change-Number: 30602
Gerrit-PatchSet: 1
Gerrit-Owner: arehbein <arehbein@sysmocom.de>
Gerrit-MessageType: newchange