Change in osmo-pcu[master]: MCS: move Mode enum outside of class definition

Max gerrit-no-reply at lists.osmocom.org
Mon Mar 25 14:49:41 UTC 2019


Max has submitted this change and it was merged. ( https://gerrit.osmocom.org/13163 )

Change subject: MCS: move Mode enum outside of class definition
......................................................................

MCS: move Mode enum outside of class definition

Move Mode (EDGE/GPRS) definition and related functions outside of
GprsCodingScheme class. This allows us to use standard libosmocore
value_string functions.

Change-Id: I3baaac7f1ca3f5b88917a23c1679d63847455f47
---
M src/coding_scheme.c
M src/coding_scheme.h
M src/gprs_coding_scheme.cpp
M src/gprs_coding_scheme.h
M src/gprs_ms.cpp
M src/gprs_ms.h
M src/pcu_vty_functions.cpp
M src/tbf.cpp
M tests/edge/EdgeTest.cpp
9 files changed, 50 insertions(+), 51 deletions(-)

Approvals:
  osmith: Looks good to me, but someone else must approve
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/coding_scheme.c b/src/coding_scheme.c
index 93278e7..135ddd2 100644
--- a/src/coding_scheme.c
+++ b/src/coding_scheme.c
@@ -85,3 +85,14 @@
 	OSMO_ASSERT(ht < NUM_HEADER_TYPES);
 	return hdr_type_info[ht].data_block_header_bits;
 }
+
+const struct value_string mode_names[] = {
+	{ GPRS, "GPRS" },
+	{ EGPRS_GMSK, "EGPRS_GMSK-only"},
+	{ EGPRS, "EGPRS"},
+	{ 0, NULL }
+};
+
+const char *mode_name(enum mcs_kind val) {
+	return get_value_string(mode_names, val);
+}
diff --git a/src/coding_scheme.h b/src/coding_scheme.h
index 1e8ca78..f69a76e 100644
--- a/src/coding_scheme.h
+++ b/src/coding_scheme.h
@@ -49,3 +49,11 @@
 uint8_t num_data_header_bits_UL(enum HeaderType ht);
 uint8_t num_data_header_bits_DL(enum HeaderType ht);
 uint8_t num_data_block_header_bits(enum HeaderType ht);
+
+enum mcs_kind {
+	GPRS,
+	EGPRS_GMSK,
+	EGPRS,
+};
+
+const char *mode_name(enum mcs_kind val);
diff --git a/src/gprs_coding_scheme.cpp b/src/gprs_coding_scheme.cpp
index 53b3b07..1a89b77 100644
--- a/src/gprs_coding_scheme.cpp
+++ b/src/gprs_coding_scheme.cpp
@@ -198,7 +198,7 @@
 	return mcs_info[m_scheme].data_hdr;
 }
 
-void GprsCodingScheme::inc(Mode mode)
+void GprsCodingScheme::inc(enum mcs_kind mode)
 {
 	if (!isCompatible(mode))
 		/* This should not happen. TODO: Use assert? */
@@ -212,7 +212,7 @@
 	m_scheme = new_cs;
 }
 
-void GprsCodingScheme::dec(Mode mode)
+void GprsCodingScheme::dec(enum mcs_kind mode)
 {
 	if (!isCompatible(mode))
 		/* This should not happen. TODO: Use assert? */
@@ -254,16 +254,6 @@
 	m_scheme = CodingScheme(m_scheme - 1);
 }
 
-const char *GprsCodingScheme::modeName(Mode mode)
-{
-	switch (mode) {
-	case GPRS:       return "GPRS";
-	case EGPRS_GMSK: return "EGPRS_GMSK-only";
-	case EGPRS:      return "EGPRS";
-	default:         return "???";
-	}
-}
-
 bool GprsCodingScheme::isFamilyCompatible(GprsCodingScheme o) const
 {
 	if (*this == o)
diff --git a/src/gprs_coding_scheme.h b/src/gprs_coding_scheme.h
index 055c166..6f965d6 100644
--- a/src/gprs_coding_scheme.h
+++ b/src/gprs_coding_scheme.h
@@ -34,12 +34,6 @@
 #define EGPRS_ARQ1            0x0
 #define EGPRS_ARQ2            0x1
 
-	enum Mode {
-		GPRS,
-		EGPRS_GMSK,
-		EGPRS,
-	};
-
 	GprsCodingScheme(CodingScheme s = UNKNOWN);
 
 	operator bool() const {return m_scheme != UNKNOWN;}
@@ -54,12 +48,12 @@
 	bool isGprs()   const {return CS1 <= m_scheme && m_scheme <= CS4;}
 	bool isEgprs()  const {return m_scheme >= MCS1;}
 	bool isEgprsGmsk()  const {return isEgprs() && m_scheme <= MCS4;}
-	bool isCompatible(Mode mode) const;
+	bool isCompatible(enum mcs_kind mode) const;
 	bool isCompatible(GprsCodingScheme o) const;
 	bool isFamilyCompatible(GprsCodingScheme o) const;
 
-	void inc(Mode mode);
-	void dec(Mode mode);
+	void inc(enum mcs_kind mode);
+	void dec(enum mcs_kind mode);
 	void inc();
 	void dec();
 	void decToSingleBlock(bool *needStuffing);
@@ -81,7 +75,6 @@
 	static GprsCodingScheme getGprsByNum(unsigned num);
 	static GprsCodingScheme getEgprsByNum(unsigned num);
 
-	static const char *modeName(Mode mode);
 	static CodingScheme get_retx_mcs(const GprsCodingScheme mcs,
 				const GprsCodingScheme retx_mcs,
 				const unsigned arq_type);
@@ -102,7 +95,7 @@
 	return 0;
 }
 
-inline bool GprsCodingScheme::isCompatible(Mode mode) const
+inline bool GprsCodingScheme::isCompatible(enum mcs_kind mode) const
 {
 	switch (mode) {
 	case GPRS: return isGprs();
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp
index 3c28319..e64bee4 100644
--- a/src/gprs_ms.cpp
+++ b/src/gprs_ms.cpp
@@ -110,7 +110,7 @@
 	m_reserved_ul_slots(0),
 	m_current_trx(NULL),
 	m_codel_state(NULL),
-	m_mode(GprsCodingScheme::GPRS),
+	m_mode(GPRS),
 	m_dl_ctrl_msg(0)
 {
 	int codel_interval = LLC_CODEL_USE_DEFAULT;
@@ -213,7 +213,7 @@
 	unref();
 }
 
-void GprsMs::set_mode(GprsCodingScheme::Mode mode)
+void GprsMs::set_mode(enum mcs_kind mode)
 {
 	m_mode = mode;
 
@@ -221,7 +221,7 @@
 		return;
 
 	switch (m_mode) {
-	case GprsCodingScheme::GPRS:
+	case GPRS:
 		if (!m_current_cs_ul.isGprs()) {
 			m_current_cs_ul = GprsCodingScheme::getGprsByNum(
 				m_bts->bts_data()->initial_cs_ul);
@@ -236,8 +236,8 @@
 		}
 		break;
 
-	case GprsCodingScheme::EGPRS_GMSK:
-	case GprsCodingScheme::EGPRS:
+	case EGPRS_GMSK:
+	case EGPRS:
 		if (!m_current_cs_ul.isEgprs()) {
 			m_current_cs_ul = GprsCodingScheme::getEgprsByNum(
 				m_bts->bts_data()->initial_mcs_ul);
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index 0a9efb8..ad8ca1d 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -74,8 +74,8 @@
 	bool check_tlli(uint32_t tlli);
 
 	void reset();
-	GprsCodingScheme::Mode mode() const;
-	void set_mode(GprsCodingScheme::Mode mode);
+	enum mcs_kind mode() const;
+	void set_mode(enum mcs_kind mode);
 
 	const char *imsi() const;
 	void set_imsi(const char *imsi);
@@ -181,7 +181,7 @@
 	gprs_rlcmac_trx *m_current_trx;
 
 	struct gprs_codel *m_codel_state;
-	GprsCodingScheme::Mode m_mode;
+	enum mcs_kind m_mode;
 
 	unsigned m_dl_ctrl_msg;
 };
@@ -237,7 +237,7 @@
 	return m_current_cs_ul;
 }
 
-inline GprsCodingScheme::Mode GprsMs::mode() const
+inline enum mcs_kind GprsMs::mode() const
 {
 	return m_mode;
 }
diff --git a/src/pcu_vty_functions.cpp b/src/pcu_vty_functions.cpp
index 47a0559..c93935d 100644
--- a/src/pcu_vty_functions.cpp
+++ b/src/pcu_vty_functions.cpp
@@ -79,7 +79,7 @@
 			ul_tbf->window_size(), win->v_q(), win->v_r());
 		vty_out(vty, "%s", VTY_NEWLINE);
 		vty_out(vty, " TBF Statistics:%s", VTY_NEWLINE);
-		if(GprsCodingScheme::GPRS == tbf->ms()->mode()) {
+		if(GPRS == tbf->ms()->mode()) {
 			vty_out_rate_ctr_group(vty, " ", ul_tbf->m_ul_gprs_ctrs);
 		} else {
 			vty_out_rate_ctr_group(vty, " ", ul_tbf->m_ul_egprs_ctrs);
@@ -92,7 +92,7 @@
 			win->window_stalled() ? " STALLED" : "");
 		vty_out(vty, "%s", VTY_NEWLINE);
 		vty_out_rate_ctr_group(vty, " ", tbf->m_ctrs);
-		if(GprsCodingScheme::GPRS == tbf->ms()->mode()) {
+		if(GPRS == tbf->ms()->mode()) {
 			vty_out_rate_ctr_group(vty, " ", dl_tbf->m_dl_gprs_ctrs);
 		} else {
 			vty_out_rate_ctr_group(vty, " ", dl_tbf->m_dl_egprs_ctrs);
@@ -153,8 +153,7 @@
 		VTY_NEWLINE);
 	vty_out(vty, "  Coding scheme downlink: %s%s", mcs_name(ms->current_cs_dl()),
 		VTY_NEWLINE);
-	vty_out(vty, "  Mode:                   %s%s",
-		GprsCodingScheme::modeName(ms->mode()), VTY_NEWLINE);
+	vty_out(vty, "  Mode:                   %s%s", mode_name(ms->mode()), VTY_NEWLINE);
 	vty_out(vty, "  MS class:               %d%s", ms->ms_class(), VTY_NEWLINE);
 	vty_out(vty, "  EGPRS MS class:         %d%s", ms->egprs_ms_class(), VTY_NEWLINE);
 	vty_out(vty, "  PACCH:                  ");
diff --git a/src/tbf.cpp b/src/tbf.cpp
index ffe8b82..3d9b5c4 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -897,7 +897,7 @@
 
 	bts = tbf->bts->bts_data();
 
-	if (ms->mode() == GprsCodingScheme::EGPRS)
+	if (ms->mode() == EGPRS)
 		ms_class = egprs_ms_class;
 
 	tbf->m_created_ts = time(NULL);
@@ -954,11 +954,11 @@
 {
 	if (GprsCodingScheme::getEgprsByNum(bts->max_mcs_ul).isEgprsGmsk() &&
 		GprsCodingScheme::getEgprsByNum(bts->max_mcs_dl).isEgprsGmsk() &&
-		ms->mode() != GprsCodingScheme::EGPRS)
+		ms->mode() != EGPRS)
 	{
-		ms->set_mode(GprsCodingScheme::EGPRS_GMSK);
+		ms->set_mode(EGPRS_GMSK);
 	} else {
-		ms->set_mode(GprsCodingScheme::EGPRS);
+		ms->set_mode(EGPRS);
 	}
 }
 
@@ -992,8 +992,7 @@
 	if (egprs_ms_class > 0 && bts->egprs_enabled) {
 		tbf->enable_egprs();
 		setup_egprs_mode(bts, ms);
-		LOGPTBF(tbf, LOGL_INFO, "Enabled EGPRS, mode %s\n",
-			GprsCodingScheme::modeName(ms->mode()));
+		LOGPTBF(tbf, LOGL_INFO, "Enabled EGPRS, mode %s\n", mode_name(ms->mode()));
 	}
 
 	rc = setup_tbf(tbf, ms, use_trx, ms_class, egprs_ms_class, single_slot);
@@ -1085,8 +1084,7 @@
 	if (egprs_ms_class > 0 && bts->egprs_enabled) {
 		tbf->enable_egprs();
 		setup_egprs_mode(bts, ms);
-		LOGPTBF(tbf, LOGL_INFO, "Enabled EGPRS, mode %s\n",
-			GprsCodingScheme::modeName(ms->mode()));
+		LOGPTBF(tbf, LOGL_INFO, "Enabled EGPRS, mode %s\n", mode_name(ms->mode()));
 	}
 
 	rc = setup_tbf(tbf, ms, use_trx, ms_class, 0, single_slot);
diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp
index 41a1115..b902806 100644
--- a/tests/edge/EdgeTest.cpp
+++ b/tests/edge/EdgeTest.cpp
@@ -48,7 +48,7 @@
 int16_t spoof_mnc = 0, spoof_mcc = 0;
 bool spoof_mnc_3_digits = false;
 
-static void check_coding_scheme(GprsCodingScheme& cs, GprsCodingScheme::Mode mode)
+static void check_coding_scheme(GprsCodingScheme& cs, enum mcs_kind mode)
 {
 	volatile unsigned expected_size;
 	bool need_padding;
@@ -148,9 +148,9 @@
 	OSMO_ASSERT(!cs);
 	OSMO_ASSERT(CodingScheme(cs) == UNKNOWN);
 	OSMO_ASSERT(cs == GprsCodingScheme(UNKNOWN));
-	OSMO_ASSERT(!cs.isCompatible(GprsCodingScheme::GPRS));
-	OSMO_ASSERT(!cs.isCompatible(GprsCodingScheme::EGPRS_GMSK));
-	OSMO_ASSERT(!cs.isCompatible(GprsCodingScheme::EGPRS));
+	OSMO_ASSERT(!cs.isCompatible(GPRS));
+	OSMO_ASSERT(!cs.isCompatible(EGPRS_GMSK));
+	OSMO_ASSERT(!cs.isCompatible(EGPRS));
 
 	last_size_UL = 0;
 	last_size_DL = 0;
@@ -170,7 +170,7 @@
 		/* Check header types */
 		OSMO_ASSERT(current_cs.headerTypeData() == HEADER_GPRS_DATA);
 
-		check_coding_scheme(current_cs, GprsCodingScheme::GPRS);
+		check_coding_scheme(current_cs, GPRS);
 	}
 	OSMO_ASSERT(i == 4);
 
@@ -190,8 +190,8 @@
 		last_size_DL = current_cs.maxBytesDL();
 
 		if (egprs_schemes[i].is_gmsk)
-			check_coding_scheme(current_cs, GprsCodingScheme::EGPRS_GMSK);
-		check_coding_scheme(current_cs, GprsCodingScheme::EGPRS);
+			check_coding_scheme(current_cs, EGPRS_GMSK);
+		check_coding_scheme(current_cs, EGPRS);
 	}
 	OSMO_ASSERT(i == 9);
 

-- 
To view, visit https://gerrit.osmocom.org/13163
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I3baaac7f1ca3f5b88917a23c1679d63847455f47
Gerrit-Change-Number: 13163
Gerrit-PatchSet: 7
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: André Boddenberg <dr.blobb at gmail.com>
Gerrit-Reviewer: Daniel Willmann <dwillmann at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: osmith <osmith at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190325/c6279ea4/attachment.html>


More information about the gerrit-log mailing list