diff options
-rw-r--r-- | src/gprs_ms.c | 25 | ||||
-rw-r--r-- | src/gprs_ms.h | 17 | ||||
-rw-r--r-- | src/gprs_rlcmac_sched.cpp | 3 | ||||
-rw-r--r-- | src/pcu_vty_functions.cpp | 3 |
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; } |