update it

This commit is contained in:
Sukchan Lee 2017-04-14 00:17:56 +09:00
parent f19673d935
commit d9114c9702
11 changed files with 369 additions and 6 deletions

View File

@ -26,7 +26,7 @@
/*******************************************************************************
* This file had been created by gtpv2c_tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2017-04-13 13:13:49.622584 by acetcom
* Created on: 2017-04-13 23:45:26.466163 by acetcom
* from 24301-d80.docx
******************************************************************************/
@ -581,6 +581,63 @@ c_int32_t nas_decode_security_mode_reject(nas_message_t *message, pkbuf_t *pkbuf
return decoded;
}
c_int32_t nas_decode_emm_information(nas_message_t *message, pkbuf_t *pkbuf)
{
nas_emm_information_t *emm_information = &message->emm.emm_information;
c_int32_t decoded = 0;
c_int32_t size = 0;
while(pkbuf->len > 0)
{
c_uint8_t *buffer = pkbuf->payload;
c_uint8_t type = (*buffer) >= 0x80 ? ((*buffer) & 0xf0) : (*buffer);
size = sizeof(c_uint8_t);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1,
"pkbuf_header error");
decoded += size;
switch(type)
{
case NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_TYPE:
size = nas_decode_network_name(&emm_information->full_name_for_network, pkbuf);
d_assert(size >= 0, return -1, "decode failed");
emm_information->presencemask |= NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_PRESENT;
decoded += size;
break;
case NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_TYPE:
size = nas_decode_network_name(&emm_information->short_name_for_network, pkbuf);
d_assert(size >= 0, return -1, "decode failed");
emm_information->presencemask |= NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_PRESENT;
decoded += size;
break;
case NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_TYPE:
size = nas_decode_time_zone(&emm_information->local_time_zone, pkbuf);
d_assert(size >= 0, return -1, "decode failed");
emm_information->presencemask |= NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_PRESENT;
decoded += size;
break;
case NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_TYPE:
size = nas_decode_time_zone_and_time(&emm_information->universal_time_and_local_time_zone, pkbuf);
d_assert(size >= 0, return -1, "decode failed");
emm_information->presencemask |= NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT;
decoded += size;
break;
case NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_TYPE:
size = nas_decode_daylight_saving_time(&emm_information->network_daylight_saving_time, pkbuf);
d_assert(size >= 0, return -1, "decode failed");
emm_information->presencemask |= NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT;
decoded += size;
break;
default:
d_error("Unknown type(0x%x) or not implemented\n", type);
return -1;
}
}
return decoded;
}
c_int32_t nas_decode_activate_default_eps_bearer_context_request(nas_message_t *message, pkbuf_t *pkbuf)
{
nas_activate_default_eps_bearer_context_request_t *activate_default_eps_bearer_context_request = &message->esm.activate_default_eps_bearer_context_request;
@ -1138,6 +1195,11 @@ status_t nas_emm_decode(nas_message_t *message, pkbuf_t *pkbuf)
d_assert(size >= CORE_OK, return CORE_ERROR, "decode error");
decoded += size;
break;
case NAS_EMM_INFORMATION:
size = nas_decode_emm_information(message, pkbuf);
d_assert(size >= CORE_OK, return CORE_ERROR, "decode error");
decoded += size;
break;
default:
d_error("Unknown message type (0x%x) or not implemented",
message->emm.h.message_type);

View File

@ -26,7 +26,7 @@
/*******************************************************************************
* This file had been created by gtpv2c_tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2017-04-13 13:13:49.632842 by acetcom
* Created on: 2017-04-13 23:45:26.477904 by acetcom
* from 24301-d80.docx
******************************************************************************/
@ -662,6 +662,70 @@ c_int32_t nas_encode_security_mode_reject(pkbuf_t *pkbuf, nas_message_t *message
return encoded;
}
c_int32_t nas_encode_emm_information(pkbuf_t *pkbuf, nas_message_t *message)
{
nas_emm_information_t *emm_information = &message->emm.emm_information;
c_int32_t encoded = 0;
c_int32_t size = 0;
if (emm_information->presencemask & NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_PRESENT)
{
size = nas_encode_optional_type(pkbuf, NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_TYPE);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
size = nas_encode_network_name(pkbuf, &emm_information->full_name_for_network);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
}
if (emm_information->presencemask & NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_PRESENT)
{
size = nas_encode_optional_type(pkbuf, NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_TYPE);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
size = nas_encode_network_name(pkbuf, &emm_information->short_name_for_network);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
}
if (emm_information->presencemask & NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_PRESENT)
{
size = nas_encode_optional_type(pkbuf, NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_TYPE);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
size = nas_encode_time_zone(pkbuf, &emm_information->local_time_zone);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
}
if (emm_information->presencemask & NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT)
{
size = nas_encode_optional_type(pkbuf, NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_TYPE);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
size = nas_encode_time_zone_and_time(pkbuf, &emm_information->universal_time_and_local_time_zone);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
}
if (emm_information->presencemask & NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT)
{
size = nas_encode_optional_type(pkbuf, NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_TYPE);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
size = nas_encode_daylight_saving_time(pkbuf, &emm_information->network_daylight_saving_time);
d_assert(size >= 0, return encoded, "decode failed");
encoded += size;
}
return encoded;
}
c_int32_t nas_encode_activate_default_eps_bearer_context_request(pkbuf_t *pkbuf, nas_message_t *message)
{
nas_activate_default_eps_bearer_context_request_t *activate_default_eps_bearer_context_request = &message->esm.activate_default_eps_bearer_context_request;
@ -1256,6 +1320,11 @@ status_t nas_emm_encode(pkbuf_t **pkbuf, nas_message_t *message)
d_assert(size >= 0, return CORE_ERROR, "decode error");
encoded += size;
break;
case NAS_EMM_INFORMATION:
size = nas_encode_emm_information(*pkbuf, message);
d_assert(size >= 0, return CORE_ERROR, "decode error");
encoded += size;
break;
default:
d_error("Unknown message type (0x%x) or not implemented",
message->emm.h.message_type);

View File

@ -26,7 +26,7 @@
/*******************************************************************************
* This file had been created by gtpv2c_tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2017-04-13 13:13:49.598913 by acetcom
* Created on: 2017-04-13 23:45:26.441509 by acetcom
* from 24301-d80.docx
******************************************************************************/
@ -712,6 +712,34 @@ c_int16_t nas_encode_security_algorithms(pkbuf_t *pkbuf, nas_security_algorithms
return size;
}
/* 9.9.3.24 Network name
* O TLV 3-n */
c_int16_t nas_decode_network_name(nas_network_name_t *network_name, pkbuf_t *pkbuf)
{
c_uint16_t size = 0;
nas_network_name_t *source = pkbuf->payload;
network_name->length = source->length;
size = network_name->length + sizeof(network_name->length);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(network_name, pkbuf->payload - size, size);
return size;
}
c_int16_t nas_encode_network_name(pkbuf_t *pkbuf, nas_network_name_t *network_name)
{
c_uint16_t size = network_name->length + sizeof(network_name->length);
nas_network_name_t target;
memcpy(&target, network_name, sizeof(nas_network_name_t));
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(pkbuf->payload - size, &target, size);
return size;
}
/* 9.9.3.24A Network resource identifier container
* O TLV 4 */
c_int16_t nas_decode_network_resource_identifier_container(nas_network_resource_identifier_container_t *network_resource_identifier_container, pkbuf_t *pkbuf)
@ -815,6 +843,30 @@ c_int16_t nas_encode_extended_emm_cause(pkbuf_t *pkbuf, nas_extended_emm_cause_t
return size;
}
/* 9.9.3.29 Time zone
* O TV 2 */
c_int16_t nas_decode_time_zone(nas_time_zone_t *time_zone, pkbuf_t *pkbuf)
{
c_uint16_t size = sizeof(nas_time_zone_t);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(time_zone, pkbuf->payload - size, size);
return size;
}
c_int16_t nas_encode_time_zone(pkbuf_t *pkbuf, nas_time_zone_t *time_zone)
{
c_uint16_t size = sizeof(nas_time_zone_t);
nas_time_zone_t target;
memcpy(&target, time_zone, size);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(pkbuf->payload - size, &target, size);
return size;
}
/* 9.9.3.3 Authentication parameter RAND
* M V 16 */
c_int16_t nas_decode_authentication_parameter_rand(nas_authentication_parameter_rand_t *authentication_parameter_rand, pkbuf_t *pkbuf)
@ -839,6 +891,30 @@ c_int16_t nas_encode_authentication_parameter_rand(pkbuf_t *pkbuf, nas_authentic
return size;
}
/* 9.9.3.30 Time zone and time
* O TV 8 */
c_int16_t nas_decode_time_zone_and_time(nas_time_zone_and_time_t *time_zone_and_time, pkbuf_t *pkbuf)
{
c_uint16_t size = sizeof(nas_time_zone_and_time_t);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(time_zone_and_time, pkbuf->payload - size, size);
return size;
}
c_int16_t nas_encode_time_zone_and_time(pkbuf_t *pkbuf, nas_time_zone_and_time_t *time_zone_and_time)
{
c_uint16_t size = sizeof(nas_time_zone_and_time_t);
nas_time_zone_and_time_t target;
memcpy(&target, time_zone_and_time, size);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(pkbuf->payload - size, &target, size);
return size;
}
/* 9.9.3.31 TMSI status
* O TV 1 */
c_int16_t nas_decode_tmsi_status(nas_tmsi_status_t *tmsi_status, pkbuf_t *pkbuf)
@ -1129,6 +1205,34 @@ c_int16_t nas_encode_extended_drx_parameters(pkbuf_t *pkbuf, nas_extended_drx_pa
return size;
}
/* 9.9.3.6 Daylight saving time
* O TLV 3 */
c_int16_t nas_decode_daylight_saving_time(nas_daylight_saving_time_t *daylight_saving_time, pkbuf_t *pkbuf)
{
c_uint16_t size = 0;
nas_daylight_saving_time_t *source = pkbuf->payload;
daylight_saving_time->length = source->length;
size = daylight_saving_time->length + sizeof(daylight_saving_time->length);
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(daylight_saving_time, pkbuf->payload - size, size);
return size;
}
c_int16_t nas_encode_daylight_saving_time(pkbuf_t *pkbuf, nas_daylight_saving_time_t *daylight_saving_time)
{
c_uint16_t size = daylight_saving_time->length + sizeof(daylight_saving_time->length);
nas_daylight_saving_time_t target;
memcpy(&target, daylight_saving_time, sizeof(nas_daylight_saving_time_t));
d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error");
memcpy(pkbuf->payload - size, &target, size);
return size;
}
/* 9.9.3.8 DRX parameter
* O TV 3 */
c_int16_t nas_decode_drx_parameter(nas_drx_parameter_t *drx_parameter, pkbuf_t *pkbuf)

View File

@ -26,7 +26,7 @@
/*******************************************************************************
* This file had been created by gtpv2c_tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2017-04-13 13:13:49.594439 by acetcom
* Created on: 2017-04-13 23:45:26.436258 by acetcom
* from 24301-d80.docx
******************************************************************************/
@ -67,11 +67,14 @@ CORE_DECLARE(c_int16_t) nas_decode_ms_network_capability(nas_ms_network_capabili
CORE_DECLARE(c_int16_t) nas_decode_ms_network_feature_support(nas_ms_network_feature_support_t *ms_network_feature_support, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_key_set_identifier(nas_key_set_identifier_t *key_set_identifier, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_security_algorithms(nas_security_algorithms_t *security_algorithms, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_network_name(nas_network_name_t *network_name, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_network_resource_identifier_container(nas_network_resource_identifier_container_t *network_resource_identifier_container, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_nonce(nas_nonce_t *nonce, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_p_tmsi_signature(nas_p_tmsi_signature_t *p_tmsi_signature, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_extended_emm_cause(nas_extended_emm_cause_t *extended_emm_cause, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_time_zone(nas_time_zone_t *time_zone, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_authentication_parameter_rand(nas_authentication_parameter_rand_t *authentication_parameter_rand, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_time_zone_and_time(nas_time_zone_and_time_t *time_zone_and_time, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_tmsi_status(nas_tmsi_status_t *tmsi_status, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_tracking_area_identity(nas_tracking_area_identity_t *tracking_area_identity, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_tracking_area_identity_list(nas_tracking_area_identity_list_t *tracking_area_identity_list, pkbuf_t *pkbuf);
@ -82,6 +85,7 @@ CORE_DECLARE(c_int16_t) nas_decode_authentication_response_parameter(nas_authent
CORE_DECLARE(c_int16_t) nas_decode_voice_domain_preference_and_ue_usage_setting(nas_voice_domain_preference_and_ue_usage_setting_t *voice_domain_preference_and_ue_usage_setting, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_guti_type(nas_guti_type_t *guti_type, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_extended_drx_parameters(nas_extended_drx_parameters_t *extended_drx_parameters, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_daylight_saving_time(nas_daylight_saving_time_t *daylight_saving_time, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_drx_parameter(nas_drx_parameter_t *drx_parameter, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_emm_cause(nas_emm_cause_t *emm_cause, pkbuf_t *pkbuf);
CORE_DECLARE(c_int16_t) nas_decode_access_point_name(nas_access_point_name_t *access_point_name, pkbuf_t *pkbuf);
@ -132,11 +136,14 @@ CORE_DECLARE(c_int16_t) nas_encode_ms_network_capability(pkbuf_t *pkbuf, nas_ms_
CORE_DECLARE(c_int16_t) nas_encode_ms_network_feature_support(pkbuf_t *pkbuf, nas_ms_network_feature_support_t *ms_network_feature_support);
CORE_DECLARE(c_int16_t) nas_encode_key_set_identifier(pkbuf_t *pkbuf, nas_key_set_identifier_t *key_set_identifier);
CORE_DECLARE(c_int16_t) nas_encode_security_algorithms(pkbuf_t *pkbuf, nas_security_algorithms_t *security_algorithms);
CORE_DECLARE(c_int16_t) nas_encode_network_name(pkbuf_t *pkbuf, nas_network_name_t *network_name);
CORE_DECLARE(c_int16_t) nas_encode_network_resource_identifier_container(pkbuf_t *pkbuf, nas_network_resource_identifier_container_t *network_resource_identifier_container);
CORE_DECLARE(c_int16_t) nas_encode_nonce(pkbuf_t *pkbuf, nas_nonce_t *nonce);
CORE_DECLARE(c_int16_t) nas_encode_p_tmsi_signature(pkbuf_t *pkbuf, nas_p_tmsi_signature_t *p_tmsi_signature);
CORE_DECLARE(c_int16_t) nas_encode_extended_emm_cause(pkbuf_t *pkbuf, nas_extended_emm_cause_t *extended_emm_cause);
CORE_DECLARE(c_int16_t) nas_encode_time_zone(pkbuf_t *pkbuf, nas_time_zone_t *time_zone);
CORE_DECLARE(c_int16_t) nas_encode_authentication_parameter_rand(pkbuf_t *pkbuf, nas_authentication_parameter_rand_t *authentication_parameter_rand);
CORE_DECLARE(c_int16_t) nas_encode_time_zone_and_time(pkbuf_t *pkbuf, nas_time_zone_and_time_t *time_zone_and_time);
CORE_DECLARE(c_int16_t) nas_encode_tmsi_status(pkbuf_t *pkbuf, nas_tmsi_status_t *tmsi_status);
CORE_DECLARE(c_int16_t) nas_encode_tracking_area_identity(pkbuf_t *pkbuf, nas_tracking_area_identity_t *tracking_area_identity);
CORE_DECLARE(c_int16_t) nas_encode_tracking_area_identity_list(pkbuf_t *pkbuf, nas_tracking_area_identity_list_t *tracking_area_identity_list);
@ -147,6 +154,7 @@ CORE_DECLARE(c_int16_t) nas_encode_authentication_response_parameter(pkbuf_t *pk
CORE_DECLARE(c_int16_t) nas_encode_voice_domain_preference_and_ue_usage_setting(pkbuf_t *pkbuf, nas_voice_domain_preference_and_ue_usage_setting_t *voice_domain_preference_and_ue_usage_setting);
CORE_DECLARE(c_int16_t) nas_encode_guti_type(pkbuf_t *pkbuf, nas_guti_type_t *guti_type);
CORE_DECLARE(c_int16_t) nas_encode_extended_drx_parameters(pkbuf_t *pkbuf, nas_extended_drx_parameters_t *extended_drx_parameters);
CORE_DECLARE(c_int16_t) nas_encode_daylight_saving_time(pkbuf_t *pkbuf, nas_daylight_saving_time_t *daylight_saving_time);
CORE_DECLARE(c_int16_t) nas_encode_drx_parameter(pkbuf_t *pkbuf, nas_drx_parameter_t *drx_parameter);
CORE_DECLARE(c_int16_t) nas_encode_emm_cause(pkbuf_t *pkbuf, nas_emm_cause_t *emm_cause);
CORE_DECLARE(c_int16_t) nas_encode_access_point_name(pkbuf_t *pkbuf, nas_access_point_name_t *access_point_name);

View File

@ -26,7 +26,7 @@
/*******************************************************************************
* This file had been created by gtpv2c_tlv.py script v0.1.0
* Please do not modify this file but regenerate it via script.
* Created on: 2017-04-13 13:13:49.611974 by acetcom
* Created on: 2017-04-13 23:45:26.454842 by acetcom
* from 24301-d80.docx
******************************************************************************/
@ -400,6 +400,32 @@ typedef struct _nas_security_mode_reject_t {
} nas_security_mode_reject_t;
/*******************************************************
* EMM INFORMATION
******************************************************/
#define NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_PRESENT (1<<0)
#define NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_PRESENT (1<<1)
#define NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_PRESENT (1<<2)
#define NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT (1<<3)
#define NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT (1<<4)
#define NAS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_TYPE 0x43
#define NAS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_TYPE 0x45
#define NAS_EMM_INFORMATION_LOCAL_TIME_ZONE_TYPE 0x46
#define NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_TYPE 0x47
#define NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_TYPE 0x49
typedef struct _nas_emm_information_t {
/* Optional fields */
c_uint32_t presencemask;
nas_network_name_t full_name_for_network;
nas_network_name_t short_name_for_network;
nas_time_zone_t local_time_zone;
nas_time_zone_and_time_t universal_time_and_local_time_zone;
nas_daylight_saving_time_t network_daylight_saving_time;
} nas_emm_information_t;
/*******************************************************
* ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST
******************************************************/
@ -631,6 +657,7 @@ typedef struct _nas_emm_message_t {
nas_security_mode_command_t security_mode_command;
nas_security_mode_complete_t security_mode_complete;
nas_security_mode_reject_t security_mode_reject;
nas_emm_information_t emm_information;
};
} nas_emm_message_t;

View File

@ -226,6 +226,18 @@ ED3(c_uint8_t cn_specific_drx_cycle_length_coefficient_and_drx_value_for_s1_mode
c_uint8_t non_DRX_timer:3;)
} __attribute__ ((packed)) nas_drx_parameter_t;
/* 9.9.3.6 Daylight saving time
* See subclause 10.5.3.12 in 3GPP TS 24.008 [13].
* O TLV 3 */
#define NAS_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME 0
#define NAS_PLUS_1_HOUR_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME 1
#define NAS_PLUS_2_HOURS_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME 2
typedef struct _nas_daylight_saving_time_t {
c_uint8_t length;
ED2(c_uint8_t spare:6;,
c_uint8_t value:2;)
} __attribute__ ((packed)) nas_daylight_saving_time_t;
/* 9.9.3.9 EMM cause
* O TV 2
* Annex A (informative):Cause values for EPS mobility management
@ -488,6 +500,19 @@ ED4(c_uint8_t spare1:1;,
c_uint8_t type_of_integrity_protection_algorithm:3;)
} __attribute__ ((packed)) nas_security_algorithms_t;
/* 9.9.3.24 Network name
* See subclause 10.5.3.5a in 3GPP TS 24.008 [13].
* O TLV 3-n */
#define NAS_MAX_NETWORK_NAME_LEN 255
typedef struct _nas_network_name_t {
c_uint8_t length;
ED4(c_uint8_t ext:1;,
c_uint8_t coding_scheme:3;,
c_uint8_t add_ci:1;,
c_uint8_t number_of_spare_bits_in_last_octet:3;)
c_uint8_t name[NAS_MAX_NETWORK_NAME_LEN];
} __attribute__ ((packed)) nas_network_name_t;
/* 9.9.3.24A Network resource identifier container
* See subclause 10.5.5.31 in 3GPP TS 24.008 [13].
* O TLV 4 */
@ -516,6 +541,24 @@ ED4(c_uint8_t type:4;,
c_uint8_t e_utran_allowed:1;)
} nas_extended_emm_cause_t;
/* 9.9.3.29 Time zone
* See subclause 10.5.3.8 in 3GPP TS 24.008 [13].
* O TV 2 */
typedef c_uint8_t nas_time_zone_t;
/* 9.9.3.30 Time zone and time
* See subclause 10.5.3.9 in 3GPP TS 24.008 [13].
* O TV 8 */
typedef struct _nas_time_zone_and_time_t {
c_uint8_t year;
c_uint8_t month;
c_uint8_t day;
c_uint8_t hour;
c_uint8_t minute;
c_uint8_t second;
c_uint8_t time_zone;
} nas_time_zone_and_time_t;
/* 9.9.3.31 TMSI status
* See subclause 10.5.5.4 in 3GPP TS 24.008 [13]
* O TV 1 */

Binary file not shown.

7
lib/nas/support/cache/nas_msg_97.py vendored Normal file
View File

@ -0,0 +1,7 @@
ies = []
ies.append({ "iei" : "43", "value" : "Full name for network", "type" : "Network name", "reference" : "9.9.3.24", "presence" : "O", "format" : "TLV", "length" : "3-n"})
ies.append({ "iei" : "45", "value" : "Short name for network", "type" : "Network name", "reference" : "9.9.3.24", "presence" : "O", "format" : "TLV", "length" : "3-n"})
ies.append({ "iei" : "46", "value" : "Local time zone", "type" : "Time zone", "reference" : "9.9.3.29", "presence" : "O", "format" : "TV", "length" : "2"})
ies.append({ "iei" : "47", "value" : "Universal time and local time zone", "type" : "Time zone and time", "reference" : "9.9.3.30", "presence" : "O", "format" : "TV", "length" : "8"})
ies.append({ "iei" : "49", "value" : "Network daylight saving time", "type" : "Daylight saving time", "reference" : "9.9.3.6", "presence" : "O", "format" : "TLV", "length" : "3"})
msg_list[key]["ies"] = ies

View File

@ -216,6 +216,7 @@ msg_list["AUTHENTICATION FAILURE"]["table"] = 4
msg_list["AUTHENTICATION REJECT"]["table"] = 5
msg_list["AUTHENTICATION REQUEST"]["table"] = 6
msg_list["AUTHENTICATION RESPONSE"]["table"] = 7
msg_list["EMM INFORMATION"]["table"] = 14
msg_list["IDENTITY REQUEST"]["table"] = 19
msg_list["IDENTITY RESPONSE"]["table"] = 20
msg_list["SECURITY MODE COMMAND"]["table"] = 21

View File

@ -267,8 +267,50 @@ void emm_handle_lo_create_session(mme_bearer_t *bearer)
void emm_handle_attach_complete(
mme_ue_t *ue, nas_attach_complete_t *attach_complete)
{
status_t rv;
mme_enb_t *enb = NULL;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
nas_message_t message;
nas_emm_information_t *emm_information = &message.emm.emm_information;
nas_time_zone_and_time_t *universal_time_and_local_time_zone =
&emm_information->universal_time_and_local_time_zone;
nas_daylight_saving_time_t *network_daylight_saving_time =
&emm_information->network_daylight_saving_time;
d_assert(ue, return, "Null param");
enb = ue->enb;
d_assert(enb, return, "Null param");
emm_handle_esm_message_container(
ue, &attach_complete->esm_message_container);
memset(&message, 0, sizeof(message));
message.h.security_header_type =
NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
message.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
message.emm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
message.emm.h.message_type = NAS_EMM_INFORMATION;
emm_information->presencemask |=
NAS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT;
universal_time_and_local_time_zone->year = 0;
emm_information->presencemask |=
NAS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT;
network_daylight_saving_time->length = 1;
d_info("[NAS] EMM information : UE[%s] <-- EMM",
ue->imsi_bcd);
rv = nas_security_encode(&emmbuf, ue, &message);
d_assert(rv == CORE_OK && emmbuf, return, "emm build error");
d_print_hex(emmbuf->payload, emmbuf->len);
rv = s1ap_build_downlink_nas_transport(&s1apbuf, ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_print_hex(s1apbuf->payload, s1apbuf->len);
d_assert(s1ap_send_to_enb(enb, s1apbuf) == CORE_OK,, "s1ap send error");
}

View File

@ -144,7 +144,7 @@ static void nas_sm_test1(abts_case *tc, void *data)
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
core_sleep(time_from_msec(300));
core_sleep(time_from_msec(1300));
d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_ERROR);
/* eNB disonncect from MME */