pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-hnbgw/+/40280?usp=email )
Change subject: WIP: count RAB actions received in unexpected state
......................................................................
WIP: count RAB actions received in unexpected state
This allows figuring out that something may be wrong in the network,
with both sides (HNB vs CN) going out of sync, or HNBGW ending up in a
bad state due to eg. a bug where a RAB is lost.
While at it, fix some formatting issues on related counters.
Change-Id: If3521ba601b9d7448226f2303ed2ef402d861bef
---
M include/osmocom/hnbgw/hnb_persistent.h
M src/osmo-hnbgw/hnb_persistent.c
M src/osmo-hnbgw/kpi_ranap.c
3 files changed, 66 insertions(+), 10 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/80/40280/1
diff --git a/include/osmocom/hnbgw/hnb_persistent.h
b/include/osmocom/hnbgw/hnb_persistent.h
index c4379de..07c017b 100644
--- a/include/osmocom/hnbgw/hnb_persistent.h
+++ b/include/osmocom/hnbgw/hnb_persistent.h
@@ -39,12 +39,18 @@
HNB_CTR_RANAP_PS_RAB_ACT_REQ,
HNB_CTR_RANAP_CS_RAB_ACT_REQ,
+ HNB_CTR_RANAP_PS_RAB_ACT_REQ_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_ACT_REQ_UNEXP,
HNB_CTR_RANAP_PS_RAB_ACT_CNF,
HNB_CTR_RANAP_CS_RAB_ACT_CNF,
+ HNB_CTR_RANAP_PS_RAB_ACT_CNF_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_ACT_CNF_UNEXP,
HNB_CTR_RANAP_PS_RAB_ACT_FAIL,
HNB_CTR_RANAP_CS_RAB_ACT_FAIL,
+ HNB_CTR_RANAP_PS_RAB_ACT_FAIL_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_ACT_FAIL_UNEXP,
HNB_CTR_RANAP_PS_RAB_MOD_REQ,
HNB_CTR_RANAP_CS_RAB_MOD_REQ,
@@ -59,12 +65,18 @@
HNB_CTR_RANAP_CS_RAB_REL_REQ,
HNB_CTR_RANAP_PS_RAB_REL_REQ_ABNORMAL,
HNB_CTR_RANAP_CS_RAB_REL_REQ_ABNORMAL,
+ HNB_CTR_RANAP_PS_RAB_REL_REQ_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_REL_REQ_UNEXP,
HNB_CTR_RANAP_PS_RAB_REL_CNF,
HNB_CTR_RANAP_CS_RAB_REL_CNF,
+ HNB_CTR_RANAP_PS_RAB_REL_CNF_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_REL_CNF_UNEXP,
HNB_CTR_RANAP_PS_RAB_REL_FAIL,
HNB_CTR_RANAP_CS_RAB_REL_FAIL,
+ HNB_CTR_RANAP_PS_RAB_REL_FAIL_UNEXP,
+ HNB_CTR_RANAP_CS_RAB_REL_FAIL_UNEXP,
HNB_CTR_RANAP_PS_RAB_REL_IMPLICIT,
HNB_CTR_RANAP_CS_RAB_REL_IMPLICIT,
diff --git a/src/osmo-hnbgw/hnb_persistent.c b/src/osmo-hnbgw/hnb_persistent.c
index bcd6c4b..015e7c6 100644
--- a/src/osmo-hnbgw/hnb_persistent.c
+++ b/src/osmo-hnbgw/hnb_persistent.c
@@ -63,16 +63,28 @@
"ranap:ps:rab_act:req", "PS RAB Activations requested" },
[HNB_CTR_RANAP_CS_RAB_ACT_REQ] = {
"ranap:cs:rab_act:req", "CS RAB Activations requested" },
+ [HNB_CTR_RANAP_PS_RAB_ACT_REQ_UNEXP] = {
+ "ranap:ps:rab_act:req_unexp", "PS RAB Activations requested in
unexpected state" },
+ [HNB_CTR_RANAP_CS_RAB_ACT_REQ_UNEXP] = {
+ "ranap:cs:rab_act:req_unexp", "CS RAB Activations requested in
unexpected state" },
[HNB_CTR_RANAP_PS_RAB_ACT_CNF] = {
"ranap:ps:rab_act:cnf", "PS RAB Activations confirmed" },
[HNB_CTR_RANAP_CS_RAB_ACT_CNF] = {
"ranap:cs:rab_act:cnf", "CS RAB Activations confirmed" },
+ [HNB_CTR_RANAP_PS_RAB_ACT_CNF_UNEXP] = {
+ "ranap:ps:rab_act:cnf_unexp", "PS RAB Activations confirmed in
unexpected state" },
+ [HNB_CTR_RANAP_CS_RAB_ACT_CNF_UNEXP] = {
+ "ranap:cs:rab_act:cnf_unexp", "CS RAB Activations confirmed in
unexpected state" },
[HNB_CTR_RANAP_PS_RAB_ACT_FAIL] = {
"ranap:ps:rab_act:fail", "PS RAB Activations failed" },
[HNB_CTR_RANAP_CS_RAB_ACT_FAIL] = {
"ranap:cs:rab_act:fail", "CS RAB Activations failed" },
+ [HNB_CTR_RANAP_PS_RAB_ACT_FAIL_UNEXP] = {
+ "ranap:ps:rab_act:fail_unexp", "PS RAB Activations failed in unexpected
state" },
+ [HNB_CTR_RANAP_CS_RAB_ACT_FAIL_UNEXP] = {
+ "ranap:cs:rab_act:fail_unexp", "CS RAB Activations failed in unexpected
state" },
[HNB_CTR_RANAP_PS_RAB_MOD_REQ] = {
@@ -98,16 +110,28 @@
"ranap:ps:rab_rel:req:abnormal", "PS RAB Release requested (by CN),
abnormal" },
[HNB_CTR_RANAP_CS_RAB_REL_REQ_ABNORMAL] = {
"ranap:cs:rab_rel:req:abnormal", "CS RAB Release requested (by CN),
abnormal" },
+ [HNB_CTR_RANAP_PS_RAB_REL_REQ_UNEXP] = {
+ "ranap:ps:rab_rel:req:unexp", "PS RAB Release requested (by CN) in
unexpected state" },
+ [HNB_CTR_RANAP_CS_RAB_REL_REQ_UNEXP] = {
+ "ranap:cs:rab_rel:req:unexp", "CS RAB Release requested (by CN) in
unexpected state" },
[HNB_CTR_RANAP_PS_RAB_REL_CNF] = {
"ranap:ps:rab_rel:cnf", "PS RAB Release confirmed" },
[HNB_CTR_RANAP_CS_RAB_REL_CNF] = {
"ranap:cs:rab_rel:cnf", "CS RAB Release confirmed" },
+ [HNB_CTR_RANAP_PS_RAB_REL_CNF_UNEXP] = {
+ "ranap:ps:rab_rel:cnf_unexp", "PS RAB Release confirmed in unexpected
state" },
+ [HNB_CTR_RANAP_CS_RAB_REL_CNF_UNEXP] = {
+ "ranap:cs:rab_rel:cnf_unexp", "CS RAB Release confirmed in unexpected
state" },
[HNB_CTR_RANAP_PS_RAB_REL_FAIL] = {
"ranap:ps:rab_rel:fail", "PS RAB Release failed" },
[HNB_CTR_RANAP_CS_RAB_REL_FAIL] = {
"ranap:cs:rab_rel:fail", "CS RAB Release failed" },
+ [HNB_CTR_RANAP_PS_RAB_REL_FAIL_UNEXP] = {
+ "ranap:ps:rab_rel:fail_unexp", "PS RAB Release failed in unexpected
state" },
+ [HNB_CTR_RANAP_CS_RAB_REL_FAIL_UNEXP] = {
+ "ranap:cs:rab_rel:fail_unexp", "CS RAB Release failed in unexpected
state" },
[HNB_CTR_RANAP_PS_RAB_REL_IMPLICIT] = {
"ranap:ps:rab_rel:implicit:normal", "PS RAB Release implicit (during Iu
Release), normal" },
diff --git a/src/osmo-hnbgw/kpi_ranap.c b/src/osmo-hnbgw/kpi_ranap.c
index cbaa61d..865e2b4 100644
--- a/src/osmo-hnbgw/kpi_ranap.c
+++ b/src/osmo-hnbgw/kpi_ranap.c
@@ -106,13 +106,17 @@
* new, it is a setup */
switch (map->rab_state[rab_id]) {
case RAB_STATE_ACTIVE:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_REQ :
HNB_CTR_RANAP_CS_RAB_MOD_REQ);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_REQ :
+ HNB_CTR_RANAP_CS_RAB_MOD_REQ);
break;
case RAB_STATE_INACTIVE:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_REQ :
HNB_CTR_RANAP_CS_RAB_ACT_REQ);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_REQ :
+ HNB_CTR_RANAP_CS_RAB_ACT_REQ);
map->rab_state[rab_id] = RAB_STATE_ACT_REQ;
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_REQ_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_ACT_REQ_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Activation/Modification Req for RAB in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
@@ -158,6 +162,8 @@
}
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_REQ_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_REL_REQ_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Release Req in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
@@ -247,13 +253,17 @@
/* differentiate modify / activate */
switch (map->rab_state[rab_id]) {
case RAB_STATE_ACT_REQ:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_CNF :
HNB_CTR_RANAP_CS_RAB_ACT_CNF);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_CNF :
+ HNB_CTR_RANAP_CS_RAB_ACT_CNF);
map->rab_state[rab_id] = RAB_STATE_ACTIVE;
break;
case RAB_STATE_ACTIVE:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_CNF :
HNB_CTR_RANAP_CS_RAB_MOD_CNF);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_CNF :
+ HNB_CTR_RANAP_CS_RAB_MOD_CNF);
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_CNF_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_ACT_CNF_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Activation/Modification Conf for RAB in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
@@ -267,8 +277,6 @@
if (ies->presenceMask & RAB_ASSIGNMENTRESPONSEIES_RANAP_RAB_RELEASEDLIST_PRESENT)
{
RANAP_RAB_ReleasedList_t *r_list = &ies->raB_ReleasedList;
/* increment number of released RABs, we don't need to do that individually during
iteration */
- HNBP_CTR_ADD(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_CNF :
HNB_CTR_RANAP_CS_RAB_REL_CNF,
- r_list->raB_ReleasedList_ies.list.count);
for (unsigned int i = 0; i < r_list->raB_ReleasedList_ies.list.count; i++) {
RANAP_IE_t *released_list_ie = r_list->raB_ReleasedList_ies.list.array[i];
RANAP_RAB_ReleasedItemIEs_t _rab_rel_item_ies = {};
@@ -292,8 +300,12 @@
switch (map->rab_state[rab_id]) {
case RAB_STATE_REL_REQ:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_CNF :
+ HNB_CTR_RANAP_CS_RAB_REL_CNF);
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_CNF_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_REL_CNF_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Release Conf for RAB in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
@@ -335,14 +347,18 @@
/* differentiate modify / activate */
switch (map->rab_state[rab_id]) {
case RAB_STATE_ACT_REQ:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_FAIL :
HNB_CTR_RANAP_CS_RAB_ACT_FAIL);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_FAIL :
+ HNB_CTR_RANAP_CS_RAB_ACT_FAIL);
map->rab_state[rab_id] = RAB_STATE_INACTIVE;
break;
case RAB_STATE_ACTIVE:
- HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_FAIL :
HNB_CTR_RANAP_CS_RAB_MOD_FAIL);
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_MOD_FAIL :
+ HNB_CTR_RANAP_CS_RAB_MOD_FAIL);
// FIXME: does it remain active after modification failure?
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_ACT_FAIL_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_ACT_FAIL_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Activation/Modification Failed for RAB in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
@@ -356,8 +372,6 @@
if (ies->presenceMask &
RAB_ASSIGNMENTRESPONSEIES_RANAP_RAB_RELEASEFAILEDLIST_PRESENT) {
RANAP_RAB_ReleaseFailedList_t *rf_list = &ies->raB_ReleaseFailedList;
/* increment number of released RABs, we don't need to do that individually during
iteration */
- HNBP_CTR_ADD(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_FAIL :
HNB_CTR_RANAP_CS_RAB_REL_FAIL,
- rf_list->raB_FailedList_ies.list.count);
for (unsigned int i = 0; i < rf_list->raB_FailedList_ies.list.count; i++) {
RANAP_IE_t *failed_list_ie = rf_list->raB_FailedList_ies.list.array[i];
RANAP_RAB_FailedItemIEs_t _rab_failed_item_ies = {};
@@ -382,12 +396,18 @@
/* differentiate modify / activate */
switch (map->rab_state[rab_id]) {
case RAB_STATE_ACT_REQ:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_FAIL :
+ HNB_CTR_RANAP_CS_RAB_REL_FAIL);
map->rab_state[rab_id] = RAB_STATE_INACTIVE;
break;
case RAB_STATE_ACTIVE:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_FAIL :
+ HNB_CTR_RANAP_CS_RAB_REL_FAIL);
// FIXME: does it remain active after modification failure?
break;
default:
+ HNBP_CTR_INC(hnbp, map->is_ps ? HNB_CTR_RANAP_PS_RAB_REL_FAIL_UNEXP :
+ HNB_CTR_RANAP_CS_RAB_REL_FAIL_UNEXP);
LOG_MAP(map, DRANAP, LOGL_NOTICE,
"Unexpected RAB Release Failed for RAB in state %s\n",
hnbgw_rab_state_name(map->rab_state[rab_id]));
--
To view, visit
https://gerrit.osmocom.org/c/osmo-hnbgw/+/40280?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: If3521ba601b9d7448226f2303ed2ef402d861bef
Gerrit-Change-Number: 40280
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>