summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2011-04-08 10:46:18 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2011-04-09 20:52:12 +0200
commit2d42ddeba37ed7e0d54bf10dc66b7549ad43bc5b (patch)
treee13f0915be3caacc5ea78ec917ab9a5109972f61
parent952a18ed19f531b82e26108f8c46ef225fddef43 (diff)
Add functions to search for rate counters by name
* rate_ctr_get_group_by_name_idx, rate_ctr_get_by_name
-rw-r--r--include/osmocom/core/rate_ctr.h2
-rw-r--r--src/rate_ctr.c34
2 files changed, 36 insertions, 0 deletions
diff --git a/include/osmocom/core/rate_ctr.h b/include/osmocom/core/rate_ctr.h
index 9efc23d..63baa32 100644
--- a/include/osmocom/core/rate_ctr.h
+++ b/include/osmocom/core/rate_ctr.h
@@ -75,4 +75,6 @@ static inline void rate_ctr_inc(struct rate_ctr *ctr)
/* Initialize the counter module */
int rate_ctr_init(void *tall_ctx);
+struct rate_ctr_group *rate_ctr_get_group_by_name_idx(const char *name, const unsigned int idx);
+struct rate_ctr *rate_ctr_get_by_name(const struct rate_ctr_group *ctrg, const char *name);
#endif /* RATE_CTR_H */
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index dd56e80..a7fc949 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -125,3 +125,37 @@ int rate_ctr_init(void *tall_ctx)
return 0;
}
+
+struct rate_ctr_group *rate_ctr_get_group_by_name_idx(const char *name, const unsigned int idx)
+{
+ struct rate_ctr_group *ctrg;
+
+ llist_for_each_entry(ctrg, &rate_ctr_groups, list) {
+ if (!ctrg->desc)
+ continue;
+
+ if (!strcmp(ctrg->desc->group_name_prefix, name) &&
+ ctrg->idx == idx) {
+ return ctrg;
+ }
+ }
+ return NULL;
+}
+
+struct rate_ctr *rate_ctr_get_by_name(const struct rate_ctr_group *ctrg, const char *name)
+{
+ int i;
+ struct rate_ctr_desc *ctr_desc;
+
+ if (!ctrg->desc)
+ return NULL;
+
+ for (i = 0; i < ctrg->desc->num_ctr; i++) {
+ ctr_desc = &ctrg->desc->ctr_desc[i];
+
+ if (!strcmp(ctr_desc->name, name)) {
+ return &ctrg->ctr[i];
+ }
+ }
+ return NULL;
+}