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
This commit is contained in:
Keith Whyte 2024-04-02 04:33:42 +01:00
parent 2a89bbf66f
commit 3e30082646
1 changed files with 3 additions and 3 deletions

View File

@ -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: