diff options
author | Gerasimos Dimitriadis <dimeg@intracom.gr> | 2009-11-23 23:02:02 +0000 |
---|---|---|
committer | Gerasimos Dimitriadis <dimeg@intracom.gr> | 2009-11-23 23:02:02 +0000 |
commit | 299d64d45812218b5d93aea7e455535bebaab642 (patch) | |
tree | 41ce780e826ca225fbe57cd182b20c0fc2d5d53e | |
parent | 5dcaa2bec02bacdcf5913e8b0c2d0c132cb1b615 (diff) | |
download | wireshark-299d64d45812218b5d93aea7e455535bebaab642.tar.gz wireshark-299d64d45812218b5d93aea7e455535bebaab642.tar.bz2 wireshark-299d64d45812218b5d93aea7e455535bebaab642.zip |
Use range_string for the decoding of the CN specific DRX
cycle length coefficient; fixed the decoding of unknown
values for Split PG Cycle Code; updated function for
Identity Type 2, now spare bit is explicitly shown; Reuse
the definition of the Switch-Measure-Switch values from
packet-gsm_a_common.c
svn path=/trunk/; revision=31060
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.h | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_gm.c | 104 |
3 files changed, 32 insertions, 75 deletions
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index a94de68562..38d85f37cf 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -232,7 +232,7 @@ static const value_string true_false_vals[] = { { 0, NULL} }; -static const value_string gsm_a_sms_vals[] = { +const value_string gsm_a_sms_vals[] = { {0, "1/4 timeslot (~144 microseconds)" }, {1, "2/4 timeslot (~288 microseconds)" }, {2, "3/4 timeslot (~433 microseconds)" }, diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index dda9a3c071..4ee7268116 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -642,6 +642,7 @@ extern const value_string gsm_a_qos_traff_hdl_pri_vals[]; extern const value_string gsm_a_type_of_number_values[]; extern const value_string gsm_a_numbering_plan_id_values[]; +extern const value_string gsm_a_sms_vals[]; typedef enum { diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index 3a2d03cfaa..4eeb4521b0 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -241,6 +241,7 @@ static int hf_gsm_a_gm_tmsi_flag = -1; static int hf_gsm_a_gm_update_type = -1; static int hf_gsm_a_gm_gprs_timer_unit = -1; static int hf_gsm_a_gm_gprs_timer_value = -1; +static int hf_gsm_a_gm_type_of_identity = -1; /* Initialize the subtree pointers */ static gint ett_tc_component = -1; @@ -464,24 +465,14 @@ static const value_string gsm_a_gmm_non_drx_timer_strings[] = { * NOTE: In Iu mode this field (octet 3 bits 8 to 5) is used, but was spare in earlier * versions of this protocol. */ -static const value_string gsm_a_gmm_cn_spec_drs_cycle_len_coef_strings[] = { - { 0x00, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x01, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x02, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x03, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x04, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x05, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x06, "CN Specific DRX cycle length coefficient 6" }, - { 0x07, "CN Specific DRX cycle length coefficient 7" }, - { 0x08, "CN Specific DRX cycle length coefficient 8" }, - { 0x09, "CN Specific DRX cycle length coefficient 9" }, - { 0x0a, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x0b, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x0c, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x0d, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x0e, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0x0f, "CN Specific DRX cycle length coefficient not specified by the MS" }, - { 0, NULL }, +static const range_string gsm_a_gmm_cn_spec_drs_cycle_len_coef_strings[] = { + { 0x00, 0x05, "CN Specific DRX cycle length coefficient not specified by the MS" }, + { 0x06, 0x06, "CN Specific DRX cycle length coefficient 6" }, + { 0x07, 0x07, "CN Specific DRX cycle length coefficient 7" }, + { 0x08, 0x08, "CN Specific DRX cycle length coefficient 8" }, + { 0x09, 0x09, "CN Specific DRX cycle length coefficient 9" }, + { 0x0a, 0x0f, "CN Specific DRX cycle length coefficient not specified by the MS" }, + { 0, 0, NULL }, }; guint16 de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) @@ -489,7 +480,6 @@ de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, guint8 oct; guint32 curr_offset; const gchar *str; - gchar str_val[3]; proto_item *tf = NULL; proto_tree *tf_tree = NULL; @@ -540,11 +530,7 @@ de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, case 96: str="288"; break; case 97: str="320"; break; case 98: str="352"; break; - default: - str_val[0]=oct/10+'0'; - str_val[1]=oct%10+'0'; - str_val[2]=0; - str=str_val; + default: str="Reserved, interpreted as 1"; } proto_tree_add_text(tf_tree, @@ -648,38 +634,24 @@ de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc } /* - * [7] 10.5.5.9 + * [9] 10.5.5.9 Identity type 2 */ +static const value_string gsm_a_gm_type_of_identity_vals[] = { + { 0x01, "IMSI" }, + { 0x02, "IMEI" }, + { 0x03, "IMEISV" }, + { 0x04, "TMSI" }, + { 0, NULL } +}; + static guint16 de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; - const gchar *str; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - - switch ( oct&7 ) - { - case 2: str="IMEI"; break; - case 3: str="IMEISV"; break; - case 4: str="TMSI"; break; - default: str="IMSI"; - } - - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Identity Type 2: (%u) %s", - oct&7, - str); - - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_gm_type_of_identity, tvb, offset, 1, FALSE); /* no length check possible */ - - return(curr_offset - offset); + return(1); } /* @@ -977,27 +949,6 @@ static const value_string gsm_a_gm_acc_tech_type_vals[] = { { 0, NULL } }; -/* SMS_VALUE (Switch-Measure-Switch) (4 bit field) */ - -static const value_string gsm_a_gm_sm_vals[] = { - { 0x00, "1/4 timeslot (~144 microseconds)" }, - { 0x01, "2/4 timeslot (~288 microseconds)" }, - { 0x02, "3/4 timeslot (~433 microseconds)" }, - { 0x03, "4/4 timeslot (~577 microseconds)" }, - { 0x04, "5/4 timeslot (~721 microseconds)" }, - { 0x05, "6/4 timeslot (~865 microseconds)" }, - { 0x06, "7/4 timeslot (~1009 microseconds)" }, - { 0x07, "8/4 timeslot (~1154 microseconds)" }, - { 0x08, "9/4 timeslot (~1297 microseconds)" }, - { 0x09, "10/4 timeslot (~1441 microseconds)" }, - { 0x0a, "11/4 timeslot (~1586 microseconds)" }, - { 0x0b, "12/4 timeslot (~1730 microseconds)" }, - { 0x0c, "13/4 timeslot (~1874 microseconds)" }, - { 0x0d, "14/4 timeslot (~2018 microseconds)" }, - { 0x0e, "15/4 timeslot (~2163 microseconds)" }, - { 0x0f, "16/4 timeslot (~2307 microseconds)" }, - { 0, NULL } -}; guint16 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { @@ -5826,7 +5777,7 @@ proto_register_gsm_a_gm(void) }, { &hf_gsm_a_gmm_cn_spec_drs_cycle_len_coef, { "CN Specific DRX cycle length coefficient","gsm_a.gmm.cn_spec_drs_cycle_len_coef", - FT_UINT8, BASE_DEC, VALS(gsm_a_gmm_cn_spec_drs_cycle_len_coef_strings), 0xf0, + FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_gmm_cn_spec_drs_cycle_len_coef_strings), 0xf0, NULL, HFILL } }, { &hf_gsm_a_tft_op_code, @@ -5916,12 +5867,12 @@ proto_register_gsm_a_gm(void) }, { &hf_gsm_a_gm_sms_value, { "SMS_VALUE (Switch-Measure-Switch)", "gsm_a.gm.sms", - FT_UINT8, BASE_DEC, VALS(gsm_a_gm_sm_vals), 0x0, + FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_gm_sm_value, { "(SM_VALUE) Switch-Measure", "gsm_a.gm.sm", - FT_UINT8, BASE_DEC, VALS(gsm_a_gm_sm_vals), 0x0, + FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0, NULL, HFILL } }, { &hf_gsm_a_gm_sm_ext, @@ -6004,6 +5955,11 @@ proto_register_gsm_a_gm(void) FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL } }, + { &hf_gsm_a_gm_type_of_identity, + { "Type of identity", "gsm_a.gm.type_of_identity", + FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_identity_vals), 0x07, + NULL, HFILL } + }, }; /* Setup protocol subtree array */ |