gprs: Use 'Network failure' as default cause
This commit adds a check after a GSUP message has been decoded
whether it is an error message and does not contain a cause value.
If his is the case, the cause value is set to 'Network failure', so
that this cause if effectively the default value for error messages.
Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/gprs/gprs_subscriber.c b/openbsc/src/gprs/gprs_subscriber.c
index 4434324..0009685 100644
--- a/openbsc/src/gprs/gprs_subscriber.c
+++ b/openbsc/src/gprs/gprs_subscriber.c
@@ -514,6 +514,9 @@
return -GMM_CAUSE_INV_MAND_INFO;
}
+ if (!gsup_msg.cause && GPRS_GSUP_IS_MSGT_ERROR(gsup_msg.message_type))
+ gsup_msg.cause = GMM_CAUSE_NET_FAIL;
+
subscr = gprs_subscr_get_by_imsi(gsup_msg.imsi);
if (!subscr) {
diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c
index 25e0310..1036e41 100644
--- a/openbsc/tests/sgsn/sgsn_test.c
+++ b/openbsc/tests/sgsn/sgsn_test.c
@@ -451,6 +451,11 @@
0x02, 0x01, 0x02, /* IMSI unknown in HLR */
};
+ static const uint8_t purge_ms_err_no_cause[] = {
+ 0x0d,
+ TEST_GSUP_IMSI1_IE,
+ };
+
static const uint8_t purge_ms_res[] = {
0x0e,
TEST_GSUP_IMSI1_IE,
@@ -588,6 +593,11 @@
sizeof(purge_ms_err));
OSMO_ASSERT(rc == -GMM_CAUSE_IMSI_UNKNOWN);
+ /* Inject PurgeMsErr() GSUP message */
+ rc = rx_gsup_message(purge_ms_err_no_cause,
+ sizeof(purge_ms_err_no_cause));
+ OSMO_ASSERT(rc == -GMM_CAUSE_NET_FAIL);
+
/* Inject InsertSubscrData GSUP message (unknown IMSI) */
last_updated_subscr = NULL;
rc = rx_gsup_message(insert_data_req, sizeof(insert_data_req));