Change in osmo-msc[master]: Store subscriber's cell identity

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/.

Max gerrit-no-reply at lists.osmocom.org
Mon Nov 12 17:22:26 UTC 2018


Max has uploaded this change for review. ( https://gerrit.osmocom.org/11746


Change subject: Store subscriber's cell identity
......................................................................

Store subscriber's cell identity

It's defined similar to LAC and could be potentially useful for
constructing GCR for LCLS.

Change-Id: I8544c30ea800ce8356a227b03a8b21bf3252be7e
Related: OS#2487
---
M include/osmocom/msc/gsm_data.h
M include/osmocom/msc/osmo_msc.h
M src/libmsc/a_iface_bssap.c
M src/libmsc/iucs.c
M src/libmsc/subscr_conn.c
M tests/msc_vlr/msc_vlr_test_rest.c
M tests/msc_vlr/msc_vlr_tests.c
7 files changed, 18 insertions(+), 12 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/46/11746/1

diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 085248c..213ee02 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -127,7 +127,8 @@
 	/* connected via 2G or 3G? */
 	enum ran_type via_ran;
 
-	uint16_t lac;
+	uint16_t lac; /* 3GPP TS 24.008 §10.5.1.3 */
+	uint16_t ci;  /* 3GPP TS 24.008 §10.5.1.1 */
 	struct gsm_encr encr;
 
 	/* "Temporary" storage for the case the VLR asked for Cipher Mode Command, but the MSC still
diff --git a/include/osmocom/msc/osmo_msc.h b/include/osmocom/msc/osmo_msc.h
index 3ffb65c..e0b4f46 100644
--- a/include/osmocom/msc/osmo_msc.h
+++ b/include/osmocom/msc/osmo_msc.h
@@ -48,7 +48,7 @@
 };
 
 struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network,
-							enum ran_type via_ran, uint16_t lac);
+							enum ran_type via_ran, uint16_t lac, uint16_t ci);
 
 void msc_subscr_conn_update_id(struct gsm_subscriber_connection *conn,
 			       enum complete_layer3_type from, const char *id);
diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c
index 282fd73..5e7db63 100644
--- a/src/libmsc/a_iface_bssap.c
+++ b/src/libmsc/a_iface_bssap.c
@@ -48,13 +48,14 @@
 /* Allocate a new subscriber connection */
 static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_conn_info *a_conn_info,
 								struct gsm_network *network,
-								uint16_t lac, struct osmo_sccp_user *scu, int conn_id)
+								uint16_t lac, uint16_t ci,
+								struct osmo_sccp_user *scu, int conn_id)
 {
 	struct gsm_subscriber_connection *conn;
 
-	LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, conn_id %i\n", lac, conn_id);
+	LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, ci %i, conn_id %i\n", lac, ci, conn_id);
 
-	conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac);
+	conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac, ci);
 	if (!conn)
 		return NULL;
 
@@ -257,7 +258,7 @@
 			      struct msgb *msg, struct tlv_parsed *tp)
 {
 	struct gsm0808_cell_id_list2 cil;
-	uint16_t lac = 0;
+	uint16_t lac = 0, ci = 0;
 	uint8_t data_length;
 	const uint8_t *data;
 	int rc;
@@ -296,11 +297,13 @@
 			return -EINVAL;
 		}
 		lac = id->lai.lac;
+		ci = id->cell_identity;
 		break;
 	}
 	case CELL_IDENT_LAC_AND_CI: {
 		const struct osmo_lac_and_ci_id *id = &cil.id_list[0].lac_and_ci;
 		lac = id->lac;
+		ci = id->ci;
 		break;
 	}
 	case CELL_IDENT_LAI_AND_LAC: {
@@ -317,7 +320,8 @@
 		lac = cil.id_list[0].lac;
 		break;
 
-	case CELL_IDENT_CI:
+	case CELL_IDENT_CI: /* FIXME: why LAC is mandatory is we have CI? */
+		ci = cil.id_list[0].ci;
 	case CELL_IDENT_NO_CELL:
 	case CELL_IDENT_BSS:
 		LOGP(DBSSAP, LOGL_ERROR,
@@ -342,7 +346,7 @@
 	}
 
 	/* Create new subscriber context */
-	conn = subscr_conn_allocate_a(a_conn_info, network, lac, scu, a_conn_info->conn_id);
+	conn = subscr_conn_allocate_a(a_conn_info, network, lac, ci, scu, a_conn_info->conn_id);
 
 	/* Handover location update to the MSC code */
 	rc = msc_compl_l3(conn, msg, 0);
diff --git a/src/libmsc/iucs.c b/src/libmsc/iucs.c
index a3092f8..0fe7e78 100644
--- a/src/libmsc/iucs.c
+++ b/src/libmsc/iucs.c
@@ -57,7 +57,7 @@
 	DEBUGP(DIUCS, "Allocating IuCS subscriber conn: lac %d, conn_id %" PRIx32 "\n",
 	       lac, ue->conn_id);
 
-	conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac);
+	conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac, 0); /* FIXME: is there equivalent for CI? */
 	if (!conn)
 		return NULL;
 
diff --git a/src/libmsc/subscr_conn.c b/src/libmsc/subscr_conn.c
index e6fa7e1..6bbbeed 100644
--- a/src/libmsc/subscr_conn.c
+++ b/src/libmsc/subscr_conn.c
@@ -628,7 +628,7 @@
  * conn. As long as the FSM is waiting for responses from the subscriber, it will itself hold a use count
  * on the conn. */
 struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network,
-							enum ran_type via_ran, uint16_t lac)
+							enum ran_type via_ran, uint16_t lac, uint16_t ci)
 {
 	struct gsm_subscriber_connection *conn;
 	struct osmo_fsm_inst *fi;
@@ -649,6 +649,7 @@
 		.network = network,
 		.via_ran = via_ran,
 		.lac = lac,
+		.ci = ci,
 		.fi = fi,
 	};
 
diff --git a/tests/msc_vlr/msc_vlr_test_rest.c b/tests/msc_vlr/msc_vlr_test_rest.c
index 247e7ae..5a50420 100644
--- a/tests/msc_vlr/msc_vlr_test_rest.c
+++ b/tests/msc_vlr/msc_vlr_test_rest.c
@@ -31,7 +31,7 @@
 	EXPECT_ACCEPTED(false);
 
 	btw("freshly allocated conn");
-	g_conn = msc_subscr_conn_alloc(net, RAN_GERAN_A, 123);
+	g_conn = msc_subscr_conn_alloc(net, RAN_GERAN_A, 123, 0);
 	EXPECT_ACCEPTED(false);
 
 	btw("conn_fsm present, in state NEW");
diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c
index 1192cf2..f887837 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -191,7 +191,7 @@
 struct gsm_subscriber_connection *conn_new(void)
 {
 	struct gsm_subscriber_connection *conn;
-	conn = msc_subscr_conn_alloc(net, rx_from_ran, 23);
+	conn = msc_subscr_conn_alloc(net, rx_from_ran, 23, 0);
 	if (conn->via_ran == RAN_UTRAN_IU) {
 		struct ranap_ue_conn_ctx *ue_ctx = talloc_zero(conn, struct ranap_ue_conn_ctx);
 		*ue_ctx = (struct ranap_ue_conn_ctx){

-- 
To view, visit https://gerrit.osmocom.org/11746
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8544c30ea800ce8356a227b03a8b21bf3252be7e
Gerrit-Change-Number: 11746
Gerrit-PatchSet: 1
Gerrit-Owner: Max <msuraev at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181112/de70fb61/attachment.htm>


More information about the gerrit-log mailing list