[MERGED] osmo-bsc[master]: dyn ts, bts_ipaccess_nanobts.c: init PDCH on Chan OPSTART ACK

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun May 6 16:08:06 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: dyn ts, bts_ipaccess_nanobts.c: init PDCH on Chan OPSTART ACK
......................................................................


dyn ts, bts_ipaccess_nanobts.c: init PDCH on Chan OPSTART ACK

Sending PDCH activation upon RSL bootstrap is too early. Introduce OPSTART ACK
handling to call dyn_ts_init() only when the dynamic timeslot is indeed ready
to receive a PDCH activation.

Related: OS#3205
Change-Id: Icf6e25ff068e8a2600562d52726ead65e864ec02
---
M include/osmocom/bsc/signal.h
M src/libbsc/abis_nm.c
M src/libbsc/bsc_init.c
M src/libbsc/bts_ipaccess_nanobts.c
4 files changed, 54 insertions(+), 2 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/bsc/signal.h b/include/osmocom/bsc/signal.h
index 9c0d5a3..1dde267 100644
--- a/include/osmocom/bsc/signal.h
+++ b/include/osmocom/bsc/signal.h
@@ -71,6 +71,7 @@
 	S_NM_STATECHG_OPER,	/* Operational State changed*/
 	S_NM_STATECHG_ADM,	/* Administrative State changed */
 	S_NM_OM2K_CONF_RES,	/* OM2K Configuration Result */
+	S_NM_OPSTART_ACK,	/* Received OPSTART ACK, arg is struct abis_om_fom_hdr* */
 };
 
 /* SS_LCHAN signals */
diff --git a/src/libbsc/abis_nm.c b/src/libbsc/abis_nm.c
index e3c4408..b2cfa53 100644
--- a/src/libbsc/abis_nm.c
+++ b/src/libbsc/abis_nm.c
@@ -678,6 +678,14 @@
 	return 0;
 }
 
+static int abis_nm_rx_opstart_ack(struct msgb *mb)
+{
+	struct abis_om_fom_hdr *foh = msgb_l3(mb);
+	DEBUGPFOH(DNM, foh, "Opstart ACK\n");
+	osmo_signal_dispatch(SS_NM, S_NM_OPSTART_ACK, foh);
+	return 0;
+}
+
 bool all_trx_rsl_connected_unlocked(const struct gsm_bts *bts)
 {
 	const struct gsm_bts_trx *trx;
@@ -802,7 +810,7 @@
 		ret = abis_nm_rx_lmt_event(mb);
 		break;
 	case NM_MT_OPSTART_ACK:
-		DEBUGPFOH(DNM, foh, "Opstart ACK\n");
+		abis_nm_rx_opstart_ack(mb);
 		break;
 	case NM_MT_SET_CHAN_ATTR_ACK:
 		DEBUGPFOH(DNM, foh, "Set Channel Attributes ACK\n");
@@ -1896,6 +1904,7 @@
 	if (bts->type == GSM_BTS_TYPE_BS11)
 		msgb_tlv_put(msg, 0x59, 1, &zero);
 
+	DEBUGPFOH(DNM, foh, "%s(): sending %s\n", __func__, msgb_hexdump(msg));
 	return abis_nm_sendmsg(bts, msg);
 }
 
diff --git a/src/libbsc/bsc_init.c b/src/libbsc/bsc_init.c
index 429d3c7..92b8c27 100644
--- a/src/libbsc/bsc_init.c
+++ b/src/libbsc/bsc_init.c
@@ -354,7 +354,6 @@
 
 	for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
 		generate_ma_for_ts(&trx->ts[i]);
-		dyn_ts_init(&trx->ts[i]);
 	}
 }
 
diff --git a/src/libbsc/bts_ipaccess_nanobts.c b/src/libbsc/bts_ipaccess_nanobts.c
index d94a878..3eb7e0e 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -294,6 +294,46 @@
 	return 0;
 }
 
+static struct gsm_bts_trx_ts *gsm_bts_trx_ts(struct gsm_network *net,
+					     int bts_nr, int trx_nr, int ts_nr)
+{
+	struct gsm_bts *bts;
+	struct gsm_bts_trx *trx;
+	bts = gsm_bts_num(net, bts_nr);
+	if (!bts)
+		return NULL;
+	trx = gsm_bts_trx_by_nr(bts, trx_nr);
+	if (!trx)
+		return NULL;
+	if (ts_nr < 0 || ts_nr > ARRAY_SIZE(trx->ts))
+		return NULL;
+	return &trx->ts[ts_nr];
+}
+
+static void nm_rx_opstart_ack_chan(struct abis_om_fom_hdr *foh)
+{
+	struct gsm_bts_trx_ts *ts;
+	ts = gsm_bts_trx_ts(bsc_gsmnet, foh->obj_inst.bts_nr, foh->obj_inst.trx_nr, foh->obj_inst.ts_nr);
+	if (!ts) {
+		LOGP(DNM, LOGL_ERROR, "%s Channel OPSTART ACK for non-existent TS\n",
+		     abis_nm_dump_foh(foh));
+		return;
+	}
+
+	dyn_ts_init(ts);
+}
+
+static void nm_rx_opstart_ack(struct abis_om_fom_hdr *foh)
+{
+	switch (foh->obj_class) {
+	case NM_OC_CHANNEL:
+		nm_rx_opstart_ack_chan(foh);
+		break;
+	default:
+		break;
+	}
+}
+
 /* Callback function to be called every time we receive a signal from NM */
 static int bts_ipa_nm_sig_cb(unsigned int subsys, unsigned int signal,
 		     void *handler_data, void *signal_data)
@@ -307,6 +347,9 @@
 	case S_NM_STATECHG_OPER:
 	case S_NM_STATECHG_ADM:
 		return nm_statechg_event(signal, signal_data);
+	case S_NM_OPSTART_ACK:
+		nm_rx_opstart_ack(signal_data);
+		return 0;
 	default:
 		break;
 	}

-- 
To view, visit https://gerrit.osmocom.org/8041
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Icf6e25ff068e8a2600562d52726ead65e864ec02
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list