[PATCH] osmo-pcu[master]: Move EGPRS WS computation to C code

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/.

Max gerrit-no-reply at lists.osmocom.org
Thu Feb 1 17:32:29 UTC 2018


Review at  https://gerrit.osmocom.org/6241

Move EGPRS WS computation to C code

Don't access BTS struct when computing EGPRS window size: let the caller
obtain necessary parameters and call corresponding function from C
code. This makes it easier to unit-test and follow actual WS
computation.

Change-Id: Ie411ea2bbfca442b33405584f15687a7ffcbb53c
Related: OS#1759
---
M src/mslot_class.c
M src/mslot_class.h
M src/tbf.cpp
M src/tbf.h
M src/tbf_dl.cpp
M src/tbf_ul.cpp
6 files changed, 13 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/41/6241/1

diff --git a/src/mslot_class.c b/src/mslot_class.c
index 12d6d9e..dd172ae 100644
--- a/src/mslot_class.c
+++ b/src/mslot_class.c
@@ -170,3 +170,9 @@
 {
 	return get_mslot_table(ms_cl)->type;
 }
+
+uint16_t egprs_window_size(uint16_t ws_base, uint16_t ws_pdch, uint8_t num_pdch)
+{
+	return OSMO_MIN((num_pdch != 1) ? (128 * num_pdch) : 192, OSMO_MAX(64,
+									   (ws_base + num_pdch * ws_pdch) / 32 * 32));
+}
diff --git a/src/mslot_class.h b/src/mslot_class.h
index a6366fc..ccacb3e 100644
--- a/src/mslot_class.h
+++ b/src/mslot_class.h
@@ -46,3 +46,6 @@
 uint8_t mslot_class_get_sum(uint8_t ms_cl);
 uint8_t mslot_class_get_type(uint8_t ms_cl);
 uint8_t mslot_class_max();
+
+/* window size helpers */
+uint16_t egprs_window_size(uint16_t ws_base, uint16_t ws_pdch, uint8_t num_pdch);
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 8cfca3a..1cdfa6b 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -482,14 +482,6 @@
 	talloc_free(tbf);
 }
 
-uint16_t egprs_window_size(const struct gprs_rlcmac_bts *bts_data, uint8_t slots)
-{
-	uint8_t num_pdch = pcu_bitcount(slots);
-
-	return OSMO_MIN((num_pdch != 1) ? (128 * num_pdch) : 192,
-			OSMO_MAX(64, (bts_data->ws_base + num_pdch * bts_data->ws_pdch) / 32 * 32));
-}
-
 int gprs_rlcmac_tbf::update()
 {
 	struct gprs_rlcmac_bts *bts_data = bts->bts_data();
diff --git a/src/tbf.h b/src/tbf.h
index 2ed63f9..a5e6651 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -820,6 +820,4 @@
 		return NULL;
 }
 
-uint16_t egprs_window_size(const struct gprs_rlcmac_bts *bts_data, uint8_t slots);
-
 #endif
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index dc4fa6a..df1f528 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -35,6 +35,7 @@
 #include <osmocom/core/msgb.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/gprs/gprs_bssgp_bss.h>
+	#include <mslot_class.h>
 }
 
 #include <errno.h>
@@ -1347,7 +1348,7 @@
 
 void gprs_rlcmac_dl_tbf::set_window_size()
 {
-	uint16_t ws = egprs_window_size(bts->bts_data(), dl_slots());
+	uint16_t ws = egprs_window_size(bts->bts_data()->ws_base, bts->bts_data()->ws_pdch, pcu_bitcount(dl_slots()));
 	LOGPTBFDL(this, LOGL_INFO, "setting EGPRS DL window size to %u, base(%u) slots(%u) ws_pdch(%u)\n",
 		  ws, bts->bts_data()->ws_base, pcu_bitcount(dl_slots()), bts->bts_data()->ws_pdch);
 	m_window.set_ws(ws);
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index 46d4d12..b5fb362 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -34,6 +34,7 @@
 extern "C" {
 #include <osmocom/core/msgb.h>
 #include <osmocom/core/talloc.h>
+	#include <mslot_class.h>
 }
 
 #include <errno.h>
@@ -584,7 +585,7 @@
 
 void gprs_rlcmac_ul_tbf::set_window_size()
 {
-	uint16_t ws = egprs_window_size(bts->bts_data(), ul_slots());
+	uint16_t ws = egprs_window_size(bts->bts_data()->ws_base, bts->bts_data()->ws_pdch, pcu_bitcount(ul_slots()));
 	LOGPTBFUL(this, LOGL_INFO, "setting EGPRS UL window size to %u, base(%u) slots(%u) ws_pdch(%u)\n",
 		  ws, bts->bts_data()->ws_base, pcu_bitcount(ul_slots()), bts->bts_data()->ws_pdch);
 	m_window.set_ws(ws);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie411ea2bbfca442b33405584f15687a7ffcbb53c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list