[AMF] Fixed 5GMM cause in Reject message (#1660)

When a UE that requests slices tries to connect and there are no slices configured, the reject message is:

5GMM cause = 0x7 (5GS Services not allowed)

however it should be:

5GMM cause = 0x3e (No network slices available)

All 5GMM cause value in reject message is reviewed in this commit
This commit is contained in:
Sukchan Lee
2022-07-19 12:42:02 +09:00
parent 3885cb20d9
commit 668cc59f94
22 changed files with 386 additions and 343 deletions

View File

@@ -106,34 +106,53 @@ ED5(uint8_t spare4:4;,
/* 9.11.3.2 5GMM cause /* 9.11.3.2 5GMM cause
* M V 1 */ * M V 1 */
/* REQUEST_ACCEPTED(16) cause is defined by Open5GS */
#define OGS_5GMM_CAUSE_REQUEST_ACCEPTED 16
/* Annex A (informative): Cause values for 5GS mobility management
* A.1 Causes related to UE identification */
#define OGS_5GMM_CAUSE_ILLEGAL_UE 3 #define OGS_5GMM_CAUSE_ILLEGAL_UE 3
#define OGS_5GMM_CAUSE_PEI_NOT_ACCEPTED 5
#define OGS_5GMM_CAUSE_ILLEGAL_ME 6 #define OGS_5GMM_CAUSE_ILLEGAL_ME 6
#define OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED 7
#define OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9 #define OGS_5GMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9
#define OGS_5GMM_CAUSE_IMPLICITLY_DE_REGISTERED 10 #define OGS_5GMM_CAUSE_IMPLICITLY_DE_REGISTERED 10
/* A.2 Cause related to subscription options */
#define OGS_5GMM_CAUSE_PEI_NOT_ACCEPTED 5
#define OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED 7
#define OGS_5GMM_CAUSE_PLMN_NOT_ALLOWED 11 #define OGS_5GMM_CAUSE_PLMN_NOT_ALLOWED 11
#define OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12 #define OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12
#define OGS_5GMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13 #define OGS_5GMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13
#define OGS_5GMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15 #define OGS_5GMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15
#define OGS_5GMM_CAUSE_N1_MODE_NOT_ALLOWED 27
#define OGS_5GMM_CAUSE_REDIRECTION_TO_EPC_REQUIRED 31
#define OGS_5GMM_CAUSE_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED 72
#define OGS_5GMM_CAUSE_TEMPORARILY_NOT_AUTHORIZED_FOR_THIS_SNPN 74
#define OGS_5GMM_CAUSE_PERMANENTLY_NOT_AUTHORIZED_FOR_THIS_SNPN 75
#define OGS_5GMM_CAUSE_NOT_AUTHORIZED_FOR_THIS_CAG_OR_AUITHORIZED_FOR_CAG_CELLS_ONLY 76
#define WIRELESS_ACCESS_AREA_NOT_ALLOWED 76
/* A.3 Causes related to PLMN or SNPN specific network failures
* and congestion/authentication failures */
#define OGS_5GMM_CAUSE_MAC_FAILURE 20 #define OGS_5GMM_CAUSE_MAC_FAILURE 20
#define OGS_5GMM_CAUSE_SYNCH_FAILURE 21 #define OGS_5GMM_CAUSE_SYNCH_FAILURE 21
#define OGS_5GMM_CAUSE_CONGESTION 22 #define OGS_5GMM_CAUSE_CONGESTION 22
#define OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23 #define OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23
#define OGS_5GMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24 #define OGS_5GMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24
#define OGS_5GMM_CAUSE_NON_5G_AUTHENTICATION_UNACCEPTABLE 26 #define OGS_5GMM_CAUSE_NON_5G_AUTHENTICATION_UNACCEPTABLE 26
#define OGS_5GMM_CAUSE_N1_MODE_NOT_ALLOWED 27
#define OGS_5GMM_CAUSE_RESTRICTED_SERVICE_AREA 28 #define OGS_5GMM_CAUSE_RESTRICTED_SERVICE_AREA 28
#define OGS_5GMM_CAUSE_LADN_NOT_AVAILABLE 43 #define OGS_5GMM_CAUSE_LADN_NOT_AVAILABLE 43
#define OGS_5GMM_CAUSE_NO_NETWORK_SLICES_AVAILABLE 62
#define OGS_5GMM_CAUSE_MAXIMUM_NUMBER_OF_PDU_SESSIONS_REACHED 65 #define OGS_5GMM_CAUSE_MAXIMUM_NUMBER_OF_PDU_SESSIONS_REACHED 65
#define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67 #define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67
#define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69 #define OGS_5GMM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69
#define OGS_5GMM_CAUSE_NGKSI_ALREADY_IN_USE 71 #define OGS_5GMM_CAUSE_NGKSI_ALREADY_IN_USE 71
#define OGS_5GMM_CAUSE_NON_3GPP_ACCESS_TO_5GCN_NOT_ALLOWED 72
#define OGS_5GMM_CAUSE_SERVING_NETWORK_NOT_AUTHORIZED 73 #define OGS_5GMM_CAUSE_SERVING_NETWORK_NOT_AUTHORIZED 73
#define OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED 90 #define OGS_5GMM_CAUSE_PAYLOAD_WAS_NOT_FORWARDED 90
#define OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE 91 #define OGS_5GMM_CAUSE_DNN_NOT_SUPPORTED_OR_NOT_SUBSCRIBED_IN_THE_SLICE 91
#define OGS_5GMM_CAUSE_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION 92 #define OGS_5GMM_CAUSE_INSUFFICIENT_USER_PLANE_RESOURCES_FOR_THE_PDU_SESSION 92
/* A.4 Causes related to invalid messages */
#define OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95
#define OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_5GMM_CAUSE_INVALID_MANDATORY_INFORMATION 96
#define OGS_5GMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 #define OGS_5GMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97
@@ -639,6 +658,9 @@ ED3(uint8_t spare:6;,
/* 9.11.4.2 5GSM cause /* 9.11.4.2 5GSM cause
* O TV 2 */ * O TV 2 */
/* Annex B (informative): Cause values for 5GS session management
* B.1 Causes related to nature of request */
#define OGS_5GSM_CAUSE_OPERATOR_DETERMINED_BARRING 8 #define OGS_5GSM_CAUSE_OPERATOR_DETERMINED_BARRING 8
#define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES 26 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES 26
#define OGS_5GSM_CAUSE_MISSING_OR_UNKNOWN_DNN 27 #define OGS_5GSM_CAUSE_MISSING_OR_UNKNOWN_DNN 27
@@ -647,11 +669,12 @@ ED3(uint8_t spare:6;,
#define OGS_5GSM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31 #define OGS_5GSM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31
#define OGS_5GSM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32 #define OGS_5GSM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32
#define OGS_5GSM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33 #define OGS_5GSM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33
#define OGS_5GSM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34
#define OGS_5GSM_CAUSE_PTI_ALREADY_IN_USE 35 #define OGS_5GSM_CAUSE_PTI_ALREADY_IN_USE 35
#define OGS_5GSM_CAUSE_REGULAR_DEACTIVATION 36 #define OGS_5GSM_CAUSE_REGULAR_DEACTIVATION 36
#define OGS_5GSM_CAUSE_NETWORK_FAILURE 38 #define OGS_5GSM_CAUSE_NETWORK_FAILURE 38
#define OGS_5GSM_CAUSE_REACTIVATION_REQUESTED 39 #define OGS_5GSM_CAUSE_REACTIVATION_REQUESTED 39
#define OGS_5GSM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41
#define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42
#define OGS_5GSM_CAUSE_INVALID_PDU_SESSION_IDENTITY 43 #define OGS_5GSM_CAUSE_INVALID_PDU_SESSION_IDENTITY 43
#define OGS_5GSM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44 #define OGS_5GSM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44
#define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45 #define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45
@@ -660,6 +683,10 @@ ED3(uint8_t spare:6;,
#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV4_ONLY_ALLOWED 50 #define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV4_ONLY_ALLOWED 50
#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV6_ONLY_ALLOWED 51 #define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV6_ONLY_ALLOWED 51
#define OGS_5GSM_CAUSE_PDU_SESSION_DOES_NOT_EXIST 54 #define OGS_5GSM_CAUSE_PDU_SESSION_DOES_NOT_EXIST 54
#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_IPV4V6_ONLY_ALLOWED 57
#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_UNSTRUCTURED_ONLY_ALLOWED 58
#define OGS_5GSM_CAUSE_UNSUPPORTED_5QI_VALUE 59
#define OGS_5GSM_CAUSE_PDU_SESSION_TYPE_ETHERNET_ONLY_ALLOWED 61
#define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE_AND_DNN 67
#define OGS_5GSM_CAUSE_NOT_SUPPORTED_SSC_MODE 68 #define OGS_5GSM_CAUSE_NOT_SUPPORTED_SSC_MODE 68
#define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69 #define OGS_5GSM_CAUSE_INSUFFICIENT_RESOURCES_FOR_SPECIFIC_SLICE 69
@@ -669,6 +696,8 @@ ED3(uint8_t spare:6;,
#define OGS_5GSM_CAUSE_SEMANTIC_ERROR_IN_THE_QOS_OPERATION 83 #define OGS_5GSM_CAUSE_SEMANTIC_ERROR_IN_THE_QOS_OPERATION 83
#define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_THE_QOS_OPERATION 84 #define OGS_5GSM_CAUSE_SYNTACTICAL_ERROR_IN_THE_QOS_OPERATION 84
#define OGS_5GSM_CAUSE_INVALID_MAPPED_EPS_BEARER_IDENTITY 85 #define OGS_5GSM_CAUSE_INVALID_MAPPED_EPS_BEARER_IDENTITY 85
/* B.2 Protocol errors (e.g., unknown message) */
#define OGS_5GSM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_5GSM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95
#define OGS_5GSM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_5GSM_CAUSE_INVALID_MANDATORY_INFORMATION 96
#define OGS_5GSM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 #define OGS_5GSM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97

View File

@@ -222,51 +222,55 @@ ED3(uint8_t cn_specific_drx_cycle_length_coefficient_and_drx_value_for_s1_mode:4
} __attribute__ ((packed)) ogs_nas_drx_parameter_t; } __attribute__ ((packed)) ogs_nas_drx_parameter_t;
/* 9.9.3.9 EMM cause /* 9.9.3.9 EMM cause
* O TV 2 * O TV 2 */
* Annex A (informative) Cause values for EPS mobility management
/* REQUEST_ACCEPTED(16) cause is defined by Open5GS */
#define EMM_CAUSE_REQUEST_ACCEPTED 16
/* Annex A (informative) Cause values for EPS mobility management
* A.1 Causes related to UE identification */ * A.1 Causes related to UE identification */
#define EMM_CAUSE_IMSI_UNKNOWN_IN_HSS 2 #define OGS_NAS_EMM_CAUSE_IMSI_UNKNOWN_IN_HSS 2
#define EMM_CAUSE_ILLEGAL_UE 3 #define OGS_NAS_EMM_CAUSE_ILLEGAL_UE 3
#define EMM_CAUSE_IMSI_UNKNOWN_IN_VLR 4 #define OGS_NAS_EMM_CAUSE_IMSI_UNKNOWN_IN_VLR 4
#define EMM_CAUSE_ILLEGAL_ME 6 #define OGS_NAS_EMM_CAUSE_ILLEGAL_ME 6
#define EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9 #define OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK 9
#define EMM_CAUSE_IMPLICITLY_DETACHED 10 #define OGS_NAS_EMM_CAUSE_IMPLICITLY_DETACHED 10
/* A.2 Cause related to subscription options */ /* A.2 Cause related to subscription options */
#define EMM_CAUSE_IMEI_NOT_ACCEPTED 5 #define OGS_NAS_EMM_CAUSE_IMEI_NOT_ACCEPTED 5
#define EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED 7 #define OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED 7
#define EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED 8 #define OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED 8
#define EMM_CAUSE_PLMN_NOT_ALLOWED 11 #define OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED 11
#define EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12 #define OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED 12
#define EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13 #define OGS_NAS_EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA 13
#define EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN 14 #define OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN 14
#define EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15 #define OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA 15
#define EMM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED_IN_THIS_PLMN 35 #define OGS_NAS_EMM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_AUTHORIZED_IN_THIS_PLMN 35
#define EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED 40 #define OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED 40
/* A.3 Causes related to PLMN specific network failures and /* A.3 Causes related to PLMN specific network failures and
* congestion/authentication failures */ * congestion/authentication failures */
#define EMM_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE 16 #define OGS_NAS_EMM_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE 16
#define EMM_CAUSE_NETWORK_FAILURE 17 #define OGS_NAS_EMM_CAUSE_NETWORK_FAILURE 17
#define EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE 18 #define OGS_NAS_EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE 18
#define EMM_CAUSE_ESM_FAILURE 19 #define OGS_NAS_EMM_CAUSE_ESM_FAILURE 19
#define EMM_CAUSE_MAC_FAILURE 20 #define OGS_NAS_EMM_CAUSE_MAC_FAILURE 20
#define EMM_CAUSE_SYNCH_FAILURE 21 #define OGS_NAS_EMM_CAUSE_SYNCH_FAILURE 21
#define EMM_CAUSE_CONGESTION 22 #define OGS_NAS_EMM_CAUSE_CONGESTION 22
#define EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23 #define OGS_NAS_EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH 23
#define EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24 #define OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED 24
#define EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE 26 #define OGS_NAS_EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE 26
#define EMM_CAUSE_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE 39 #define OGS_NAS_EMM_CAUSE_CS_SERVICE_TEMPORARILY_NOT_AVAILABLE 39
#define EMM_CAUSE_SEVERE_NETWORK_FAILURE 42 #define OGS_NAS_EMM_CAUSE_SEVERE_NETWORK_FAILURE 42
/* A.4 Causes related to nature of request /* A.4 Causes related to nature of request
* NOTE: This subclause has no entries in this version of the specification * * NOTE: This subclause has no entries in this version of the specification *
* A.5 Causes related to invalid messages */ * A.5 Causes related to invalid messages */
#define EMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_NAS_EMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95
#define EMM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_NAS_EMM_CAUSE_INVALID_MANDATORY_INFORMATION 96
#define EMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 #define OGS_NAS_EMM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97
#define EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 #define OGS_NAS_EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98
#define EMM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 #define OGS_NAS_EMM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99
#define EMM_CAUSE_CONDITIONAL_IE_ERROR 100 #define OGS_NAS_EMM_CAUSE_CONDITIONAL_IE_ERROR 100
#define EMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 #define OGS_NAS_EMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101
#define EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 #define OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111
typedef uint8_t ogs_nas_emm_cause_t; typedef uint8_t ogs_nas_emm_cause_t;
/* 9.9.3.10 * EPS attach result /* 9.9.3.10 * EPS attach result
@@ -770,53 +774,53 @@ ED3(uint8_t type:4;,
* M V 1 * M V 1
* Annex B (informative) Cause values for EPS session management * Annex B (informative) Cause values for EPS session management
B.1 Causes related to nature of request */ B.1 Causes related to nature of request */
#define ESM_CAUSE_OPERATOR_DETERMINED_BARRING 8 #define OGS_NAS_ESM_CAUSE_OPERATOR_DETERMINED_BARRING 8
#define ESM_CAUSE_INSUFFICIENT_RESOURCES 26 #define OGS_NAS_ESM_CAUSE_INSUFFICIENT_RESOURCES 26
#define ESM_CAUSE_MISSING_OR_UNKNOWN_APN 27 #define OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN 27
#define ESM_CAUSE_UNKNOWN_PDN_TYPE 28 #define OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE 28
#define ESM_CAUSE_USER_AUTHENTICATION_FAILED 29 #define OGS_NAS_ESM_CAUSE_USER_AUTHENTICATION_FAILED 29
#define ESM_CAUSE_REQUEST_REJECTED_BY_SERVING_GW_OR_PDN_GW 30 #define OGS_NAS_ESM_CAUSE_REQUEST_REJECTED_BY_SERVING_GW_OR_PDN_GW 30
#define ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31 #define OGS_NAS_ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED 31
#define ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32 #define OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED 32
#define ESM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33 #define OGS_NAS_ESM_CAUSE_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED 33
#define ESM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34 #define OGS_NAS_ESM_CAUSE_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER 34
#define ESM_CAUSE_PTI_ALREADY_IN_USE 35 #define OGS_NAS_ESM_CAUSE_PTI_ALREADY_IN_USE 35
#define ESM_CAUSE_REGULAR_DEACTIVATION 36 #define OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION 36
#define ESM_CAUSE_EPS_QOS_NOT_ACCEPTED 37 #define OGS_NAS_ESM_CAUSE_EPS_QOS_NOT_ACCEPTED 37
#define ESM_CAUSE_NETWORK_FAILURE 38 #define OGS_NAS_ESM_CAUSE_NETWORK_FAILURE 38
#define ESM_CAUSE_REACTIVATION_REQUESTED 39 #define OGS_NAS_ESM_CAUSE_REACTIVATION_REQUESTED 39
#define ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41 #define OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 41
#define ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42 #define OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION 42
#define ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY 43 #define OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY 43
#define ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44 #define OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS 44
#define ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45 #define OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS 45
#define ESM_CAUSE_PTI_MISMATCH 47 #define OGS_NAS_ESM_CAUSE_PTI_MISMATCH 47
#define ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED 49 #define OGS_NAS_ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED 49
#define ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED 50 #define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED 50
#define ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED 51 #define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED 51
#define ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED 52 #define OGS_NAS_ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED 52
#define ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED 53 #define OGS_NAS_ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED 53
#define ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST 54 #define OGS_NAS_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST 54
#define ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 55 #define OGS_NAS_ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 55
#define ESM_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 56 #define OGS_NAS_ESM_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 56
#define ESM_CAUSE_PDN_TYPE_IPV4V6_ONLY_ALLOWED 57 #define OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4V6_ONLY_ALLOWED 57
#define ESM_CAUSE_PDN_TYPE_NON_IP_ONLY_ALLOWED 58 #define OGS_NAS_ESM_CAUSE_PDN_TYPE_NON_IP_ONLY_ALLOWED 58
#define ESM_CAUSE_UNSUPPORTED_QCI_VALUE 59 #define OGS_NAS_ESM_CAUSE_UNSUPPORTED_QCI_VALUE 59
#define ESM_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 60 #define OGS_NAS_ESM_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 60
#define ESM_CAUSE_MAXIMUM_NUMBER_OF_EPS_BEARERS_REACHED 65 #define OGS_NAS_ESM_CAUSE_MAXIMUM_NUMBER_OF_EPS_BEARERS_REACHED 65
#define ESM_CAUSE_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN_COMBINATION 66 #define OGS_NAS_ESM_CAUSE_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN_COMBINATION 66
#define ESM_CAUSE_INVALID_PTI_VALUE 81 #define OGS_NAS_ESM_CAUSE_INVALID_PTI_VALUE 81
#define ESM_CAUSE_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_EPS_BEARER_CONTEXT 112 #define OGS_NAS_ESM_CAUSE_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_EPS_BEARER_CONTEXT 112
#define ESM_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 113 #define OGS_NAS_ESM_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 113
/* B.2 Protocol errors (e.g., unknown message) class */ /* B.2 Protocol errors (e.g., unknown message) class */
#define ESM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95 #define OGS_NAS_ESM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE 95
#define ESM_CAUSE_INVALID_MANDATORY_INFORMATION 96 #define OGS_NAS_ESM_CAUSE_INVALID_MANDATORY_INFORMATION 96
#define ESM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97 #define OGS_NAS_ESM_CAUSE_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED 97
#define ESM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98 #define OGS_NAS_ESM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 98
#define ESM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99 #define OGS_NAS_ESM_CAUSE_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED 99
#define ESM_CAUSE_CONDITIONAL_IE_ERROR 100 #define OGS_NAS_ESM_CAUSE_CONDITIONAL_IE_ERROR 100
#define ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101 #define OGS_NAS_ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE 101
#define ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111 #define OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED 111
typedef uint8_t ogs_nas_esm_cause_t; typedef uint8_t ogs_nas_esm_cause_t;
/* 9.9.4.5 ESM information transfer flag /* 9.9.4.5 ESM information transfer flag

View File

@@ -28,11 +28,11 @@
#undef OGS_LOG_DOMAIN #undef OGS_LOG_DOMAIN
#define OGS_LOG_DOMAIN __gmm_log_domain #define OGS_LOG_DOMAIN __gmm_log_domain
static int gmm_handle_nas_message_container( static ogs_nas_5gmm_cause_t gmm_handle_nas_message_container(
amf_ue_t *amf_ue, uint8_t message_type, amf_ue_t *amf_ue, uint8_t message_type,
ogs_nas_message_container_t *nas_message_container); ogs_nas_message_container_t *nas_message_container);
int gmm_handle_registration_request(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_registration_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code,
ogs_nas_5gs_registration_request_t *registration_request) ogs_nas_5gs_registration_request_t *registration_request)
{ {
@@ -112,28 +112,19 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
~OGS_REGISTRATION_CLEARTEXT_PRESENT) { ~OGS_REGISTRATION_CLEARTEXT_PRESENT) {
ogs_error("Non cleartext IEs is included [0x%llx]", ogs_error("Non cleartext IEs is included [0x%llx]",
(long long)registration_request->presencemask); (long long)registration_request->presencemask);
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE));
return OGS_ERROR;
} }
if (!h.integrity_protected && if (!h.integrity_protected &&
(registration_request->presencemask & (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) { OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) {
ogs_error("NAS container present without Integrity-protected"); ogs_error("NAS container present without Integrity-protected");
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE));
return OGS_ERROR;
} }
if (!mobile_identity->length || !mobile_identity->buffer) { if (!mobile_identity->length || !mobile_identity->buffer) {
ogs_error("No Mobile Identity"); ogs_error("No Mobile Identity");
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE));
return OGS_ERROR;
} }
mobile_identity_header = mobile_identity_header =
@@ -152,11 +143,7 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
OGS_NAS_5GS_ECIES_SCHEME_PROFILE_B) { OGS_NAS_5GS_ECIES_SCHEME_PROFILE_B) {
ogs_error("Invalid ProtectionSchemeID(%d) in SUCI", ogs_error("Invalid ProtectionSchemeID(%d) in SUCI",
mobile_identity_suci->protection_scheme_id); mobile_identity_suci->protection_scheme_id);
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE)
);
return OGS_ERROR;
} }
amf_ue_set_suci(amf_ue, mobile_identity); amf_ue_set_suci(amf_ue, mobile_identity);
ogs_info("[%s] SUCI", amf_ue->suci); ogs_info("[%s] SUCI", amf_ue->suci);
@@ -166,7 +153,7 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
(ogs_nas_5gs_mobile_identity_guti_t *)mobile_identity->buffer; (ogs_nas_5gs_mobile_identity_guti_t *)mobile_identity->buffer;
if (!mobile_identity_guti) { if (!mobile_identity_guti) {
ogs_error("No mobile identity"); ogs_error("No mobile identity");
return OGS_ERROR; return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
} }
ogs_nas_5gs_mobile_identity_guti_to_nas_guti( ogs_nas_5gs_mobile_identity_guti_to_nas_guti(
@@ -262,13 +249,9 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
/* Check TAI */ /* Check TAI */
served_tai_index = amf_find_served_tai(&amf_ue->nr_tai); served_tai_index = amf_find_served_tai(&amf_ue->nr_tai);
if (served_tai_index < 0) { if (served_tai_index < 0) {
/* Send Registration Reject */ ogs_error("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]",
ogs_warn("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]",
ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v); ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v);
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED));
return OGS_ERROR;
} }
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);
@@ -287,16 +270,13 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
ue_security_capability->nr_ea, ue_security_capability->nr_ia, ue_security_capability->nr_ea, ue_security_capability->nr_ia,
amf_selected_enc_algorithm(amf_ue), amf_selected_enc_algorithm(amf_ue),
amf_selected_int_algorithm(amf_ue)); amf_selected_int_algorithm(amf_ue));
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH));
return OGS_ERROR;
} }
return OGS_OK; return OGS_5GMM_CAUSE_REQUEST_ACCEPTED;
} }
int gmm_handle_registration_update(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_registration_update(amf_ue_t *amf_ue,
ogs_nas_5gs_registration_request_t *registration_request) ogs_nas_5gs_registration_request_t *registration_request)
{ {
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
@@ -376,7 +356,7 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
amf_ue->requested_nssai.s_nssai[i].sst, amf_ue->requested_nssai.s_nssai[i].sst,
amf_ue->requested_nssai.s_nssai[i].sd.v); amf_ue->requested_nssai.s_nssai[i].sd.v);
} }
return OGS_ERROR; return OGS_5GMM_CAUSE_NO_NETWORK_SLICES_AVAILABLE;
} }
} }
@@ -442,10 +422,10 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
} }
} }
return OGS_OK; return OGS_5GMM_CAUSE_REQUEST_ACCEPTED;
} }
int gmm_handle_service_request(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_service_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code,
ogs_nas_5gs_service_request_t *service_request) ogs_nas_5gs_service_request_t *service_request)
{ {
@@ -483,20 +463,14 @@ int gmm_handle_service_request(amf_ue_t *amf_ue,
service_request->presencemask & ~OGS_SERVICE_CLEARTEXT_PRESENT) { service_request->presencemask & ~OGS_SERVICE_CLEARTEXT_PRESENT) {
ogs_error("Non cleartext IEs is included [0x%llx]", ogs_error("Non cleartext IEs is included [0x%llx]",
(long long)service_request->presencemask); (long long)service_request->presencemask);
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_service_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE));
return OGS_ERROR;
} }
if (!h.integrity_protected && if (!h.integrity_protected &&
(service_request->presencemask & (service_request->presencemask &
OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) { OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) {
ogs_error("NAS container present without Integrity-protected"); ogs_error("NAS container present without Integrity-protected");
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
nas_5gs_send_service_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE));
return OGS_ERROR;
} }
amf_ue->nas.message_type = OGS_NAS_5GS_SERVICE_REQUEST; amf_ue->nas.message_type = OGS_NAS_5GS_SERVICE_REQUEST;
@@ -550,13 +524,9 @@ int gmm_handle_service_request(amf_ue_t *amf_ue,
/* Check TAI */ /* Check TAI */
served_tai_index = amf_find_served_tai(&amf_ue->nr_tai); served_tai_index = amf_find_served_tai(&amf_ue->nr_tai);
if (served_tai_index < 0) { if (served_tai_index < 0) {
/* Send Registration Reject */ ogs_error("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]",
ogs_warn("Cannot find Served TAI[PLMN_ID:%06x,TAC:%d]",
ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v); ogs_plmn_id_hexdump(&amf_ue->nr_tai.plmn_id), amf_ue->nr_tai.tac.v);
ogs_assert(OGS_OK == return OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED;
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_TRACKING_AREA_NOT_ALLOWED));
return OGS_ERROR;
} }
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);
@@ -565,10 +535,10 @@ int gmm_handle_service_request(amf_ue_t *amf_ue,
ogs_amf_id_hexdump(&amf_ue->current.guti.amf_id), ogs_amf_id_hexdump(&amf_ue->current.guti.amf_id),
amf_ue->current.guti.m_tmsi); amf_ue->current.guti.m_tmsi);
return OGS_OK; return OGS_5GMM_CAUSE_REQUEST_ACCEPTED;
} }
int gmm_handle_service_update(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue,
ogs_nas_5gs_service_request_t *service_request) ogs_nas_5gs_service_request_t *service_request)
{ {
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
@@ -663,7 +633,7 @@ int gmm_handle_service_update(amf_ue_t *amf_ue,
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_5gs_send_service_accept(amf_ue)); nas_5gs_send_service_accept(amf_ue));
return OGS_OK; return OGS_5GMM_CAUSE_REQUEST_ACCEPTED;
} }
int gmm_handle_deregistration_request(amf_ue_t *amf_ue, int gmm_handle_deregistration_request(amf_ue_t *amf_ue,
@@ -800,7 +770,7 @@ int gmm_handle_identity_response(amf_ue_t *amf_ue,
return OGS_OK; return OGS_OK;
} }
int gmm_handle_security_mode_complete(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
ogs_nas_5gs_security_mode_complete_t *security_mode_complete) ogs_nas_5gs_security_mode_complete_t *security_mode_complete)
{ {
ogs_nas_5gs_mobile_identity_t *imeisv = NULL; ogs_nas_5gs_mobile_identity_t *imeisv = NULL;
@@ -829,7 +799,7 @@ int gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
OGS_NAS_5GS_SECURITY_MODE_COMPLETE_NAS_MESSAGE_CONTAINER_PRESENT) OGS_NAS_5GS_SECURITY_MODE_COMPLETE_NAS_MESSAGE_CONTAINER_PRESENT)
== 0) { == 0) {
ogs_error("No NAS Message Container in Security mode complete message"); ogs_error("No NAS Message Container in Security mode complete message");
return OGS_ERROR; return OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE;
} }
if (security_mode_complete->presencemask & if (security_mode_complete->presencemask &
@@ -886,7 +856,7 @@ int gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
&security_mode_complete->nas_message_container); &security_mode_complete->nas_message_container);
} }
return OGS_OK; return OGS_5GMM_CAUSE_REQUEST_ACCEPTED;
} }
int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue,
@@ -1212,11 +1182,11 @@ int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue,
return OGS_OK; return OGS_OK;
} }
static int gmm_handle_nas_message_container( static ogs_nas_5gmm_cause_t gmm_handle_nas_message_container(
amf_ue_t *amf_ue, uint8_t message_type, amf_ue_t *amf_ue, uint8_t message_type,
ogs_nas_message_container_t *nas_message_container) ogs_nas_message_container_t *nas_message_container)
{ {
int rv = OGS_ERROR; int gmm_cause;
ogs_pkbuf_t *nasbuf = NULL; ogs_pkbuf_t *nasbuf = NULL;
ogs_nas_5gs_message_t nas_message; ogs_nas_5gs_message_t nas_message;
@@ -1227,7 +1197,7 @@ static int gmm_handle_nas_message_container(
if (!nas_message_container->buffer || !nas_message_container->length) { if (!nas_message_container->buffer || !nas_message_container->length) {
ogs_error("No NAS message container [%p:%d]", ogs_error("No NAS message container [%p:%d]",
nas_message_container->buffer,nas_message_container->length); nas_message_container->buffer,nas_message_container->length);
return OGS_ERROR; return OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE;
} }
nasbuf = ogs_pkbuf_alloc(NULL, nas_message_container->length); nasbuf = ogs_pkbuf_alloc(NULL, nas_message_container->length);
@@ -1269,25 +1239,26 @@ static int gmm_handle_nas_message_container(
if (ogs_nas_5gmm_decode(&nas_message, nasbuf) != OGS_OK) { if (ogs_nas_5gmm_decode(&nas_message, nasbuf) != OGS_OK) {
ogs_error("ogs_nas_5gmm_decode() failed"); ogs_error("ogs_nas_5gmm_decode() failed");
ogs_pkbuf_free(nasbuf); ogs_pkbuf_free(nasbuf);
return OGS_ERROR; return OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
} }
gmm_cause = OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE;
switch (nas_message.gmm.h.message_type) { switch (nas_message.gmm.h.message_type) {
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_debug("Registration request in NAS message container"); ogs_debug("Registration request in NAS message container");
rv = gmm_handle_registration_update( gmm_cause = gmm_handle_registration_update(
amf_ue, &nas_message.gmm.registration_request); amf_ue, &nas_message.gmm.registration_request);
break; break;
case OGS_NAS_5GS_SERVICE_REQUEST: case OGS_NAS_5GS_SERVICE_REQUEST:
ogs_debug("Service request in NAS message container"); ogs_debug("Service request in NAS message container");
rv = gmm_handle_service_update( gmm_cause = gmm_handle_service_update(
amf_ue, &nas_message.gmm.service_request); amf_ue, &nas_message.gmm.service_request);
break; break;
default: default:
ogs_error("Unknown message [%d]", nas_message.gmm.h.message_type); ogs_error("Unknown message [%d]", nas_message.gmm.h.message_type);
rv = OGS_ERROR;
} }
ogs_pkbuf_free(nasbuf); ogs_pkbuf_free(nasbuf);
return rv; return gmm_cause;
} }

View File

@@ -26,16 +26,16 @@
extern "C" { extern "C" {
#endif #endif
int gmm_handle_registration_request(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_registration_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code,
ogs_nas_5gs_registration_request_t *registration_request); ogs_nas_5gs_registration_request_t *registration_request);
int gmm_handle_registration_update(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_registration_update(amf_ue_t *amf_ue,
ogs_nas_5gs_registration_request_t *registration_request); ogs_nas_5gs_registration_request_t *registration_request);
int gmm_handle_service_request(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_service_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code, ogs_nas_security_header_type_t h, NGAP_ProcedureCode_t ngap_code,
ogs_nas_5gs_service_request_t *service_request); ogs_nas_5gs_service_request_t *service_request);
int gmm_handle_service_update(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_service_update(amf_ue_t *amf_ue,
ogs_nas_5gs_service_request_t *service_request); ogs_nas_5gs_service_request_t *service_request);
int gmm_handle_deregistration_request(amf_ue_t *amf_ue, int gmm_handle_deregistration_request(amf_ue_t *amf_ue,
@@ -47,7 +47,7 @@ int gmm_handle_authentication_response(amf_ue_t *amf_ue,
int gmm_handle_identity_response(amf_ue_t *amf_ue, int gmm_handle_identity_response(amf_ue_t *amf_ue,
ogs_nas_5gs_identity_response_t *identity_response); ogs_nas_5gs_identity_response_t *identity_response);
int gmm_handle_security_mode_complete(amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
ogs_nas_5gs_security_mode_complete_t *security_mode_complete); ogs_nas_5gs_security_mode_complete_t *security_mode_complete);
int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue, int gmm_handle_ul_nas_transport(amf_ue_t *amf_ue,

View File

@@ -91,6 +91,7 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
static void common_register_state(ogs_fsm_t *s, amf_event_t *e) static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
{ {
int rv, xact_count = 0; int rv, xact_count = 0;
ogs_nas_5gmm_cause_t gmm_cause;
amf_ue_t *amf_ue = NULL; amf_ue_t *amf_ue = NULL;
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
@@ -132,11 +133,14 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
switch (nas_message->gmm.h.message_type) { switch (nas_message->gmm.h.message_type) {
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_info("Registration request"); ogs_info("Registration request");
rv = gmm_handle_registration_request( gmm_cause = gmm_handle_registration_request(
amf_ue, h, e->ngap.code, amf_ue, h, e->ngap.code,
&nas_message->gmm.registration_request); &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_registration_request() failed"); ogs_error("gmm_handle_registration_request() failed [%d]",
gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -150,10 +154,13 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) { if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) {
rv = gmm_handle_registration_update( gmm_cause = gmm_handle_registration_update(
amf_ue, &nas_message->gmm.registration_request); amf_ue, &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_registration_update() failed"); ogs_error("[%s] gmm_handle_registration_update() "
"failed [%d]", amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -204,10 +211,13 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_SERVICE_REQUEST: case OGS_NAS_5GS_SERVICE_REQUEST:
ogs_info("Service request"); ogs_info("Service request");
rv = gmm_handle_service_request( gmm_cause = gmm_handle_service_request(
amf_ue, h, e->ngap.code, &nas_message->gmm.service_request); amf_ue, h, e->ngap.code, &nas_message->gmm.service_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_service_request() failed"); ogs_error("[%s] gmm_handle_service_request() failed [%d]",
amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_service_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -232,10 +242,13 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
break; break;
} }
rv = gmm_handle_service_update( gmm_cause = gmm_handle_service_update(
amf_ue, &nas_message->gmm.service_request); amf_ue, &nas_message->gmm.service_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_service_update() failed"); ogs_error("[%s] gmm_handle_service_update() failed [%d]",
amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_service_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
} }
@@ -495,6 +508,8 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e) void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
{ {
int rv; int rv;
ogs_nas_5gmm_cause_t gmm_cause;
amf_ue_t *amf_ue = NULL; amf_ue_t *amf_ue = NULL;
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
@@ -602,12 +617,14 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
break; break;
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request"); ogs_warn("Registration request");
rv = gmm_handle_registration_request( gmm_cause = gmm_handle_registration_request(
amf_ue, h, e->ngap.code, amf_ue, h, e->ngap.code,
&nas_message->gmm.registration_request); &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("[%s] gmm_handle_registration_request() failed", ogs_error("[%s] gmm_handle_registration_request() failed [%d]",
amf_ue->suci); amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -744,6 +761,7 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e) void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
{ {
int rv; int rv;
ogs_nas_5gmm_cause_t gmm_cause;
amf_ue_t *amf_ue = NULL; amf_ue_t *amf_ue = NULL;
ogs_nas_5gs_message_t *nas_message = NULL; ogs_nas_5gs_message_t *nas_message = NULL;
ogs_nas_security_header_type_t h; ogs_nas_security_header_type_t h;
@@ -797,13 +815,14 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
break; break;
} }
rv = gmm_handle_security_mode_complete( gmm_cause = gmm_handle_security_mode_complete(
amf_ue, &nas_message->gmm.security_mode_complete); amf_ue, &nas_message->gmm.security_mode_complete);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci); ogs_error("[%s] gmm_handle_security_mode_complete() "
"failed [%d] in type [%d]",
amf_ue->suci, gmm_cause, amf_ue->nas.message_type);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_5gs_send_gmm_reject(amf_ue, nas_5gs_send_gmm_reject(amf_ue, gmm_cause));
OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -837,11 +856,14 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
break; break;
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request"); ogs_warn("Registration request");
rv = gmm_handle_registration_request( gmm_cause = gmm_handle_registration_request(
amf_ue, h, e->ngap.code, amf_ue, h, e->ngap.code,
&nas_message->gmm.registration_request); &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci); ogs_error("[%s] gmm_handle_registration_request() failed [%d]",
amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -916,6 +938,8 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e) void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
{ {
int rv, xact_count = 0; int rv, xact_count = 0;
ogs_nas_5gmm_cause_t gmm_cause;
amf_ue_t *amf_ue = NULL; amf_ue_t *amf_ue = NULL;
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
ogs_nas_5gs_message_t *nas_message = NULL; ogs_nas_5gs_message_t *nas_message = NULL;
@@ -1156,11 +1180,14 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request"); ogs_warn("Registration request");
rv = gmm_handle_registration_request( gmm_cause = gmm_handle_registration_request(
amf_ue, h, e->ngap.code, amf_ue, h, e->ngap.code,
&nas_message->gmm.registration_request); &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci); ogs_error("[%s] gmm_handle_registration_request() failed [%d]",
amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -1236,7 +1263,8 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e) void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e)
{ {
int rv, xact_count = 0; int xact_count = 0;
ogs_nas_5gmm_cause_t gmm_cause;
amf_ue_t *amf_ue = NULL; amf_ue_t *amf_ue = NULL;
amf_sess_t *sess = NULL; amf_sess_t *sess = NULL;
@@ -1289,11 +1317,14 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e)
switch (nas_message->gmm.h.message_type) { switch (nas_message->gmm.h.message_type) {
case OGS_NAS_5GS_REGISTRATION_REQUEST: case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_info("Registration request"); ogs_info("Registration request");
rv = gmm_handle_registration_request( gmm_cause = gmm_handle_registration_request(
amf_ue, h, e->ngap.code, amf_ue, h, e->ngap.code,
&nas_message->gmm.registration_request); &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_registration_request() failed"); ogs_error("gmm_handle_registration_request() failed [%d]",
gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }
@@ -1309,10 +1340,13 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e)
if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) { if (h.integrity_protected && SECURITY_CONTEXT_IS_VALID(amf_ue)) {
rv = gmm_handle_registration_update( gmm_cause = gmm_handle_registration_update(
amf_ue, &nas_message->gmm.registration_request); amf_ue, &nas_message->gmm.registration_request);
if (rv != OGS_OK) { if (gmm_cause != OGS_5GMM_CAUSE_REQUEST_ACCEPTED) {
ogs_error("gmm_handle_registration_update() failed"); ogs_error("[%s] gmm_handle_registration_update() "
"failed [%d]", amf_ue->suci, gmm_cause);
ogs_assert(OGS_OK ==
nas_5gs_send_registration_reject(amf_ue, gmm_cause));
OGS_FSM_TRAN(s, gmm_state_exception); OGS_FSM_TRAN(s, gmm_state_exception);
break; break;
} }

View File

@@ -119,7 +119,8 @@ ogs_pkbuf_t *emm_build_attach_accept(
(eps_attach_result->result == OGS_NAS_ATTACH_TYPE_EPS_ATTACH)) { (eps_attach_result->result == OGS_NAS_ATTACH_TYPE_EPS_ATTACH)) {
attach_accept->presencemask |= attach_accept->presencemask |=
OGS_NAS_EPS_ATTACH_ACCEPT_EMM_CAUSE_PRESENT; OGS_NAS_EPS_ATTACH_ACCEPT_EMM_CAUSE_PRESENT;
attach_accept->emm_cause = EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE; attach_accept->emm_cause =
OGS_NAS_EMM_CAUSE_CS_DOMAIN_NOT_AVAILABLE;
} }
} else { } else {
switch (eps_attach_result->result) { switch (eps_attach_result->result) {

View File

@@ -126,8 +126,8 @@ int emm_handle_attach_request(mme_ue_t *mme_ue,
ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return OGS_ERROR; return OGS_ERROR;
} }
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);
@@ -169,8 +169,8 @@ int emm_handle_attach_request(mme_ue_t *mme_ue,
mme_selected_int_algorithm(mme_ue)); mme_selected_int_algorithm(mme_ue));
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH, OGS_NAS_EMM_CAUSE_UE_SECURITY_CAPABILITIES_MISMATCH,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return OGS_ERROR; return OGS_ERROR;
} }
@@ -519,7 +519,7 @@ int emm_handle_tau_request(mme_ue_t *mme_ue,
ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject( nas_eps_send_tau_reject(
mme_ue, EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED));
return OGS_ERROR; return OGS_ERROR;
} }
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);
@@ -637,7 +637,7 @@ int emm_handle_extended_service_request(mme_ue_t *mme_ue,
ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac); ogs_plmn_id_hexdump(&mme_ue->tai.plmn_id), mme_ue->tai.tac);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject( nas_eps_send_tau_reject(
mme_ue, EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED)); mme_ue, OGS_NAS_EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED));
return OGS_ERROR; return OGS_ERROR;
} }
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index); ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);

View File

@@ -133,7 +133,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_info("Service request : Unknown UE"); ogs_info("Service request : Unknown UE");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -142,7 +142,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd); ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -151,7 +151,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No Session Context : IMSI[%s]", mme_ue->imsi_bcd); ogs_warn("No Session Context : IMSI[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -160,7 +160,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd); ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -227,8 +227,8 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_error("nas_eps_send_emm_to_esm() failed");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -259,7 +259,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_info("TAU request : Unknown UE"); ogs_info("TAU request : Unknown UE");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject(mme_ue, nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -268,7 +268,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd); ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject(mme_ue, nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, emm_state_exception); OGS_FSM_TRAN(s, emm_state_exception);
break; break;
} }
@@ -277,7 +277,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd); ogs_warn("No active EPS bearers : IMSI[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject(mme_ue, nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED)); OGS_NAS_EMM_CAUSE_NO_EPS_BEARER_CONTEXT_ACTIVATED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -400,7 +400,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("Extended Service request : Unknown UE"); ogs_warn("Extended Service request : Unknown UE");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -409,7 +409,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd); ogs_warn("No PDN Connection : UE[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, emm_state_exception); OGS_FSM_TRAN(s, emm_state_exception);
break; break;
} }
@@ -418,7 +418,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd); ogs_warn("No Security Context : IMSI[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -430,7 +430,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd); ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)
); );
mme_send_release_access_bearer_or_ue_context_release( mme_send_release_access_bearer_or_ue_context_release(
enb_ue); enb_ue);
@@ -457,7 +457,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
mme_ue->nas_eps.service.value); mme_ue->nas_eps.service.value);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)
); );
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
@@ -474,7 +474,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd); ogs_warn("No P-TMSI : UE[%s]", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)
); );
break; break;
} }
@@ -499,7 +499,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
mme_ue->nas_eps.service.value); mme_ue->nas_eps.service.value);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK) OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)
); );
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
@@ -704,26 +704,26 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
authentication_failure_parameter; authentication_failure_parameter;
ogs_debug("Authentication failure"); ogs_debug("Authentication failure");
ogs_debug(" IMSI[%s] EMM_CAUSE[%d]", mme_ue->imsi_bcd, ogs_debug(" IMSI[%s] OGS_NAS_EMM_CAUSE[%d]", mme_ue->imsi_bcd,
authentication_failure->emm_cause); authentication_failure->emm_cause);
CLEAR_MME_UE_TIMER(mme_ue->t3460); CLEAR_MME_UE_TIMER(mme_ue->t3460);
switch (authentication_failure->emm_cause) { switch (authentication_failure->emm_cause) {
case EMM_CAUSE_MAC_FAILURE: case OGS_NAS_EMM_CAUSE_MAC_FAILURE:
ogs_warn("Authentication failure(MAC failure)"); ogs_warn("Authentication failure(MAC failure)");
break; break;
case EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE: case OGS_NAS_EMM_CAUSE_NON_EPS_AUTHENTICATION_UNACCEPTABLE:
ogs_error("Authentication failure" ogs_error("Authentication failure"
"(Non-EPS authentication unacceptable)"); "(Non-EPS authentication unacceptable)");
break; break;
case EMM_CAUSE_SYNCH_FAILURE: case OGS_NAS_EMM_CAUSE_SYNCH_FAILURE:
ogs_info("Authentication failure(Synch failure)"); ogs_info("Authentication failure(Synch failure)");
mme_s6a_send_air(mme_ue, mme_s6a_send_air(mme_ue,
authentication_failure_parameter); authentication_failure_parameter);
return; return;
default: default:
ogs_error("Unknown EMM_CAUSE{%d] in Authentication" ogs_error("Unknown OGS_NAS_EMM_CAUSE{%d] in Authentication"
" failure", " failure",
authentication_failure->emm_cause); authentication_failure->emm_cause);
break; break;
@@ -837,7 +837,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
ogs_debug("Service request"); ogs_debug("Service request");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -856,8 +856,8 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -866,8 +866,8 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd); ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -917,7 +917,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
ogs_debug("Tracking area update request"); ogs_debug("Tracking area update request");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_tau_reject(mme_ue, nas_eps_send_tau_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED)); OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
case OGS_NAS_EPS_EMM_STATUS: case OGS_NAS_EPS_EMM_STATUS:
@@ -955,8 +955,8 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
ogs_expect(OGS_OK == ogs_expect(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
} else { } else {
rv = nas_eps_send_security_mode_command(mme_ue); rv = nas_eps_send_security_mode_command(mme_ue);
if (rv == OGS_OK) { if (rv == OGS_OK) {
@@ -1008,7 +1008,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
ogs_debug("Service request"); ogs_debug("Service request");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_service_reject(mme_ue, nas_eps_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK)); OGS_NAS_EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -1025,8 +1025,8 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -1035,8 +1035,8 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd); ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -1072,8 +1072,8 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -1082,8 +1082,8 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd); ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }
@@ -1242,8 +1242,8 @@ void emm_state_exception(ogs_fsm_t *s, mme_event_t *e)
ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_error("nas_eps_send_emm_to_esm() failed");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
OGS_FSM_TRAN(s, &emm_state_exception); OGS_FSM_TRAN(s, &emm_state_exception);
break; break;
} }

View File

@@ -174,13 +174,13 @@ ogs_pkbuf_t *esm_build_activate_default_bearer_context_request(
if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) { if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) {
pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4; pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4;
activate_default_eps_bearer_context_request->esm_cause = activate_default_eps_bearer_context_request->esm_cause =
ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED;
activate_default_eps_bearer_context_request->presencemask |= activate_default_eps_bearer_context_request->presencemask |=
OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT;
} else if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) { } else if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) {
pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6; pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6;
activate_default_eps_bearer_context_request->esm_cause = activate_default_eps_bearer_context_request->esm_cause =
ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED;
activate_default_eps_bearer_context_request->presencemask |= activate_default_eps_bearer_context_request->presencemask |=
OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT;
} }
@@ -188,7 +188,7 @@ ogs_pkbuf_t *esm_build_activate_default_bearer_context_request(
if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) { if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV6) {
pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6; pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV6;
activate_default_eps_bearer_context_request->esm_cause = activate_default_eps_bearer_context_request->esm_cause =
ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED;
activate_default_eps_bearer_context_request->presencemask |= activate_default_eps_bearer_context_request->presencemask |=
OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT;
} }
@@ -196,7 +196,7 @@ ogs_pkbuf_t *esm_build_activate_default_bearer_context_request(
if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) { if (session->paa.session_type == OGS_PDU_SESSION_TYPE_IPV4) {
pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4; pdn_address->pdn_type = OGS_PDU_SESSION_TYPE_IPV4;
activate_default_eps_bearer_context_request->esm_cause = activate_default_eps_bearer_context_request->esm_cause =
ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; OGS_NAS_ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED;
activate_default_eps_bearer_context_request->presencemask |= activate_default_eps_bearer_context_request->presencemask |=
OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT;
} }

View File

@@ -67,7 +67,7 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
/* Invalid APN */ /* Invalid APN */
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action));
ogs_warn("Invalid APN[%s]", req->access_point_name.apn); ogs_warn("Invalid APN[%s]", req->access_point_name.apn);
return OGS_ERROR; return OGS_ERROR;
} }
@@ -82,7 +82,7 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
sess->request_type.type, sess->session->session_type); sess->request_type.type, sess->session->session_type);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_UNKNOWN_PDN_TYPE, create_action)); sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE, create_action));
return OGS_ERROR; return OGS_ERROR;
} }
} else { } else {
@@ -139,7 +139,7 @@ int esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
ogs_error("No APN"); ogs_error("No APN");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action)); sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN, create_action));
return OGS_ERROR; return OGS_ERROR;
} }
@@ -185,7 +185,7 @@ int esm_handle_information_response(mme_sess_t *sess,
sess->request_type.type, sess->session->session_type); sess->request_type.type, sess->session->session_type);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_UNKNOWN_PDN_TYPE, sess, OGS_NAS_ESM_CAUSE_UNKNOWN_PDN_TYPE,
OGS_GTP_CREATE_IN_ATTACH_REQUEST)); OGS_GTP_CREATE_IN_ATTACH_REQUEST));
return OGS_ERROR; return OGS_ERROR;
} }
@@ -219,7 +219,7 @@ int esm_handle_information_response(mme_sess_t *sess,
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, ESM_CAUSE_MISSING_OR_UNKNOWN_APN, sess, OGS_NAS_ESM_CAUSE_MISSING_OR_UNKNOWN_APN,
OGS_GTP_CREATE_IN_ATTACH_REQUEST)); OGS_GTP_CREATE_IN_ATTACH_REQUEST));
return OGS_ERROR; return OGS_ERROR;
} }
@@ -241,7 +241,7 @@ int esm_handle_bearer_resource_allocation_request(
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_bearer_resource_allocation_reject( nas_eps_send_bearer_resource_allocation_reject(
mme_ue, sess->pti, ESM_CAUSE_NETWORK_FAILURE)); mme_ue, sess->pti, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
return OGS_OK; return OGS_OK;
} }

View File

@@ -35,13 +35,13 @@
static uint8_t gtp_cause_from_esm(uint8_t esm_cause) static uint8_t gtp_cause_from_esm(uint8_t esm_cause)
{ {
switch (esm_cause) { switch (esm_cause) {
case ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: case OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION: case OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION:
return OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION; return OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION;
case ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS: case OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS:
return OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER; return OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER;
case ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS: case OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS:
return OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER; return OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER;
default: default:
break; break;
@@ -139,8 +139,8 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
ogs_error("[%s] No Integrity Protected", mme_ue->imsi_bcd); ogs_error("[%s] No Integrity Protected", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
ogs_assert(mme_ue->enb_ue); ogs_assert(mme_ue->enb_ue);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
s1ap_send_ue_context_release_command(mme_ue->enb_ue, s1ap_send_ue_context_release_command(mme_ue->enb_ue,
@@ -154,8 +154,8 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd); ogs_warn("[%s] No Security Context", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED, OGS_NAS_EMM_CAUSE_SECURITY_MODE_REJECTED_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
ogs_assert(mme_ue->enb_ue); ogs_assert(mme_ue->enb_ue);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
s1ap_send_ue_context_release_command(mme_ue->enb_ue, s1ap_send_ue_context_release_command(mme_ue->enb_ue,
@@ -232,7 +232,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject(sess, nas_eps_send_pdn_connectivity_reject(sess,
ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED, OGS_NAS_ESM_CAUSE_ESM_INFORMATION_NOT_RECEIVED,
e->create_action)); e->create_action));
} else { } else {
rv = nas_eps_send_esm_information_request(bearer); rv = nas_eps_send_esm_information_request(bearer);

View File

@@ -3113,8 +3113,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
ogs_error("No Bearer : EBI[%d]", ebi); ogs_error("No Bearer : EBI[%d]", ebi);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return NULL; return NULL;
} }
@@ -3125,8 +3125,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
ogs_error("Both PTI[%d] and EBI[%d] are 0", pti, ebi); ogs_error("Both PTI[%d] and EBI[%d] are 0", pti, ebi);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return NULL; return NULL;
} }
@@ -3143,8 +3143,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return NULL; return NULL;
} }
} else if (message->esm.h.message_type == } else if (message->esm.h.message_type ==
@@ -3162,7 +3162,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_bearer_resource_allocation_reject( nas_eps_send_bearer_resource_allocation_reject(
mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); mme_ue, pti,
OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY));
return NULL; return NULL;
} }
@@ -3181,7 +3182,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_bearer_resource_modification_reject( nas_eps_send_bearer_resource_modification_reject(
mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY)); mme_ue, pti,
OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY));
return NULL; return NULL;
} }
} }
@@ -3205,7 +3207,7 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_pdn_connectivity_reject( nas_eps_send_pdn_connectivity_reject(
sess, sess,
ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED, OGS_NAS_ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED,
create_action)); create_action));
ogs_warn("APN duplicated [%s]", ogs_warn("APN duplicated [%s]",
pdn_connectivity_request->access_point_name.apn); pdn_connectivity_request->access_point_name.apn);
@@ -3228,8 +3230,8 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
message->esm.h.message_type, pti); message->esm.h.message_type, pti);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
return NULL; return NULL;
} }
} }

View File

@@ -36,17 +36,17 @@ static uint8_t esm_cause_from_gtp(uint8_t gtp_cause)
{ {
switch (gtp_cause) { switch (gtp_cause) {
case OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND: case OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND:
return ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; return OGS_NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY;
case OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED: case OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED:
return ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED; return OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED;
case OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: case OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
return ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; return OGS_NAS_ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION: case OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION:
return ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION; return OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION;
case OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER: case OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER:
return ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS; return OGS_NAS_ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS;
case OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER: case OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER:
return ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS; return OGS_NAS_ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS;
default: default:
break; break;
} }
@@ -56,7 +56,7 @@ static uint8_t esm_cause_from_gtp(uint8_t gtp_cause)
* OGS_GTP2_CAUSE_MANDATORY_IE_MISSING * OGS_GTP2_CAUSE_MANDATORY_IE_MISSING
* ... * ...
*/ */
return ESM_CAUSE_NETWORK_FAILURE; return OGS_NAS_ESM_CAUSE_NETWORK_FAILURE;
} }
void mme_s11_handle_echo_request( void mme_s11_handle_echo_request(
@@ -140,7 +140,7 @@ void mme_s11_handle_create_session_response(
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
} }
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return; return;
@@ -200,7 +200,7 @@ void mme_s11_handle_create_session_response(
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
} }
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return; return;
@@ -224,7 +224,7 @@ void mme_s11_handle_create_session_response(
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
} }
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return; return;
@@ -244,7 +244,7 @@ void mme_s11_handle_create_session_response(
if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) { if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd); ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue, ogs_assert(OGS_OK == nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_NETWORK_FAILURE, ESM_CAUSE_NETWORK_FAILURE)); OGS_NAS_EMM_CAUSE_NETWORK_FAILURE, OGS_NAS_ESM_CAUSE_NETWORK_FAILURE));
} }
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return; return;
@@ -611,8 +611,8 @@ void mme_s11_handle_delete_session_response(
ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_error("nas_eps_send_emm_to_esm() failed");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
} }
} }
@@ -951,7 +951,8 @@ void mme_s11_handle_update_bearer_request(
/* MME received Bearer Resource Modification Request */ /* MME received Bearer Resource Modification Request */
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_bearer_resource_modification_reject( nas_eps_send_bearer_resource_modification_reject(
mme_ue, sess->pti, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED)); mme_ue, sess->pti,
OGS_NAS_ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED));
} }
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==

View File

@@ -45,18 +45,19 @@ static uint8_t emm_cause_from_diameter(
switch (*dia_exp_err) { switch (*dia_exp_err) {
case OGS_DIAM_S6A_ERROR_USER_UNKNOWN: /* 5001 */ case OGS_DIAM_S6A_ERROR_USER_UNKNOWN: /* 5001 */
ogs_info("[%s] User Unknown in HSS DB", mme_ue->imsi_bcd); ogs_info("[%s] User Unknown in HSS DB", mme_ue->imsi_bcd);
return EMM_CAUSE_PLMN_NOT_ALLOWED; return OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED;
case OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION: /* 5420 */ case OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION: /* 5420 */
/* FIXME: Error diagnostic? */ /* FIXME: Error diagnostic? */
return EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; return OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA;
case OGS_DIAM_S6A_ERROR_RAT_NOT_ALLOWED: /* 5421 */ case OGS_DIAM_S6A_ERROR_RAT_NOT_ALLOWED: /* 5421 */
return EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA; return OGS_NAS_EMM_CAUSE_ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA;
case OGS_DIAM_S6A_ERROR_ROAMING_NOT_ALLOWED: /* 5004 */ case OGS_DIAM_S6A_ERROR_ROAMING_NOT_ALLOWED: /* 5004 */
return EMM_CAUSE_PLMN_NOT_ALLOWED; return OGS_NAS_EMM_CAUSE_PLMN_NOT_ALLOWED;
//return EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN; (ODB_HPLMN_APN) /* return OGS_NAS_EMM_CAUSE_EPS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN;
//return EMM_CAUSE_ESM_FAILURE; (ODB_ALL_APN) * (ODB_HPLMN_APN) */
/* return OGS_NAS_EMM_CAUSE_ESM_FAILURE; (ODB_ALL_APN) */
case OGS_DIAM_S6A_AUTHENTICATION_DATA_UNAVAILABLE: /* 4181 */ case OGS_DIAM_S6A_AUTHENTICATION_DATA_UNAVAILABLE: /* 4181 */
return EMM_CAUSE_NETWORK_FAILURE; return OGS_NAS_EMM_CAUSE_NETWORK_FAILURE;
} }
} }
if (dia_err) { if (dia_err) {
@@ -64,21 +65,21 @@ static uint8_t emm_cause_from_diameter(
case ER_DIAMETER_AUTHORIZATION_REJECTED: /* 5003 */ case ER_DIAMETER_AUTHORIZATION_REJECTED: /* 5003 */
case ER_DIAMETER_UNABLE_TO_DELIVER: /* 3002 */ case ER_DIAMETER_UNABLE_TO_DELIVER: /* 3002 */
case ER_DIAMETER_REALM_NOT_SERVED: /* 3003 */ case ER_DIAMETER_REALM_NOT_SERVED: /* 3003 */
return EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; return OGS_NAS_EMM_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA;
case ER_DIAMETER_UNABLE_TO_COMPLY: /* 5012 */ case ER_DIAMETER_UNABLE_TO_COMPLY: /* 5012 */
case ER_DIAMETER_INVALID_AVP_VALUE: /* 5004 */ case ER_DIAMETER_INVALID_AVP_VALUE: /* 5004 */
case ER_DIAMETER_AVP_UNSUPPORTED: /* 5001 */ case ER_DIAMETER_AVP_UNSUPPORTED: /* 5001 */
case ER_DIAMETER_MISSING_AVP: /* 5005 */ case ER_DIAMETER_MISSING_AVP: /* 5005 */
case ER_DIAMETER_RESOURCES_EXCEEDED: /* 5006 */ case ER_DIAMETER_RESOURCES_EXCEEDED: /* 5006 */
case ER_DIAMETER_AVP_OCCURS_TOO_MANY_TIMES: /* 5009 */ case ER_DIAMETER_AVP_OCCURS_TOO_MANY_TIMES: /* 5009 */
return EMM_CAUSE_NETWORK_FAILURE; return OGS_NAS_EMM_CAUSE_NETWORK_FAILURE;
} }
} }
ogs_error("Unexpected Diameter Result Code %d/%d, defaulting to severe " ogs_error("Unexpected Diameter Result Code %d/%d, defaulting to severe "
"network failure", "network failure",
dia_err ? *dia_err : -1, dia_exp_err ? *dia_exp_err : -1); dia_err ? *dia_err : -1, dia_exp_err ? *dia_exp_err : -1);
return EMM_CAUSE_SEVERE_NETWORK_FAILURE; return OGS_NAS_EMM_CAUSE_SEVERE_NETWORK_FAILURE;
} }
void mme_state_initial(ogs_fsm_t *s, mme_event_t *e) void mme_state_initial(ogs_fsm_t *s, mme_event_t *e)
@@ -455,11 +456,11 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
uint8_t emm_cause = emm_cause_from_diameter( uint8_t emm_cause = emm_cause_from_diameter(
mme_ue, s6a_message->err, s6a_message->exp_err); mme_ue, s6a_message->err, s6a_message->exp_err);
ogs_info("[%s] Attach reject [EMM_CAUSE:%d]", ogs_info("[%s] Attach reject [OGS_NAS_EMM_CAUSE:%d]",
mme_ue->imsi_bcd, emm_cause); mme_ue->imsi_bcd, emm_cause);
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
emm_cause, ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
s1ap_send_ue_context_release_command(enb_ue, s1ap_send_ue_context_release_command(enb_ue,
@@ -486,8 +487,8 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
ogs_error("nas_eps_send_emm_to_esm() failed"); ogs_error("nas_eps_send_emm_to_esm() failed");
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, OGS_NAS_EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
} }
} else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST) { } else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST) {
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==

View File

@@ -301,7 +301,7 @@ int nas_eps_send_pdn_connectivity_reject(
/* During the UE-attach process, we'll send Attach-Reject /* During the UE-attach process, we'll send Attach-Reject
* with pyggybacking PDN-connectivity-Reject */ * with pyggybacking PDN-connectivity-Reject */
rv = nas_eps_send_attach_reject(mme_ue, rv = nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, esm_cause); OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, esm_cause);
ogs_expect(rv == OGS_OK); ogs_expect(rv == OGS_OK);
} else { } else {
esmbuf = esm_build_pdn_connectivity_reject( esmbuf = esm_build_pdn_connectivity_reject(
@@ -450,7 +450,7 @@ int nas_eps_send_deactivate_bearer_context_request(mme_bearer_t *bearer)
ogs_assert(mme_ue); ogs_assert(mme_ue);
esmbuf = esm_build_deactivate_bearer_context_request( esmbuf = esm_build_deactivate_bearer_context_request(
bearer, ESM_CAUSE_REGULAR_DEACTIVATION); bearer, OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ogs_expect_or_return_val(esmbuf, OGS_ERROR); ogs_expect_or_return_val(esmbuf, OGS_ERROR);
s1apbuf = s1ap_build_e_rab_release_command(bearer, esmbuf, s1apbuf = s1ap_build_e_rab_release_command(bearer, esmbuf,

View File

@@ -124,8 +124,8 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
error: error:
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED, OGS_NAS_EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
} }
@@ -205,7 +205,7 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
ogs_assert(OGS_OK == ogs_assert(OGS_OK ==
nas_eps_send_attach_reject(mme_ue, nas_eps_send_attach_reject(mme_ue,
emm_cause, ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED)); emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED));
mme_send_delete_session_or_mme_ue_context_release(mme_ue); mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return; return;

View File

@@ -315,7 +315,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Authentication failure - SYNCH failure */ /* Send Authentication failure - SYNCH failure */
emmbuf = testemm_build_authentication_failure( emmbuf = testemm_build_authentication_failure(
test_ue, EMM_CAUSE_SYNCH_FAILURE, 0x11223344); test_ue, OGS_NAS_EMM_CAUSE_SYNCH_FAILURE, 0x11223344);
ABTS_PTR_NOTNULL(tc, emmbuf); ABTS_PTR_NOTNULL(tc, emmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -329,7 +329,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Authentication failure - MAC failure */ /* Send Authentication failure - MAC failure */
emmbuf = testemm_build_authentication_failure( emmbuf = testemm_build_authentication_failure(
test_ue, EMM_CAUSE_MAC_FAILURE, 0); test_ue, OGS_NAS_EMM_CAUSE_MAC_FAILURE, 0);
ABTS_PTR_NOTNULL(tc, emmbuf); ABTS_PTR_NOTNULL(tc, emmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -388,7 +388,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Authentication failure - MAC failure */ /* Send Authentication failure - MAC failure */
emmbuf = testemm_build_authentication_failure( emmbuf = testemm_build_authentication_failure(
test_ue, EMM_CAUSE_MAC_FAILURE, 0); test_ue, OGS_NAS_EMM_CAUSE_MAC_FAILURE, 0);
ABTS_PTR_NOTNULL(tc, emmbuf); ABTS_PTR_NOTNULL(tc, emmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);

View File

@@ -150,8 +150,8 @@ static void test1_func(abts_case *tc, void *data)
tests1ap_recv(test_ue, recvbuf); tests1ap_recv(test_ue, recvbuf);
/* Send EMM Status */ /* Send EMM Status */
emmbuf = testemm_build_emm_status( emmbuf = testemm_build_emm_status(test_ue,
test_ue, ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE); OGS_NAS_ESM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE);
ABTS_PTR_NOTNULL(tc, emmbuf); ABTS_PTR_NOTNULL(tc, emmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);

View File

@@ -342,7 +342,7 @@ ogs_pkbuf_t *testemm_build_authentication_failure(
authentication_failure->emm_cause = emm_cause; authentication_failure->emm_cause = emm_cause;
if (emm_cause == EMM_CAUSE_SYNCH_FAILURE) { if (emm_cause == OGS_NAS_EMM_CAUSE_SYNCH_FAILURE) {
authentication_failure->presencemask |= authentication_failure->presencemask |=
OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT; OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT;

View File

@@ -175,7 +175,7 @@ static void ogs_nas_eps_message_test4(abts_case *tc, void *data)
memset(&message, 0, sizeof(message)); memset(&message, 0, sizeof(message));
message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
message.emm.h.message_type = OGS_NAS_EPS_ATTACH_REJECT; message.emm.h.message_type = OGS_NAS_EPS_ATTACH_REJECT;
attach_reject->emm_cause = EMM_CAUSE_NETWORK_FAILURE; attach_reject->emm_cause = OGS_NAS_EMM_CAUSE_NETWORK_FAILURE;
pkbuf = ogs_nas_eps_plain_encode(&message); pkbuf = ogs_nas_eps_plain_encode(&message);
ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len); ABTS_INT_EQUAL(tc, sizeof(buffer), pkbuf->len);

View File

@@ -430,7 +430,7 @@ static void test1_func(abts_case *tc, void *data)
sess->pti = 10; sess->pti = 10;
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);

View File

@@ -347,7 +347,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -509,7 +509,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -671,7 +671,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -833,7 +833,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -995,7 +995,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);
@@ -1157,7 +1157,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(bearer); ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request( esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0, bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION); OGS_NAS_ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf); ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf); sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf); ABTS_PTR_NOTNULL(tc, sendbuf);