[MERGED] osmocom-bb[master]: VIRT-PHY: Uplink flag and arfcn check.

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.org
Wed Jul 12 21:48:55 UTC 2017


Harald Welte has submitted this change and it was merged.

Change subject: VIRT-PHY: Uplink flag and arfcn check.
......................................................................


VIRT-PHY: Uplink flag and arfcn check.

Incoming messages with the uplinks flag set in the arfcn or another
arfcn than the cell's we are camping on are ignored.

Change-Id: Ibb78ac68172fceaa04acca81271940632e52d857
---
M src/host/virt_phy/src/gsmtapl1_if.c
1 file changed, 57 insertions(+), 43 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/host/virt_phy/src/gsmtapl1_if.c b/src/host/virt_phy/src/gsmtapl1_if.c
index 338f99c..ebfb5b6 100644
--- a/src/host/virt_phy/src/gsmtapl1_if.c
+++ b/src/host/virt_phy/src/gsmtapl1_if.c
@@ -39,48 +39,46 @@
 static struct l1_model_ms *l1_model_ms = NULL;
 
 // for debugging
-static const struct value_string gsmtap_channels [22] = {
-	{ GSMTAP_CHANNEL_UNKNOWN,	"UNKNOWN" },
-	{ GSMTAP_CHANNEL_BCCH,		"BCCH" },
-	{ GSMTAP_CHANNEL_CCCH,		"CCCH" },
-	{ GSMTAP_CHANNEL_RACH,		"RACH" },
-	{ GSMTAP_CHANNEL_AGCH,		"AGCH" },
-	{ GSMTAP_CHANNEL_PCH,		"PCH" },
-	{ GSMTAP_CHANNEL_SDCCH,		"SDCCH" },
-	{ GSMTAP_CHANNEL_SDCCH4,	"SDCCH/4" },
-	{ GSMTAP_CHANNEL_SDCCH8,	"SDCCH/8" },
-	{ GSMTAP_CHANNEL_TCH_F,		"FACCH/F" },
-	{ GSMTAP_CHANNEL_TCH_H,		"FACCH/H" },
-	{ GSMTAP_CHANNEL_PACCH,		"PACCH" },
-	{ GSMTAP_CHANNEL_CBCH52,    	"CBCH" },
-	{ GSMTAP_CHANNEL_PDCH,      	"PDCH" },
-	{ GSMTAP_CHANNEL_PTCCH,    	"PTTCH" },
-	{ GSMTAP_CHANNEL_CBCH51,    	"CBCH" },
-        { GSMTAP_CHANNEL_ACCH|
-	  GSMTAP_CHANNEL_SDCCH,		"LSACCH" },
-	{ GSMTAP_CHANNEL_ACCH|
-	  GSMTAP_CHANNEL_SDCCH4,	"SACCH/4" },
-	{ GSMTAP_CHANNEL_ACCH|
-	  GSMTAP_CHANNEL_SDCCH8,	"SACCH/8" },
-	{ GSMTAP_CHANNEL_ACCH|
-	  GSMTAP_CHANNEL_TCH_F,		"SACCH/F" },
-	{ GSMTAP_CHANNEL_ACCH|
-	  GSMTAP_CHANNEL_TCH_H,		"SACCH/H" },
-	{ 0,				NULL },
-};
+static const struct value_string gsmtap_channels[22] = {
+        {GSMTAP_CHANNEL_UNKNOWN, "UNKNOWN"},
+        {GSMTAP_CHANNEL_BCCH, "BCCH"},
+        {GSMTAP_CHANNEL_CCCH, "CCCH"},
+        {GSMTAP_CHANNEL_RACH, "RACH"},
+        {GSMTAP_CHANNEL_AGCH, "AGCH"},
+        {GSMTAP_CHANNEL_PCH, "PCH"},
+        {GSMTAP_CHANNEL_SDCCH, "SDCCH"},
+        {GSMTAP_CHANNEL_SDCCH4, "SDCCH/4"},
+        {GSMTAP_CHANNEL_SDCCH8, "SDCCH/8"},
+        {GSMTAP_CHANNEL_TCH_F, "FACCH/F"},
+        {GSMTAP_CHANNEL_TCH_H, "FACCH/H"},
+        {GSMTAP_CHANNEL_PACCH, "PACCH"},
+        {GSMTAP_CHANNEL_CBCH52, "CBCH"},
+        {GSMTAP_CHANNEL_PDCH, "PDCH"},
+        {GSMTAP_CHANNEL_PTCCH, "PTTCH"},
+        {GSMTAP_CHANNEL_CBCH51, "CBCH"},
+        {GSMTAP_CHANNEL_ACCH |
+        GSMTAP_CHANNEL_SDCCH, "LSACCH"},
+        {GSMTAP_CHANNEL_ACCH |
+        GSMTAP_CHANNEL_SDCCH4, "SACCH/4"},
+        {GSMTAP_CHANNEL_ACCH |
+        GSMTAP_CHANNEL_SDCCH8, "SACCH/8"},
+        {GSMTAP_CHANNEL_ACCH |
+        GSMTAP_CHANNEL_TCH_F, "SACCH/F"},
+        {GSMTAP_CHANNEL_ACCH |
+        GSMTAP_CHANNEL_TCH_H, "SACCH/H"},
+        {0, NULL}, };
 // for debugging
-static const struct value_string gsmtap_types [10] = {
-	{ GSMTAP_TYPE_UM,		"GSM Um (MS<->BTS)" },
-	{ GSMTAP_TYPE_ABIS,		"GSM Abis (BTS<->BSC)" },
-	{ GSMTAP_TYPE_UM_BURST,		"GSM Um burst (MS<->BTS)" },
-	{ GSMTAP_TYPE_SIM,		"SIM" },
-	{ GSMTAP_TYPE_TETRA_I1, 	"TETRA V+D"},
-	{ GSMTAP_TYPE_WMX_BURST,	"WiMAX burst" },
-	{ GSMTAP_TYPE_GMR1_UM, 		"GMR-1 air interfeace (MES-MS<->GTS)" },
-	{ GSMTAP_TYPE_UMTS_RLC_MAC,	"UMTS RLC/MAC" },
-	{ GSMTAP_TYPE_UMTS_RRC,		"UMTS RRC" },
-	{ 0,				NULL },
-};
+static const struct value_string gsmtap_types[10] = {{
+        GSMTAP_TYPE_UM,
+        "GSM Um (MS<->BTS)"}, {GSMTAP_TYPE_ABIS, "GSM Abis (BTS<->BSC)"}, {
+        GSMTAP_TYPE_UM_BURST,
+        "GSM Um burst (MS<->BTS)"}, {GSMTAP_TYPE_SIM, "SIM"}, {
+        GSMTAP_TYPE_TETRA_I1,
+        "TETRA V+D"}, {GSMTAP_TYPE_WMX_BURST, "WiMAX burst"}, {
+        GSMTAP_TYPE_GMR1_UM,
+        "GMR-1 air interfeace (MES-MS<->GTS)"}, {
+        GSMTAP_TYPE_UMTS_RLC_MAC,
+        "UMTS RLC/MAC"}, {GSMTAP_TYPE_UMTS_RRC, "UMTS RRC"}, {0, NULL}, };
 
 void gsmtapl1_init(struct l1_model_ms *model)
 {
@@ -111,8 +109,10 @@
 	rsl_dec_chan_nr(ul->chan_nr, &rsl_chantype, &subslot, &timeslot);
 	gsmtap_chan = chantype_rsl2gsmtap(rsl_chantype, ul->link_id);
 
-	outmsg = gsmtap_makemsg(arfcn, timeslot, gsmtap_chan, subslot, fn,
-	                signal_dbm, snr, data, data_len);
+	// arfcn needs to be flagged to be able to distinguish between uplink and downlink
+	outmsg = gsmtap_makemsg(arfcn | GSMTAP_ARFCN_F_UPLINK, timeslot,
+	                gsmtap_chan, subslot, fn, signal_dbm, snr, data,
+	                data_len);
 	if (outmsg) {
 		outmsg->l1h = msgb_data(outmsg);
 		gh = msgb_l1(outmsg);
@@ -184,6 +184,19 @@
 	                arfcn, fn, get_value_string(gsmtap_types, gh->type),
 	                get_value_string(gsmtap_channels, gsmtap_chantype),
 	                timeslot, subslot, rsl_chantype, link_id, chan_nr);
+
+	// generally ignore all messages coming from another arfcn than the synced one
+	if (l1_model_ms->state->serving_cell.arfcn != (arfcn & GSMTAP_ARFCN_MASK)) {
+		LOGP(DVIRPHY, LOGL_NOTICE,
+		                "Ignoring gsmtap msg from virt um - msg arfcn=%d not equal synced arfcn=%d!\n", arfcn & GSMTAP_ARFCN_MASK, l1_model_ms->state->serving_cell.arfcn);
+		goto nomessage;
+	}
+	// generally ignore all uplink messages received
+	if (arfcn & GSMTAP_ARFCN_F_UPLINK) {
+		LOGP(DVIRPHY, LOGL_NOTICE,
+		                "Ignoring gsmtap msg from virt um - uplink flag set!\n");
+		goto nomessage;
+	}
 
 	// switch case with removed acch flag
 	switch (gsmtap_chantype & ~GSMTAP_CHANNEL_ACCH & 0xff) {
@@ -258,6 +271,7 @@
 	if (l1ctl_msg) {
 		l1ctl_sap_tx_to_l23(l1ctl_msg);
 	}
+nomessage:
 	// handle memory deallocation
 	talloc_free(msg);
 }

-- 
To view, visit https://gerrit.osmocom.org/3203
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibb78ac68172fceaa04acca81271940632e52d857
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



More information about the gerrit-log mailing list