diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c index c5ecc4d540cd65d6d11980b0a980218973f36259..ab1ccf0ae231e79927ffe8aa2746a0df8c6995aa 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c +++ b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c @@ -235,11 +235,11 @@ int decode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u attach_request->presencemask |= ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT; break; - case ATTACH_REQUEST_OLD_GUTI_TYPE_IEI: - if ((decoded_result = - decode_guti_type(&attach_request->oldgutitype, - ATTACH_REQUEST_OLD_GUTI_TYPE_IEI, - buffer + decoded, len - decoded)) <= 0) + case ATTACH_REQUEST_OLD_GUTI_TYPE_IEI: + if ((decoded_result = + decode_guti_type(&attach_request->oldgutitype, + ATTACH_REQUEST_OLD_GUTI_TYPE_IEI, + buffer + decoded, len - decoded)) <= 0) { // return decoded_result; LOG_FUNC_RETURN(decoded_result); @@ -247,7 +247,22 @@ int decode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u decoded += decoded_result; /* Set corresponding mask to 1 in presencemask */ attach_request->presencemask |= ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT; - break; + break; + + case ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_IEI: + if ((decoded_result = + decode_voice_domain_preference_and_ue_usage_setting(&attach_request->voicedomainpreferenceandueusagesetting, + ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_IEI, + buffer + decoded, len - decoded)) <= 0) + { + // return decoded_result; + LOG_FUNC_RETURN(decoded_result); + } + decoded += decoded_result; + /* Set corresponding mask to 1 in presencemask */ + attach_request->presencemask |= ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT; + break; + default: errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI; @@ -437,14 +452,27 @@ int encode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u if ((attach_request->presencemask & ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT) == ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT) { - if ((encode_result = - encode_guti_type(&attach_request->oldgutitype, - ATTACH_REQUEST_OLD_GUTI_TYPE_IEI, - buffer + encoded, len - encoded)) < 0) - // Return in case of error - return encode_result; - else - encoded += encode_result; + if ((encode_result = + encode_guti_type(&attach_request->oldgutitype, + ATTACH_REQUEST_OLD_GUTI_TYPE_IEI, + buffer + encoded, len - encoded)) < 0) + // Return in case of error + return encode_result; + else + encoded += encode_result; + } + + if ((attach_request->presencemask & ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT) + == ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT) + { + if ((encode_result = + encode_voice_domain_preference_and_ue_usage_setting(&attach_request->voicedomainpreferenceandueusagesetting, + ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_IEI, + buffer + encoded, len - encoded)) < 0) + // Return in case of error + return encode_result; + else + encoded += encode_result; } return encoded; diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h index 076dcf675bf36fc60a766e5215c0b95e35b210c5..fee1473d77b09161e63206ed28ce5000971eca00 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h +++ b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h @@ -49,6 +49,7 @@ #include "SupportedCodecList.h" #include "AdditionalUpdateType.h" #include "GutiType.h" +#include "VoiceDomainPreferenceAndUeUsageSetting.h" #ifndef ATTACH_REQUEST_H_ #define ATTACH_REQUEST_H_ @@ -84,32 +85,34 @@ /* If an optional value is present and should be encoded, the corresponding * Bit mask should be set to 1. */ -# define ATTACH_REQUEST_OLD_PTMSI_SIGNATURE_PRESENT (1<<0) -# define ATTACH_REQUEST_ADDITIONAL_GUTI_PRESENT (1<<1) -# define ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT (1<<2) -# define ATTACH_REQUEST_DRX_PARAMETER_PRESENT (1<<3) -# define ATTACH_REQUEST_MS_NETWORK_CAPABILITY_PRESENT (1<<4) -# define ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<5) -# define ATTACH_REQUEST_TMSI_STATUS_PRESENT (1<<6) -# define ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT (1<<7) -# define ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT (1<<8) -# define ATTACH_REQUEST_SUPPORTED_CODECS_PRESENT (1<<9) -# define ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT (1<<10) -# define ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT (1<<11) +# define ATTACH_REQUEST_OLD_PTMSI_SIGNATURE_PRESENT (1<<0) +# define ATTACH_REQUEST_ADDITIONAL_GUTI_PRESENT (1<<1) +# define ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT (1<<2) +# define ATTACH_REQUEST_DRX_PARAMETER_PRESENT (1<<3) +# define ATTACH_REQUEST_MS_NETWORK_CAPABILITY_PRESENT (1<<4) +# define ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<5) +# define ATTACH_REQUEST_TMSI_STATUS_PRESENT (1<<6) +# define ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT (1<<7) +# define ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT (1<<8) +# define ATTACH_REQUEST_SUPPORTED_CODECS_PRESENT (1<<9) +# define ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT (1<<10) +# define ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT (1<<11) +# define ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT (1<<12) typedef enum attach_request_iei_tag { - ATTACH_REQUEST_OLD_PTMSI_SIGNATURE_IEI = 0x19, /* 0x19 = 25 */ - ATTACH_REQUEST_ADDITIONAL_GUTI_IEI = 0x50, /* 0x50 = 80 */ - ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_IEI = 0x52, /* 0x52 = 82 */ - ATTACH_REQUEST_DRX_PARAMETER_IEI = 0x5C, /* 0x5C = 92 */ - ATTACH_REQUEST_MS_NETWORK_CAPABILITY_IEI = 0x31, /* 0x31 = 49 */ - ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_IEI = 0x13, /* 0x13 = 19 */ - ATTACH_REQUEST_TMSI_STATUS_IEI = 0x90, /* 0x90 = 144 */ - ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_IEI = 0x11, /* 0x11 = 17 */ - ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_IEI = 0x20, /* 0x20 = 32 */ - ATTACH_REQUEST_SUPPORTED_CODECS_IEI = 0x40, /* 0x40 = 64 */ - ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_IEI = 0xF0, /* 0xF0 = 240 */ - ATTACH_REQUEST_OLD_GUTI_TYPE_IEI = 0xE0, /* 0xE0 = 224 */ + ATTACH_REQUEST_OLD_PTMSI_SIGNATURE_IEI = 0x19, /* 0x19 = 25 */ + ATTACH_REQUEST_ADDITIONAL_GUTI_IEI = 0x50, /* 0x50 = 80 */ + ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_IEI = 0x52, /* 0x52 = 82 */ + ATTACH_REQUEST_DRX_PARAMETER_IEI = 0x5C, /* 0x5C = 92 */ + ATTACH_REQUEST_MS_NETWORK_CAPABILITY_IEI = 0x31, /* 0x31 = 49 */ + ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_IEI = 0x13, /* 0x13 = 19 */ + ATTACH_REQUEST_TMSI_STATUS_IEI = 0x90, /* 0x90 = 144 */ + ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_IEI = 0x11, /* 0x11 = 17 */ + ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_IEI = 0x20, /* 0x20 = 32 */ + ATTACH_REQUEST_SUPPORTED_CODECS_IEI = 0x40, /* 0x40 = 64 */ + ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_IEI = 0xF0, /* 0xF0 = 240 */ + ATTACH_REQUEST_OLD_GUTI_TYPE_IEI = 0xE0, /* 0xE0 = 224 */ + ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_IEI = 0x5D, /* 0x5D = 93 */ } attach_request_iei; /* @@ -121,28 +124,29 @@ typedef enum attach_request_iei_tag { typedef struct attach_request_msg_tag { /* Mandatory fields */ - ProtocolDiscriminator protocoldiscriminator:4; - SecurityHeaderType securityheadertype:4; - MessageType messagetype; - EpsAttachType epsattachtype; - NasKeySetIdentifier naskeysetidentifier; - EpsMobileIdentity oldgutiorimsi; - UeNetworkCapability uenetworkcapability; - EsmMessageContainer esmmessagecontainer; + ProtocolDiscriminator protocoldiscriminator:4; + SecurityHeaderType securityheadertype:4; + MessageType messagetype; + EpsAttachType epsattachtype; + NasKeySetIdentifier naskeysetidentifier; + EpsMobileIdentity oldgutiorimsi; + UeNetworkCapability uenetworkcapability; + EsmMessageContainer esmmessagecontainer; /* Optional fields */ - uint32_t presencemask; - PTmsiSignature oldptmsisignature; - EpsMobileIdentity additionalguti; - TrackingAreaIdentity lastvisitedregisteredtai; - DrxParameter drxparameter; - MsNetworkCapability msnetworkcapability; - LocationAreaIdentification oldlocationareaidentification; - TmsiStatus tmsistatus; - MobileStationClassmark2 mobilestationclassmark2; - MobileStationClassmark3 mobilestationclassmark3; - SupportedCodecList supportedcodecs; - AdditionalUpdateType additionalupdatetype; - GutiType oldgutitype; + uint32_t presencemask; + PTmsiSignature oldptmsisignature; + EpsMobileIdentity additionalguti; + TrackingAreaIdentity lastvisitedregisteredtai; + DrxParameter drxparameter; + MsNetworkCapability msnetworkcapability; + LocationAreaIdentification oldlocationareaidentification; + TmsiStatus tmsistatus; + MobileStationClassmark2 mobilestationclassmark2; + MobileStationClassmark3 mobilestationclassmark3; + SupportedCodecList supportedcodecs; + AdditionalUpdateType additionalupdatetype; + GutiType oldgutitype; + VoiceDomainPreferenceAndUeUsageSetting voicedomainpreferenceandueusagesetting; } attach_request_msg; int decode_attach_request(attach_request_msg *attachrequest, uint8_t *buffer, uint32_t len); diff --git a/openair-cn/NAS/Makefile.UE b/openair-cn/NAS/Makefile.UE index 9d97e83c526c54b28d7ede7ed63f2ad8f4c9a359..09b96b3ab294594bae176df3db27f8888bf22b20 100644 --- a/openair-cn/NAS/Makefile.UE +++ b/openair-cn/NAS/Makefile.UE @@ -255,7 +255,8 @@ libnas_ies_OBJS = \ EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.o \ EURECOM-NAS/src/ies/SsCode.o \ EURECOM-NAS/src/ies/DrxParameter.o \ - EURECOM-NAS/src/ies/KsiAndSequenceNumber.o + EURECOM-NAS/src/ies/KsiAndSequenceNumber.o \ + EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.o libnas_utils_OBJS = \ EURECOM-NAS/src/util/device.o \ diff --git a/openair-cn/NAS/Makefile.inc b/openair-cn/NAS/Makefile.inc index 82ad2daf001bc91e23a4c50f5c00d1b59b45dec2..d4518ae5738799c782b09aed80c89ecfc10e30a5 100644 --- a/openair-cn/NAS/Makefile.inc +++ b/openair-cn/NAS/Makefile.inc @@ -393,8 +393,10 @@ libnas_ies_SRCS = \ EURECOM-NAS/src/ies/TmsiStatus.h \ EURECOM-NAS/src/ies/CipheringKeySequenceNumber.h \ EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h \ - EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.h - + EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.h \ + EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c \ + EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h + libnas_utils_SRCS = \ EURECOM-NAS/src/util/nas_log.h \ EURECOM-NAS/src/util/nas_log.c \