aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Whyte <keith@rhizomatica.org>2024-04-02 04:33:42 +0100
committerKeith Whyte <keith@rhizomatica.org>2024-04-02 04:46:26 +0100
commit3e300826465e88970e05c8c135966aefd2ee06c8 (patch)
treea3001f2b7cc1fcdfd8013a7c39a2afb03cf38472
parent2a89bbf66fbb8273888ab64bdf9c1c98739be51b (diff)
Reject Update location using cause from the HLR
I'm not sure if there is any point in continuing when we have a loc err cause that evaluate to EACCES in check_cause() That is, any of the following: GMM_CAUSE_IMSI_UNKNOWN = 0x02, GMM_CAUSE_ILLEGAL_MS = 0x03, GMM_CAUSE_IMEI_NOT_ACCEPTED = 0x05, GMM_CAUSE_ILLEGAL_ME = 0x06, GMM_CAUSE_GPRS_NOTALLOWED = 0x07, GMM_CAUSE_GPRS_OTHER_NOTALLOWED = 0x08, GMM_CAUSE_MS_ID_NOT_DERIVED = 0x09, GMM_CAUSE_IMPL_DETACHED = 0x0a, GMM_CAUSE_PLMN_NOTALLOWED = 0x0b, GMM_CAUSE_LA_NOTALLOWED = 0x0c, GMM_CAUSE_ROAMING_NOTALLOWED = 0x0d, GMM_CAUSE_NO_GPRS_PLMN = 0x0e, (note that GMM_CAUSE_NO_SUIT_CELL_IN_LA is not included) So if we got any of those from the HLR let's just dispatch E_REJECT instead of waiting for T3350 to expire and then the attach fsm will do just that with GMM_CAUSE_NET_FAIL and a misleading error log message that the HLR did not repond. Change-Id: I6f1a3f8343a9cd66567edc55719cd166e7098da9
-rw-r--r--src/sgsn/gprs_subscriber.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/sgsn/gprs_subscriber.c b/src/sgsn/gprs_subscriber.c
index 460450c1e..7efaab9c9 100644
--- a/src/sgsn/gprs_subscriber.c
+++ b/src/sgsn/gprs_subscriber.c
@@ -28,6 +28,7 @@
#include <osmocom/core/logging.h>
#include <osmocom/sgsn/gprs_subscriber.h>
#include <osmocom/gsupclient/gsup_client.h>
+#include <osmocom/sgsn/gprs_gmm_attach.h>
#include <osmocom/sgsn/sgsn.h>
#include <osmocom/sgsn/mmctx.h>
@@ -537,9 +538,8 @@ static int gprs_subscr_handle_gsup_upd_loc_err(struct gprs_subscr *subscr,
get_value_string(gsm48_gmm_cause_names, gsup_msg->cause),
gsup_msg->cause);
- subscr->authorized = 0;
- subscr->sgsn_data->error_cause = gsup_msg->cause;
- gprs_subscr_update_auth_info(subscr);
+ osmo_fsm_inst_dispatch(subscr->sgsn_data->mm->gmm_att_req.fsm,
+ E_REJECT, (void *) gsup_msg->cause);
break;
case EHOSTUNREACH: