diff options
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-gsm_a.c | 365 | ||||
-rw-r--r-- | epan/dissectors/packet-rsl.c | 444 |
2 files changed, 740 insertions, 69 deletions
diff --git a/epan/dissectors/packet-gsm_a.c b/epan/dissectors/packet-gsm_a.c index 121f170e88..816d614847 100644 --- a/epan/dissectors/packet-gsm_a.c +++ b/epan/dissectors/packet-gsm_a.c @@ -665,9 +665,21 @@ static const value_string gsm_dtap_elem_strings[] = { * [3] 10.5.2.54 (void) * [3] 10.5.2.55 (void) * [3] 10.5.2.56 3G Target Cell */ + { 0x00, "Service Support" }, /* [3] 10.5.2.57 * + /* 10.5.2.58 MBMS p-t-m Channel Description */ { 0x00, "Dedicated Service Information" }, /* [3] 10.5.2.59 */ - - +/* + * 10.5.2.60 MPRACH Description + * 10.5.2.61 Restriction Timer + * 10.5.2.62 MBMS Session Identity + * 10.5.2.63 Reduced group or broadcast call reference + * 10.5.2.64 Talker Priority status + * 10.5.2.65 Talker Identity + * 10.5.2.66 Token + * 10.5.2.67 PS Cause + * 10.5.2.68 VGCS AMR Configuration + * 10.5.2.69 Carrier Indication + */ /* Mobility Management Information Elements 10.5.3 */ { 0x00, "Authentication Parameter RAND" }, { 0x00, "Authentication Parameter AUTN (UMTS authentication challenge only)" }, @@ -1119,7 +1131,8 @@ static int hf_gsm_a_A5_2_algorithm_sup = -1; static int hf_gsm_a_odd_even_ind = -1; static int hf_gsm_a_mobile_identity_type = -1; -static int hf_gsm_a_L3_protocol_discriminator = -1; +static int hf_gsm_a_L3_protocol_discriminator = -1; +static int hf_gsm_a_call_prio = -1; static int hf_gsm_a_skip_ind = -1; static int hf_gsm_a_bcc = -1; @@ -1152,6 +1165,8 @@ static int hf_gsm_a_rr_time_diff = -1; static int hf_gsm_a_rr_tlli = -1; static int hf_gsm_a_rr_target_mode = -1; static int hf_gsm_a_rr_group_cipher_key_number = -1; +static int hf_gsm_a_rr_MBMS_multicast = -1; +static int hf_gsm_a_rr_MBMS_broadcast = -1; static int hf_gsm_a_rr_last_segment = -1; static int hf_gsm_a_gmm_split_on_ccch = -1; static int hf_gsm_a_gmm_non_drx_timer = -1; @@ -3306,8 +3321,24 @@ typedef enum * [3] 10.5.2.54 (void) * [3] 10.5.2.55 (void) * [3] 10.5.2.56 3G Target Cell */ + DE_RR_SERV_SUP, /* 10.5.2.57 Service Support */ +/* 10.5.2.58 MBMS p-t-m Channel Description + */ + DE_RR_DED_SERV_INF, /* [3] 10.5.2.59 Dedicated Service Information */ +/* + * 10.5.2.60 MPRACH Description + * 10.5.2.61 Restriction Timer + * 10.5.2.62 MBMS Session Identity + * 10.5.2.63 Reduced group or broadcast call reference + * 10.5.2.64 Talker Priority status + * 10.5.2.65 Talker Identity + * 10.5.2.66 Token + * 10.5.2.67 PS Cause + * 10.5.2.68 VGCS AMR Configuration + * 10.5.2.69 Carrier Indication + */ /* Mobility Management Information Elements 10.5.3 */ DE_AUTH_PARAM_RAND, /* Authentication Parameter RAND */ @@ -3931,45 +3962,28 @@ de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [3] 10.5.1.11 */ +static const value_string gsm_a_call_prio_vals[] = { + { 0x00, "no priority applied" }, + { 0x01, "call priority level 4" }, + { 0x02, "call priority level 3" }, + { 0x03, "call priority level 2" }, + { 0x04, "call priority level 1" }, + { 0x05, "call priority level 0" }, + { 0x06, "call priority level B" }, + { 0x07, "call priority level A" }, + { 0, NULL } +}; + static guint8 de_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint8 oct; guint32 curr_offset; - const gchar *str; len = len; curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); - - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); - - switch (oct & 0x07) - { - case 1: str = "Call priority level 4"; break; - case 2: str = "Call priority level 3"; break; - case 3: str = "Call priority level 2"; break; - case 4: str = "Call priority level 1"; break; - case 5: str = "Call priority level 0"; break; - case 6: str = "Call priority level B"; break; - case 7: str = "Call priority level A"; break; - default: - str = "No priority applied"; - break; - } - - other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : %s", - a_bigbuf, - str); - + proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_call_prio, tvb, curr_offset, 1, FALSE); curr_offset++; /* no length check possible */ @@ -4954,19 +4968,27 @@ de_rr_mult_all(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.25 P3 Rest Octets */ /* - * [3] 10.5.2.25a Packet Channel Description + * [3] 10.5.2.25a Packet Channel Description C V 3 */ static guint8 de_rr_packet_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { + proto_tree *subtree; + proto_item *item; guint32 curr_offset; len = len; curr_offset = offset; - proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)"); + item = + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_RR_PACKET_CH_DESC].strptr); - curr_offset = curr_offset + 4; + subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_RR_PACKET_CH_DESC]); + proto_tree_add_text(tree,tvb, curr_offset, 3 ,"Data(Not decoded)"); + + curr_offset = curr_offset + 3; return(curr_offset - offset); } @@ -5156,7 +5178,7 @@ de_rr_pow_cmd_and_acc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin * [3] 10.5.2.29 RACH Control Parameters */ /* - * [3] 10.5.2.30 Request Reference + * [3] 10.5.2.30 Request Reference M V 3 */ guint8 de_rr_req_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) @@ -5428,7 +5450,41 @@ de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.54 (void) * [3] 10.5.2.55 (void) * [3] 10.5.2.56 3G Target Cell -*/ + */ +/* + * 10.5.2.57 Service Support + */ +static const true_false_string gsm_a_rr_MBMS_multicast_value = { + "mobile station requires notification of multicast MBMS services", + "mobile station does not require notification of multicast MBMS services" +}; +static const true_false_string gsm_a_rr_MBMS_broadcast_value = { + "mobile station requires notification of broadcast MBMS services", + "mobile station does not require notification of broadcast MBMS services" +}; +static guint8 +de_rr_serv_sup(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +{ + guint32 curr_offset; + + len = len; + curr_offset = offset; + /* bit 1 + * 0 mobile station does not require notification of broadcast MBMS services + * 1 mobile station requires notification of broadcast MBMS services + * bit 2 + * 0 mobile station does not require notification of multicast MBMS services + * 1 mobile station requires notification of multicast MBMS services + */ + /* MBMS Multicast */ + proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_multicast, tvb, curr_offset, 1, FALSE); + + /* MBMS Broadcast */ + proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_broadcast, tvb, curr_offset, 1, FALSE); + curr_offset++; + return(curr_offset - offset); +} + /* * [3] 10.5.2.59 Dedicated Service Information */ @@ -12612,8 +12668,24 @@ static guint8 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset * [3] 10.5.2.54 (void) * [3] 10.5.2.55 (void) * [3] 10.5.2.56 3G Target Cell -*/ + * 10.5.2.57 Service Support */ + de_rr_serv_sup, /* 10.5.2.57 Service Support */ +/* + * 10.5.2.58 MBMS p-t-m Channel Description + */ de_rr_ded_serv_inf, /* [3] 10.5.2.59 Dedicated Service Information */ +/* + * 10.5.2.60 MPRACH Description + * 10.5.2.61 Restriction Timer + * 10.5.2.62 MBMS Session Identity + * 10.5.2.63 Reduced group or broadcast call reference + * 10.5.2.64 Talker Priority status + * 10.5.2.65 Talker Identity + * 10.5.2.66 Token + * 10.5.2.67 PS Cause + * 10.5.2.68 VGCS AMR Configuration + * 10.5.2.69 Carrier Indication + */ /* Mobility Management Information Elements 10.5.3 */ de_auth_param_rand, /* Authentication Parameter RAND */ @@ -12690,8 +12762,8 @@ static guint8 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset de_gmm_rec_npdu_lst, /* Receive N-PDU Numbers List */ de_gmm_ms_net_cap, /* MS Network Capability */ de_gmm_ms_radio_acc_cap, /* MS Radio Access Capability */ - de_gmm_cause, /* GMM Cause */ - de_gmm_rai, /* Routing Area Identification */ + de_gmm_cause, /* GMM Cause */ + de_gmm_rai, /* Routing Area Identification */ de_gmm_update_res, /* Update Result */ de_gmm_update_type, /* Update Type */ de_gmm_ac_ref_nr, /* A&C Reference Number */ @@ -14963,6 +15035,7 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) EXTRANEOUS_DATA_CHECK(curr_len, 0); } + /* * [4] 9.1.15a */ @@ -15034,6 +15107,188 @@ dtap_mm_tmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint EXTRANEOUS_DATA_CHECK(curr_len, 0); } + +/* + * 9.1.2 Assignment command + */ +void +dtap_rr_ass_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; + + /* Channel Description 2 10.5.2.5a M V 3 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_CH_DSC2); + + /* Power Command 10.5.2.28 M V 1 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_POW_CMD); + + /* 05 Frequency List 10.5.2.13 C TLV 4-132 */ + ELEM_OPT_TLV(0x05, BSSAP_PDU_TYPE_DTAP, DE_RR_FREQ_LIST, " - Frequency List, after time"); + + /* 62 Cell Channel Description 10.5.2.1b O TV 17 */ + ELEM_OPT_TLV(0x62, BSSAP_PDU_TYPE_DTAP, DE_RR_CELL_CH_DSC, ""); + + /* 10 Multislot Allocation 10.5.2.21b C TLV 3-12 */ + ELEM_OPT_TLV(0x10,BSSAP_PDU_TYPE_DTAP, DE_RR_MULT_ALL, " - Description of the multislot configuration"); + + /* 63 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x63,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of the First Channel(Channel Set 1)"); + + /* 11 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x11,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 2"); + + /* 13 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x13,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 3"); + + /* 14 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x14,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 4"); + + /* 15 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x15,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 5"); + + /* 16 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x16,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 6"); + + /* 17 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x17,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 7"); + + /* 18 Channel Mode 10.5.2.6 O TV 2 */ + ELEM_OPT_TV(0x18,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_MODE, " - Mode of Channel Set 8"); + + /* 64 Channel Description 10.5.2.5 O TV 4 */ + ELEM_OPT_TV(0x64,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_DSC, "Description of the Second Channel, after time"); + + /* 66 Channe l Mode 2 10.5.2.7 O TV 2 */ + /* Mode of the Second Channel */ + + /* 72 Mobile Allocation 10.5.2.21 C TLV 3-10 */ + ELEM_OPT_TLV(0x72,BSSAP_PDU_TYPE_DTAP, DE_RR_MOB_ALL, " - Mobile Allocation, after time"); + + /* 7C Starting Time 10.5.2.38 O TV 3 */ + ELEM_OPT_TV(0x7C,BSSAP_PDU_TYPE_DTAP, DE_RR_STARTING_TIME, ""); + + /* 19 Frequency List 10.5.2.13 C TLV 4-132 */ + ELEM_OPT_TLV(0x19, BSSAP_PDU_TYPE_DTAP, DE_RR_FREQ_LIST, " - Frequency List, before time"); + + /* 1C Channel Description 2 10.5.2.5a O TV 4 */ + ELEM_OPT_TV(0x1c,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_DSC2, " - Description of the First Channel, before time"); + + /* 1D Channel Description 10.5.2.5 O TV 4 */ + ELEM_OPT_TV(0x1d,BSSAP_PDU_TYPE_DTAP, DE_RR_CH_DSC, " - Description of the Second Channel, before time"); + + /* 1E Frequency channel sequence 10.5.2.12 C TV 10 */ + ELEM_OPT_TV(0x1e,BSSAP_PDU_TYPE_DTAP, DE_RR_FREQ_CH_SEQ, " - Frequency channel sequence before time"); + + /* 21 Mobile Allocation 10.5.2.21 C TLV 3-10 */ + ELEM_OPT_TLV(0x72,BSSAP_PDU_TYPE_DTAP, DE_RR_MOB_ALL, " - Mobile Allocation, before time"); + + /* 9- Cipher Mode Setting 10.5.2.9 O TV 1 */ + ELEM_OPT_TV_SHORT(0x90,BSSAP_PDU_TYPE_DTAP, DE_RR_CIP_MODE_SET, ""); + /* 01 VGCS target mode Indication VGCS target mode Indication 10.5.2.42a O TLV 3 */ + ELEM_OPT_TLV(0x01,BSSAP_PDU_TYPE_DTAP, DE_RR_VGCS_TAR_MODE_IND, ""); + + /* 03 Multi-Rate configuration, MultiRate configuration 10.5.2.21aa O TLV 4-8 */ + ELEM_OPT_TLV(0x03,BSSAP_PDU_TYPE_DTAP, DE_RR_MULTIRATE_CONF, ""); + + /* 04 VGCS Ciphering Parameters VGCS Ciphering Parameters 10.5.2.42b O TLV 3-15 */ + ELEM_OPT_TLV(0x04,BSSAP_PDU_TYPE_DTAP, DE_RR_VGCS_CIP_PAR, ""); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); + +} + +/* + * 9.1.3 Assignment complete + */ +void +dtap_rr_ass_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; + + /* RR Cause RR Cause 10.5.2.31 M V 1 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_CAUSE); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); + +} + +/* + * 9.1.4 Assignment failure + */ +void +dtap_rr_ass_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; + + /* RR Cause RR Cause 10.5.2.31 M V 1 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_CAUSE); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); + +} +/* + * 9.1.11 Classmark change + */ +void +dtap_rr_mm_cm_change(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 Station Classmark 2 10.5.1.6 M LV 4 */ + ELEM_MAND_LV(BSSAP_PDU_TYPE_DTAP, DE_MS_CM_2, ""); + /* 20 Mobile Station Classmark 3 10.5.1.7 C TLV 3-34 */ + ELEM_OPT_TLV(0x20, BSSAP_PDU_TYPE_DTAP, DE_MS_CM_3, ""); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); + +} + +/* + * 9.1.13b GPRS suspension request + */ +void +dtap_rr_gprs_sus_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; + + /* TLLI 10.5.2.41a M V 4 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_TLLI); + + /* Routeing Area Identification 10.5.5.15 M V 6 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RAI); + /* Suspension cause 10.5.2.47 M V 1 */ + ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_SUS_CAU); + + /* 01 Service Support 10.5.2.57 O TV 2 */ + ELEM_OPT_TV_SHORT(0x01,BSSAP_PDU_TYPE_DTAP, DE_RR_SERV_SUP,""); + + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + +} /* 3GPP TS 24.008 version 4.7.0 Release 4 * [3] 9.1.15 */ @@ -15214,7 +15469,6 @@ dtap_rr_imm_ass(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) if(tvb_length_remaining(tvb,curr_offset) > 0) ELEM_MAND_V(BSSAP_PDU_TYPE_DTAP, DE_RR_IA_REST_OCT); - EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * [4] 9.1.25 @@ -17567,9 +17821,9 @@ static void (*dtap_msg_rr_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset NULL, /* Configuration Change Ack. */ NULL, /* Configuration Change Reject */ - NULL, /* Assignment Command */ - NULL, /* Assignment Complete */ - NULL, /* Assignment Failure */ + dtap_rr_ass_cmd, /* 9.1.2 Assignment Command */ + dtap_rr_ass_comp, /* Assignment Complete */ + dtap_rr_ass_fail, /* Assignment Failure */ dtap_rr_ho_cmd, /* Handover Command */ NULL, /* Handover Complete */ NULL, /* Handover Failure */ @@ -17628,11 +17882,11 @@ static void (*dtap_msg_rr_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset NULL, /* Channel Mode Modify Acknowledge */ NULL, /* Frequency Redefinition */ NULL, /* Measurement Report */ - NULL, /* Classmark Change */ + dtap_rr_mm_cm_change, /* 9.1.11 Classmark Change */ NULL, /* Classmark Enquiry */ NULL, /* Extended Measurement Report */ NULL, /* Extended Measurement Order */ - NULL, /* GPRS Suspension Request */ + dtap_rr_gprs_sus_req, /* 9.1.13b GPRS Suspension Request */ NULL, /* VGCS Uplink Grant */ NULL, /* Uplink Release */ @@ -18843,6 +19097,11 @@ proto_register_gsm_a(void) FT_UINT8,BASE_DEC, VALS(protocol_discriminator_vals), 0x0f, "Protocol discriminator", HFILL } }, + { &hf_gsm_a_call_prio, + { "Call priority", "gsm_a.call_prio", + FT_UINT8, BASE_DEC, VALS(gsm_a_call_prio_vals), 0x07, + "Call priority", HFILL } + }, { &hf_gsm_a_skip_ind, { "Skip Indicator", "gsm_a.skip.ind", FT_UINT8, BASE_DEC, NULL, 0xf0, @@ -19000,6 +19259,16 @@ proto_register_gsm_a(void) FT_UINT8,BASE_DEC, NULL, 0x3c, "Group cipher key number", HFILL } }, + { &hf_gsm_a_rr_MBMS_broadcast, + { "MBMS Broadcast","gsm_a.rr.MBMS_broadcast", + FT_BOOLEAN,8, TFS(&gsm_a_rr_MBMS_broadcast_value), 0x01, + "MBMS Broadcast", HFILL } + }, + { &hf_gsm_a_rr_MBMS_multicast, + { "MBMS Multicast","gsm_a.rr.MBMS_multicast", + FT_BOOLEAN,8, TFS(&gsm_a_rr_MBMS_multicast_value), 0x02, + "MBMS Multicast", HFILL } + }, { &hf_gsm_a_rr_last_segment, { "Last Segment","gsm_a.rr.last_segment", FT_BOOLEAN,8, TFS(&gsm_a_rr_last_segment_value), 0x01, diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c index 77de9c0adc..e8981884ac 100644 --- a/epan/dissectors/packet-rsl.c +++ b/epan/dissectors/packet-rsl.c @@ -43,6 +43,8 @@ #include <epan/proto.h> #include <epan/lapd_sapi.h> +#include "packet-gsm_a.h" + /* Initialize the protocol and registered fields */ static int proto_rsl = -1; @@ -66,14 +68,31 @@ static int hf_rsl_prio = -1; static int hf_rsl_sapi = -1; static int hf_rsl_cause = -1; static int hf_rsl_rel_mode = -1; +static int hf_rsl_meas_res_no = -1; +static int hf_rsl_extension_bit = -1; +static int hf_rsl_class = -1; +static int hf_rsl_paging_grp = -1; +static int hf_rsl_ch_needed = -1; +static int hf_rsl_emlpp_prio = -1; /* Initialize the subtree pointers */ static int ett_rsl = -1; +static int ett_ie_link_id; static int ett_ie_ch_no = -1; +static int ett_ie_frame_no = -1; +static int ett_ie_L3_inf = -1; +static int ett_ie_ms_id = -1; static int ett_ie_phy_ctx = -1; +static int ett_ie_paging_grp = -1; static int ett_ie_access_delay = -1; static int ett_ie_req_ref = -1; +static int ett_ie_rel_mode = -1; +static int ett_ie_rlm_cause =-1; static int ett_ie_full_imm_ass_inf = -1; +static int ett_ie_ch_needed = -1; +static int ett_ie_emlpp_prio = -1; +static int ett_ie_cause = -1; +static int ett_ie_meas_res_no = -1; proto_tree *top_tree; dissector_handle_t gsm_a_ccch_handle = NULL; @@ -89,6 +108,10 @@ static const true_false_string rsl_na_vals = { "Not Applicable" }; +static const true_false_string rsl_extension_bit_value = { + "Extension" + "No Extension", +}; /* * 9.1 Message discriminator @@ -105,19 +128,31 @@ static const value_string rsl_msg_disc_vals[] = { /* * 9.2 MESSAGE TYPE */ -#define RSL_MSG_TYPE_DATA_REQ 1 -#define RSL_MSG_TYPE_DATA_IND 2 -#define RSL_MSG_TYPE_ERROR_IND 3 -#define RSL_MSG_TYPE_EST_REQ 4 -#define RSL_MSG_TYPE_EST_CONF 5 -#define RSL_MSG_EST_IND 6 -#define RSL_MSG_REL_REQ 7 -#define RSL_MSG_REL_CONF 8 -#define RSL_MSG_REL_IND 9 -#define RSL_MSG_UNIT_DATA_REQ 10 - -#define RSL_MSG_CHANRQD 19 -#define RSL_MSG_IMM_ASS_CMD 22 +#define RSL_MSG_TYPE_DATA_REQ 1 +#define RSL_MSG_TYPE_DATA_IND 2 +#define RSL_MSG_TYPE_ERROR_IND 3 +#define RSL_MSG_TYPE_EST_REQ 4 +#define RSL_MSG_TYPE_EST_CONF 5 +#define RSL_MSG_EST_IND 6 +#define RSL_MSG_REL_REQ 7 +#define RSL_MSG_REL_CONF 8 +#define RSL_MSG_REL_IND 9 +#define RSL_MSG_UNIT_DATA_REQ 10 +/* Common Channel Management/TRX Management messages */ +#define RSL_MSG_BCCH_INFO 17 +#define RSL_MSG_CCCH_LOAD_IND 18 +#define RSL_MSG_CHANRQD 19 +#define RSL_MSG_DELETE_IND 20 +#define RSL_MSG_PAGING_CMD 21 +#define RSL_MSG_IMM_ASS_CMD 22 + +#define RSL_MSG_CHAN_ACTIV 33 +#define RSL_MSG_CHAN_ACTIV_ACK 34 +#define RSL_MSG_CHAN_ACTIV_N_ACK 35 +#define RSL_MSG_CONN_FAIL 36 +#define RSL_MSG_DEACTIVATE_SACCH 37 + +#define RSL_MSG_MEAS_RES 40 static const value_string rsl_msg_type_vals[] = { /* 0 0 0 0 - - - - Radio Link Layer Management messages: */ { 0x01, "DATA REQuest" }, /* 8.3.1 */ @@ -340,7 +375,7 @@ dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint8 octet; ti = proto_tree_add_text(tree, tvb,offset,2,"Link Identifier IE "); - ie_tree = proto_item_add_subtree(ti, ett_ie_phy_ctx); + ie_tree = proto_item_add_subtree(ti, ett_ie_link_id); /* Element identifier */ proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); @@ -368,6 +403,32 @@ dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, return offset; } + /* + * 9.3.8 Frame Number + */ +static int +dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + + ti = proto_tree_add_text(tree, tvb,offset,0,"Frame Number"); + ie_tree = proto_item_add_subtree(ti, ett_ie_frame_no); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + + proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, FALSE); + proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, FALSE); + offset++; + proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, FALSE); + offset++; + + return offset; +} + + /* * 9.3.11 L3 Information 9.3.11 M TLV >=3 * @@ -384,7 +445,7 @@ dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o guint16 length; ti = proto_tree_add_text(tree, tvb,offset,0,"L3 Information "); - ie_tree = proto_item_add_subtree(ti, ett_ie_phy_ctx); + ie_tree = proto_item_add_subtree(ti, ett_ie_L3_inf); /* Element identifier */ proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); @@ -408,7 +469,60 @@ dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o return offset; } +/* + * 9.3.12 MS Identity + */ +static int +dissect_rsl_ie_ms_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + guint length; + + ti = proto_tree_add_text(tree, tvb,offset,0,"MS Identity"); + ie_tree = proto_item_add_subtree(ti, ett_ie_ms_id); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + /* Length */ + length = tvb_get_guint8(tvb,offset); + proto_item_set_len(ti, length+2); + proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE); + offset++; + + de_mid(tvb, ie_tree, offset, length, NULL, 0); + + offset = offset + length; + + return offset; + + +} +/* + * 9.3.14 Paging Group M TV 2 2 + */ +static int +dissect_rsl_ie_paging_grp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + + ti = proto_tree_add_text(tree, tvb,offset,0,"Paging Group"); + ie_tree = proto_item_add_subtree(ti, ett_ie_paging_grp); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + + /* The Paging Group field (octet 2) contains the binary representation of the paging + * group as defined in 3GPP TS 45.002. + */ + proto_tree_add_item(ie_tree, hf_rsl_paging_grp, tvb, offset, 1, FALSE); + + return offset; +} /* * 9.3.16 Physical Context TLV */ @@ -502,7 +616,7 @@ dissect_rsl_ie_rel_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_tree *ie_tree; ti = proto_tree_add_text(tree, tvb,offset,4,"Release Mode IE "); - ie_tree = proto_item_add_subtree(ti, ett_ie_req_ref); + ie_tree = proto_item_add_subtree(ti, ett_ie_rel_mode); /* Element identifier */ proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); @@ -518,7 +632,7 @@ dissect_rsl_ie_rel_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, return offset; } -static const value_string rsl_cause_vals[] = { +static const value_string rsl_rlm_cause_vals[] = { { 0x00, "reserved" }, { 0x01, "timer T200 expired (N200+1) times" }, { 0x02, "re-establishment request" }, @@ -550,7 +664,7 @@ dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree guint length; ti = proto_tree_add_text(tree, tvb,offset,0,"RLM Cause IE "); - ie_tree = proto_item_add_subtree(ti, ett_ie_full_imm_ass_inf); + ie_tree = proto_item_add_subtree(ti, ett_ie_rlm_cause); /* Element identifier */ proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); @@ -571,6 +685,95 @@ dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree return offset; } +static const value_string rsl_class_vals[] = { + { 0x00, "Normal event" }, + { 0x01, "Normal event" }, + { 0x02, "Resource unavailable" }, + { 0x03, "Service or option not available" }, + { 0x04, "Service or option not implemented" }, + { 0x05, "Invalid message (e.g. parameter out of range)" }, + { 0x06, "Protocol error" }, + { 0x07, "Interworking" }, + { 0, NULL } +}; + + /* + * 9.3.26 Cause + */ +static int +dissect_rsl_ie_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + guint length; + guint8 octet; + int ie_offset; + + ti = proto_tree_add_text(tree, tvb,offset,0,"Cause IE "); + ie_tree = proto_item_add_subtree(ti, ett_ie_cause); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + /* Length */ + length = tvb_get_guint8(tvb,offset); + proto_item_set_len(ti, length+2); + proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE); + offset++; + ie_offset = offset; + + /* Cause Value */ + octet = tvb_get_guint8(tvb,offset); + proto_tree_add_item(tree, hf_rsl_extension_bit, tvb, offset, 1, FALSE); + proto_tree_add_item(tree, hf_rsl_class, tvb, offset, 1, FALSE); + if ((octet & 0x80) == 80) + offset++; + + /* Cause Extension*/ + /* Diagnostic(s) if any */ + return ie_offset+length; +} +/* + * 9.3.27 Measurement result number + */ +static int +dissect_rsl_ie_meas_res_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + ti = proto_tree_add_text(tree, tvb,offset,0,"Measurement result number IE "); + ie_tree = proto_item_add_subtree(ti, ett_ie_meas_res_no); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + + /* Measurement result number */ + proto_tree_add_item(ie_tree, hf_rsl_meas_res_no, tvb, offset, 1, FALSE); + offset++; + + return offset; +} +/* + * 9.3.28 Message Identifier + */ +static int +dissect_rsl_ie_message_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + ti = proto_tree_add_text(tree, tvb,offset,0,"Measurement result number IE "); + ie_tree = proto_item_add_subtree(ti, ett_ie_meas_res_no); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + /* Message Type */ + proto_tree_add_item(tree, hf_rsl_msg_type, tvb, offset, 1, FALSE); + offset++; + return offset; +} + /* * 9.3.35 Full Immediate Assign Info TLV 25 */ @@ -608,6 +811,78 @@ dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t return offset; } + +/* + * 9.3.40 Channel Needed + */ +static const value_string rsl_ch_needed_vals[] = { + { 0x00, "Any Channel" }, + { 0x01, "SDCCH" }, + { 0x02, "TCH/F (Full rate)" }, + { 0x03, "TCH/F or TCH/H (Dual rate)" }, + { 0, NULL } +}; + +static int +dissect_rsl_ie_ch_needed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + + + ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Needed"); + ie_tree = proto_item_add_subtree(ti, ett_ie_ch_needed); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + + /* Channel */ + proto_tree_add_item(ie_tree, hf_rsl_ch_needed, tvb, offset, 1, FALSE); + offset++; + + return offset; +} + +/* + * 9.3.49 eMLPP Priority + */ +static const value_string rsl_emlpp_prio_vals[] = { + { 0x00, "no priority applied" }, + { 0x01, "call priority level 4" }, + { 0x02, "call priority level 3" }, + { 0x03, "call priority level 2" }, + { 0x04, "call priority level 1" }, + { 0x05, "call priority level 0" }, + { 0x06, "call priority level B" }, + { 0x07, "call priority level A" }, + { 0, NULL } +}; + +static int +dissect_rsl_ie_emlpp_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) +{ + proto_item *ti; + proto_tree *ie_tree; + + ti = proto_tree_add_text(tree, tvb,offset,0,"eMLPP Priority"); + ie_tree = proto_item_add_subtree(ti, ett_ie_emlpp_prio); + + /* Element identifier */ + proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE); + offset++; + + /* The call priority field (bit 3 to 1 of octet 2) is coded in the same way + * as the call priority field (bit 3 to 1 of octet 5) in the + * Descriptive group or broadcast call reference information element + * as defined in 3GPP TS 24.008. + */ + proto_tree_add_item(ie_tree, hf_rsl_emlpp_prio, tvb, offset, 1, FALSE); + offset++; + + return offset; +} + static int dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) { @@ -710,7 +985,7 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) /* Common Channel Management/TRX Management messages: */ /* 8.5.3 */ - case RSL_MSG_CHANRQD: + case RSL_MSG_CHANRQD: /* 19 */ /* Channel number 9.3.1 M TV 2 */ offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); /* Request Reference 9.3.19 M TV 4 */ @@ -721,6 +996,28 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) if(tvb_length_remaining(tvb,offset) > 0) offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset); break; + /* 8.5.4 DELETE INDICATION */ + case RSL_MSG_DELETE_IND: /* 20 */ + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + /* Full Imm. Assign Info 9.3.35 M TLV 25 */ + offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset); + break; + case RSL_MSG_PAGING_CMD: /* 21 */ + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + /* Paging Group 9.3.14 M TV 2 2 */ + offset = dissect_rsl_ie_paging_grp(tvb, pinfo, tree, offset); + /* MS Identity 9.3.12 M TLV 2-10 2 */ + offset = dissect_rsl_ie_ms_id(tvb, pinfo, tree, offset); + /* Channel Needed 9.3.40 O 1) TV 2 2 */ + if(tvb_length_remaining(tvb,offset) > 0) + offset = dissect_rsl_ie_ch_needed(tvb, pinfo, tree, offset); + /* eMLPP Priority 9.3.49 O 2) TV 2 2 */ + if(tvb_length_remaining(tvb,offset) > 0) + offset = dissect_rsl_ie_emlpp_prio(tvb, pinfo, tree, offset); + break; + /* 8.5.6 */ case RSL_MSG_IMM_ASS_CMD: /* Channel number 9.3.1 M TV 2 */ offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); @@ -728,6 +1025,72 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset); break; /* Dedicated Channel Management messages: */ + /* 8.4.1 CHANNEL ACTIVATION 33*/ + case RSL_MSG_CHAN_ACTIV: + break; + /* Channel number 9.3.1 M TV 2 */ + /* Activation Type 9.3.3 M TV 2 */ + /* Channel Mode 9.3.6 M TLV 8-9 */ + /* Channel Identification 9.3.5 O 7) TLV 8 */ + /* Encryption information 9.3.7 O 1) TLV >=3 */ + /* Handover Reference 9.3.9 C 2) TV 2 */ + /* BS Power 9.3.4 O 3) TV 2 */ + /* MS Power 9.3.13 O 3) TV 2 */ + /* Timing Advance 9.3.24 C 3) 4) TV 2 */ + /* BS Power Parameters 9.3.32 O 5) TLV >=2 */ + /* MS Power Parameters 9.3.31 O 5) TLV >=2 */ + /* Physical Context 9.3.16 O 6) TLV >=2 */ + /* SACCH Information 9.3.29 O 8) TLV >=3 */ + /* UIC 9.3.50 O 9) TLV 3 */ + /* Main channel reference 9.3.51 O 10) TV 2 */ + /* MultiRate configuration 9.3.52 O 11) TLV >=4 */ + /* MultiRate Control 9.3.53 O 12) TV 2 */ + /* Supported Codec Types 9.3.54 O 12) TLV >=5 */ + /* TFO transparent container 9.3.59 O 12) TLV >=3 */ + + /* 8.4.2 CHANNEL ACTIVATION ACKNOWLEDGE 34*/ + case RSL_MSG_CHAN_ACTIV_ACK: + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + /* Frame number 9.3.8 M TV 3 */ + offset = dissect_rsl_ie_frame_no(tvb, pinfo, tree, offset); + break; + case RSL_MSG_CHAN_ACTIV_N_ACK: + /* 8.4.3 CHANNEL ACTIVATION NEGATIVE ACKNOWLEDGE */ + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + /* Cause 9.3.26 M TLV >=3 */ + offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset); + break; + /* 8.4.4 CONNECTION FAILURE INDICATION */ + case RSL_MSG_CONN_FAIL: + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + /* Cause 9.3.26 M TLV >=3 */ + offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset); + break; + /* 8.4.5 DEACTIVATE SACCH */ + case RSL_MSG_DEACTIVATE_SACCH: + /* Channel number 9.3.1 M TV 2 */ + offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset); + break; + /* 8.4.6 ENCRYPTION COMMAND */ + /* Encryption information 9.3.7 M TLV >=3 */ + /* Link Identifier 9.3.2 M TV 2 */ + /* L3 Info (CIPH MOD CMD) 9.3.11 M TLV 6 */ + /* 8.4.7 HANDOVER DETECTION */ + /* Channel number 9.3.1 M TV 2 */ + /* Access Delay 9.3.17 O 1) TV 2 */ + /* 8.4.8 MEASUREMENT RESULT 40 */ + case RSL_MSG_MEAS_RES: + /* Channel number 9.3.1 M TV 2 */ + /* Measurement result number 9.3.27 M TV 2 */ + /* Uplink Measurements 9.3.25 M TLV >=5 */ + /* BS Power 9.3.4 M TV 2 */ + /* L1 Information 9.3.10 O 1) TV 3 */ + /* L3 Info (MEAS REP, EXT MEAS REP or ENH MEAS REP) 9.3.11 O 1) TLV 21*/ + /* MS Timing Offset 9.3.37 O 2) TV 2 */ + break; default: break; } @@ -869,7 +1232,7 @@ void proto_register_rsl(void) }, { &hf_rsl_cause, { "Cause", "rsl.cause", - FT_UINT8, BASE_DEC, VALS(rsl_cause_vals), 0x7f, + FT_UINT8, BASE_DEC, VALS(rsl_rlm_cause_vals), 0x7f, "Cause", HFILL } }, { &hf_rsl_rel_mode, @@ -877,15 +1240,54 @@ void proto_register_rsl(void) FT_UINT8, BASE_DEC, VALS(rel_mode_vals), 0x01, "Relese Mode", HFILL } }, - + { &hf_rsl_meas_res_no, + { "Measurement result number", "rsl.meas_res_no", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Measurement result number", HFILL } + }, + { &hf_rsl_extension_bit, + { "Extension", "rsl.extension_bit", + FT_BOOLEAN, 8, TFS(&rsl_extension_bit_value), 0x80, + "Extension", HFILL }}, + { &hf_rsl_class, + { "Class", "rsl.class", + FT_UINT8, BASE_DEC, VALS(rsl_class_vals), 0x70, + "Class", HFILL } + }, + { &hf_rsl_paging_grp, + { "Paging Group", "rsl.paging_grp", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Paging Group", HFILL } + }, + { &hf_rsl_ch_needed, + { "Channel Needed", "rsl.class", + FT_UINT8, BASE_DEC, VALS(rsl_ch_needed_vals), 0x03, + "Channel Needed", HFILL } + }, + { &hf_rsl_emlpp_prio, + { "eMLPP Priority", "rsl.class", + FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03, + "eMLPP Priority", HFILL } + }, }; static gint *ett[] = { &ett_rsl, + &ett_ie_link_id, &ett_ie_ch_no, + &ett_ie_frame_no, + &ett_ie_L3_inf, + &ett_ie_ms_id, &ett_ie_phy_ctx, + &ett_ie_paging_grp, &ett_ie_access_delay, &ett_ie_req_ref, + &ett_ie_rel_mode, + &ett_ie_rlm_cause, &ett_ie_full_imm_ass_inf, + &ett_ie_ch_needed, + &ett_ie_emlpp_prio, + &ett_ie_cause, + &ett_ie_meas_res_no, }; /* Register the protocol name and description */ |