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.orgHarald Welte has submitted this change and it was merged. Change subject: VIRT-PHY: Add downlink filter for msg on dedicated channels. ...................................................................... VIRT-PHY: Add downlink filter for msg on dedicated channels. Messages incoming on dedicated channel (SDCCH/8, SDCCH/4) are no longer forwarded to l23 if their timeslot/subchannel is not fitting the ones configured by l23 via L1CTL_DM_EST_REQ. Change-Id: I6112b20e31c25636e53d3a6cda6f7443a94ff9c3 --- M src/host/virt_phy/include/virtphy/virt_l1_model.h M src/host/virt_phy/src/gsmtapl1_if.c M src/host/virt_phy/src/l1ctl_sap.c M src/host/virt_phy/src/virtphy.c 4 files changed, 18 insertions(+), 16 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/host/virt_phy/include/virtphy/virt_l1_model.h b/src/host/virt_phy/include/virtphy/virt_l1_model.h index 69115f2..d4969eb 100644 --- a/src/host/virt_phy/include/virtphy/virt_l1_model.h +++ b/src/host/virt_phy/include/virtphy/virt_l1_model.h @@ -67,6 +67,7 @@ uint8_t chan_type; // like rsl chantype 08.58 -> Chapter 9.3.1 */ uint8_t tn; // timeslot number 1-7 + uint8_t subslot; // subslot of the dedicated channel, SDCCH/4:[0-3], SDCCH/8:[0-7] uint8_t scn; // single-hop cellular network? (ununsed in virtual um) uint8_t tsc; // training sequence code (ununsed in virtual um) diff --git a/src/host/virt_phy/src/gsmtapl1_if.c b/src/host/virt_phy/src/gsmtapl1_if.c index 155b4dc..b84186a 100644 --- a/src/host/virt_phy/src/gsmtapl1_if.c +++ b/src/host/virt_phy/src/gsmtapl1_if.c @@ -162,12 +162,10 @@ } // we do not forward messages to l23 if we are in network search state if (l1_model_ms->state->state == MS_STATE_IDLE_SEARCHING) { - talloc_free(msg); - return; + goto freemsg; } struct gsmtap_hdr *gh = msgb_l1(msg); - struct msgb *l1ctl_msg = NULL; uint32_t fn = ntohl(gh->frame_number); // frame number of the rcv msg uint16_t arfcn = ntohs(gh->arfcn); // arfcn of the received msg uint8_t gsmtap_chantype = gh->sub_type; // gsmtap channel type @@ -183,7 +181,7 @@ if (arfcn & GSMTAP_ARFCN_F_UPLINK) { LOGP(DVIRPHY, LOGL_NOTICE, "Ignoring gsmtap msg from virt um - uplink flag set!\n"); - goto nomessage; + goto freemsg; } // forward downlink msg to fbsb sync routine if we are in sync state @@ -199,7 +197,7 @@ "Ignoring gsmtap msg from virt um - msg arfcn=%d not equal synced arfcn=%d!\n", arfcn, l1_model_ms->state->serving_cell.arfcn); - goto nomessage; + goto freemsg; } msg->l2h = msgb_pull(msg, sizeof(*gh)); @@ -230,11 +228,17 @@ #endif case GSMTAP_CHANNEL_SDCCH4: case GSMTAP_CHANNEL_SDCCH8: + // only forward messages on dedicated channels to l2, if the timeslot and subslot is fitting + if(l1_model_ms->state->dedicated.tn == timeslot && l1_model_ms->state->dedicated.subslot == subslot) { + l1ctl_tx_data_ind(msg, arfcn, link_id, chan_nr, fn, snr, + signal_dbm, 0, 0); + } + break; case GSMTAP_CHANNEL_AGCH: case GSMTAP_CHANNEL_PCH: case GSMTAP_CHANNEL_BCCH: l1ctl_tx_data_ind(msg, arfcn, link_id, chan_nr, fn, snr, - signal_dbm, 0, 0); + signal_dbm, 0, 0); break; case GSMTAP_CHANNEL_RACH: LOGP(DVIRPHY, @@ -259,11 +263,7 @@ break; } - /* forward l1ctl message to l2 */ - if (l1ctl_msg) { - l1ctl_sap_tx_to_l23(l1ctl_msg); - } - nomessage: + freemsg: // handle memory deallocation talloc_free(msg); } diff --git a/src/host/virt_phy/src/l1ctl_sap.c b/src/host/virt_phy/src/l1ctl_sap.c index bd6051b..b6c4508 100644 --- a/src/host/virt_phy/src/l1ctl_sap.c +++ b/src/host/virt_phy/src/l1ctl_sap.c @@ -244,7 +244,6 @@ * * Handle state change from idle to dedicated mode. * - * TODO: Implement this handler routine! */ void l1ctl_rx_dm_est_req(struct msgb *msg) { @@ -257,12 +256,12 @@ rsl_dec_chan_nr(ul->chan_nr, &rsl_chantype, &subslot, ×lot); DEBUGP(DL1C, - "Received and handled from l23 - L1CTL_DM_EST_REQ (chan_nr=0x%02x, tn=%u)\n", - ul->chan_nr, timeslot); + "Received and handled from l23 - L1CTL_DM_EST_REQ (chan_nr=0x%02x, tn=%u, ss=%u)\n", + ul->chan_nr, timeslot, subslot); l1_model_ms->state->dedicated.chan_type = rsl_chantype; l1_model_ms->state->dedicated.tn = timeslot; - + l1_model_ms->state->dedicated.subslot = subslot; /* TCH config */ if (rsl_chantype == RSL_CHAN_Bm_ACCHs || rsl_chantype == RSL_CHAN_Lm_ACCHs) { @@ -348,6 +347,8 @@ DEBUGP(DL1C, "Received and handled from l23 - L1CTL_DM_REL_REQ\n"); l1_model_ms->state->dedicated.chan_type = 0; + l1_model_ms->state->dedicated.tn = 0; + l1_model_ms->state->dedicated.subslot = 0; l1_model_ms->state->tch_mode = GSM48_CMODE_SIGN; // TODO: disable ciphering diff --git a/src/host/virt_phy/src/virtphy.c b/src/host/virt_phy/src/virtphy.c index 70265a0..1454c4e 100644 --- a/src/host/virt_phy/src/virtphy.c +++ b/src/host/virt_phy/src/virtphy.c @@ -44,7 +44,7 @@ virt_l1_sched_init(model); LOGP(DVIRPHY, LOGL_INFO, "Virtual physical layer ready...\n \ - Waiting for l23 app on %s", l1ctl_sock_path); + Waiting for l23 app on %s", l1ctl_sock_path ? l1ctl_sock_path : L1CTL_SOCK_PATH); while (1) { // handle osmocom fd READ events (l1ctl-unix-socket, virtual-um-mcast-socket) -- To view, visit https://gerrit.osmocom.org/3212 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I6112b20e31c25636e53d3a6cda6f7443a94ff9c3 Gerrit-PatchSet: 2 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: BastusIII <sebastian.stumpf87 at googlemail.com> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder