pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-hnbgw/+/38616?usp=email )
Change subject: Add PFCP stats item group
......................................................................
Add PFCP stats item group
This will be used by TTCN3 testsuite to figure out whether it should
expect a PFCP Assoc Setup from HNBGW.
Depends: libosmo-pfcp.git Change-Id Ibc8047856ddcc9c71f2b4cf30f577862b6b414ca
Change-Id: Ic71df8df83e97f4015077677e426c803f84d31ea
---
M TODO-RELEASE
M include/osmocom/hnbgw/hnbgw.h
M include/osmocom/hnbgw/hnbgw_pfcp.h
M src/osmo-hnbgw/hnbgw_pfcp.c
M src/osmo-hnbgw/osmo_hnbgw_main.c
5 files changed, 52 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, approved
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 8cc6151..7b0f29e 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -7,4 +7,5 @@
# If any interfaces have been added since the last public release: c:r:a + 1.
# If any interfaces have been removed or changed since the last public release: c:r:0.
#library what description / commit summary line
-libosmo-sigtran >2.0.0 use API osmo_sua_sccp_cause_name()
\ No newline at end of file
+libosmo-sigtran >2.0.0 use API osmo_sua_sccp_cause_name()
+libosmo-pfcp >0.4.0 use API osmo_pfcp_cp_peer_set_associated_cb()
\ No newline at end of file
diff --git a/include/osmocom/hnbgw/hnbgw.h b/include/osmocom/hnbgw/hnbgw.h
index caaff5f..afceca8 100644
--- a/include/osmocom/hnbgw/hnbgw.h
+++ b/include/osmocom/hnbgw/hnbgw.h
@@ -490,6 +490,8 @@
struct {
struct osmo_pfcp_endpoint *ep;
struct osmo_pfcp_cp_peer *cp_peer;
+ /* Running counters for the PFCP conn */
+ struct osmo_stat_item_group *statg;
} pfcp;
struct osmo_timer_list hnb_store_rab_durations_timer;
diff --git a/include/osmocom/hnbgw/hnbgw_pfcp.h b/include/osmocom/hnbgw/hnbgw_pfcp.h
index 585d3f7..376d144 100644
--- a/include/osmocom/hnbgw/hnbgw_pfcp.h
+++ b/include/osmocom/hnbgw/hnbgw_pfcp.h
@@ -1,3 +1,9 @@
#pragma once
+enum hnbgw_upf_stats {
+ HNBGW_UPF_STAT_ASSOCIATED,
+};
+#define HNBGW_UPF_STAT_SET(stat, val)
osmo_stat_item_set(osmo_stat_item_group_get_item(g_hnbgw->pfcp.statg, (stat)), (val))
+
int hnbgw_pfcp_init(void);
+void hnbgw_pfcp_release(void);
diff --git a/src/osmo-hnbgw/hnbgw_pfcp.c b/src/osmo-hnbgw/hnbgw_pfcp.c
index c7b2b08..dc82f04 100644
--- a/src/osmo-hnbgw/hnbgw_pfcp.c
+++ b/src/osmo-hnbgw/hnbgw_pfcp.c
@@ -20,12 +20,27 @@
*/
#include <osmocom/core/sockaddr_str.h>
+#include <osmocom/core/stats.h>
+#include <osmocom/core/stat_item.h>
#include <osmocom/pfcp/pfcp_endpoint.h>
#include <osmocom/pfcp/pfcp_cp_peer.h>
#include <osmocom/hnbgw/hnbgw.h>
#include <osmocom/hnbgw/context_map.h>
#include <osmocom/hnbgw/ps_rab_fsm.h>
+#include <osmocom/hnbgw/hnbgw_pfcp.h>
+
+static const struct osmo_stat_item_desc hnbgw_upf_stat_item_description[] = {
+ [HNBGW_UPF_STAT_ASSOCIATED] = { "pfcp_associated", "Associated to UPF
through PFCP", OSMO_STAT_ITEM_NO_UNIT, 16, 0},
+};
+
+static const struct osmo_stat_item_group_desc hnbgw_upf_statg_desc = {
+ "upf",
+ "UPF Peer Statistics",
+ OSMO_STATS_CLASS_PEER,
+ ARRAY_SIZE(hnbgw_upf_stat_item_description),
+ hnbgw_upf_stat_item_description,
+};
static void pfcp_set_msg_ctx(struct osmo_pfcp_endpoint *ep, struct osmo_pfcp_msg *m,
struct osmo_pfcp_msg *req)
{
@@ -62,6 +77,12 @@
}
}
+static void pfcp_cp_peer_assoc_cb(struct osmo_pfcp_cp_peer *cp_peer, bool associated)
+{
+ LOGP(DLPFCP, LOGL_NOTICE, "PFCP Peer associated: %s\n", associated ?
"true" : "false");
+ HNBGW_UPF_STAT_SET(HNBGW_UPF_STAT_ASSOCIATED, associated ? 1 : 0);
+}
+
int hnbgw_pfcp_init(void)
{
struct osmo_pfcp_endpoint_cfg cfg;
@@ -81,6 +102,12 @@
return -1;
}
+ g_hnbgw->pfcp.statg = osmo_stat_item_group_alloc(g_hnbgw, &hnbgw_upf_statg_desc,
0);
+ if (!g_hnbgw->pfcp.statg) {
+ LOGP(DLPFCP, LOGL_ERROR, "Failed creating UPF stats item group\n");
+ return -1;
+ }
+
cfg = (struct osmo_pfcp_endpoint_cfg){
.set_msg_ctx_cb = pfcp_set_msg_ctx,
.rx_msg_cb = pfcp_rx_msg,
@@ -136,6 +163,11 @@
LOGP(DLPFCP, LOGL_ERROR, "Cannot allocate PFCP CP Peer FSM\n");
return -1;
}
+ if (osmo_pfcp_cp_peer_set_associated_cb(g_hnbgw->pfcp.cp_peer,
pfcp_cp_peer_assoc_cb)) {
+ LOGP(DLPFCP, LOGL_ERROR, "Cannot Set PFCP CP Peer associated callback\n");
+ return -1;
+ }
+
if (osmo_pfcp_cp_peer_associate(g_hnbgw->pfcp.cp_peer)) {
LOGP(DLPFCP, LOGL_ERROR, "Cannot start PFCP CP Peer FSM\n");
return -1;
@@ -143,3 +175,10 @@
return 0;
}
+
+void hnbgw_pfcp_release(void)
+{
+ if (!hnb_gw_is_gtp_mapping_enabled())
+ return;
+ osmo_stat_item_group_free(g_hnbgw->pfcp.statg);
+}
diff --git a/src/osmo-hnbgw/osmo_hnbgw_main.c b/src/osmo-hnbgw/osmo_hnbgw_main.c
index 3e715b0..2034490 100644
--- a/src/osmo-hnbgw/osmo_hnbgw_main.c
+++ b/src/osmo-hnbgw/osmo_hnbgw_main.c
@@ -369,5 +369,8 @@
}
/* not reached */
+#if ENABLE_PFCP
+ hnbgw_pfcp_release();
+#endif
exit(0);
}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-hnbgw/+/38616?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: Ic71df8df83e97f4015077677e426c803f84d31ea
Gerrit-Change-Number: 38616
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>