forked from osmocom/wireshark
parent
43e5bd228f
commit
5e2ccb0ecd
|
@ -581,6 +581,9 @@ const char* get_gsm_a_msg_string(int pdu_type, int idx)
|
|||
case GSM_PDU_TYPE_BSSMAP_LE:
|
||||
msg_string = gsm_bssmap_le_elem_strings[idx].strptr;
|
||||
break;
|
||||
case NAS_PDU_TYPE_COMMON:
|
||||
msg_string = nas_eps_common_elem_strings[idx].strptr;
|
||||
break;
|
||||
case NAS_PDU_TYPE_EMM:
|
||||
msg_string = nas_emm_elem_strings[idx].strptr;
|
||||
break;
|
||||
|
@ -620,6 +623,9 @@ static int get_hf_elem_id(int pdu_type)
|
|||
case GSM_PDU_TYPE_BSSMAP_LE:
|
||||
hf_elem_id = hf_gsm_bssmap_le_elem_id;
|
||||
break;
|
||||
case NAS_PDU_TYPE_COMMON:
|
||||
hf_elem_id = hf_nas_eps_common_elem_id;
|
||||
break;
|
||||
case NAS_PDU_TYPE_EMM:
|
||||
hf_elem_id = hf_nas_emm_elem_id;
|
||||
break;
|
||||
|
@ -2086,7 +2092,7 @@ de_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *a
|
|||
/*
|
||||
* [3] 10.5.1.13 PLMN list
|
||||
*/
|
||||
static guint16
|
||||
guint16
|
||||
de_plmn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
|
||||
{
|
||||
guint8 octs[3];
|
||||
|
|
|
@ -125,6 +125,11 @@ extern gint ett_gsm_bssmap_le_elem[];
|
|||
extern elem_fcn bssmap_le_elem_fcn[];
|
||||
extern int hf_gsm_bssmap_le_elem_id;
|
||||
|
||||
extern const value_string nas_eps_common_elem_strings[];
|
||||
extern gint ett_nas_eps_common_elem[];
|
||||
extern elem_fcn nas_eps_common_elem_fcn[];
|
||||
extern int hf_nas_eps_common_elem_id;
|
||||
|
||||
extern const value_string nas_emm_elem_strings[];
|
||||
extern gint ett_nas_emm_elem[];
|
||||
extern elem_fcn emm_elem_fcn[];
|
||||
|
@ -163,7 +168,8 @@ extern int hf_gsm_a_rr_chnl_needed_ch1;
|
|||
#define GSM_A_PDU_TYPE_BSSLAP 6
|
||||
#define GSM_A_PDU_TYPE_SACCH 7
|
||||
#define GSM_PDU_TYPE_BSSMAP_LE 8
|
||||
#define NAS_PDU_TYPE_EMM 9
|
||||
#define NAS_PDU_TYPE_COMMON 9
|
||||
#define NAS_PDU_TYPE_EMM 10
|
||||
|
||||
extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
|
||||
|
||||
|
@ -258,6 +264,11 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
|
|||
SEV_elem_ett = ett_gsm_bssmap_le_elem; \
|
||||
SEV_elem_funcs = bssmap_le_elem_fcn; \
|
||||
break; \
|
||||
case NAS_PDU_TYPE_COMMON: \
|
||||
SEV_elem_names = nas_eps_common_elem_strings; \
|
||||
SEV_elem_ett = ett_nas_eps_common_elem; \
|
||||
SEV_elem_funcs = nas_eps_common_elem_fcn; \
|
||||
break; \
|
||||
case NAS_PDU_TYPE_EMM: \
|
||||
SEV_elem_names = nas_emm_elem_strings; \
|
||||
SEV_elem_ett = ett_nas_emm_elem; \
|
||||
|
@ -548,7 +559,7 @@ guint16 de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu
|
|||
guint16 be_ganss_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
guint16 be_ganss_pos_dta(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
guint16 be_ganss_ass_dta(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
|
||||
guint16 de_plmn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
guint16 de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
|
||||
guint16 de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
guint16 de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
static int proto_nas_eps = -1;
|
||||
|
||||
static int hf_nas_eps_msg_emm_type = -1;
|
||||
int hf_nas_eps_common_elem_id = -1;
|
||||
int hf_nas_emm_elem_id = -1;
|
||||
static int hf_nas_eps_spare_bits = -1;
|
||||
static int hf_nas_eps_security_header_type = -1;
|
||||
|
@ -53,6 +54,11 @@ static int hf_nas_eps_emm_type_of_id = -1;
|
|||
static int hf_nas_eps_emm_EPS_attach_result = -1;
|
||||
static int hf_nas_eps_emm_spare_half_octet = -1;
|
||||
static int hf_nas_eps_emm_res = -1;
|
||||
static int hf_nas_eps_emm_cause = -1;
|
||||
static int hf_nas_eps_emm_short_mac = -1;
|
||||
static int hf_nas_eps_active_flg = -1;
|
||||
static int hf_nas_eps_eps_update_result_value = -1;
|
||||
static int hf_nas_eps_eps_update_type_value = -1;
|
||||
|
||||
/* Initialize the subtree pointers */
|
||||
static int ett_nas_eps = -1;
|
||||
|
@ -112,14 +118,57 @@ static const value_string security_header_type_vals[] = {
|
|||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/* 9.9.2 Common information elements
|
||||
const value_string nas_eps_common_elem_strings[] = {
|
||||
{ 0x00, "EPS bearer context status" }, /* 9.9.2.1 EPS bearer context status */
|
||||
{ 0x00, "Location area identification" }, /* 9.9.2.2 Location area identification */
|
||||
{ 0x00, "Mobile identity" }, /* 9.9.2.3 Mobile identity */
|
||||
{ 0x00, "PLMN list" }, /* 9.9.2.4 PLMN list */
|
||||
{ 0, NULL }
|
||||
};
|
||||
#define NUM_NAS_EPS_COMMON_ELEM (sizeof(nas_eps_common_elem_strings)/sizeof(value_string))
|
||||
gint ett_nas_eps_common_elem[NUM_NAS_EPS_COMMON_ELEM];
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DE_EPS_CMN_EPS_BE_CTX_STATUS, /* 9.9.2.1 EPS bearer context status */
|
||||
DE_EPS_CMN_LOC_AREA_ID, /* 9.9.2.2 Location area identification */
|
||||
DE_EPS_CMN_MOB_ID, /* 9.9.2.3 Mobile identity */
|
||||
DE_EPS_CMN_PLM_LST, /* 9.9.2.4 PLMN list */
|
||||
DE_EPS_COMMON_NONE /* NONE */
|
||||
}
|
||||
nas_eps_common_elem_idx_t;
|
||||
/*
|
||||
* 9.9.2 Common information elements
|
||||
*/
|
||||
|
||||
/*
|
||||
* 9.9.2.1 EPS bearer context status
|
||||
*/
|
||||
static guint16
|
||||
de_eps_cmn_eps_be_ctx_status(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
|
||||
curr_offset = offset;
|
||||
|
||||
proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
|
||||
|
||||
return len;
|
||||
}
|
||||
/*
|
||||
* 9.9.2.2 Location area identification
|
||||
* See subclause 10.5.1.3 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.2.3 Mobile identity
|
||||
* See subclause 10.5.1.4 in 3GPP TS 24.008 [6].
|
||||
* exported from gsm_a_common
|
||||
*/
|
||||
/*
|
||||
* 9.9.2.4 PLMN list
|
||||
* See subclause 10.5.1.13 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.2.5 Spare half octet
|
||||
* This element is used in the description of EMM and ESM messages when an odd number of
|
||||
* half octet type 1 information elements are used. This element is filled with spare bits
|
||||
|
@ -127,6 +176,15 @@ static const value_string security_header_type_vals[] = {
|
|||
*
|
||||
*/
|
||||
|
||||
guint16 (*nas_eps_common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = {
|
||||
/* 9.9.2 Common information elements */
|
||||
de_eps_cmn_eps_be_ctx_status, /* 9.9.2.1 EPS bearer context status */
|
||||
de_lai, /* 9.9.2.2 Location area identification */
|
||||
de_mid, /* 9.9.2.3 Mobile identity */
|
||||
de_plmn_list, /* 9.9.2.4 PLMN list */
|
||||
NULL, /* NONE */
|
||||
};
|
||||
|
||||
const value_string nas_emm_elem_strings[] = {
|
||||
/* 9.9.3 EPS Mobility Management (EMM) information elements */
|
||||
{ 0x00, "Authentication failure parameter" }, /* 9.9.3.1 Authentication failure parameter */
|
||||
|
@ -170,7 +228,7 @@ gint ett_nas_emm_elem[NUM_NAS_EMM_ELEM];
|
|||
typedef enum
|
||||
{
|
||||
/* 9.9.3 EPS Mobility Management (EMM) information elements */
|
||||
DE_EMM_AUTH_FAIL_PAR, /* 9.9.3.1 Authentication failure parameter */
|
||||
DE_EMM_AUTH_FAIL_PAR, /* 9.9.3.1 Authentication failure parameter (dissected in packet-gsm_a_dtap.c)*/
|
||||
DE_EMM_AUTN, /* 9.9.3.2 Authentication parameter AUTN */
|
||||
DE_EMM_AUTH_PAR_RAND, /* 9.9.3.3 Authentication parameter RAND */
|
||||
DE_EMM_AUTH_RESP_PAR, /* 9.9.3.4 Authentication response parameter */
|
||||
|
@ -181,7 +239,7 @@ typedef enum
|
|||
DE_EMM_ATT_RES, /* 9.9.3.8 EPS attach result (Coded inline */
|
||||
DE_EMM_ATT_TYPE, /* 9.9.3.9 EPS attach type (Coded Inline)*/
|
||||
DE_EMM_EPS_MID, /* 9.9.3.10 EPS mobile identity */
|
||||
DE_EMM_EPS_UPD_RES, /* 9.9.3.11 EPS update result */
|
||||
DE_EMM_EPS_UPD_RES, /* 9.9.3.11 EPS update result ( Coded inline)*/
|
||||
DE_EMM_EPS_UPD_TYPE, /* 9.9.3.12 EPS update type */
|
||||
DE_EMM_ESM_MSG_CONT, /* 9.9.3.13 ESM message container */
|
||||
DE_EMM_GPRS_TIMER, /* 9.9.3.14 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. */
|
||||
|
@ -196,7 +254,7 @@ typedef enum
|
|||
DE_EMM_P_TMSI, /* 9.9.3.22 P-TMSI, See subclause 10.5.1.4 in 3GPP TS 24.008 [6]. */
|
||||
DE_EMM_P_TMSI_SIGN, /* 9.9.3.23 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */
|
||||
DE_EMM_GPRS_RAI, /* 9.9.3.24 Routing area identification ,See subclause 10.5.5.15 in 3GPP TS 24.008 [6]. */
|
||||
DE_EMM_SORT_MAC, /* 9.9.3.25 Short MAC */
|
||||
DE_EMM_SHORT_MAC, /* 9.9.3.25 Short MAC */
|
||||
DE_EMM_TZ, /* 9.9.3.26 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */
|
||||
DE_EMM_TZ_AND_T, /* 9.9.3.27 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */
|
||||
DE_EMM_TMSI_STAT, /* 9.9.3.27a TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */
|
||||
|
@ -210,6 +268,7 @@ nas_emm_elem_idx_t;
|
|||
/* 9.9.3 EPS Mobility Management (EMM) information elements
|
||||
* 9.9.3.1 Authentication failure parameter
|
||||
* See subclause 10.5.3.2.2 in 3GPP TS 24.008 [6].
|
||||
* (dissected in packet-gsm_a_dtap.c)
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.2 Authentication parameter AUTN
|
||||
|
@ -246,6 +305,52 @@ de_emm_auth_resp_par(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
|
|||
/*
|
||||
* 9.9.3.7 EMM cause
|
||||
*/
|
||||
static const value_string nas_eps_emm_cause_values[] = {
|
||||
{ 0x2, "IMSI unknown in HLR"},
|
||||
{ 0x3, "Illegal MS"},
|
||||
{ 0x6, "Illegal ME"},
|
||||
{ 0x7, "GPRS services not allowed"},
|
||||
{ 0x8, "GPRS services and non-GPRS services not allowed"},
|
||||
{ 0x9, "MS identity cannot be derived by the network"},
|
||||
{ 0xa, "Implicitly detached"},
|
||||
{ 0xb, "PLMN not allowed"},
|
||||
{ 0xc, "Tracking Area not allowed"},
|
||||
{ 0xd, "Roaming not allowed in this tracking area"},
|
||||
{ 0xe, "GPRS services not allowed in this PLMN"},
|
||||
{ 0xf, "No Suitable Cells In tracking area"},
|
||||
{ 0x10, "MSC temporarily not reachable"},
|
||||
{ 0x11, "Network failure"},
|
||||
{ 0x12, "CS domain not available"},
|
||||
{ 0x13, "ESM failure"},
|
||||
{ 0x14, "MAC failure"},
|
||||
{ 0x15, "Synch failure"},
|
||||
{ 0x16, "Congestion"},
|
||||
{ 0x17, "UE security capabilities mismatch"},
|
||||
{ 0x18, "Security mode rejected, unspecified"},
|
||||
{ 0x19, "Not authorized for this CSG"},
|
||||
{ 0x28, "No EPS bearer context activated"},
|
||||
{ 0x5f, "Semantically incorrect message"},
|
||||
{ 0x60, "Invalid mandatory information"},
|
||||
{ 0x61, "Message type non-existent or not implemented"},
|
||||
{ 0x62, "Message type not compatible with the protocol state"},
|
||||
{ 0x63, "Information element non-existent or not implemented"},
|
||||
{ 0x64, "Conditional IE error"},
|
||||
{ 0x65, "Message not compatible with the protocol state"},
|
||||
{ 0x6f, "Protocol error, unspecified"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static guint16
|
||||
de_emm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
|
||||
curr_offset = offset;
|
||||
|
||||
proto_tree_add_item(tree, hf_nas_eps_emm_cause, tvb, curr_offset, len, FALSE);
|
||||
curr_offset++;
|
||||
|
||||
return curr_offset-offset;}
|
||||
/*
|
||||
* 9.9.3.8 EPS attach result
|
||||
*/
|
||||
|
@ -317,8 +422,31 @@ de_emm_eps_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g
|
|||
}
|
||||
/*
|
||||
* 9.9.3.11 EPS update result
|
||||
*/
|
||||
static const value_string nas_eps_emm_eps_update_result_vals[] = {
|
||||
{ 0, "TA updated"},
|
||||
{ 1, "Combined TA/LA updated"},
|
||||
{ 2, "TA updated and ISR activated"},
|
||||
{ 3, "Combined TA/LA updated and ISR activated"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/*
|
||||
* 9.9.3.12 EPS update type
|
||||
*/
|
||||
static const true_false_string nas_eps_emm_active_flg_value = {
|
||||
"Bearer establishment requested",
|
||||
"No bearer establishment requested"
|
||||
};
|
||||
|
||||
static const value_string nas_eps_emm_eps_update_type_vals[] = {
|
||||
{ 0, "TA updating"},
|
||||
{ 1, "Combined TA/LA updating"},
|
||||
{ 2, "Combined TA/LA updating with IMSI attach"},
|
||||
{ 3, "Periodic updating"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/*
|
||||
* 9.9.3.13 ESM message container
|
||||
*/
|
||||
|
@ -344,7 +472,12 @@ de_emm_esm_msg_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _
|
|||
* See subclause 10.5.5.9 in 3GPP TS 24.008 [6].
|
||||
* 9.9.3.16 IMEISV request
|
||||
* See subclause 10.5.5.10 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.17 KSI and sequence number
|
||||
*/
|
||||
|
||||
/*
|
||||
* 9.9.3.18 MS network capability
|
||||
* See subclause 10.5.5.12 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
|
@ -383,21 +516,52 @@ de_emm_nas_sec_alsgs(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
|
|||
/*
|
||||
* 9.9.3.21 Network name
|
||||
* See subclause 10.5.3.5a in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.21a Nonce
|
||||
* Editor's note: The coding of this information element is FFS.
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.22 P-TMSI
|
||||
* See subclause 10.5.1.4 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.23 P-TMSI signature
|
||||
* See subclause 10.5.5.8 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.24 Routing area identification
|
||||
* See subclause 10.5.5.15 in 3GPP TS 24.008 [6].
|
||||
* See subclause 10.5.5.15 in 3GPP TS 24.008 [6].(packet-gsm_a_gm.c)
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.25 Short MAC
|
||||
*/
|
||||
static guint16
|
||||
de_emm_nas_short_mac(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
|
||||
curr_offset = offset;
|
||||
|
||||
|
||||
proto_tree_add_item(tree, hf_nas_eps_emm_short_mac, tvb, curr_offset, 2, FALSE);
|
||||
curr_offset+=2;
|
||||
|
||||
return(curr_offset-offset);
|
||||
}
|
||||
/*
|
||||
* 9.9.3.26 Time zone
|
||||
* See subclause 10.5.3.8 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.27 Time zone and time
|
||||
* See subclause 10.5.3.9 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.27a TMSI status
|
||||
* See subclause 10.5.5.4 in 3GPP TS 24.008 [6].
|
||||
*/
|
||||
/*
|
||||
* 9.9.3.28 Tracking area identity
|
||||
*/
|
||||
/*
|
||||
|
@ -446,36 +610,36 @@ de_emm_trac_area_id_lst(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l
|
|||
|
||||
guint16 (*emm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = {
|
||||
/* 9.9.3 EPS Mobility Management (EMM) information elements */
|
||||
NULL, /* 9.9.3.1 Authentication failure parameter */
|
||||
NULL, /* 9.9.3.1 Authentication failure parameter(dissected in packet-gsm_a_dtap.c) */
|
||||
NULL, /* 9.9.3.2 Authentication parameter AUTN(packet-gsm_a_dtap.c) */
|
||||
NULL, /* 9.9.3.3 Authentication parameter RAND */
|
||||
de_emm_auth_resp_par, /* 9.9.3.4 Authentication response parameter */
|
||||
NULL, /* 9.9.3.5 Daylight saving time */
|
||||
NULL, /* 9.9.3.5 Daylight saving time (packet-gsm_a_dtap.c)*/
|
||||
NULL, /* 9.9.3.6 Detach type */
|
||||
NULL, /* 9.9.3.6a DRX parameter */
|
||||
NULL, /* 9.9.3.7 EMM cause */
|
||||
de_emm_cause, /* 9.9.3.7 EMM cause */
|
||||
NULL, /* 9.9.3.8 EPS attach result (coded inline) */
|
||||
NULL, /* 9.9.3.9 EPS attach type(Coded Inline) */
|
||||
de_emm_eps_mid, /* 9.9.3.10 EPS mobile identity */
|
||||
NULL, /* 9.9.3.11 EPS update result */
|
||||
NULL, /* 9.9.3.12 EPS update type */
|
||||
NULL, /* 9.9.3.11 EPS update result (Coded Inline)*/
|
||||
NULL, /* 9.9.3.12 EPS update type (Inline)*/
|
||||
de_emm_esm_msg_cont, /* 9.9.3.13 ESM message container */
|
||||
NULL, /* 9.9.3.14 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.14 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/
|
||||
NULL, /* 9.9.3.15 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.16 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.17 KSI and sequence number */
|
||||
NULL, /* 9.9.3.18 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.18 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6].(packet-gsm_a_gm.c) */
|
||||
NULL, /* 9.9.3.19 NAS key set identifier (Coded Inline) */
|
||||
de_emm_nas_sec_alsgs, /* 9.9.3.20 NAS security algorithms */
|
||||
NULL, /* 9.9.3.21 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.21 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/
|
||||
NULL, /* 9.9.3.21a Nonce */
|
||||
NULL, /* 9.9.3.22 P-TMSI, See subclause 10.5.1.4 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.23 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.24 Routing area identification ,See subclause 10.5.5.15 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.25 Short MAC */
|
||||
NULL, /* 9.9.3.26 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.27 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.27a TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */
|
||||
NULL, /* 9.9.3.23 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/
|
||||
de_gmm_rai, /* 9.9.3.24 Routing area identification ,See subclause 10.5.5.15 in 3GPP TS 24.008 [6].(packet-gsm_a_gm.c) */
|
||||
de_emm_nas_short_mac, /* 9.9.3.25 Short MAC */
|
||||
NULL, /* 9.9.3.26 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/
|
||||
NULL, /* 9.9.3.27 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. (packet-gsm_a_dtap.c)*/
|
||||
NULL, /* 9.9.3.27a TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. (packet-gsm_a_gm.c)*/
|
||||
NULL, /* 9.9.3.28 Tracking area identity */
|
||||
de_emm_trac_area_id_lst, /* 9.9.3.29 Tracking area identity list */
|
||||
NULL, /* 9.9.3.30 UE security capability */
|
||||
|
@ -513,30 +677,67 @@ nas_emm_attach_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
curr_offset++;
|
||||
/* T3412 value GPRS timer 9.9.3.14 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER);
|
||||
/* TAI list Tracking area identity list 9.9.3.29 M LV 7-97 */
|
||||
/* TAI list 9.9.3.29 M LV 7-97 */
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, "");
|
||||
/* ESM message container 9.9.3.13 M LV-E 2-n */
|
||||
ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, "");
|
||||
/* 50 GUTI EPS mobile identity 9.9.3.10 O TLV 13 */
|
||||
ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, "GUTI");
|
||||
/* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */
|
||||
ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, "Location area identification");
|
||||
/* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */
|
||||
ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, "MS identity");
|
||||
/* 53 EMM cause EMM cause 9.9.3.7 O TV 2 */
|
||||
ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, "");
|
||||
/* 17 T3402 value GPRS timer 9.9.3.14 O TV 2 */
|
||||
ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, "T3402 value");
|
||||
/* 4A Equivalent PLMNs PLMN list 9.9.2.4 O TLV 5-47 */
|
||||
ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, "Equivalent PLMNs");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
|
||||
}
|
||||
/*
|
||||
* 8.2.2 Attach complete
|
||||
* ESM message container ESM message container 9.9.3.13 M LV-E 2-n DE_EMM_ESM_MSG_CONT
|
||||
*/
|
||||
static void
|
||||
nas_emm_attach_comp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* ESM message container ESM message container 9.9.3.13 M LV-E 2-n */
|
||||
ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* 8.2.3 Attach reject
|
||||
*
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
* 78 ESM message container ESM message container 9.9.3.13 O TLV-E 4-n DE_EMM_ESM_MSG_CONT
|
||||
*/
|
||||
static void
|
||||
nas_emm_attach_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* * EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
/* 78 ESM message container ESM message container 9.9.3.13 O TLV-E 4-n */
|
||||
ELEM_OPT_TLV(0x78, NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
|
||||
}
|
||||
/*
|
||||
* 8.2.4 Attach request
|
||||
*/
|
||||
|
@ -568,20 +769,40 @@ nas_emm_attach_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
curr_len--;
|
||||
curr_offset++;
|
||||
/* Old GUTI or IMSI EPS mobile identity 9.9.3.10 M LV 5-12 */
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, "");
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI or IMSI");
|
||||
/* MS network capability MS network capability 9.9.3.18 M LV 3-9 */
|
||||
/* ESM message container ESM message container 9.9.3.13 M LV-E 2-n DE_EMM_ESM_MSG_CONT*/
|
||||
ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , "" );
|
||||
/* ESM message container ESM message container 9.9.3.13 M LV-E 2-n */
|
||||
ELEM_MAND_LV_E(NAS_PDU_TYPE_EMM, DE_EMM_ESM_MSG_CONT, "");
|
||||
/* 52 Last visited registered TAI Tracking area identity 9.9.3.28 O TV 6 */
|
||||
/* 5c DRX parameter DRX parameter 9.9.3.6a O FFS FFS */
|
||||
/* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */
|
||||
ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, "Old location area identification");
|
||||
/* 9- TMSI status TMSI status 9.9.3.27a O TV 1 */
|
||||
ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , "" );
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.5 Authentication failure
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
* 30 Authentication failure parameter Authentication failure parameter 9.9.3.1 O TLV 16
|
||||
*/
|
||||
static void
|
||||
nas_emm_attach_fail(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
/* 30 Authentication failure parameter Authentication failure parameter 9.9.3.1 O TLV 1 */
|
||||
ELEM_OPT_TLV(0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.6 Authentication reject
|
||||
* No IE:s
|
||||
|
@ -625,6 +846,8 @@ nas_emm_auth_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
*/
|
||||
ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_AUTH_PARAM_AUTN, " - EPS challenge");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
|
||||
}
|
||||
/*
|
||||
* 8.2.8 Authentication response
|
||||
|
@ -644,10 +867,13 @@ nas_emm_auth_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
* Authentication response parameter 9.9.3.4 M LV 5-17
|
||||
*/
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_AUTH_RESP_PAR, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.9 Detach accept
|
||||
* 8.2.9.1 Detach accept (UE originating detach)
|
||||
* No further IE's
|
||||
* 8.2.9.2 Detach accept (UE terminated detach)
|
||||
* No further IE's
|
||||
*/
|
||||
|
@ -657,44 +883,131 @@ nas_emm_auth_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
* Detach type Detach type 9.9.3.6 M V 1/2
|
||||
* Spare half octet Spare half octet 9.9.2.5 M V 1/2
|
||||
* GUTI or IMSI EPS mobile identity 9.9.3.10 M LV 5-12
|
||||
*ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI or IMSI");
|
||||
*/
|
||||
/*
|
||||
* 8.2.10.2 Detach request (UE terminated detach)
|
||||
* Detach type Detach type 9.9.3.6 M V 1/2
|
||||
* Spare half octet Spare half octet 9.9.2.5 M V 1/2
|
||||
* EMM cause EMM cause 9.9.3.7 O TV 2
|
||||
* ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, "");
|
||||
*/
|
||||
/*
|
||||
* 8.2.11 EMM information
|
||||
* 43 Full name for network Network name 9.9.3.21 O TLV 3-?
|
||||
* 45 Short name for network Network name 9.9.3.21 O TLV 3-?
|
||||
* 46 Local time zone Time zone 9.9.3.26 O TV 2
|
||||
* 47 Universal time and local time zone Time zone and time 9.9.3.27 O TV 8
|
||||
* 49 Network daylight saving time Daylight saving time 9.9.3.5 O TLV 3
|
||||
*/
|
||||
static void
|
||||
nas_emm_emm_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
consumed = len;
|
||||
|
||||
/* 43 Full name for network Network name 9.9.3.21 O TLV 3-? */
|
||||
ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full name for network");
|
||||
/* 45 Short name for network Network name 9.9.3.21 O TLV 3-? */
|
||||
ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name");
|
||||
/* 46 Local time zone Time zone 9.9.3.26 O TV 2 */
|
||||
ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local");
|
||||
/* 47 Universal time and local time zone Time zone and time 9.9.3.27 O TV 8 */
|
||||
ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone");
|
||||
/* 49 Network daylight saving time Daylight saving time 9.9.3.5 O TLV 3 */
|
||||
ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.12 EMM status
|
||||
* EMM status message identity Message type 9.8 M V 1
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
*/
|
||||
static void
|
||||
nas_emm_emm_status(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
consumed = len;
|
||||
|
||||
/* EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* 8.2.13 GUTI reallocation command
|
||||
* GUTI EPS mobile identity 9.9.3.10 M LV 12
|
||||
* 54 TAI list Tracking area identity list 9.9.3.29 O TLV 8-98
|
||||
*/
|
||||
static void
|
||||
nas_emm_guti_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
consumed = len;
|
||||
|
||||
/* GUTI EPS mobile identity 9.9.3.10 M LV 12 */
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - GUTI");
|
||||
|
||||
/* 54 TAI list Tracking area identity list 9.9.3.29 O TLV 8-98 */
|
||||
ELEM_OPT_TLV(0x54, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* 8.2.14 GUTI reallocation complete
|
||||
* No more IE's
|
||||
*/
|
||||
/*
|
||||
* 8.2.15 Identity request
|
||||
* Identity type Identity type 2 9.9.3.15 M V 1/2
|
||||
* Spare half octet Spare half octet 9.9.2.5 M V 1/2
|
||||
*/
|
||||
|
||||
static void
|
||||
nas_emm_id_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
consumed = 1;
|
||||
|
||||
/* Identity type Identity type 2 9.9.3.15 M V 1/2 */
|
||||
/* Spare half octet Spare half octet 9.9.2.5 M V 1/2 */
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.16 Identity response
|
||||
* Mobile identity Mobile identity 9.9.2.3 M LV 4-10
|
||||
*/
|
||||
static void
|
||||
nas_emm_id_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* Mobile identity Mobile identity 9.9.2.3 M LV 4-10 */
|
||||
ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, "");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.17 Security mode command
|
||||
*/
|
||||
|
@ -709,7 +1022,6 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
consumed = len;
|
||||
/* Selected NAS security algorithms NAS security algorithms 9.9.3.20 M V 1 */
|
||||
ELEM_MAND_V(NAS_PDU_TYPE_EMM, DE_EMM_NAS_SEC_ALGS);
|
||||
/* NAS key set identifierASME NAS key set identifier 9.9.3.19 M V 1/2 */
|
||||
|
@ -740,22 +1052,80 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
}
|
||||
/*
|
||||
* 8.2.18 Security mode complete
|
||||
* 23 IMEISV Mobile identity 9.9.2.3 O TLV 11
|
||||
*/
|
||||
static void
|
||||
nas_emm_sec_mode_comp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* 23 IMEISV Mobile identity 9.9.2.3 O TLV 11 DE_EPS_CMN_MOB_ID*/
|
||||
ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_EMM, DE_EPS_CMN_MOB_ID, "IMEISV");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.19 Security mode reject
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
*/
|
||||
static void
|
||||
nas_emm_sec_mode_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.20 Security protected NAS message
|
||||
* Message authentication code Message authentication code 9.5 M V 4
|
||||
* Sequence number Sequence number 9.6 M V 1
|
||||
* NAS message NAS message9.7 M V 1-n
|
||||
*/
|
||||
#if 0
|
||||
|
||||
static void
|
||||
nas_emm_sec_prot_msg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
proto_item *item;
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* Message authentication code Message authentication code 9.5 M V 4 */
|
||||
/* Sequence number Sequence number 9.6 M V 1 */
|
||||
/* NAS message NAS message9.7 M V 1-n */
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* 8.2.21 Service reject
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
*/
|
||||
static void
|
||||
nas_emm_serv_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.22 Service request
|
||||
* This message is sent by the UE to the network to request the establishment
|
||||
|
@ -768,41 +1138,133 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
*/
|
||||
/*
|
||||
* 8.2.23 Tracking area update accept
|
||||
* EPS update result EPS update result 9.9.3.11 M V 1/2
|
||||
* Spare half octet Spare half octet 9.9.2.5 M V 1/2
|
||||
* 5A T3412 value GPRS timer 9.9.3.14 O TV 2
|
||||
* 50 GUTI EPS mobile identity 9.9.3.10 O TLV 13
|
||||
* 54 TAI list Tracking area identity list 9.9.3.29 O TLV 8-98
|
||||
* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4
|
||||
* 13 Location area identification Location area identification 9.9.2.2 O TV 6
|
||||
* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10
|
||||
* 53 EMM cause EMM cause 9.9.3.7 O TV 2
|
||||
* 17 T3402 value GPRS timer 9.9.3.14 O TV 2
|
||||
* 4A Equivalent PLMNs PLMN list 9.9.2.4 O TLV 5-47
|
||||
*/
|
||||
static void
|
||||
nas_emm_trac_area_upd_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset, bit_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EPS update result EPS update result 9.9.3.11 M V 1/2 */
|
||||
bit_offset = curr_offset<<3;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, FALSE);
|
||||
bit_offset++;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_result_value, tvb, bit_offset, 3, FALSE);
|
||||
bit_offset+=3;
|
||||
/* Spare half octet Spare half octet 9.9.2.5 M V 1/2 */
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, FALSE);
|
||||
bit_offset+=4;
|
||||
/* Fix up the lengths */
|
||||
curr_len--;
|
||||
curr_offset++;
|
||||
/* 5A T3412 value GPRS timer 9.9.3.14 O TV 2 */
|
||||
ELEM_OPT_TV(0x5a, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, "T3412 value");
|
||||
/* 50 GUTI EPS mobile identity 9.9.3.10 O TLV 13 */
|
||||
ELEM_OPT_TLV(0x50, NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, "GUTI");
|
||||
/* 54 TAI list Tracking area identity list 9.9.3.29 O TLV 8-98 */
|
||||
ELEM_OPT_TLV(0x54, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID_LST, "");
|
||||
/* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */
|
||||
ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, "");
|
||||
/* 13 Location area identification Location area identification 9.9.2.2 O TV 6 */
|
||||
ELEM_OPT_TLV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, "");
|
||||
/* 23 MS identity Mobile identity 9.9.2.3 O TLV 7-10 */
|
||||
ELEM_OPT_TLV(0x23, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_MOB_ID, "MS identity");
|
||||
/* 53 EMM cause EMM cause 9.9.3.7 O TV 2 */
|
||||
ELEM_OPT_TV(0x53, NAS_PDU_TYPE_EMM, DE_EMM_CAUSE, "");
|
||||
/* 17 T3402 value GPRS timer 9.9.3.14 O TV 2 */
|
||||
ELEM_OPT_TV(0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, "T3402 value");
|
||||
/* 4A Equivalent PLMNs PLMN list 9.9.2.4 O TLV 5-47 */
|
||||
ELEM_OPT_TLV(0x4a, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_PLM_LST, "Equivalent PLMNs");
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.24 Tracking area update complete
|
||||
* No more IE's
|
||||
*/
|
||||
/*
|
||||
* 8.2.25 Tracking area update reject
|
||||
* EMM cause EMM cause 9.9.3.7 M V 1
|
||||
*/
|
||||
static void
|
||||
nas_emm_trac_area_upd_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
guint32 curr_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EMM cause EMM cause 9.9.3.7 M V 1 */
|
||||
ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_EMM_CAUSE);
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.2.26 Tracking area update request
|
||||
* EPS update type EPS update type 9.9.3.12 M V 1/2
|
||||
* Spare half octet Spare half octet 9.9.2.5 M V 1/2
|
||||
* Old GUTI EPS mobile identity 9.9.3.10 M LV 12
|
||||
* NAS key set identifierASME NAS key set identifier 9.9.3.19 M V 1/2
|
||||
* NAS key set identifierSGSN NAS key set identifier 9.9.3.19 M V 1/2
|
||||
* 19 Old P-TMSI signature P-TMSI signature 9.9.3.23 O TV 4
|
||||
* 55 NonceUE Nonce 9.9.3.21a O TV 5
|
||||
* 31 MS network capability MS network capability 9.9.3.18 O TLV 4-10
|
||||
* 52 Last visited registered TAI Tracking area identity 9.9.3.28 O TV 6
|
||||
* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4
|
||||
* 13 Old location area identification Location area identification 9.9.2.2 O TV 6
|
||||
* 9- TMSI status TMSI status 9.9.3.27a O TV 1
|
||||
*/
|
||||
static void
|
||||
nas_emm_trac_area_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
||||
{
|
||||
proto_item *item;
|
||||
guint32 curr_offset, bit_offset;
|
||||
guint32 consumed;
|
||||
guint curr_len;
|
||||
|
||||
curr_offset = offset;
|
||||
curr_len = len;
|
||||
|
||||
/* EPS update type EPS update type 9.9.3.12 M V 1/2 */
|
||||
bit_offset = curr_offset<<3;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_active_flg, tvb, bit_offset, 1, FALSE);
|
||||
bit_offset++;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_eps_update_type_value, tvb, bit_offset, 3, FALSE);
|
||||
bit_offset+=3;
|
||||
|
||||
/* Spare half octet Spare half octet 9.9.2.5 M V 1/2 */
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_emm_spare_half_octet, tvb, bit_offset, 4, FALSE);
|
||||
bit_offset+=4;
|
||||
/* Fix up the lengths */
|
||||
curr_len--;
|
||||
curr_offset++;
|
||||
/* Old GUTI EPS mobile identity 9.9.3.10 M LV 12 */
|
||||
ELEM_MAND_LV(NAS_PDU_TYPE_EMM, DE_EMM_EPS_MID, " - Old GUTI");
|
||||
/* NAS key set identifierASME NAS key set identifier 9.9.3.19 M V 1/2 */
|
||||
bit_offset = curr_offset<<3;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, FALSE);
|
||||
bit_offset++;
|
||||
item = proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, FALSE);
|
||||
proto_item_append_text(item," - ASME");
|
||||
bit_offset+=3;
|
||||
/* NAS key set identifierSGSN NAS key set identifier 9.9.3.19 M V 1/2 */
|
||||
bit_offset = curr_offset<<3;
|
||||
proto_tree_add_bits_item(tree, hf_nas_eps_spare_bits, tvb, bit_offset, 1, FALSE);
|
||||
bit_offset++;
|
||||
item = proto_tree_add_bits_item(tree, hf_nas_eps_emm_nas_key_set_id, tvb, bit_offset, 3, FALSE);
|
||||
proto_item_append_text(item," - SGSN");
|
||||
bit_offset+=3;
|
||||
/* Fix up the lengths */
|
||||
curr_len--;
|
||||
curr_offset++;
|
||||
/* 19 Old P-TMSI signature P-TMSI signature 9.9.3.23 O TV 4 */
|
||||
ELEM_OPT_TV( 0x19 , GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature");
|
||||
/* 55 NonceUE Nonce 9.9.3.21a O TV 5 */
|
||||
/* 31 MS network capability MS network capability 9.9.3.18 O TLV 4-10 */
|
||||
ELEM_OPT_TLV( 0x31 , GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP , "" );
|
||||
/* 52 Last visited registered TAI Tracking area identity 9.9.3.28 O TV 6 */
|
||||
/* 57 EPS bearer context status EPS bearer context status 9.9.2.1 O TLV 4 */
|
||||
ELEM_OPT_TLV(0x57, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, "");
|
||||
/* 13 Old location area identification Location area identification 9.9.2.2 O TV 6 */
|
||||
ELEM_OPT_TV(0x13, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_LOC_AREA_ID, "Old location area identification");
|
||||
/* 9- TMSI status TMSI status 9.9.3.27a O TV 1 */
|
||||
ELEM_OPT_TV_SHORT( 0x90 , GSM_A_PDU_TYPE_GM, DE_TMSI_STAT , "" );
|
||||
|
||||
EXTRANEOUS_DATA_CHECK(curr_len, 0);
|
||||
}
|
||||
/*
|
||||
* 8.3 EPS session management messages
|
||||
*/
|
||||
|
@ -845,34 +1307,34 @@ nas_emm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
|
|||
#define NUM_NAS_MSG_EMM (sizeof(nas_msg_emm_strings)/sizeof(value_string))
|
||||
static gint ett_nas_msg_emm[NUM_NAS_MSG_EMM];
|
||||
static void (*nas_msg_emm_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) = {
|
||||
nas_emm_attach_req, /* Attach request */
|
||||
nas_emm_attach_acc, /* Attach accept */
|
||||
NULL, /* Attach complete */
|
||||
NULL, /* Attach reject */
|
||||
nas_emm_attach_req, /* Attach request */
|
||||
nas_emm_attach_acc, /* Attach accept */
|
||||
nas_emm_attach_comp, /* Attach complete */
|
||||
nas_emm_attach_rej, /* Attach reject */
|
||||
NULL, /* Detach request */
|
||||
NULL, /* Detach accept */
|
||||
|
||||
NULL, /* Tracking area update request */
|
||||
NULL, /* Tracking area update accept */
|
||||
NULL, /* Tracking area update complete */
|
||||
NULL, /* Tracking area update reject */
|
||||
nas_emm_trac_area_upd_req, /* Tracking area update request */
|
||||
nas_emm_trac_area_upd_acc, /* Tracking area update accept */
|
||||
NULL, /* Tracking area update complete (No IE's)*/
|
||||
nas_emm_trac_area_upd_rej, /* Tracking area update reject */
|
||||
|
||||
NULL, /* Service reject */
|
||||
nas_emm_serv_rej, /* Service reject */
|
||||
|
||||
NULL, /* GUTI reallocation command */
|
||||
NULL, /* GUTI reallocation complete */
|
||||
nas_emm_auth_req, /* Authentication request */
|
||||
nas_emm_auth_resp, /* Authentication response */
|
||||
NULL, /* Authentication reject */
|
||||
NULL, /* Authentication failure */
|
||||
NULL, /* Identity request */
|
||||
NULL, /* Identity response */
|
||||
nas_emm_sec_mode_cmd, /* Security mode command */
|
||||
NULL, /* Security mode complete */
|
||||
NULL, /* Security mode reject */
|
||||
nas_emm_guti_realloc_cmd, /* GUTI reallocation command */
|
||||
NULL, /* GUTI reallocation complete (No IE's) */
|
||||
nas_emm_auth_req, /* Authentication request */
|
||||
nas_emm_auth_resp, /* Authentication response */
|
||||
NULL, /* Authentication reject (No IE:s)*/
|
||||
nas_emm_attach_fail, /* Authentication failure */
|
||||
nas_emm_id_req, /* Identity request */
|
||||
nas_emm_id_res, /* Identity response */
|
||||
nas_emm_sec_mode_cmd, /* Security mode command */
|
||||
nas_emm_sec_mode_comp, /* Security mode complete */
|
||||
nas_emm_sec_mode_rej, /* Security mode reject */
|
||||
|
||||
NULL, /* EMM status */
|
||||
NULL, /* EMM information */
|
||||
nas_emm_emm_status, /* EMM status */
|
||||
nas_emm_emm_inf, /* EMM information */
|
||||
NULL, /* NONE */
|
||||
};
|
||||
|
||||
|
@ -979,6 +1441,11 @@ void proto_register_nas_eps(void) {
|
|||
FT_UINT8, BASE_HEX, VALS(nas_msg_emm_strings), 0x0,
|
||||
"", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_common_elem_id,
|
||||
{ "Element ID", "nas_eps.common.elem_id",
|
||||
FT_UINT8, BASE_DEC, NULL, 0,
|
||||
"", HFILL }
|
||||
},
|
||||
{ &hf_nas_emm_elem_id,
|
||||
{ "Element ID", "nas_eps.emm.elem_id",
|
||||
FT_UINT8, BASE_DEC, NULL, 0,
|
||||
|
@ -1029,17 +1496,49 @@ void proto_register_nas_eps(void) {
|
|||
FT_BYTES, BASE_HEX, NULL, 0x0,
|
||||
"RES", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_emm_cause,
|
||||
{ "Cause","nas_eps.emm.cause",
|
||||
FT_UINT8,BASE_DEC, VALS(nas_eps_emm_cause_values), 0x0,
|
||||
"Cause", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_emm_short_mac,
|
||||
{ "Short MAC value","nas_eps.emm.short_mac",
|
||||
FT_BYTES, BASE_HEX, NULL, 0x0,
|
||||
"Short MAC value", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_active_flg,
|
||||
{ "Active flag", "nas_eps.emm.active_flg",
|
||||
FT_BOOLEAN, 8, TFS(&nas_eps_emm_active_flg_value), 0x0,
|
||||
"Active flag", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_eps_update_result_value,
|
||||
{ "EPS update result value","nas_eps.emm.eps_update_result_value",
|
||||
FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_result_vals), 0x0,
|
||||
"EPS update result value", HFILL }
|
||||
},
|
||||
{ &hf_nas_eps_eps_update_type_value,
|
||||
{ "EPS update type value","nas_eps.emm.update_type_value",
|
||||
FT_UINT8,BASE_DEC, VALS(nas_eps_emm_eps_update_type_vals), 0x0,
|
||||
"EPS update type value", HFILL }
|
||||
},
|
||||
};
|
||||
|
||||
/* Setup protocol subtree array */
|
||||
#define NUM_INDIVIDUAL_ELEMS 1
|
||||
static gint *ett[NUM_INDIVIDUAL_ELEMS +
|
||||
NUM_NAS_MSG_EMM + NUM_NAS_EMM_ELEM];
|
||||
NUM_NAS_EPS_COMMON_ELEM +
|
||||
NUM_NAS_MSG_EMM + NUM_NAS_EMM_ELEM];
|
||||
|
||||
ett[0] = &ett_nas_eps;
|
||||
|
||||
last_offset = NUM_INDIVIDUAL_ELEMS;
|
||||
|
||||
for (i=0; i < NUM_NAS_EPS_COMMON_ELEM; i++, last_offset++)
|
||||
{
|
||||
ett_nas_eps_common_elem[i] = -1;
|
||||
ett[last_offset] = &ett_nas_eps_common_elem[i];
|
||||
}
|
||||
|
||||
for (i=0; i < NUM_NAS_MSG_EMM; i++, last_offset++)
|
||||
{
|
||||
ett_nas_msg_emm[i] = -1;
|
||||
|
|
Loading…
Reference in New Issue