diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c b/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c index 46cb710958..993bfa53c9 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c +++ b/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c @@ -124,10 +124,6 @@ int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause) /* Only list of TACs belonging to one PLMN with consecutive * TAC values is supported */ *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; - } else if (msg->tailist.numberofelements < 1) { - /* The tracking area identity list shall contain - * at leat one TAI value */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; } else if ( (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) && (msg->guti.guti.typeofidentity != EPS_MOBILE_IDENTITY_GUTI) ) { /* The only supported type of EPS mobile identity is GUTI */ @@ -151,7 +147,10 @@ int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause) T3423 = gprs_timer_value(&msg->t3423value); } /* Get the tracking area list the UE is registered to */ - int n_tais = msg->tailist.numberofelements; + + /* LW: number of elements is coded as N-1 (0 -> 1 element, 1 -> 2 elements...), + * see 3GPP TS 24.301, section 9.9.3.33.1 */ + int n_tais = msg->tailist.numberofelements + 1; tai_t tai[n_tais]; for (i = 0; i < n_tais; i++) { tai[i].plmn.MCCdigit1 = msg->tailist.mccdigit1; diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c b/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c index 90ab0da926..0e5021b309 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c +++ b/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c @@ -79,7 +79,9 @@ void dump_tracking_area_identity_list_xml(TrackingAreaIdentityList *trackingarea /* Don't display IEI if = 0 */ printf(" 0x%X\n", iei); printf(" %u\n", trackingareaidentitylist->typeoflist); - printf(" %u\n", trackingareaidentitylist->numberofelements); + /* LW: number of elements is coded as N-1 (0 -> 1 element, 1 -> 2 elements...), + * see 3GPP TS 24.301, section 9.9.3.33.1 */ + printf(" %u\n", trackingareaidentitylist->numberofelements + 1); printf(" %u\n", trackingareaidentitylist->mccdigit2); printf(" %u\n", trackingareaidentitylist->mccdigit1); printf(" %u\n", trackingareaidentitylist->mncdigit3); diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c b/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c index 07cd019600..1411c8315e 100644 --- a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c +++ b/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c @@ -731,11 +731,12 @@ ssize_t taiList(char* buffer, size_t len, const TrackingAreaIdentityList* tai) tai->mncdigit3); } - if (tai->numberofelements > 0) { - index += snprintf(buffer + index, len - index, - ", n_tacs = %u, tac = 0x%.4x", - tai->numberofelements, tai->tac); - } + index += snprintf(buffer + index, len - index, + ", n_tacs = %u, tac = 0x%.4x", + /* LW: number of elements is coded as N-1 (0 -> 1 element, 1 -> 2 elements...), + * see 3GPP TS 24.301, section 9.9.3.33.1 */ + tai->numberofelements + 1, + tai->tac); index += snprintf(buffer + index, len - index, "}");