aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-01-11 17:32:18 +0100
committerlaforge <laforge@osmocom.org>2021-01-12 18:01:53 +0000
commitbed48cc14f416ab684616d03e0f5518d99facfc3 (patch)
tree1a5a6398fb3686494ec3a20c8b18b5675c90662a
parentc2d3625bf64b6f08fa6d2db43b0e9d48cc66fcd5 (diff)
ms: Replace struct var with rate_ctr
Let's use usual osmocom rate_ctr instead of having one variable + setter/getter functions, so we can easily add new counters and also because it makes code more clear (no need to look at what the "update" function is doing). Using rate counter also provides info about how recently the MS has been interacting with the network. Related: OS#4907 Change-Id: I744507fde4291955c1dbbb9739b18a12a80145b1
-rw-r--r--src/gprs_ms.c25
-rw-r--r--src/gprs_ms.h17
-rw-r--r--src/gprs_rlcmac_sched.cpp3
-rw-r--r--src/pcu_vty_functions.cpp3
4 files changed, 33 insertions, 15 deletions
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index 94f69cde..d57e9b62 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -35,11 +35,25 @@
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/gsm48.h>
#include <osmocom/core/logging.h>
+#include <osmocom/core/stats.h>
#include "coding_scheme.h"
#define GPRS_CODEL_SLOW_INTERVAL_MS 4000
extern void *tall_pcu_ctx;
+static unsigned int next_ms_ctr_group_id;
+
+static const struct rate_ctr_desc ms_ctr_description[] = {
+ [MS_CTR_DL_CTRL_MSG_SCHED] = { "ms:dl_ctrl_msg_sched", "Amount of DL CTRL messages scheduled" },
+};
+
+const struct rate_ctr_group_desc ms_ctrg_desc = {
+ .group_name_prefix = "pcu:ms",
+ .group_description = "MS Statistics",
+ .class_id = OSMO_STATS_CLASS_SUBSCRIBER,
+ .num_ctr = ARRAY_SIZE(ms_ctr_description),
+ .ctr_desc = ms_ctr_description,
+};
static int64_t now_msec()
{
@@ -118,7 +132,15 @@ struct GprsMs *ms_alloc(struct BTS *bts, uint32_t tlli)
}
ms->last_cs_not_low = now_msec();
ms->app_info_pending = false;
+
+ ms->ctrs = rate_ctr_group_alloc(ms, &ms_ctrg_desc, next_ms_ctr_group_id++);
+ if (!ms->ctrs)
+ goto free_ret;
+
return ms;
+free_ret:
+ talloc_free(ms);
+ return NULL;
}
static int ms_talloc_destructor(struct GprsMs *ms)
@@ -148,6 +170,9 @@ static int ms_talloc_destructor(struct GprsMs *ms)
}
llc_queue_clear(&ms->llc_queue, ms->bts);
+
+ if (ms->ctrs)
+ rate_ctr_group_free(ms->ctrs);
return 0;
}
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index ade3f3ba..6391f726 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -34,6 +34,7 @@ extern "C" {
#include <osmocom/core/timer.h>
#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/rate_ctr.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/gsm/gsm48.h>
@@ -44,6 +45,10 @@ extern "C" {
#include <stddef.h>
#include <inttypes.h>
+enum ms_counter_id {
+ MS_CTR_DL_CTRL_MSG_SCHED,
+};
+
struct BTS;
struct gprs_rlcmac_trx;
struct GprsMs;
@@ -94,7 +99,7 @@ struct GprsMs {
struct gprs_codel *codel_state;
enum mcs_kind mode;
- unsigned dl_ctrl_msg;
+ struct rate_ctr_group *ctrs;
};
struct GprsMs *ms_alloc(struct BTS *bts, uint32_t tlli);
@@ -215,16 +220,6 @@ static inline unsigned ms_nack_rate_dl(const struct GprsMs *ms)
return ms->nack_rate_dl;
}
-static inline unsigned ms_dl_ctrl_msg(const struct GprsMs *ms)
-{
- return ms->dl_ctrl_msg;
-}
-
-static inline void ms_update_dl_ctrl_msg(struct GprsMs *ms)
-{
- ms->dl_ctrl_msg++;
-}
-
static inline uint8_t ms_reserved_dl_slots(const struct GprsMs *ms)
{
return ms->reserved_dl_slots;
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index d7958c4c..924a4dea 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -233,8 +233,7 @@ static struct msgb *sched_select_ctrl_msg(
LOGP(DRLCMACSCHED, LOGL_DEBUG, "Scheduling control "
"message at RTS for %s (TRX=%d, TS=%d)\n",
tbf_name(tbf), trx, ts);
- /* Updates the dl ctrl msg counter for ms */
- ms_update_dl_ctrl_msg(tbf->ms());
+ rate_ctr_inc(&tbf->ms()->ctrs->ctr[MS_CTR_DL_CTRL_MSG_SCHED]);
return msg;
}
diff --git a/src/pcu_vty_functions.cpp b/src/pcu_vty_functions.cpp
index 6100b136..92be77be 100644
--- a/src/pcu_vty_functions.cpp
+++ b/src/pcu_vty_functions.cpp
@@ -175,8 +175,6 @@ static int show_ms(struct vty *vty, GprsMs *ms)
vty_out(vty, " MS I level (slot %d): %d dB%s",
i, ms->l1_meas.ts[i].ms_i_level, VTY_NEWLINE);
}
- vty_out(vty, " RLC/MAC DL Control Msg: %d%s", ms_dl_ctrl_msg(ms),
- VTY_NEWLINE);
if (ms_ul_tbf(ms))
vty_out(vty, " Uplink TBF: TFI=%d, state=%s%s",
ms_ul_tbf(ms)->tfi(),
@@ -201,6 +199,7 @@ static int show_ms(struct vty *vty, GprsMs *ms)
tbf->state_name(),
VTY_NEWLINE);
}
+ vty_out_rate_ctr_group(vty, " ", ms->ctrs);
return CMD_SUCCESS;
}