From d2446308c87aa35bfbd95602b297880eb6f17c5f Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 20 Mar 2017 17:07:27 +0900 Subject: [PATCH] update it --- lib/nas/nas_encoder.c | 2 +- lib/nas/nas_ies.c | 31 ++++++++++++++++++++++++----- lib/nas/nas_ies.h | 19 ++++++++++++++---- lib/nas/nas_message.h | 7 ++----- lib/nas/support/cache/nas_msg_65.py | 2 +- lib/nas/support/cache/nas_msg_66.py | 19 ++++++++++++++++++ lib/nas/support/nas_message.py | 14 ++++++++----- test/nas_message_test.c | 2 +- 8 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 lib/nas/support/cache/nas_msg_66.py diff --git a/lib/nas/nas_encoder.c b/lib/nas/nas_encoder.c index 724259fd91..f4fc7e428a 100644 --- a/lib/nas/nas_encoder.c +++ b/lib/nas/nas_encoder.c @@ -9,7 +9,7 @@ c_int32_t nas_encode_attach_accept(pkbuf_t *pkbuf, nas_message_t *message) c_int32_t size = 0; c_int32_t encoded = 0; - size = nas_encode_attach_result(pkbuf, &attach_accept->attach_result); + size = nas_encode_eps_attach_result(pkbuf, &attach_accept->eps_attach_result); d_assert(size >= 0, return encoded, "decode failed"); encoded += size; diff --git a/lib/nas/nas_ies.c b/lib/nas/nas_ies.c index 80d20750ff..3eb4a30f09 100644 --- a/lib/nas/nas_ies.c +++ b/lib/nas/nas_ies.c @@ -344,17 +344,17 @@ c_int32_t nas_decode_emm_cause(nas_emm_cause_t *emm_cause, pkbuf_t *pkbuf) /* 9.9.3.10 * EPS attach result * M V 1/2 */ -c_int32_t nas_encode_attach_result( - pkbuf_t *pkbuf, nas_attach_result_t *attach_result) +c_int32_t nas_encode_eps_attach_result( + pkbuf_t *pkbuf, nas_eps_attach_result_t *eps_attach_result) { c_uint16_t size = 0; - d_assert(attach_result, return -1, "Null param"); + d_assert(eps_attach_result, return -1, "Null param"); - size = sizeof(nas_attach_result_t); + size = sizeof(nas_eps_attach_result_t); d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, return -1, "pkbuf_header error"); - memcpy(pkbuf->payload - size, attach_result, size); + memcpy(pkbuf->payload - size, eps_attach_result, size); return size; } @@ -853,6 +853,27 @@ c_int32_t nas_encode_ue_security_capability( return size; } +/* TODO : 9.9.3.37 Emergency number list + * See subclause 10.5.3.13 in 3GPP TS 24.008 [13]. + * O TLV 5-50 */ +c_int32_t nas_encode_emergency_number_list( + pkbuf_t *pkbuf, nas_emergency_number_list_t *emergency_number_list) +{ + c_uint16_t size = 0; + nas_emergency_number_list_t target; + + d_assert(emergency_number_list, return -1, "Null param"); + memcpy(&target, emergency_number_list, sizeof(nas_emergency_number_list_t)); + + size = emergency_number_list->length + sizeof(emergency_number_list->length); + d_assert(pkbuf_header(pkbuf, -size) == CORE_OK, + return -1, "pkbuf_header error"); + + memcpy(pkbuf->payload - size, &target, size); + + return size; +} + /* 9.9.3.44 Voice domain preference and UE's usage setting * See subclause 10.5.5.28 in 3GPP TS 24.008 [13]. * O TLV 3 */ diff --git a/lib/nas/nas_ies.h b/lib/nas/nas_ies.h index 269a48a104..39ddec54c3 100644 --- a/lib/nas/nas_ies.h +++ b/lib/nas/nas_ies.h @@ -342,13 +342,13 @@ CORE_DECLARE(c_int32_t) nas_decode_emm_cause( * M V 1/2 */ #define NAS_ATTACH_RESULT_EPS_ONLY 1 #define NAS_ATTACH_RESULT_COMBINED_EPS_IMSI_ATTACH 2 -typedef struct _nas_attach_result_t { +typedef struct _nas_eps_attach_result_t { ED2(c_uint8_t spare:5;, c_uint8_t result:3;) -} __attribute__ ((packed)) nas_attach_result_t; +} __attribute__ ((packed)) nas_eps_attach_result_t; -CORE_DECLARE(c_int32_t) nas_encode_attach_result( - pkbuf_t *pkbuf, nas_attach_result_t *attach_result); +CORE_DECLARE(c_int32_t) nas_encode_eps_attach_result( + pkbuf_t *pkbuf, nas_eps_attach_result_t *eps_attach_result); /* 9.9.3.11 EPS attach type * M V 1/2 @@ -839,6 +839,17 @@ typedef struct _nas_ue_security_capability_t { CORE_DECLARE(c_int32_t) nas_encode_ue_security_capability( pkbuf_t *pkbuf, nas_ue_security_capability_t *ue_security_capability); +/* TODO : 9.9.3.37 Emergency number list + * See subclause 10.5.3.13 in 3GPP TS 24.008 [13]. + * O TLV 5-50 */ +typedef struct _nas_emergency_number_list_t { + c_uint16_t length; + c_uint8_t todo[48]; +} __attribute__ ((packed)) nas_emergency_number_list_t; + +CORE_DECLARE(c_int32_t) nas_encode_emergency_number_list( + pkbuf_t *pkbuf, nas_emergency_number_list_t *emergency_number_list); + /* 9.9.3.44 Voice domain preference and UE's usage setting * See subclause 10.5.5.28 in 3GPP TS 24.008 [13]. * O TLV 3 */ diff --git a/lib/nas/nas_message.h b/lib/nas/nas_message.h index b080b7829d..e9a24ee320 100644 --- a/lib/nas/nas_message.h +++ b/lib/nas/nas_message.h @@ -123,7 +123,7 @@ ED2(c_uint8_t security_header_type:4;, typedef struct _nas_attach_accept_t { /* Mandatory fields */ - nas_attach_result_t attach_result; + nas_eps_attach_result_t eps_attach_result; nas_gprs_timer_t t3412_value; nas_tracking_area_identity_list_t tai_list; nas_esm_message_container_t esm_message_container; @@ -138,10 +138,7 @@ typedef struct _nas_attach_accept_t { nas_gprs_timer_t t3423_value; nas_plmn_list_t equivalent_plmns; - /* 9.9.3.37 Emergency number list - * See subclause 10.5.3.13 in 3GPP TS 24.008 [13]. - * O TLV 5-50 - nas_emergency_number_list_t emergency_number_list; */ + nas_emergency_number_list_t emergency_number_list; nas_eps_network_feature_support_t eps_network_feature_support; nas_additional_update_result_t additional_update_result; nas_gprs_timer_3_t t3412_extended_value; diff --git a/lib/nas/support/cache/nas_msg_65.py b/lib/nas/support/cache/nas_msg_65.py index 21558d4b84..949bb3b9cb 100644 --- a/lib/nas/support/cache/nas_msg_65.py +++ b/lib/nas/support/cache/nas_msg_65.py @@ -14,7 +14,7 @@ ies.append({ "iei" : "11", "value" : "Mobile station classmark 2", "type" : "Mob ies.append({ "iei" : "20", "value" : "Mobile station classmark 3", "type" : "Mobile station classmark 3", "reference" : "Mobile station classmark 39.9.2.5", "presence" : "O", "format" : "TLV", "length" : "2-34"}) ies.append({ "iei" : "40", "value" : "Supported Codecs", "type" : "Supported Codec List", "reference" : "9.9.2.10", "presence" : "O", "format" : "TLV", "length" : "5-n"}) ies.append({ "iei" : "F-", "value" : "Additional update type", "type" : "Additional update type", "reference" : "9.9.3.0B", "presence" : "O", "format" : "TV", "length" : "1"}) -ies.append({ "iei" : "5D", "value" : "Voice domain preference and UE's usage setting", "type" : "Voice domain preference and UE usage setting", "reference" : "Voice domain preference and UE'9.9.3.44", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "5D", "value" : "Voice domain preference and UE usage setting", "type" : "Voice domain preference and UE usage setting", "reference" : "Voice domain preference and UE'9.9.3.44", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "D-", "value" : "Device properties", "type" : "Device properties", "reference" : "9.9.2.0A", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "E-", "value" : "Old GUTI type", "type" : "GUTI type", "reference" : "9.9.3.45", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "C- ", "value" : "MS network feature support", "type" : "MS network feature support", "reference" : "9.9.3.20A", "presence" : "O", "format" : "TV", "length" : "1"}) diff --git a/lib/nas/support/cache/nas_msg_66.py b/lib/nas/support/cache/nas_msg_66.py new file mode 100644 index 0000000000..a459880dae --- /dev/null +++ b/lib/nas/support/cache/nas_msg_66.py @@ -0,0 +1,19 @@ +ies = [] +ies.append({ "iei" : "", "value" : "EPS attach result", "type" : "EPS attach result", "reference" : "9.9.3.10", "presence" : "M", "format" : "V", "length" : "1/2"}) +ies.append({ "iei" : "", "value" : "T3412 value", "type" : "GPRS timer", "reference" : "9.9.3.16", "presence" : "M", "format" : "V", "length" : "1"}) +ies.append({ "iei" : "", "value" : "TAI list", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "M", "format" : "LV", "length" : "7-97"}) +ies.append({ "iei" : "", "value" : "ESM message container", "type" : "ESM message container", "reference" : "9.9.3.15", "presence" : "M", "format" : "LV-E", "length" : "5-n"}) +ies.append({ "iei" : "50", "value" : "GUTI", "type" : "EPS mobile identity", "reference" : "9.9.3.12", "presence" : "O", "format" : "TLV", "length" : "13"}) +ies.append({ "iei" : "13", "value" : "Location area identification", "type" : "Location area identification", "reference" : "9.9.2.2", "presence" : "O", "format" : "TV", "length" : "6"}) +ies.append({ "iei" : "23", "value" : "MS identity", "type" : "Mobile identity", "reference" : "9.9.2.3", "presence" : "O", "format" : "TLV", "length" : "7-10"}) +ies.append({ "iei" : "53", "value" : "EMM cause", "type" : "EMM cause", "reference" : "9.9.3.9", "presence" : "O", "format" : "TV", "length" : "2"}) +ies.append({ "iei" : "17", "value" : "T3402 value", "type" : "GPRS timer", "reference" : "9.9.3.16", "presence" : "O", "format" : "TV", "length" : "2"}) +ies.append({ "iei" : "59", "value" : "T3423 value", "type" : "GPRS timer", "reference" : "9.9.3.16", "presence" : "O", "format" : "TV", "length" : "2"}) +ies.append({ "iei" : "4A", "value" : "Equivalent PLMNs", "type" : "PLMN list", "reference" : "9.9.2.8", "presence" : "O", "format" : "TLV", "length" : "5-47"}) +ies.append({ "iei" : "34", "value" : "Emergency number list", "type" : "Emergency number list", "reference" : "9.9.3.37", "presence" : "O", "format" : "TLV", "length" : "5-50"}) +ies.append({ "iei" : "64", "value" : "EPS network feature support", "type" : "EPS network feature support", "reference" : "9.9.3.12A", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "F-", "value" : "Additional update result", "type" : "Additional update result", "reference" : "9.9.3.0A", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "5E", "value" : "T3412 extended value", "type" : "GPRS timer 3", "reference" : "GPRS timer 39.9.3.16B", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6A", "value" : "T3324 value", "type" : "GPRS timer 2", "reference" : "GPRS timer 29.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6E", "value" : "Extended DRX parameters", "type" : "Extended DRX parameters", "reference" : "9.9.3.46", "presence" : "O", "format" : "TLV", "length" : "3"}) +msg_list[key]["ies"] = ies diff --git a/lib/nas/support/nas_message.py b/lib/nas/support/nas_message.py index acca1b75e4..aa4b5d1119 100644 --- a/lib/nas/support/nas_message.py +++ b/lib/nas/support/nas_message.py @@ -109,7 +109,7 @@ def v_lower(v): def get_cells(cells): iei = cells[0].text.encode('ascii', 'ignore') - value = cells[1].text.encode('ascii', 'ignore') + value = re.sub("'s", "", cells[1].text).encode('ascii', 'ignore') type = re.sub("'s", "", re.sub('\s*\n\s*[a-zA-Z0-9.]*', '', cells[2].text)).encode('ascii', 'ignore') reference = re.sub('[a-zA-Z\s]*\n\s*', '', cells[2].text).encode('ascii', 'ignore') presence = cells[3].text.encode('ascii', 'ignore') @@ -207,6 +207,7 @@ msg_list["ESM INFORMATION RESPONSE"] = { "type" : "218" } msg_list["ESM STATUS"] = { "type" : "232" } # Table number for Message List +msg_list["ATTACH ACCEPT"]["table"] = 8 msg_list["ATTACH REQUEST"]["table"] = 11 for key in msg_list.keys(): @@ -477,15 +478,18 @@ for (k, v) in sorted_msg_list: for ie in [ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]: f.write(" if (%s->presencemask & NAS_%s_%s_PRESENT)\n" % (v_lower(k), v_upper(k), v_upper(ie["value"]))) f.write(" {\n") - f.write(" size = nas_encode_optional_type(pkbuf, NAS_%s_%s_TYPE);\n" % (v_upper(k), v_upper(ie["value"]))) - f.write(" d_assert(size >= 0, return encoded, \"decode failed\");\n") - f.write(" encoded += size;\n\n") + if ie["length"] == "1" and ie["format"] == "TV": + f.write(" %s->%s.type = (NAS_%s_%s_TYPE >> 4);\n\n" % (v_lower(k), v_lower(ie["value"]), v_upper(k), v_upper(ie["value"]))) + else: + f.write(" size = nas_encode_optional_type(pkbuf, NAS_%s_%s_TYPE);\n" % (v_upper(k), v_upper(ie["value"]))) + f.write(" d_assert(size >= 0, return encoded, \"decode failed\");\n") + f.write(" encoded += size;\n\n") f.write(" size = nas_encode_%s(pkbuf, &%s->%s);\n" % (v_lower(ie["type"]), v_lower(k), v_lower(ie["value"]))) f.write(" d_assert(size >= 0, return encoded, \"decode failed\");\n") f.write(" encoded += size;\n") f.write(" }\n\n") - f.write(""" return decoded; + f.write(""" return encoded; } """) diff --git a/test/nas_message_test.c b/test/nas_message_test.c index c657334aec..779b4a3dfa 100644 --- a/test/nas_message_test.c +++ b/test/nas_message_test.c @@ -58,7 +58,7 @@ static void nas_message_test2(abts_case *tc, void *data) memset(&message, 0, sizeof(message)); message.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM; message.h.message_type = NAS_ATTACH_ACCEPT; - attach_accept->attach_result.result = + attach_accept->eps_attach_result.result = NAS_ATTACH_RESULT_COMBINED_EPS_IMSI_ATTACH; attach_accept->t3412_value.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_1_MM;