<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, ×lot);</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>