<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11746">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Store subscriber's cell identity<br><br>It's defined similar to LAC and could be potentially useful for<br>constructing GCR for LCLS.<br><br>Change-Id: I8544c30ea800ce8356a227b03a8b21bf3252be7e<br>Related: OS#2487<br>---<br>M include/osmocom/msc/gsm_data.h<br>M include/osmocom/msc/osmo_msc.h<br>M src/libmsc/a_iface_bssap.c<br>M src/libmsc/iucs.c<br>M src/libmsc/subscr_conn.c<br>M tests/msc_vlr/msc_vlr_test_rest.c<br>M tests/msc_vlr/msc_vlr_tests.c<br>7 files changed, 18 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/46/11746/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h</span><br><span>index 085248c..213ee02 100644</span><br><span>--- a/include/osmocom/msc/gsm_data.h</span><br><span>+++ b/include/osmocom/msc/gsm_data.h</span><br><span>@@ -127,7 +127,8 @@</span><br><span>     /* connected via 2G or 3G? */</span><br><span>        enum ran_type via_ran;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      uint16_t lac;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t lac; /* 3GPP TS 24.008 §10.5.1.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t ci;  /* 3GPP TS 24.008 §10.5.1.1 */</span><br><span>        struct gsm_encr encr;</span><br><span> </span><br><span>    /* "Temporary" storage for the case the VLR asked for Cipher Mode Command, but the MSC still</span><br><span>diff --git a/include/osmocom/msc/osmo_msc.h b/include/osmocom/msc/osmo_msc.h</span><br><span>index 3ffb65c..e0b4f46 100644</span><br><span>--- a/include/osmocom/msc/osmo_msc.h</span><br><span>+++ b/include/osmocom/msc/osmo_msc.h</span><br><span>@@ -48,7 +48,7 @@</span><br><span> };</span><br><span> </span><br><span> struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       enum ran_type via_ran, uint16_t lac);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 enum ran_type via_ran, uint16_t lac, uint16_t ci);</span><br><span> </span><br><span> void msc_subscr_conn_update_id(struct gsm_subscriber_connection *conn,</span><br><span>                            enum complete_layer3_type from, const char *id);</span><br><span>diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c</span><br><span>index 282fd73..5e7db63 100644</span><br><span>--- a/src/libmsc/a_iface_bssap.c</span><br><span>+++ b/src/libmsc/a_iface_bssap.c</span><br><span>@@ -48,13 +48,14 @@</span><br><span> /* Allocate a new subscriber connection */</span><br><span> static struct gsm_subscriber_connection *subscr_conn_allocate_a(const struct a_conn_info *a_conn_info,</span><br><span>                                                           struct gsm_network *network,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                            uint16_t lac, struct osmo_sccp_user *scu, int conn_id)</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                uint16_t lac, uint16_t ci,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            struct osmo_sccp_user *scu, int conn_id)</span><br><span> {</span><br><span>        struct gsm_subscriber_connection *conn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, conn_id %i\n", lac, conn_id);</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGP(DMSC, LOGL_DEBUG, "Allocating A-Interface subscriber conn: lac %i, ci %i, conn_id %i\n", lac, ci, conn_id);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac);</span><br><span style="color: hsl(120, 100%, 40%);">+      conn = msc_subscr_conn_alloc(network, RAN_GERAN_A, lac, ci);</span><br><span>         if (!conn)</span><br><span>           return NULL;</span><br><span> </span><br><span>@@ -257,7 +258,7 @@</span><br><span>                             struct msgb *msg, struct tlv_parsed *tp)</span><br><span> {</span><br><span>  struct gsm0808_cell_id_list2 cil;</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t lac = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t lac = 0, ci = 0;</span><br><span>    uint8_t data_length;</span><br><span>         const uint8_t *data;</span><br><span>         int rc;</span><br><span>@@ -296,11 +297,13 @@</span><br><span>                      return -EINVAL;</span><br><span>              }</span><br><span>            lac = id->lai.lac;</span><br><span style="color: hsl(120, 100%, 40%);">+         ci = id->cell_identity;</span><br><span>           break;</span><br><span>       }</span><br><span>    case CELL_IDENT_LAC_AND_CI: {</span><br><span>                const struct osmo_lac_and_ci_id *id = &cil.id_list[0].lac_and_ci;</span><br><span>                lac = id->lac;</span><br><span style="color: hsl(120, 100%, 40%);">+             ci = id->ci;</span><br><span>              break;</span><br><span>       }</span><br><span>    case CELL_IDENT_LAI_AND_LAC: {</span><br><span>@@ -317,7 +320,8 @@</span><br><span>                 lac = cil.id_list[0].lac;</span><br><span>            break;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      case CELL_IDENT_CI:</span><br><span style="color: hsl(120, 100%, 40%);">+   case CELL_IDENT_CI: /* FIXME: why LAC is mandatory is we have CI? */</span><br><span style="color: hsl(120, 100%, 40%);">+          ci = cil.id_list[0].ci;</span><br><span>      case CELL_IDENT_NO_CELL:</span><br><span>     case CELL_IDENT_BSS:</span><br><span>                 LOGP(DBSSAP, LOGL_ERROR,</span><br><span>@@ -342,7 +346,7 @@</span><br><span>       }</span><br><span> </span><br><span>        /* Create new subscriber context */</span><br><span style="color: hsl(0, 100%, 40%);">-     conn = subscr_conn_allocate_a(a_conn_info, network, lac, scu, a_conn_info->conn_id);</span><br><span style="color: hsl(120, 100%, 40%);">+       conn = subscr_conn_allocate_a(a_conn_info, network, lac, ci, scu, a_conn_info->conn_id);</span><br><span> </span><br><span>      /* Handover location update to the MSC code */</span><br><span>       rc = msc_compl_l3(conn, msg, 0);</span><br><span>diff --git a/src/libmsc/iucs.c b/src/libmsc/iucs.c</span><br><span>index a3092f8..0fe7e78 100644</span><br><span>--- a/src/libmsc/iucs.c</span><br><span>+++ b/src/libmsc/iucs.c</span><br><span>@@ -57,7 +57,7 @@</span><br><span>        DEBUGP(DIUCS, "Allocating IuCS subscriber conn: lac %d, conn_id %" PRIx32 "\n",</span><br><span>         lac, ue->conn_id);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac);</span><br><span style="color: hsl(120, 100%, 40%);">+     conn = msc_subscr_conn_alloc(network, RAN_UTRAN_IU, lac, 0); /* FIXME: is there equivalent for CI? */</span><br><span>        if (!conn)</span><br><span>           return NULL;</span><br><span> </span><br><span>diff --git a/src/libmsc/subscr_conn.c b/src/libmsc/subscr_conn.c</span><br><span>index e6fa7e1..6bbbeed 100644</span><br><span>--- a/src/libmsc/subscr_conn.c</span><br><span>+++ b/src/libmsc/subscr_conn.c</span><br><span>@@ -628,7 +628,7 @@</span><br><span>  * conn. As long as the FSM is waiting for responses from the subscriber, it will itself hold a use count</span><br><span>  * on the conn. */</span><br><span> struct gsm_subscriber_connection *msc_subscr_conn_alloc(struct gsm_network *network,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  enum ran_type via_ran, uint16_t lac)</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  enum ran_type via_ran, uint16_t lac, uint16_t ci)</span><br><span> {</span><br><span>       struct gsm_subscriber_connection *conn;</span><br><span>      struct osmo_fsm_inst *fi;</span><br><span>@@ -649,6 +649,7 @@</span><br><span>              .network = network,</span><br><span>          .via_ran = via_ran,</span><br><span>          .lac = lac,</span><br><span style="color: hsl(120, 100%, 40%);">+           .ci = ci,</span><br><span>            .fi = fi,</span><br><span>    };</span><br><span> </span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_rest.c b/tests/msc_vlr/msc_vlr_test_rest.c</span><br><span>index 247e7ae..5a50420 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_rest.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_rest.c</span><br><span>@@ -31,7 +31,7 @@</span><br><span>  EXPECT_ACCEPTED(false);</span><br><span> </span><br><span>  btw("freshly allocated conn");</span><br><span style="color: hsl(0, 100%, 40%);">-        g_conn = msc_subscr_conn_alloc(net, RAN_GERAN_A, 123);</span><br><span style="color: hsl(120, 100%, 40%);">+        g_conn = msc_subscr_conn_alloc(net, RAN_GERAN_A, 123, 0);</span><br><span>    EXPECT_ACCEPTED(false);</span><br><span> </span><br><span>  btw("conn_fsm present, in state NEW");</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c</span><br><span>index 1192cf2..f887837 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_tests.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_tests.c</span><br><span>@@ -191,7 +191,7 @@</span><br><span> struct gsm_subscriber_connection *conn_new(void)</span><br><span> {</span><br><span>     struct gsm_subscriber_connection *conn;</span><br><span style="color: hsl(0, 100%, 40%);">- conn = msc_subscr_conn_alloc(net, rx_from_ran, 23);</span><br><span style="color: hsl(120, 100%, 40%);">+   conn = msc_subscr_conn_alloc(net, rx_from_ran, 23, 0);</span><br><span>       if (conn->via_ran == RAN_UTRAN_IU) {</span><br><span>              struct ranap_ue_conn_ctx *ue_ctx = talloc_zero(conn, struct ranap_ue_conn_ctx);</span><br><span>              *ue_ctx = (struct ranap_ue_conn_ctx){</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11746">change 11746</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11746"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I8544c30ea800ce8356a227b03a8b21bf3252be7e </div>
<div style="display:none"> Gerrit-Change-Number: 11746 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>