Change in osmo-bsc[master]: update neighbor ARFCNs on startup and config changes

neels gerrit-no-reply at lists.osmocom.org
Thu Apr 22 18:50:32 UTC 2021


neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/23785 )

Change subject: update neighbor ARFCNs on startup and config changes
......................................................................

update neighbor ARFCNs on startup and config changes

The effects of the neighbor configuration depend on the LAC, Cell
Identity, ARFCN, BSIC configuration of neighbor cells. Make sure that
the neighbor ARFCN list in the System Information is updated.

This may seem rather aggressive: updating the SI of all BTS if only one
config item changed. But indeed even modifying one config item of one
BTS may cause a change in the neighbor relations that many other BTS may
have to the changed BTS. For example, if many BTS configure a
'neighbor lac-ci 42 23', and this cell's config changes to LAC 43, all
of those other BTS need to update their neighbor ARFCNs.

Also update the system information even before the BTS are connected and
started up. The main benefit here is that the VTY 'show bts N' command
then already lists the correct neighbor ARFCNs.

In gsm_bts_trx_set_system_infos(), make sure that the updated SI is only
sent to TRXes that are actually usable, otherwise abis_rsl_sendmsg()
spams the log with complaints that a message's dst == NULL. Still return
an error rc in case a TRX is not connected, so that the CTRL command
bts.N.send-new-system-informations accurately returns whether SI were
actually sent to all TRXes.

The desire to have the ARFCNs listed in the VTY before starting up BTSes
came during analysis for Ifb54d9a91e9bca032c721f12c873c6216733e7b1,
which fixes a bug that is now much easier to verify being fixed.

Change-Id: I2222e029fc225152e124ed1e8887f1ffd4a107ef
---
M include/osmocom/bsc/bts.h
M src/osmo-bsc/bsc_init.c
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/bts.c
M src/osmo-bsc/bts_trx.c
M src/osmo-bsc/neighbor_ident_vty.c
M src/osmo-bsc/osmo_bsc_main.c
7 files changed, 48 insertions(+), 3 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index bcc215d..58ca104 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -671,6 +671,7 @@
 int bts_count_free_ts(struct gsm_bts *bts, enum gsm_phys_chan_config pchan);
 
 int gsm_bts_set_system_infos(struct gsm_bts *bts);
+int gsm_net_set_system_infos(void);
 
 int gsm_bts_model_register(struct gsm_bts_model *model);
 struct gsm_bts_model *bts_model_find(enum gsm_bts_type type);
diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c
index b572f27..cd97695 100644
--- a/src/osmo-bsc/bsc_init.c
+++ b/src/osmo-bsc/bsc_init.c
@@ -168,3 +168,15 @@
 
 	return bts;
 }
+
+int gsm_net_set_system_infos(void)
+{
+	struct gsm_bts *bts;
+	int ret = 0;
+	llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) {
+		int rc = gsm_bts_set_system_infos(bts);
+		if (rc)
+			ret = rc;
+	}
+	return ret;
+}
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 3c60f5f..1a6cf0a 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -2448,6 +2448,11 @@
 	}
 	bts->cell_identity = ci;
 
+	/* Changing the CI of a BTS may affect the neighbor relations between cells, when other cells indicate a
+	 * neighbor cell by CI. Update the neighbors list in System Information. */
+	if (vty->type != VTY_FILE)
+		gsm_net_set_system_infos();
+
 	return CMD_SUCCESS;
 }
 
@@ -2474,6 +2479,11 @@
 
 	bts->location_area_code = lac;
 
+	/* Changing the LAC of a BTS may affect the neighbor relations between cells, when other cells indicate a
+	 * neighbor cell by LAC. Update the neighbors list in System Information. */
+	if (vty->type != VTY_FILE)
+		gsm_net_set_system_infos();
+
 	return CMD_SUCCESS;
 }
 
@@ -2504,6 +2514,9 @@
 	}
 	bts->bsic = bsic;
 
+	if (vty->type != VTY_FILE)
+		gsm_net_set_system_infos();
+
 	return CMD_SUCCESS;
 }
 
@@ -5347,7 +5360,9 @@
 		return CMD_WARNING;
 	}
 
-	/* FIXME: patch ARFCN into SYSTEM INFORMATION */
+	if (vty->type != VTY_FILE)
+		gsm_net_set_system_infos();
+
 	/* FIXME: use OML layer to update the ARFCN */
 	/* FIXME: use RSL layer to update SYSTEM INFORMATION */
 
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 2192c56..08587d7 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -722,6 +722,7 @@
 int gsm_bts_set_system_infos(struct gsm_bts *bts)
 {
 	struct gsm_bts_trx *trx;
+	int ret = 0;
 
 	/* Generate a new ID */
 	bts->bcch_change_mark += 1;
@@ -732,10 +733,10 @@
 
 		rc = gsm_bts_trx_set_system_infos(trx);
 		if (rc != 0)
-			return rc;
+			ret = rc;
 	}
 
-	return 0;
+	return ret;
 }
 
 const struct rate_ctr_desc bts_ctr_description[] = {
diff --git a/src/osmo-bsc/bts_trx.c b/src/osmo-bsc/bts_trx.c
index 6d98929..d67c9a1 100644
--- a/src/osmo-bsc/bts_trx.c
+++ b/src/osmo-bsc/bts_trx.c
@@ -429,6 +429,10 @@
 
 	/* Third, we send the selected SI via RSL */
 
+	/* If the BTS is not up and running yet, don't send anything. */
+	if (!trx_is_usable(trx))
+		return -1;
+
 	for (n = 0; n < n_si; n++) {
 		i = gen_si[n];
 		/* 3GPP TS 08.58 §8.5.1 BCCH INFORMATION. If we don't currently
diff --git a/src/osmo-bsc/neighbor_ident_vty.c b/src/osmo-bsc/neighbor_ident_vty.c
index b9160ec..12aca9d 100644
--- a/src/osmo-bsc/neighbor_ident_vty.c
+++ b/src/osmo-bsc/neighbor_ident_vty.c
@@ -183,6 +183,10 @@
 	neighbor = talloc_zero(bts, struct neighbor);
 	*neighbor = *n;
 	llist_add_tail(&neighbor->entry, &bts->neighbors);
+
+	if (vty->type != VTY_FILE)
+		gsm_bts_set_system_infos(bts);
+
 	return CMD_SUCCESS;
 }
 
@@ -213,6 +217,10 @@
 
 		llist_del(&neighbor->entry);
 		talloc_free(neighbor);
+
+		if (vty->type != VTY_FILE)
+			gsm_bts_set_system_infos(bts);
+
 		return CMD_SUCCESS;
 	}
 
diff --git a/src/osmo-bsc/osmo_bsc_main.c b/src/osmo-bsc/osmo_bsc_main.c
index 3069cc0..fd41b74 100644
--- a/src/osmo-bsc/osmo_bsc_main.c
+++ b/src/osmo-bsc/osmo_bsc_main.c
@@ -942,6 +942,10 @@
 		exit(1);
 	}
 
+	/* Make the 'show bts' information list the neighbor ARFCNs by updating the
+	 * system_information.si_common.neigh_list. */
+	gsm_net_set_system_infos();
+
 	/* start control interface after reading config for
 	 * ctrl_vty_get_bind_addr() */
 	bsc_gsmnet->ctrl = bsc_controlif_setup(bsc_gsmnet,

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/23785
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I2222e029fc225152e124ed1e8887f1ffd4a107ef
Gerrit-Change-Number: 23785
Gerrit-PatchSet: 4
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-CC: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210422/24da8751/attachment.htm>


More information about the gerrit-log mailing list