<p>neels <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmocom-bb/+/17440">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">virtphy: Fix GSMTAP ARFCN use with multi-TRX BTS<br><br>In case we get assignments to secondary TRXs, the ARFCN of that<br>TRX must be used, and not the serving cell BCCH ARFCN.<br><br>Change-Id: Ief6cf5816969d819ff9506be70bec9b8d0d9d9be<br>---<br>M src/host/virt_phy/include/virtphy/virt_l1_model.h<br>M src/host/virt_phy/src/gsmtapl1_if.c<br>M src/host/virt_phy/src/l1ctl_sap.c<br>M src/host/virt_phy/src/virt_prim_data.c<br>M src/host/virt_phy/src/virt_prim_traffic.c<br>5 files changed, 35 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/virt_phy/include/virtphy/virt_l1_model.h b/src/host/virt_phy/include/virtphy/virt_l1_model.h</span><br><span>index e2485fc..99ad39f 100644</span><br><span>--- a/src/host/virt_phy/include/virtphy/virt_l1_model.h</span><br><span>+++ b/src/host/virt_phy/include/virtphy/virt_l1_model.h</span><br><span>@@ -68,6 +68,7 @@</span><br><span>   struct {</span><br><span>             uint8_t chan_type; // like rsl chantype 08.58 -> Chapter 9.3.1 */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+              uint16_t band_arfcn;</span><br><span>                 uint8_t tn; // timeslot number 1-7</span><br><span>           uint8_t subslot; // subslot of the dedicated channel, SDCCH/4:[0-3], SDCCH/8:[0-7]</span><br><span> </span><br><span>diff --git a/src/host/virt_phy/src/gsmtapl1_if.c b/src/host/virt_phy/src/gsmtapl1_if.c</span><br><span>index 3fa69c4..83b01fe 100644</span><br><span>--- a/src/host/virt_phy/src/gsmtapl1_if.c</span><br><span>+++ b/src/host/virt_phy/src/gsmtapl1_if.c</span><br><span>@@ -81,7 +81,7 @@</span><br><span>  struct l1ctl_info_ul *ul;</span><br><span>    struct gsmtap_hdr *gh;</span><br><span>       struct msgb *outmsg;    /* msg to send with gsmtap header prepended */</span><br><span style="color: hsl(0, 100%, 40%);">-  uint16_t arfcn = ms->state.serving_cell.arfcn;       /* arfcn of the cell we currently camp on */</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t arfcn;</span><br><span>      uint8_t signal_dbm = 63;        /* signal strength */</span><br><span>        uint8_t snr = 63;       /* signal noise ratio, 63 is best */</span><br><span>         uint8_t *data = msgb_l2(msg);   /* data to transmit (whole message without l1 header) */</span><br><span>@@ -92,6 +92,16 @@</span><br><span>        uint8_t timeslot;       /* tdma timeslot to send in (0-7) */</span><br><span>         uint8_t gsmtap_chan;    /* the gsmtap channel */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  switch (ms->state.state) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case MS_STATE_DEDICATED:</span><br><span style="color: hsl(120, 100%, 40%);">+      case MS_STATE_TBF:</span><br><span style="color: hsl(120, 100%, 40%);">+            arfcn = ms->state.dedicated.band_arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              arfcn = ms->state.serving_cell.arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  switch (l1h->msg_type) {</span><br><span>  case L1CTL_DATA_TBF_REQ:</span><br><span>             ul = NULL;</span><br><span>@@ -235,18 +245,24 @@</span><br><span> </span><br><span>       gsm_fn2gsmtime(&ms->state.downlink_time, fn);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* we do not forward messages to l23 if we are in network search state */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (ms->state.state == MS_STATE_IDLE_SEARCHING)</span><br><span style="color: hsl(120, 100%, 40%);">+    switch (ms->state.state) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case MS_STATE_IDLE_SEARCHING:</span><br><span style="color: hsl(120, 100%, 40%);">+         /* we do not forward messages to l23 if we are in network search state */</span><br><span>            return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* forward downlink msg to fbsb sync routine if we are in sync state */</span><br><span style="color: hsl(0, 100%, 40%);">- if (ms->state.state == MS_STATE_IDLE_SYNCING) {</span><br><span style="color: hsl(120, 100%, 40%);">+    case MS_STATE_IDLE_SYNCING:</span><br><span style="color: hsl(120, 100%, 40%);">+           /* forward downlink msg to fbsb sync routine if we are in sync state */</span><br><span>              prim_fbsb_sync(ms, msg);</span><br><span>             return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-       /* generally ignore all messages coming from another arfcn than the camped one */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (ms->state.serving_cell.arfcn != arfcn) {</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       case MS_STATE_DEDICATED:</span><br><span style="color: hsl(120, 100%, 40%);">+              /* generally ignore all messages coming from another arfcn than the camped one */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (arfcn != ms->state.dedicated.band_arfcn)</span><br><span style="color: hsl(120, 100%, 40%);">+                       return;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              /* generally ignore all messages coming from another arfcn than the camped one */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (arfcn != ms->state.serving_cell.arfcn)</span><br><span style="color: hsl(120, 100%, 40%);">+                 return;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       }</span><br><span> </span><br><span>        virt_l1_sched_sync_time(ms, ms->state.downlink_time, 0);</span><br><span>diff --git a/src/host/virt_phy/src/l1ctl_sap.c b/src/host/virt_phy/src/l1ctl_sap.c</span><br><span>index 7669c86..0ff5412 100644</span><br><span>--- a/src/host/virt_phy/src/l1ctl_sap.c</span><br><span>+++ b/src/host/virt_phy/src/l1ctl_sap.c</span><br><span>@@ -286,9 +286,11 @@</span><br><span> </span><br><span>      rsl_dec_chan_nr(ul->chan_nr, &rsl_chantype, &subslot, &timeslot);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    LOGPMS(DL1C, LOGL_INFO, ms, "Rx L1CTL_DM_EST_REQ (chan_nr=0x%02x, tn=%u, ss=%u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-           ul->chan_nr, timeslot, subslot);</span><br><span style="color: hsl(120, 100%, 40%);">+   LOGPMS(DL1C, LOGL_INFO, ms, "Rx L1CTL_DM_EST_REQ (chan_nr=0x%02x, arfcn=%u, tn=%u, ss=%u)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+               ul->chan_nr, ntohs(est_req->h0.band_arfcn), timeslot, subslot);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(est_req->h == 0); /* we don't do hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+        ms->state.dedicated.band_arfcn = ntohs(est_req->h0.band_arfcn);</span><br><span>        ms->state.dedicated.chan_type = rsl_chantype;</span><br><span>     ms->state.dedicated.tn = timeslot;</span><br><span>        ms->state.dedicated.subslot = subslot;</span><br><span>diff --git a/src/host/virt_phy/src/virt_prim_data.c b/src/host/virt_phy/src/virt_prim_data.c</span><br><span>index 96534aa..65368b8 100644</span><br><span>--- a/src/host/virt_phy/src/virt_prim_data.c</span><br><span>+++ b/src/host/virt_phy/src/virt_prim_data.c</span><br><span>@@ -47,7 +47,8 @@</span><br><span> static void virt_l1_sched_handler_cb(struct l1_model_ms *ms, uint32_t fn, uint8_t tn, struct msgb * msg)</span><br><span> {</span><br><span>  gsmtapl1_tx_to_virt_um_inst(ms, fn, tn, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-   l1ctl_tx_data_conf(ms, fn, 0, ms->state.serving_cell.arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* FIXME: get ARFCN from msg payload */</span><br><span style="color: hsl(120, 100%, 40%);">+       l1ctl_tx_data_conf(ms, fn, 0, ms->state.dedicated.band_arfcn);</span><br><span> }</span><br><span> </span><br><span> /**</span><br><span>diff --git a/src/host/virt_phy/src/virt_prim_traffic.c b/src/host/virt_phy/src/virt_prim_traffic.c</span><br><span>index 3d2b2b1..0e08a12 100644</span><br><span>--- a/src/host/virt_phy/src/virt_prim_traffic.c</span><br><span>+++ b/src/host/virt_phy/src/virt_prim_traffic.c</span><br><span>@@ -47,7 +47,8 @@</span><br><span> static void virt_l1_sched_handler_cb(struct l1_model_ms *ms, uint32_t fn, uint8_t tn, struct msgb * msg)</span><br><span> {</span><br><span>      gsmtapl1_tx_to_virt_um_inst(ms, fn, tn, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-   l1ctl_tx_traffic_conf(ms, fn, 0, ms->state.serving_cell.arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* FIXME: get ARFCN from msg payload */</span><br><span style="color: hsl(120, 100%, 40%);">+       l1ctl_tx_traffic_conf(ms, fn, 0, ms->state.dedicated.band_arfcn);</span><br><span> }</span><br><span> </span><br><span> /**</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmocom-bb/+/17440">change 17440</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/c/osmocom-bb/+/17440"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ief6cf5816969d819ff9506be70bec9b8d0d9d9be </div>
<div style="display:none"> Gerrit-Change-Number: 17440 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>