[PATCH] openbsc[master]: sgsn: add statistics counter for GPRS and PDP packets

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

lynxis lazus gerrit-no-reply at lists.osmocom.org
Tue Jul 12 10:49:45 UTC 2016


Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/457

to look at the new patch set (#5).

sgsn: add statistics counter for GPRS and PDP packets

Changing the test to allow still allocated block from the rate
counters.

Change-Id: Ie30e4c3084ee3a138d6b39bb5000234ac814e65f
---
M openbsc/include/openbsc/gprs_sgsn.h
M openbsc/include/openbsc/sgsn.h
M openbsc/src/gprs/gprs_gmm.c
M openbsc/src/gprs/gprs_sgsn.c
M openbsc/src/gprs/sgsn_main.c
M openbsc/tests/sgsn/sgsn_test.c
6 files changed, 74 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/57/457/5

diff --git a/openbsc/include/openbsc/gprs_sgsn.h b/openbsc/include/openbsc/gprs_sgsn.h
index 0e574d8..d0fb9e3 100644
--- a/openbsc/include/openbsc/gprs_sgsn.h
+++ b/openbsc/include/openbsc/gprs_sgsn.h
@@ -454,4 +454,6 @@
 struct sgsn_instance;
 int sgsn_gtp_init(struct sgsn_instance *sgi);
 
+void sgsn_rate_ctr_init();
+
 #endif /* _GPRS_SGSN_H */
diff --git a/openbsc/include/openbsc/sgsn.h b/openbsc/include/openbsc/sgsn.h
index fe16593..7f6abf7 100644
--- a/openbsc/include/openbsc/sgsn.h
+++ b/openbsc/include/openbsc/sgsn.h
@@ -20,6 +20,28 @@
 	SGSN_AUTH_POLICY_REMOTE
 };
 
+
+enum sgsn_rate_ctr_keys {
+	CTR_GPRS_ATTACH_REQUEST,
+	CTR_GPRS_ATTACH_ACKED,
+	CTR_GPRS_ATTACH_REJECTED,
+	CTR_GPRS_DETACH_REQUEST,
+	CTR_GPRS_DETACH_ACKED,
+	CTR_GPRS_ROUTING_AREA_REQUEST,
+	CTR_GPRS_ROUTING_AREA_ACKED,
+	CTR_GPRS_ROUTING_AREA_REJECT,
+	/* PDP single packet counter / GSM 04.08 9.5.1 - 9.5.9 */
+	CTR_PDP_ACTIVATE_REQUEST,
+	CTR_PDP_ACTIVATE_REJECT,
+	CTR_PDP_ACTIVATE_ACCEPT,
+	CTR_PDP_REQUEST_ACTIVATE, /* unused */
+	CTR_PDP_REQUEST_ACTIVATE_REJ, /* unused */
+	CTR_PDP_MODIFY_REQUEST, /* unsued */
+	CTR_PDP_MODIFY_ACCEPT, /* unused */
+	CTR_PDP_DEACTIVATE_REQUEST,
+	CTR_PDP_DEACTIVATE_ACCEPT,
+};
+
 struct sgsn_cdr {
 	char *filename;
 	int interval;
@@ -88,6 +110,8 @@
 	struct llist_head ares_fds;
 	ares_channel ares_channel;
 	struct ares_addr_node *ares_servers;
+
+	struct rate_ctr_group *rate_ctrs;
 };
 
 extern struct sgsn_instance *sgsn;
diff --git a/openbsc/src/gprs/gprs_gmm.c b/openbsc/src/gprs/gprs_gmm.c
index 5db69dd..b94c55a 100644
--- a/openbsc/src/gprs/gprs_gmm.c
+++ b/openbsc/src/gprs/gprs_gmm.c
@@ -288,6 +288,7 @@
 #endif
 
 	LOGMMCTXP(LOGL_INFO, mm, "<- GPRS ATTACH ACCEPT (new P-TMSI=0x%08x)\n", mm->p_tmsi);
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ATTACH_ACKED]);
 
 	mmctx2msgid(msg, mm);
 
@@ -339,6 +340,7 @@
 
 	LOGMMCTXP(LOGL_NOTICE, mm, "<- GPRS ATTACH REJECT: %s\n",
 		  get_value_string(gsm48_gmm_cause_names, gmm_cause));
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ATTACH_REJECTED]);
 
 	gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh) + 1);
 	gh->proto_discr = GSM48_PDISC_MM_GPRS;
@@ -371,6 +373,7 @@
 	/* MMCTX might be NULL! */
 
 	DEBUGP(DMM, "<- GPRS MM DETACH ACC (force-standby: %d)\n", force_stby);
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_DETACH_ACKED]);
 
 	gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh) + 1);
 	gh->proto_discr = GSM48_PDISC_MM_GPRS;
@@ -839,6 +842,7 @@
 	int rc;
 
 	LOGMMCTXP(LOGL_INFO, ctx, "-> GMM ATTACH REQUEST ");
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ATTACH_REQUEST]);
 
 	/* As per TS 04.08 Chapter 4.7.1.4, the attach request arrives either
 	 * with a foreign TLLI (P-TMSI that was allocated to the MS before),
@@ -999,7 +1003,7 @@
 	power_off = gh->data[0] & 0x8;
 
 	/* FIXME: In 24.008 there is an optional P-TMSI and P-TMSI signature IE */
-
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_DETACH_REQUEST]);
 	LOGMMCTXP(LOGL_INFO, ctx, "-> GMM DETACH REQUEST TLLI=0x%08x type=%s %s\n",
 		msgb_tlli(msg), get_value_string(gprs_det_t_mo_strs, detach_type),
 		power_off ? "Power-off" : "");
@@ -1033,6 +1037,7 @@
 	struct gsm48_ra_upd_ack *rua;
 	uint8_t *mid;
 
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ROUTING_AREA_ACKED]);
 	LOGMMCTXP(LOGL_INFO, mm, "<- ROUTING AREA UPDATE ACCEPT\n");
 
 	mmctx2msgid(msg, mm);
@@ -1079,6 +1084,7 @@
 	struct gsm48_hdr *gh;
 
 	LOGP(DMM, LOGL_NOTICE, "<- ROUTING AREA UPDATE REJECT\n");
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ROUTING_AREA_REJECT]);
 
 	gmm_copy_id(msg, old_msg);
 
@@ -1141,6 +1147,7 @@
 	/* Update Type 10.5.5.18 */
 	upd_type = *cur++ & 0x0f;
 
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_GPRS_ROUTING_AREA_REQUEST]);
 	LOGP(DMM, LOGL_INFO, "-> GMM RA UPDATE REQUEST type=\"%s\"\n",
 		get_value_string(gprs_upd_t_strs, upd_type));
 
@@ -1583,7 +1590,7 @@
 }
 #endif
 
-/* Section 9.5.2: Ativate PDP Context Accept */
+/* Section 9.5.2: Activate PDP Context Accept */
 int gsm48_tx_gsm_act_pdp_acc(struct sgsn_pdp_ctx *pdp)
 {
 	struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 PDP ACC");
@@ -1591,6 +1598,7 @@
 	uint8_t transaction_id = pdp->ti ^ 0x8; /* flip */
 
 	LOGPDPCTXP(LOGL_INFO, pdp, "<- ACTIVATE PDP CONTEXT ACK\n");
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_ACTIVATE_ACCEPT]);
 
 	mmctx2msgid(msg, pdp->mm);
 
@@ -1635,6 +1643,7 @@
 	uint8_t transaction_id = tid ^ 0x8; /* flip */
 
 	LOGMMCTXP(LOGL_NOTICE, mm, "<- ACTIVATE PDP CONTEXT REJ(cause=%u)\n", cause);
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_ACTIVATE_REJECT]);
 
 	mmctx2msgid(msg, mm);
 
@@ -1658,6 +1667,7 @@
 	uint8_t transaction_id = tid ^ 0x8; /* flip */
 
 	LOGMMCTXP(LOGL_INFO, mm, "<- DEACTIVATE PDP CONTEXT REQ\n");
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_DEACTIVATE_REQUEST]);
 
 	mmctx2msgid(msg, mm);
 
@@ -1684,6 +1694,7 @@
 	uint8_t transaction_id = tid ^ 0x8; /* flip */
 
 	LOGMMCTXP(LOGL_INFO, mm, "<- DEACTIVATE PDP CONTEXT ACK\n");
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_DEACTIVATE_ACCEPT]);
 
 	mmctx2msgid(msg, mm);
 
@@ -1963,6 +1974,8 @@
 	struct msgb *msg;
 	int rc;
 
+	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_ACTIVATE_REQUEST]);
+
 	/*
 	 * This is painful. We might not have a static GGSN
 	 * configuration and then would need to copy the msg
diff --git a/openbsc/src/gprs/gprs_sgsn.c b/openbsc/src/gprs/gprs_sgsn.c
index 98439de..98912e0 100644
--- a/openbsc/src/gprs/gprs_sgsn.c
+++ b/openbsc/src/gprs/gprs_sgsn.c
@@ -90,6 +90,36 @@
 	.class_id = OSMO_STATS_CLASS_SUBSCRIBER,
 };
 
+static const struct rate_ctr_desc sgsn_ctr_description[] = {
+	{ "gprs.attempts_requested", "attach request received" },
+	{ "gprs.attempts_accepted", "attach request accepted" },
+	{ "gprs.attempts_failed", "attach request rejected" },
+	{ "gprs.detach_requested", "detach request received" },
+	{ "gprs.detach_acked", "detach request acked" },
+	{ "gprs.routing_area_requested", "" },
+	{ "pdp.activate_requested", "" },
+	{ "pdp.activate_rejected", "" },
+	{ "pdp.activate_accepted", "" },
+	{ "pdp.request_activated", "" },
+	{ "pdp.request_activate_rejected", "" },
+	{ "pdp.modify_requested", "" },
+	{ "pdp.modify_accepted", "" },
+	{ "pdp.deactivate_requested", "" },
+	{ "pdp.deactivate_accepted", "" },
+};
+
+static const struct rate_ctr_group_desc sgsn_ctrg_desc = {
+	"sgsn",
+	"SGSN Overall Statistics",
+	OSMO_STATS_CLASS_GLOBAL,
+	ARRAY_SIZE(sgsn_ctr_description),
+	sgsn_ctr_description,
+};
+
+void sgsn_rate_ctr_init() {
+	sgsn->rate_ctrs = rate_ctr_group_alloc(tall_bsc_ctx, &sgsn_ctrg_desc, 0);
+}
+
 /* look-up a SGSN MM context based on TLLI + RAI */
 struct sgsn_mm_ctx *sgsn_mm_ctx_by_tlli(uint32_t tlli,
 					const struct gprs_ra_id *raid)
diff --git a/openbsc/src/gprs/sgsn_main.c b/openbsc/src/gprs/sgsn_main.c
index c852840..007db1b 100644
--- a/openbsc/src/gprs/sgsn_main.c
+++ b/openbsc/src/gprs/sgsn_main.c
@@ -340,6 +340,7 @@
 	bssgp_nsi = sgsn_inst.cfg.nsi = sgsn_nsi;
 
 	gprs_llc_init("/usr/local/lib/osmocom/crypt/");
+	sgsn_rate_ctr_init();
 	sgsn_inst_init();
 
 	gprs_ns_vty_init(bssgp_nsi);
diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c
index d568807..a96f788 100644
--- a/openbsc/tests/sgsn/sgsn_test.c
+++ b/openbsc/tests/sgsn/sgsn_test.c
@@ -2410,6 +2410,7 @@
 	tall_bsc_ctx = talloc_named_const(osmo_sgsn_ctx, 0, "bsc");
 	tall_msgb_ctx = talloc_named_const(osmo_sgsn_ctx, 0, "msgb");
 
+	sgsn_rate_ctr_init();
 	sgsn_auth_init();
 	gprs_subscr_init(sgsn);
 
@@ -2439,7 +2440,7 @@
 
 	talloc_report_full(osmo_sgsn_ctx, stderr);
 	OSMO_ASSERT(talloc_total_blocks(tall_msgb_ctx) == 1);
-	OSMO_ASSERT(talloc_total_blocks(tall_bsc_ctx) == 1);
+	OSMO_ASSERT(talloc_total_blocks(tall_bsc_ctx) == 2);
 	return 0;
 }
 

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

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ie30e4c3084ee3a138d6b39bb5000234ac814e65f
Gerrit-PatchSet: 5
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: lynxis lazus <lynxis at fe80.eu>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: lynxis lazus <lynxis at fe80.eu>



More information about the gerrit-log mailing list