From ebc8f1f8bfb151e8729013bb03b2b6a15209e54a Mon Sep 17 00:00:00 2001 From: Anders Broman Date: Fri, 5 Sep 2008 05:49:39 +0000 Subject: [PATCH] From Niel Percy: Much as I hate white space changes, I got fed up of the huge variation of styles within these files, and tried to get to a much smaller range of variation. Also a few comment tidies, and use of _U_ for unused args rather than "arg = arg" lines. svn path=/trunk/; revision=26140 --- epan/dissectors/packet-gsm_a_bssmap.c | 1486 ++++++------- epan/dissectors/packet-gsm_a_common.c | 915 ++++---- epan/dissectors/packet-gsm_a_common.h | 279 +-- epan/dissectors/packet-gsm_a_dtap.c | 2970 ++++++++++++------------- epan/dissectors/packet-gsm_a_gm.c | 2765 ++++++++++++----------- epan/dissectors/packet-gsm_a_rp.c | 109 +- epan/dissectors/packet-gsm_a_rr.c | 1170 +++++----- 7 files changed, 4788 insertions(+), 4906 deletions(-) diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c index 2780071fd5..bf5faa21d2 100644 --- a/epan/dissectors/packet-gsm_a_bssmap.c +++ b/epan/dissectors/packet-gsm_a_bssmap.c @@ -365,34 +365,33 @@ gint ett_gsm_bssmap_elem[NUM_GSM_BSSMAP_ELEM]; * [2] 3.2.2.2 */ static guint8 -be_cic(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_cic(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint32 curr_offset; guint32 value; - len = len; curr_offset = offset; value = tvb_get_ntohs(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16); proto_tree_add_text(tree, - tvb, curr_offset, 2, - "%s : PCM Multiplexer: %u", - a_bigbuf, - (value & 0xffe0) >> 5); + tvb, curr_offset, 2, + "%s : PCM Multiplexer: %u", + a_bigbuf, + (value & 0xffe0) >> 5); other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16); proto_tree_add_text(tree, - tvb, curr_offset, 2, - "%s : Timeslot: %u", - a_bigbuf, - value & 0x001f); + tvb, curr_offset, 2, + "%s : Timeslot: %u", + a_bigbuf, + value & 0x001f); curr_offset += 2; if (add_string) - g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value); + g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value); /* no length check possible */ @@ -416,154 +415,154 @@ be_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); - - if (oct & 0x80) - { - /* 2 octet cause */ - - if ((oct & 0x0f) == 0x00) - { - /* national cause */ - switch ((oct & 0x70) >> 4) - { - case 0: str = "Normal Event"; break; - case 1: str = "Normal Event"; break; - case 2: str = "Resource Unavailable"; break; - case 3: str = "Service or option not available"; break; - case 4: str = "Service or option not implemented"; break; - case 5: str = "Invalid message (e.g., parameter out of range)"; break; - case 6: str = "Protocol error"; break; - default: - str = "Interworking"; - break; - } - - other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); - proto_tree_add_text(tree, tvb, curr_offset, 1, - "%s : Cause Class: %s", + "%s : Extension: %s", a_bigbuf, - str); - - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : National Cause", - a_bigbuf); - - curr_offset++; - - proto_tree_add_text(tree, tvb, curr_offset, 1, - "Cause Value"); - - curr_offset++; + (oct & 0x80) ? "extended" : "not extended"); - if (add_string) - g_snprintf(add_string, string_len, " - (National Cause)"); - } - else + if (oct & 0x80) { - value = tvb_get_guint8(tvb, curr_offset + 1); + /* 2 octet cause */ - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Cause (MSB): %u", - a_bigbuf, - ((oct & 0x7f) << 8) | value); + if ((oct & 0x0f) == 0x00) + { + /* national cause */ + switch ((oct & 0x70) >> 4) + { + case 0: str = "Normal Event"; break; + case 1: str = "Normal Event"; break; + case 2: str = "Resource Unavailable"; break; + case 3: str = "Service or option not available"; break; + case 4: str = "Service or option not implemented"; break; + case 5: str = "Invalid message (e.g., parameter out of range)"; break; + case 6: str = "Protocol error"; break; + default: + str = "Interworking"; + break; + } + + other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Cause Class: %s", + a_bigbuf, + str); + + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : National Cause", + a_bigbuf); + + curr_offset++; + + proto_tree_add_text(tree, tvb, curr_offset, 1, + "Cause Value"); + + curr_offset++; + + if (add_string) + g_snprintf(add_string, string_len, " - (National Cause)"); + } + else + { + value = tvb_get_guint8(tvb, curr_offset + 1); - curr_offset++; + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Cause (MSB): %u", + a_bigbuf, + ((oct & 0x7f) << 8) | value); - other_decode_bitfield_value(a_bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, tvb, curr_offset, 1, - "%s : Cause (LSB)", - a_bigbuf); + curr_offset++; - curr_offset++; - } + other_decode_bitfield_value(a_bigbuf, value, 0xff, 8); + proto_tree_add_text(tree, tvb, curr_offset, 1, + "%s : Cause (LSB)", + a_bigbuf); + + curr_offset++; + } } else { - switch (oct) - { - case 0x00: str = "Radio interface message failure"; break; - case 0x01: str = "Radio interface failure"; break; - case 0x02: str = "Uplink quality"; break; - case 0x03: str = "Uplink strength"; break; - case 0x04: str = "Downlink quality"; break; - case 0x05: str = "Downlink strength"; break; - case 0x06: str = "Distance"; break; - case 0x07: str = "O and M intervention"; break; - case 0x08: str = "Response to MSC invocation"; break; - case 0x09: str = "Call control"; break; - case 0x0a: str = "Radio interface failure, reversion to old channel"; break; - case 0x0b: str = "Handover successful"; break; - case 0x0c: str = "Better Cell"; break; - case 0x0d: str = "Directed Retry"; break; - case 0x0e: str = "Joined group call channel"; break; - case 0x0f: str = "Traffic"; break; - - case 0x20: str = "Equipment failure"; break; - case 0x21: str = "No radio resource available"; break; - case 0x22: str = "Requested terrestrial resource unavailable"; break; - case 0x23: str = "CCCH overload"; break; - case 0x24: str = "Processor overload"; break; - case 0x25: str = "BSS not equipped"; break; - case 0x26: str = "MS not equipped"; break; - case 0x27: str = "Invalid cell"; break; - case 0x28: str = "Traffic Load"; break; - case 0x29: str = "Preemption"; break; - - case 0x30: str = "Requested transcoding/rate adaption unavailable"; break; - case 0x31: str = "Circuit pool mismatch"; break; - case 0x32: str = "Switch circuit pool"; break; - case 0x33: str = "Requested speech version unavailable"; break; - case 0x34: str = "LSA not allowed"; break; - - case 0x40: str = "Ciphering algorithm not supported"; break; - - case 0x50: str = "Terrestrial circuit already allocated"; break; - case 0x51: str = "Invalid message contents"; break; - case 0x52: str = "Information element or field missing"; break; - case 0x53: str = "Incorrect value"; break; - case 0x54: str = "Unknown Message type"; break; - case 0x55: str = "Unknown Information Element"; break; - - case 0x60: str = "Protocol Error between BSS and MSC"; break; - case 0x61: str = "VGCS/VBS call non existent"; break; + switch (oct) + { + case 0x00: str = "Radio interface message failure"; break; + case 0x01: str = "Radio interface failure"; break; + case 0x02: str = "Uplink quality"; break; + case 0x03: str = "Uplink strength"; break; + case 0x04: str = "Downlink quality"; break; + case 0x05: str = "Downlink strength"; break; + case 0x06: str = "Distance"; break; + case 0x07: str = "O and M intervention"; break; + case 0x08: str = "Response to MSC invocation"; break; + case 0x09: str = "Call control"; break; + case 0x0a: str = "Radio interface failure, reversion to old channel"; break; + case 0x0b: str = "Handover successful"; break; + case 0x0c: str = "Better Cell"; break; + case 0x0d: str = "Directed Retry"; break; + case 0x0e: str = "Joined group call channel"; break; + case 0x0f: str = "Traffic"; break; + + case 0x20: str = "Equipment failure"; break; + case 0x21: str = "No radio resource available"; break; + case 0x22: str = "Requested terrestrial resource unavailable"; break; + case 0x23: str = "CCCH overload"; break; + case 0x24: str = "Processor overload"; break; + case 0x25: str = "BSS not equipped"; break; + case 0x26: str = "MS not equipped"; break; + case 0x27: str = "Invalid cell"; break; + case 0x28: str = "Traffic Load"; break; + case 0x29: str = "Preemption"; break; + + case 0x30: str = "Requested transcoding/rate adaption unavailable"; break; + case 0x31: str = "Circuit pool mismatch"; break; + case 0x32: str = "Switch circuit pool"; break; + case 0x33: str = "Requested speech version unavailable"; break; + case 0x34: str = "LSA not allowed"; break; + + case 0x40: str = "Ciphering algorithm not supported"; break; + + case 0x50: str = "Terrestrial circuit already allocated"; break; + case 0x51: str = "Invalid message contents"; break; + case 0x52: str = "Information element or field missing"; break; + case 0x53: str = "Incorrect value"; break; + case 0x54: str = "Unknown Message type"; break; + case 0x55: str = "Unknown Information Element"; break; + + case 0x60: str = "Protocol Error between BSS and MSC"; break; + case 0x61: str = "VGCS/VBS call non existent"; break; - default: - if ((oct >= 0x10) && (oct <= 0x17)) { str = "Reserved for international use"; } - else if ((oct >= 0x18) && (oct <= 0x1f)) { str = "Reserved for national use"; } - else if ((oct >= 0x2a) && (oct <= 0x2f)) { str = "Reserved for national use"; } - else if ((oct >= 0x35) && (oct <= 0x3f)) { str = "Reserved for international use"; } - else if ((oct >= 0x41) && (oct <= 0x47)) { str = "Reserved for international use"; } - else if ((oct >= 0x48) && (oct <= 0x4f)) { str = "Reserved for national use"; } - else if ((oct >= 0x56) && (oct <= 0x57)) { str = "Reserved for international use"; } - else if ((oct >= 0x58) && (oct <= 0x5f)) { str = "Reserved for national use"; } - else if ((oct >= 0x62) && (oct <= 0x67)) { str = "Reserved for international use"; } - else if ((oct >= 0x68) && (oct <= 0x6f)) { str = "Reserved for national use"; } - else if ((oct >= 0x70) && (oct <= 0x77)) { str = "Reserved for international use"; } - else if ((oct >= 0x78) && (oct <= 0x7f)) { str = "Reserved for national use"; } - break; - } + default: + if ((oct >= 0x10) && (oct <= 0x17)) { str = "Reserved for international use"; } + else if ((oct >= 0x18) && (oct <= 0x1f)) { str = "Reserved for national use"; } + else if ((oct >= 0x2a) && (oct <= 0x2f)) { str = "Reserved for national use"; } + else if ((oct >= 0x35) && (oct <= 0x3f)) { str = "Reserved for international use"; } + else if ((oct >= 0x41) && (oct <= 0x47)) { str = "Reserved for international use"; } + else if ((oct >= 0x48) && (oct <= 0x4f)) { str = "Reserved for national use"; } + else if ((oct >= 0x56) && (oct <= 0x57)) { str = "Reserved for international use"; } + else if ((oct >= 0x58) && (oct <= 0x5f)) { str = "Reserved for national use"; } + else if ((oct >= 0x62) && (oct <= 0x67)) { str = "Reserved for international use"; } + else if ((oct >= 0x68) && (oct <= 0x6f)) { str = "Reserved for national use"; } + else if ((oct >= 0x70) && (oct <= 0x77)) { str = "Reserved for international use"; } + else if ((oct >= 0x78) && (oct <= 0x7f)) { str = "Reserved for national use"; } + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_cause, - tvb, curr_offset, 1, oct & 0x7f, - "%s : Cause: (%u) %s", - a_bigbuf, - oct & 0x7f, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_cause, + tvb, curr_offset, 1, oct & 0x7f, + "%s : Cause: (%u) %s", + a_bigbuf, + oct & 0x7f, + str); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); + if (add_string) + g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); } EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -585,8 +584,8 @@ be_tmsi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s value = tvb_get_ntohl(tvb, curr_offset); proto_tree_add_uint(tree, hf_gsm_a_tmsi, - tvb, curr_offset, 4, - value); + tvb, curr_offset, 4, + value); if (add_string) g_snprintf(add_string, string_len, " - (0x%04x)", value); @@ -612,14 +611,13 @@ be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, FALSE); - curr_offset++; NO_MORE_DATA_CHECK(len); @@ -628,23 +626,23 @@ be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : TI flag: %s", - a_bigbuf, - ((oct & 0x08) ? "allocated by receiver" : "allocated by sender")); + tvb, curr_offset, 1, + "%s : TI flag: %s", + a_bigbuf, + ((oct & 0x08) ? "allocated by receiver" : "allocated by sender")); other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : TIO: %u", - a_bigbuf, - oct & 0x07); + tvb, curr_offset, 1, + "%s : TIO: %u", + a_bigbuf, + oct & 0x07); curr_offset++; @@ -673,34 +671,34 @@ be_enc_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a do { - other_decode_bitfield_value(a_bigbuf, oct, mask, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : GSM A5/%u: %spermitted", - a_bigbuf, - alg_id, - (mask & oct) ? "" : "not "); - - mask >>= 1; - alg_id--; + other_decode_bitfield_value(a_bigbuf, oct, mask, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : GSM A5/%u: %spermitted", + a_bigbuf, + alg_id, + (mask & oct) ? "" : "not "); + + mask >>= 1; + alg_id--; } while (mask != 0x01); other_decode_bitfield_value(a_bigbuf, oct, mask, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : No encryption: %spermitted", - a_bigbuf, - (mask & oct) ? "" : "not "); + tvb, curr_offset, 1, + "%s : No encryption: %spermitted", + a_bigbuf, + (mask & oct) ? "" : "not "); curr_offset++; NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Key: %s", - tvb_bytes_to_str(tvb, curr_offset, len-(curr_offset-offset) )); + tvb, curr_offset, len - (curr_offset - offset), + "Key: %s", + tvb_bytes_to_str(tvb, curr_offset, len-(curr_offset-offset) )); curr_offset += len - (curr_offset - offset); @@ -727,9 +725,9 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); sdi = oct & 0x0f; switch (sdi) @@ -738,19 +736,19 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * case 2: str = "Data"; break; case 3: str = "Signalling"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Speech/Data Indicator: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Speech/Data Indicator: %s", + a_bigbuf, + str); if (add_string) - g_snprintf(add_string, string_len, " - (%s)", str); + g_snprintf(add_string, string_len, " - (%s)", str); curr_offset++; @@ -760,344 +758,342 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * if (sdi == 0x01) { - /* speech */ + /* speech */ - switch (oct) - { - case 0x08: str = "Full rate TCH channel Bm. Prefer full rate TCH"; break; - case 0x09: str = "Half rate TCH channel Lm. Prefer half rate TCH"; break; - case 0x0a: str = "Full or Half rate channel, Full rate preferred changes allowed after first allocation"; break; - case 0x0b: str = "Full or Half rate channel, Half rate preferred changes allowed after first allocation"; break; - case 0x1a: str = "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"; break; - case 0x1b: str = "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"; break; - case 0x0f: str = "Full or Half rate channel, changes allowed after first allocation"; break; - case 0x1f: str = "Full or Half rate channel, changes between full and half rate not allowed after first allocation"; break; - default: - str = "Reserved"; - break; - } - - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); - - curr_offset++; - - NO_MORE_DATA_CHECK(len); - - do - { - oct = tvb_get_guint8(tvb, curr_offset); - - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); - - switch (oct & 0x7f) - { - case 0x01: str = "GSM speech full rate version 1"; break; - case 0x11: str = "GSM speech full rate version 2"; break; - case 0x21: str = "GSM speech full rate version 3 (AMR)"; break; + switch (oct) + { + case 0x08: str = "Full rate TCH channel Bm. Prefer full rate TCH"; break; + case 0x09: str = "Half rate TCH channel Lm. Prefer half rate TCH"; break; + case 0x0a: str = "Full or Half rate channel, Full rate preferred changes allowed after first allocation"; break; + case 0x0b: str = "Full or Half rate channel, Half rate preferred changes allowed after first allocation"; break; + case 0x1a: str = "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"; break; + case 0x1b: str = "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"; break; + case 0x0f: str = "Full or Half rate channel, changes allowed after first allocation"; break; + case 0x1f: str = "Full or Half rate channel, changes between full and half rate not allowed after first allocation"; break; + default: + str = "Reserved"; + break; + } - case 0x05: str = "GSM speech half rate version 1"; break; - case 0x15: str = "GSM speech half rate version 2"; break; - case 0x25: str = "GSM speech half rate version 3 (AMR)"; break; + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); - default: - str = "Reserved"; - break; - } + curr_offset++; - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Speech version identifier: %s", - a_bigbuf, - str); + NO_MORE_DATA_CHECK(len); - curr_offset++; - } - while ((len - (curr_offset - offset)) > 0); + do + { + oct = tvb_get_guint8(tvb, curr_offset); + + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); + + switch (oct & 0x7f) + { + case 0x01: str = "GSM speech full rate version 1"; break; + case 0x11: str = "GSM speech full rate version 2"; break; + case 0x21: str = "GSM speech full rate version 3 (AMR)"; break; + + case 0x05: str = "GSM speech half rate version 1"; break; + case 0x15: str = "GSM speech half rate version 2"; break; + case 0x25: str = "GSM speech half rate version 3 (AMR)"; break; + + default: + str = "Reserved"; + break; + } + + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Speech version identifier: %s", + a_bigbuf, + str); + + curr_offset++; + } + while ((len - (curr_offset - offset)) > 0); } else if (sdi == 0x02) { - /* data */ - - num_chan = 0; - - switch (oct) - { - case 0x08: str = "Full rate TCH channel Bm"; break; - case 0x09: str = "Half rate TCH channel Lm"; break; - case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - default: - if ((oct >= 0x20) && (oct <= 0x27)) - { - str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the the number of TCHs and if applicable the used radio interface rate per channel allowed after first channel allocation as a result of the request"; - - num_chan = (oct - 0x20) + 1; - } - else if ((oct >= 0x30) && (oct <= 0x37)) - { - str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the number of TCHs or the used radio interface rate per channel not allowed after first channel allocation as a result of the request"; - - num_chan = (oct - 0x30) + 1; - } - else - { - str = "Reserved"; - } - break; - } - - if (num_chan > 0) - { - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: Max channels %u, %s", - num_chan, - str); - } - else - { - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); - } - - curr_offset++; - - NO_MORE_DATA_CHECK(len); - - oct = tvb_get_guint8(tvb, curr_offset); - - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); - - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : %sTransparent service", - a_bigbuf, - (oct & 0x40) ? "Non-" : ""); + /* data */ - if (num_chan == 0) - { - if (oct & 0x40) - { - /* non-transparent */ + num_chan = 0; - switch (oct & 0x3f) - { - case 0x00: str = "12 kbit/s if the channel is a full rate TCH, or 6 kbit/s if the channel is a half rate TCH"; break; - case 0x18: str = "14.5 kbit/s"; break; - case 0x10: str = "12 kbits/s"; break; - case 0x11: str = "6 kbits/s"; break; - default: - str = "Reserved"; - break; - } - } - else - { - switch (oct & 0x3f) + switch (oct) { - case 0x18: str = "14.4 kbit/s"; break; - case 0x10: str = "9.6kbit/s"; break; - case 0x11: str = "4.8kbit/s"; break; - case 0x12: str = "2.4kbit/s"; break; - case 0x13: str = "1.2Kbit/s"; break; - case 0x14: str = "600 bit/s"; break; - case 0x15: str = "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break; + case 0x08: str = "Full rate TCH channel Bm"; break; + case 0x09: str = "Half rate TCH channel Lm"; break; + case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; default: - str = "Reserved"; - break; + if ((oct >= 0x20) && (oct <= 0x27)) + { + str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the the number of TCHs and if applicable the used radio interface rate per channel allowed after first channel allocation as a result of the request"; + num_chan = (oct - 0x20) + 1; + } + else if ((oct >= 0x30) && (oct <= 0x37)) + { + str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the number of TCHs or the used radio interface rate per channel not allowed after first channel allocation as a result of the request"; + num_chan = (oct - 0x30) + 1; + } + else + { + str = "Reserved"; + } + break; } - } - } - else - { - if (oct & 0x40) - { - /* non-transparent */ - switch (oct & 0x3f) + if (num_chan > 0) { - case 0x16: str = "58 kbit/s (4x14.5 kbit/s)"; break; - case 0x14: str = "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break; - case 0x13: str = "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break; - case 0x12: str = "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break; - case 0x11: str = "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break; - case 0x10: str = "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break; - default: - str = "Reserved"; - break; + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: Max channels %u, %s", + num_chan, + str); } - } - else - { - switch (oct & 0x3f) + else { - case 0x1f: str = "64 kbit/s, bit transparent"; break; - case 0x1e: str = "56 kbit/s, bit transparent"; break; - case 0x1d: str = "56 kbit/s"; break; - case 0x1c: str = "48 kbit/s"; break; - case 0x1b: str = "38.4 kbit/s"; break; - case 0x1a: str = "28.8 kbit/s"; break; - case 0x19: str = "19.2 kbit/s"; break; - case 0x18: str = "14.4 kbit/s"; break; - case 0x10: str = "9.6 kbit/s"; break; - default: - str = "Reserved"; - break; + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); } - } - } - other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Rate: %s", - a_bigbuf, - str); + curr_offset++; - curr_offset++; + NO_MORE_DATA_CHECK(len); - NO_MORE_DATA_CHECK(len); + oct = tvb_get_guint8(tvb, curr_offset); - oct = tvb_get_guint8(tvb, curr_offset); + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : %sTransparent service", + a_bigbuf, + (oct & 0x40) ? "Non-" : ""); - other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + if (num_chan == 0) + { + if (oct & 0x40) + { + /* non-transparent */ + + switch (oct & 0x3f) + { + case 0x00: str = "12 kbit/s if the channel is a full rate TCH, or 6 kbit/s if the channel is a half rate TCH"; break; + case 0x18: str = "14.5 kbit/s"; break; + case 0x10: str = "12 kbits/s"; break; + case 0x11: str = "6 kbits/s"; break; + default: + str = "Reserved"; + break; + } + } + else + { + switch (oct & 0x3f) + { + case 0x18: str = "14.4 kbit/s"; break; + case 0x10: str = "9.6kbit/s"; break; + case 0x11: str = "4.8kbit/s"; break; + case 0x12: str = "2.4kbit/s"; break; + case 0x13: str = "1.2Kbit/s"; break; + case 0x14: str = "600 bit/s"; break; + case 0x15: str = "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break; + default: + str = "Reserved"; + break; + } + } + } + else + { + if (oct & 0x40) + { + /* non-transparent */ + + switch (oct & 0x3f) + { + case 0x16: str = "58 kbit/s (4x14.5 kbit/s)"; break; + case 0x14: str = "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break; + case 0x13: str = "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break; + case 0x12: str = "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break; + case 0x11: str = "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break; + case 0x10: str = "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break; + default: + str = "Reserved"; + break; + } + } + else + { + switch (oct & 0x3f) + { + case 0x1f: str = "64 kbit/s, bit transparent"; break; + case 0x1e: str = "56 kbit/s, bit transparent"; break; + case 0x1d: str = "56 kbit/s"; break; + case 0x1c: str = "48 kbit/s"; break; + case 0x1b: str = "38.4 kbit/s"; break; + case 0x1a: str = "28.8 kbit/s"; break; + case 0x19: str = "19.2 kbit/s"; break; + case 0x18: str = "14.4 kbit/s"; break; + case 0x10: str = "9.6 kbit/s"; break; + default: + str = "Reserved"; + break; + } + } + } - if (num_chan == 0) - { - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 14.5 kbit/s (TCH/F14.4) %sallowed", - a_bigbuf, - (oct & 0x08) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Rate: %s", + a_bigbuf, + str); - other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + curr_offset++; - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 12.0 kbit/s (TCH F/9.6) %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + NO_MORE_DATA_CHECK(len); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 6.0 kbit/s (TCH F/4.8) %sallowed", - a_bigbuf, - (oct & 0x01) ? "" : "not "); - } - else - { - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 14.5/14.4 kbit/s (TCH/F14.4) %sallowed", - a_bigbuf, - (oct & 0x08) ? "" : "not "); + oct = tvb_get_guint8(tvb, curr_offset); - other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 12.0/9.6 kbit/s (TCH F/9.6) %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : 6.0/4.8 kbit/s (TCH F/4.8) %sallowed", - a_bigbuf, - (oct & 0x01) ? "" : "not "); - } + if (num_chan == 0) + { + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 14.5 kbit/s (TCH/F14.4) %sallowed", + a_bigbuf, + (oct & 0x08) ? "" : "not "); + + other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); + + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 12.0 kbit/s (TCH F/9.6) %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); + + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 6.0 kbit/s (TCH F/4.8) %sallowed", + a_bigbuf, + (oct & 0x01) ? "" : "not "); + } + else + { + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 14.5/14.4 kbit/s (TCH/F14.4) %sallowed", + a_bigbuf, + (oct & 0x08) ? "" : "not "); + + other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); + + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 12.0/9.6 kbit/s (TCH F/9.6) %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); + + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : 6.0/4.8 kbit/s (TCH F/4.8) %sallowed", + a_bigbuf, + (oct & 0x01) ? "" : "not "); + } - curr_offset++; + curr_offset++; } else if (sdi == 0x03) { - /* signalling */ + /* signalling */ - switch (oct) - { - case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; - case 0x01: str = "SDCCH"; break; - case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; - case 0x03: str = "SDCCH or Half rate TCH channel Lm"; break; - case 0x08: str = "Full rate TCH channel Bm"; break; - case 0x09: str = "Half rate TCH channel Lm"; break; - case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - default: - str = "Reserved"; - break; - } + switch (oct) + { + case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; + case 0x01: str = "SDCCH"; break; + case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; + case 0x03: str = "SDCCH or Half rate TCH channel Lm"; break; + case 0x08: str = "Full rate TCH channel Bm"; break; + case 0x09: str = "Half rate TCH channel Lm"; break; + case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + default: + str = "Reserved"; + break; + } - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Spare"); + proto_tree_add_text(tree, + tvb, curr_offset, len - (curr_offset - offset), + "Spare"); - curr_offset += len - (curr_offset - offset); + curr_offset += len - (curr_offset - offset); } else { - /* unknown format */ + /* unknown format */ - proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Unknown format"); + proto_tree_add_text(tree, + tvb, curr_offset, len - (curr_offset - offset), + "Unknown format"); - curr_offset += len - (curr_offset - offset); + curr_offset += len - (curr_offset - offset); } EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -1122,111 +1118,101 @@ be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar switch (disc) { case 0x00: - /* FALLTHRU */ + /* FALLTHRU */ case 0x04: - /* FALLTHRU */ + /* FALLTHRU */ case 0x08: /* For intersystem handover from GSM to UMTS or cdma2000: */ - - curr_offset = dissect_e212_mcc_mnc(tvb, tree, curr_offset); - - /* FALLTHRU */ + curr_offset = dissect_e212_mcc_mnc(tvb, tree, curr_offset); + /* FALLTHRU */ case 0x01: case 0x05: case 0x0a: /*For intersystem handover from GSM to UMTS or cdma2000: */ + /* LAC */ + value = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_gsm_a_cell_lac, tvb, curr_offset, 2, FALSE); + curr_offset += 2; - /* LAC */ + if (add_string) + g_snprintf(add_string, string_len, " - LAC (0x%04x)", value); + /* FALLTHRU */ - value = tvb_get_ntohs(tvb, curr_offset); + case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */ - proto_tree_add_item(tree, hf_gsm_a_cell_lac, tvb, curr_offset, 2, FALSE); - - curr_offset += 2; + if ((disc == 0x08) ||(disc == 0x09) || (disc == 0x0a)){ + /* RNC-ID */ + value = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_gsm_a_be_rnc_id, tvb, curr_offset, 2, FALSE); + + if (add_string) + { + if (add_string[0] == '\0') + { + g_snprintf(add_string, string_len, " - RNC-ID (%u)", value); + } + else + { + g_snprintf(add_string, string_len, "%s/RNC-ID (%u)", add_string, value); + } + } + break; + } - if (add_string) - g_snprintf(add_string, string_len, " - LAC (0x%04x)", value); + if ((disc == 0x04) || (disc == 0x05) || (disc == 0x08)) break; - /* FALLTHRU */ + /* FALLTHRU */ - case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */ + case 0x02: + /* CI */ - if ((disc == 0x08) ||(disc == 0x09) || (disc == 0x0a)){ - /* RNC-ID */ value = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_be_rnc_id, tvb, curr_offset, 2, FALSE); + proto_tree_add_uint(tree, hf_gsm_a_cell_ci, tvb, + curr_offset, 2, value); + + curr_offset += 2; if (add_string) { - if (add_string[0] == '\0') - { - g_snprintf(add_string, string_len, " - RNC-ID (%u)", value); - } - else - { - g_snprintf(add_string, string_len, "%s/RNC-ID (%u)", add_string, value); - } + if (add_string[0] == '\0') + { + g_snprintf(add_string, string_len, " - CI (%u)", value); + } + else + { + g_snprintf(add_string, string_len, "%s/CI (%u)", add_string, value); + } } break; - } - - if ((disc == 0x04) || (disc == 0x05) || (disc == 0x08)) break; - - /* FALLTHRU */ - - case 0x02: - - /* CI */ - - value = tvb_get_ntohs(tvb, curr_offset); - - proto_tree_add_uint(tree, hf_gsm_a_cell_ci, tvb, - curr_offset, 2, value); - - curr_offset += 2; - - if (add_string) - { - if (add_string[0] == '\0') - { - g_snprintf(add_string, string_len, " - CI (%u)", value); - } - else - { - g_snprintf(add_string, string_len, "%s/CI (%u)", add_string, value); - } - } - break; default: - proto_tree_add_text(tree, tvb, curr_offset, len, - "Cell ID - Unknown format"); + proto_tree_add_text(tree, tvb, curr_offset, len, + "Cell ID - Unknown format"); - curr_offset += (len); - break; + curr_offset += (len); + break; } return(curr_offset - offset); } static guint8 -be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint8 disc; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); proto_tree_add_item(tree, hf_gsm_a_be_cell_id_disc, tvb, curr_offset, 1, FALSE); disc = oct&0x0f; @@ -1246,13 +1232,12 @@ be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [2] 3.2.2.18 */ static guint8 -be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -1261,44 +1246,44 @@ be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Preemption Capability Indicator (PCI): this allocation request %s preempt an existing connection", - a_bigbuf, - (oct & 0x40) ? "may" : "shall not"); + tvb, curr_offset, 1, + "%s : Preemption Capability Indicator (PCI): this allocation request %s preempt an existing connection", + a_bigbuf, + (oct & 0x40) ? "may" : "shall not"); switch ((oct & 0x3c) >> 2) { case 0x00: str = "Spare"; break; case 0x0f: str = "priority not used"; break; default: - str = "1 is highest"; - break; + str = "1 is highest"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x3c, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Priority Level: (%u) %s", - a_bigbuf, - (oct & 0x3c) >> 2, - str); + tvb, curr_offset, 1, + "%s : Priority Level: (%u) %s", + a_bigbuf, + (oct & 0x3c) >> 2, + str); if (add_string) - g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2); + g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2); other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Queuing Allowed Indicator (QA): queuing %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + tvb, curr_offset, 1, + "%s : Queuing Allowed Indicator (QA): queuing %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Preemption Vulnerability Indicator (PVI): this connection %s be preempted by another allocation request", - a_bigbuf, - (oct & 0x01) ? "might" : "shall not"); + tvb, curr_offset, 1, + "%s : Preemption Vulnerability Indicator (PVI): this connection %s be preempted by another allocation request", + a_bigbuf, + (oct & 0x01) ? "might" : "shall not"); curr_offset++; @@ -1319,7 +1304,7 @@ be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad curr_offset = offset; proto_tree_add_text(tree, tvb, curr_offset, len, - "Layer 3 Information value"); + "Layer 3 Information value"); /* * dissect the embedded DTAP message @@ -1339,19 +1324,18 @@ be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [2] 3.2.2.25 */ static guint8 -be_dlci(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_dlci(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; proto_item *item = NULL; proto_tree *subtree = NULL; - len = len; curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, 1, - "Data Link Connection Identifier"); + "Data Link Connection Identifier"); subtree = proto_item_add_subtree(item, ett_dlci); @@ -1372,28 +1356,27 @@ be_dlci(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s * [2] 3.2.2.26 */ static guint8 -be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : BSS is %s to activate DTX in the downlink direction", - a_bigbuf, - (oct & 0x01) ? "forbidden" : "allowed"); + tvb, curr_offset, 1, + "%s : BSS is %s to activate DTX in the downlink direction", + a_bigbuf, + (oct & 0x01) ? "forbidden" : "allowed"); curr_offset++; @@ -1422,9 +1405,9 @@ be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); disc = oct & 0x0f; proto_tree_add_item(tree, hf_gsm_a_be_cell_id_disc, tvb, curr_offset, 1, FALSE); @@ -1435,35 +1418,36 @@ be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha num_cells = 0; do { - item = - proto_tree_add_text(tree, - tvb, curr_offset, -1, - "Cell %u", - num_cells + 1); + item = + proto_tree_add_text(tree, + tvb, curr_offset, -1, + "Cell %u", + num_cells + 1); - subtree = proto_item_add_subtree(item, ett_cell_list); + subtree = proto_item_add_subtree(item, ett_cell_list); - if (add_string) - add_string[0] = '\0'; - consumed = - be_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); + if (add_string) + add_string[0] = '\0'; - if (add_string && add_string[0] != '\0') - { - proto_item_append_text(item, "%s", add_string ? add_string : ""); - } + consumed = + be_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); - proto_item_set_len(item, consumed); + if (add_string && add_string[0] != '\0') + { + proto_item_append_text(item, "%s", add_string ? add_string : ""); + } + + proto_item_set_len(item, consumed); - curr_offset += consumed; + curr_offset += consumed; - num_cells++; + num_cells++; } while ((len - (curr_offset - offset)) > 0 && consumed > 0); if (add_string) { - g_snprintf(add_string, string_len, " - %u cell%s", - num_cells, plurality(num_cells, "", "s")); + g_snprintf(add_string, string_len, " - %u cell%s", + num_cells, plurality(num_cells, "", "s")); } EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -1475,13 +1459,12 @@ be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [2] 3.2.2.33 */ static guint8 -be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_chosen_chan(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 = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -1496,16 +1479,16 @@ be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 13: str = "Data, 3.6 kbit/s radio interface rate"; break; case 8: str = "Signalling only"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Channel mode: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Channel mode: %s", + a_bigbuf, + str); switch (oct & 0x0f) { @@ -1521,16 +1504,16 @@ be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 15: str = "7 Full Rate TCHs"; break; case 4: str = "8 Full Rate TCHs"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Channel: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Channel: %s", + a_bigbuf, + str); curr_offset++; @@ -1543,28 +1526,27 @@ be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [2] 3.2.2.34 */ static guint8 -be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : IMEISV must %sbe included by the mobile station", - a_bigbuf, - (oct & 0x01) ? "" : "not "); + tvb, curr_offset, 1, + "%s : IMEISV must %sbe included by the mobile station", + a_bigbuf, + (oct & 0x01) ? "" : "not "); curr_offset++; @@ -1586,7 +1568,7 @@ be_l3_msg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add curr_offset = offset; proto_tree_add_text(tree, tvb, curr_offset, len, - "Layer 3 Message Contents"); + "Layer 3 Message Contents"); /* * dissect the embedded DTAP message @@ -1606,56 +1588,55 @@ be_l3_msg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add * [2] 3.2.2.36 Channel Needed */ static guint8 -be_cha_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_cha_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; /* no length check possible */ - proto_tree_add_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, curr_offset, 1, FALSE); + + curr_offset++; + return(curr_offset - offset); } - /* * [2] 3.2.2.43 */ static guint8 -be_for_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_for_ind(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 = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x0f) { case 1: str = "forward to subsequent BSS, no trace at MSC"; break; case 2: str = "forward to subsequent BSS, and trace at MSC"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : %s", + a_bigbuf, + str); curr_offset++; @@ -1668,13 +1649,12 @@ be_for_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [2] 3.2.2.44 */ static guint8 -be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; const gchar *str = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -1690,19 +1670,19 @@ be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc case 0x07: str = "GSM A5/6"; break; case 0x08: str = "GSM A5/7"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Algorithm Identifier: %s", - str); + tvb, curr_offset, 1, + "Algorithm Identifier: %s", + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - %s", str); + g_snprintf(add_string, string_len, " - %s", str); /* no length check possible */ @@ -1713,40 +1693,39 @@ be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [2] 3.2.2.45 */ static guint8 -be_cct_pool(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_cct_pool(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; const gchar *str = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); if (oct <= 32) { - str = ""; + str = ""; } else if ((oct >= 0x80) && (oct <= 0x8f)) { - str = ", for national/local use"; + str = ", for national/local use"; } else { - str = ", reserved for future international use"; + str = ", reserved for future international use"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Circuit pool number: %u%s", - oct, - str); + tvb, curr_offset, 1, + "Circuit pool number: %u%s", + oct, + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - (%u)", oct); + g_snprintf(add_string, string_len, " - (%u)", oct); /* no length check possible */ @@ -1757,13 +1736,12 @@ be_cct_pool(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a * [2] 3.2.2.49 */ static guint8 -be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_curr_chan_1(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -1777,16 +1755,16 @@ be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x04: str = "Data, 6.0 kbit/s radio interface rate"; break; case 0x05: str = "Data, 3.6 kbit/s radio interface rate"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Channel Mode: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Channel Mode: %s", + a_bigbuf, + str); switch (oct & 0x0f) { @@ -1801,17 +1779,17 @@ be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x0f: str = "7 Full Rate TCHs"; break; case 0x04: str = "8 Full Rate TCHs"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Channel: (%u) %s", - a_bigbuf, - oct & 0x0f, - str); + tvb, curr_offset, 1, + "%s : Channel: (%u) %s", + a_bigbuf, + oct & 0x0f, + str); curr_offset++; @@ -1824,34 +1802,33 @@ be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [2] 3.2.2.50 */ static guint8 -be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : qri: it is recommended %sto allow queuing", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + tvb, curr_offset, 1, + "%s : qri: it is recommended %sto allow queuing", + a_bigbuf, + (oct & 0x02) ? "" : "not "); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; @@ -1864,14 +1841,13 @@ be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [2] 3.2.2.51 */ static guint8 -be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; const gchar *str = NULL; const gchar *short_str = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -1889,22 +1865,22 @@ be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x25: str = "GSM speech half rate version 3 (AMR)"; short_str = "HR3 (AMR)"; break; default: - str = "Reserved"; - short_str = str; + str = "Reserved"; + short_str = str; break; } other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Speech version identifier: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Speech version identifier: %s", + a_bigbuf, + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - (%s)", short_str); + g_snprintf(add_string, string_len, " - (%s)", short_str); /* no length check possible */ @@ -1938,8 +1914,8 @@ be_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s curr_offset = offset; /* curr_offset + 1 is a hack, the length part here is 2 octets and we are off by one */ - proto_tree_add_text(tree, tvb, curr_offset+1, len, - "APDU"); + proto_tree_add_text(tree, tvb, curr_offset+1, len, + "APDU"); /* * dissect the embedded APDU message @@ -3117,7 +3093,7 @@ dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) "); + col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) "); } /* @@ -3126,7 +3102,7 @@ dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tap_current++; if (tap_current >= 4) { - tap_current = 0; + tap_current = 0; } tap_p = &tap_rec[tap_current]; @@ -3155,32 +3131,32 @@ dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (str == NULL) { - bssmap_item = - proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, len, - "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)", - oct); + bssmap_item = + proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, len, + "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)", + oct); - bssmap_tree = proto_item_add_subtree(bssmap_item, ett_bssmap_msg); + bssmap_tree = proto_item_add_subtree(bssmap_item, ett_bssmap_msg); } else { - bssmap_item = - proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, -1, - "GSM A-I/F BSSMAP - %s", - str); + bssmap_item = + proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, -1, + "GSM A-I/F BSSMAP - %s", + str); - bssmap_tree = proto_item_add_subtree(bssmap_item, ett_gsm_bssmap_msg[idx]); + bssmap_tree = proto_item_add_subtree(bssmap_item, ett_gsm_bssmap_msg[idx]); - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } + if (check_col(pinfo->cinfo, COL_INFO)) + { + col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); + } - /* - * add BSSMAP message name - */ - proto_tree_add_uint_format(bssmap_tree, hf_gsm_a_bssmap_msg_type, - tvb, saved_offset, 1, oct, "Message Type %s",str); + /* + * add BSSMAP message name + */ + proto_tree_add_uint_format(bssmap_tree, hf_gsm_a_bssmap_msg_type, + tvb, saved_offset, 1, oct, "Message Type %s",str); } tap_p->pdu_type = BSSAP_PDU_TYPE_BSSMAP; @@ -3197,13 +3173,13 @@ dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (bssmap_msg_fcn[idx] == NULL) { - proto_tree_add_text(bssmap_tree, - tvb, offset, len - offset, - "Message Elements"); + proto_tree_add_text(bssmap_tree, + tvb, offset, len - offset, + "Message Elements"); } else { - (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, offset, len - offset); + (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, offset, len - offset); } } @@ -3219,49 +3195,49 @@ proto_register_gsm_a_bssmap(void) static hf_register_info hf[] = { { &hf_gsm_a_bssmap_msg_type, - { "BSSMAP Message Type", "gsm_a.bssmap_msgtype", - FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_msg_strings), 0x0, - "", HFILL } + { "BSSMAP Message Type", "gsm_a.bssmap_msgtype", + FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_msg_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_bssmap_elem_id, - { "Element ID", "gsm_a_bssmap.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_bssmap.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_length, - { "Length", "gsm_a.len", - FT_UINT16, BASE_DEC, NULL, 0, - "", HFILL } + { "Length", "gsm_a.len", + FT_UINT16, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_cell_ci, - { "Cell CI", "gsm_a.cell_ci", - FT_UINT16, BASE_HEX_DEC, 0, 0x0, - "", HFILL } + { "Cell CI", "gsm_a.cell_ci", + FT_UINT16, BASE_HEX_DEC, 0, 0x0, + "", HFILL } }, { &hf_gsm_a_cell_lac, - { "Cell LAC", "gsm_a.cell_lac", - FT_UINT16, BASE_HEX_DEC, 0, 0x0, - "", HFILL } + { "Cell LAC", "gsm_a.cell_lac", + FT_UINT16, BASE_HEX_DEC, 0, 0x0, + "", HFILL } }, { &hf_gsm_a_dlci_cc, - { "Control Channel", "bssap.dlci.cc", - FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0, - "", HFILL} + { "Control Channel", "bssap.dlci.cc", + FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0, + "", HFILL} }, { &hf_gsm_a_dlci_spare, - { "Spare", "bssap.dlci.spare", - FT_UINT8, BASE_HEX, NULL, 0x38, - "", HFILL} + { "Spare", "bssap.dlci.spare", + FT_UINT8, BASE_HEX, NULL, 0x38, + "", HFILL} }, { &hf_gsm_a_dlci_sapi, - { "SAPI", "bssap.dlci.sapi", - FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07, - "", HFILL} + { "SAPI", "bssap.dlci.sapi", + FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07, + "", HFILL} }, { &hf_gsm_a_bssmap_cause, - { "BSSMAP Cause", "gsm_a_bssmap.cause", - FT_UINT8, BASE_HEX, 0, 0x0, - "", HFILL } + { "BSSMAP Cause", "gsm_a_bssmap.cause", + FT_UINT8, BASE_HEX, 0, 0x0, + "", HFILL } }, { &hf_gsm_a_be_cell_id_disc, { "Cell identification discriminator","gsm_a.be.cell_id_disc", @@ -3293,20 +3269,20 @@ proto_register_gsm_a_bssmap(void) for (i=0; i < NUM_GSM_BSSMAP_MSG; i++, last_offset++) { - ett_gsm_bssmap_msg[i] = -1; - ett[last_offset] = &ett_gsm_bssmap_msg[i]; + ett_gsm_bssmap_msg[i] = -1; + ett[last_offset] = &ett_gsm_bssmap_msg[i]; } for (i=0; i < NUM_GSM_BSSMAP_ELEM; i++, last_offset++) { - ett_gsm_bssmap_elem[i] = -1; - ett[last_offset] = &ett_gsm_bssmap_elem[i]; + ett_gsm_bssmap_elem[i] = -1; + ett[last_offset] = &ett_gsm_bssmap_elem[i]; } /* Register the protocol name and description */ proto_a_bssmap = - proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a_bssmap"); + proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a_bssmap"); proto_register_field_array(proto_a_bssmap, hf, array_length(hf)); diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index fa3dbc7aa6..01c6649a81 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -60,7 +60,6 @@ const value_string gsm_common_elem_strings[] = { { 0x00, "Descriptive group or broadcast call reference" }, { 0x00, "Group Cipher Key Number" }, { 0x00, "PD and SAPI $(CCBS)$" }, - /* Pos 10 */ { 0x00, "Priority Level" }, { 0x00, "PLMN List" }, { 0, NULL } @@ -73,130 +72,130 @@ const value_string gsm_common_elem_strings[] = { * Revision level */ static const value_string gsm_a_msc_rev_vals[] = { - { 0, "Reserved for GSM phase 1"}, - { 1, "Used by GSM phase 2 mobile stations"}, - { 2, "Used by mobile stations supporting R99 or later versions of the protocol"}, - { 3, "Reserved for future use"}, + { 0, "Reserved for GSM phase 1"}, + { 1, "Used by GSM phase 2 mobile stations"}, + { 2, "Used by mobile stations supporting R99 or later versions of the protocol"}, + { 3, "Reserved for future use"}, { 0, NULL } }; /* ES IND (octet 3, bit 5) "Controlled Early Classmark Sending" option implementation */ static const value_string ES_IND_vals[] = { - { 0, "Controlled Early Classmark Sending option is not implemented in the MS"}, - { 1, "Controlled Early Classmark Sending option is implemented in the MS"}, + { 0, "Controlled Early Classmark Sending option is not implemented in the MS"}, + { 1, "Controlled Early Classmark Sending option is implemented in the MS"}, { 0, NULL } }; /* A5/1 algorithm supported (octet 3, bit 4 */ static const value_string A5_1_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/1 available"}, - { 1, "encryption algorithm A5/1 not available"}, + { 0, "encryption algorithm A5/1 available"}, + { 1, "encryption algorithm A5/1 not available"}, { 0, NULL } }; /* RF Power Capability (Octet 3) */ static const value_string RF_power_capability_vals[] = { - { 0, "class 1"}, - { 1, "class 2"}, - { 2, "class 3"}, - { 3, "class 4"}, - { 4, "class 5"}, - { 7, "RF Power capability is irrelevant in this information element"}, + { 0, "class 1"}, + { 1, "class 2"}, + { 2, "class 3"}, + { 3, "class 4"}, + { 4, "class 5"}, + { 7, "RF Power capability is irrelevant in this information element"}, { 0, NULL } }; /* PS capability (pseudo-synchronization capability) (octet 4) */ static const value_string ps_sup_cap_vals[] = { - { 0, "PS capability not present"}, - { 1, "PS capability present"}, + { 0, "PS capability not present"}, + { 1, "PS capability present"}, { 0, NULL } }; /* SS Screening Indicator (octet 4)defined in 3GPP TS 24.080 */ static const value_string SS_screening_indicator_vals[] = { - { 0, "Default value of phase 1"}, - { 1, "Capability of handling of ellipsis notation and phase 2 error handling "}, - { 2, "For future use"}, - { 3, "For future use"}, + { 0, "Default value of phase 1"}, + { 1, "Capability of handling of ellipsis notation and phase 2 error handling "}, + { 2, "For future use"}, + { 3, "For future use"}, { 0, NULL } }; /* SM capability (MT SMS pt to pt capability) (octet 4)*/ static const value_string SM_capability_vals[] = { - { 0, "Mobile station does not support mobile terminated point to point SMS"}, - { 1, "Mobile station supports mobile terminated point to point SMS"}, + { 0, "Mobile station does not support mobile terminated point to point SMS"}, + { 1, "Mobile station supports mobile terminated point to point SMS"}, { 0, NULL } }; /* VBS notification reception (octet 4) */ static const value_string VBS_notification_rec_vals[] = { - { 0, "no VBS capability or no notifications wanted"}, - { 1, "VBS capability and notifications wanted"}, + { 0, "no VBS capability or no notifications wanted"}, + { 1, "VBS capability and notifications wanted"}, { 0, NULL } }; /* VGCS notification reception (octet 4) */ static const value_string VGCS_notification_rec_vals[] = { - { 0, "no VGCS capability or no notifications wanted"}, - { 1, "VGCS capability and notifications wanted"}, + { 0, "no VGCS capability or no notifications wanted"}, + { 1, "VGCS capability and notifications wanted"}, { 0, NULL } }; /* FC Frequency Capability (octet 4 ) */ static const value_string FC_frequency_cap_vals[] = { - { 0, "The MS does not support the E-GSM or R-GSM band"}, - { 1, "The MS does support the E-GSM or R-GSM "}, + { 0, "The MS does not support the E-GSM or R-GSM band"}, + { 1, "The MS does support the E-GSM or R-GSM "}, { 0, NULL } }; /* CM3 (octet 5, bit 8) */ static const value_string CM3_vals[] = { - { 0, "The MS does not support any options that are indicated in CM3"}, - { 1, "The MS supports options that are indicated in classmark 3 IE"}, + { 0, "The MS does not support any options that are indicated in CM3"}, + { 1, "The MS supports options that are indicated in classmark 3 IE"}, { 0, NULL } }; /* LCS VA capability (LCS value added location request notification capability) (octet 5,bit 6) */ static const value_string LCS_VA_cap_vals[] = { - { 0, "LCS value added location request notification capability not supported"}, - { 1, "LCS value added location request notification capability supported"}, + { 0, "LCS value added location request notification capability not supported"}, + { 1, "LCS value added location request notification capability supported"}, { 0, NULL } }; /* UCS2 treatment (octet 5, bit 5) */ static const value_string UCS2_treatment_vals[] = { - { 0, "the ME has a preference for the default alphabet"}, - { 1, "the ME has no preference between the use of the default alphabet and the use of UCS2"}, + { 0, "the ME has a preference for the default alphabet"}, + { 1, "the ME has no preference between the use of the default alphabet and the use of UCS2"}, { 0, NULL } }; /* SoLSA (octet 5, bit 4) */ static const value_string SoLSA_vals[] = { - { 0, "The ME does not support SoLSA"}, - { 1, "The ME supports SoLSA"}, + { 0, "The ME does not support SoLSA"}, + { 1, "The ME supports SoLSA"}, { 0, NULL } }; /* CMSP: CM Service Prompt (octet 5, bit 3) */ static const value_string CMSP_vals[] = { - { 0, "Network initiated MO CM connection request not supported"}, - { 1, "Network initiated MO CM connection request supported for at least one CM protocol"}, + { 0, "Network initiated MO CM connection request not supported"}, + { 1, "Network initiated MO CM connection request supported for at least one CM protocol"}, { 0, NULL } }; /* A5/3 algorithm supported (octet 5, bit 2) */ static const value_string A5_3_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/3 not available"}, - { 1, "encryption algorithm A5/3 available"}, + { 0, "encryption algorithm A5/3 not available"}, + { 1, "encryption algorithm A5/3 available"}, { 0, NULL } }; /* A5/2 algorithm supported (octet 5, bit 1) */ static const value_string A5_2_algorithm_sup_vals[] = { - { 0, "encryption algorithm A5/2 not available"}, - { 1, "encryption algorithm A5/2 available"}, + { 0, "encryption algorithm A5/2 not available"}, + { 1, "encryption algorithm A5/2 available"}, { 0, NULL } }; static const value_string mobile_identity_type_vals[] = { - { 1, "IMSI"}, - { 2, "IMEI"}, - { 3, "IMEISV"}, - { 4, "TMSI/P-TMSI"}, - { 5, "TMGI and optional MBMS Session Identity"}, /* ETSI TS 124 008 V6.8.0 (2005-03) p326 */ - { 0, "No Identity"}, + { 1, "IMSI"}, + { 2, "IMEI"}, + { 3, "IMEISV"}, + { 4, "TMSI/P-TMSI"}, + { 5, "TMGI and optional MBMS Session Identity"}, /* ETSI TS 124 008 V6.8.0 (2005-03) p326 */ + { 0, "No Identity"}, { 0, NULL } }; static const value_string oddevenind_vals[] = { - { 0, "Even number of identity digits"}, - { 1, "Odd number of identity digits"}, + { 0, "Even number of identity digits"}, + { 1, "Odd number of identity digits"}, { 0, NULL } }; @@ -312,9 +311,9 @@ static int get_hf_elem_id(int pdu_type) /* * Type Length Value (TLV) element dissector */ -guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add) +guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len _U_, const gchar *name_add) { - guint8 oct; + guint8 oct; guint16 parm_len; guint8 lengt_length = 1; guint8 consumed; @@ -325,7 +324,6 @@ guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int gint *elem_ett; guint8 (**elem_funcs)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); - len = len; curr_offset = offset; consumed = 0; @@ -333,7 +331,7 @@ guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int oct = tvb_get_guint8(tvb, curr_offset); - if (oct == iei){ + if (oct == iei){ if (oct == GSM_BSSMAP_APDU_IE){ /* This elements length is in two octets (a bit of a hack here)*/ lengt_length = 2; @@ -344,53 +342,53 @@ guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int DISSECTOR_ASSERT_NOT_REACHED(); } }else{ - parm_len = tvb_get_guint8(tvb, curr_offset + 1); + parm_len = tvb_get_guint8(tvb, curr_offset + 1); } - item = - proto_tree_add_text(tree, - tvb, curr_offset, parm_len + 1 + lengt_length, - "%s%s", - elem_names[idx].strptr, - (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); + item = + proto_tree_add_text(tree, + tvb, curr_offset, parm_len + 1 + lengt_length, + "%s%s", + elem_names[idx].strptr, + (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); - subtree = proto_item_add_subtree(item, elem_ett[idx]); + subtree = proto_item_add_subtree(item, elem_ett[idx]); - proto_tree_add_uint(subtree, - get_hf_elem_id(pdu_type), tvb, - curr_offset, 1, oct); + proto_tree_add_uint(subtree, + get_hf_elem_id(pdu_type), tvb, + curr_offset, 1, oct); - proto_tree_add_uint(subtree, hf_gsm_a_length, tvb, - curr_offset + 1, lengt_length, parm_len); + proto_tree_add_uint(subtree, hf_gsm_a_length, tvb, + curr_offset + 1, lengt_length, parm_len); - if (parm_len > 0) - { - if (elem_funcs[idx] == NULL) - { - proto_tree_add_text(subtree, - tvb, curr_offset + 1 + lengt_length, parm_len, - "Element Value"); - /* See ASSERT above */ - consumed = (guint8)parm_len; - } - else - { + if (parm_len > 0) + { + if (elem_funcs[idx] == NULL) + { + proto_tree_add_text(subtree, + tvb, curr_offset + 1 + lengt_length, parm_len, + "Element Value"); + /* See ASSERT above */ + consumed = (guint8)parm_len; + } + else + { gchar *a_add_string; - a_add_string=ep_alloc(1024); - a_add_string[0] = '\0'; - consumed = - (*elem_funcs[idx])(tvb, subtree, curr_offset + 2, - parm_len, a_add_string, 1024); + a_add_string=ep_alloc(1024); + a_add_string[0] = '\0'; + consumed = + (*elem_funcs[idx])(tvb, subtree, curr_offset + 2, + parm_len, a_add_string, 1024); - if (a_add_string[0] != '\0') - { - proto_item_append_text(item, "%s", a_add_string); + if (a_add_string[0] != '\0') + { + proto_item_append_text(item, "%s", a_add_string); + } + } } - } - } - consumed += 1 + lengt_length; + consumed += 1 + lengt_length; } return(consumed); @@ -422,46 +420,46 @@ guint8 elem_tv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int i if (oct == iei) { - item = - proto_tree_add_text(tree, - tvb, curr_offset, -1, - "%s%s", - elem_names[idx].strptr, - (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); + item = + proto_tree_add_text(tree, + tvb, curr_offset, -1, + "%s%s", + elem_names[idx].strptr, + (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); - subtree = proto_item_add_subtree(item, elem_ett[idx]); + subtree = proto_item_add_subtree(item, elem_ett[idx]); - proto_tree_add_uint(subtree, - get_hf_elem_id(pdu_type), tvb, - curr_offset, 1, oct); + proto_tree_add_uint(subtree, + get_hf_elem_id(pdu_type), tvb, + curr_offset, 1, oct); - if (elem_funcs[idx] == NULL) - { - /* BAD THING, CANNOT DETERMINE LENGTH */ + if (elem_funcs[idx] == NULL) + { + /* BAD THING, CANNOT DETERMINE LENGTH */ - proto_tree_add_text(subtree, - tvb, curr_offset + 1, 1, - "No element dissector, rest of dissection may be incorrect"); + proto_tree_add_text(subtree, + tvb, curr_offset + 1, 1, + "No element dissector, rest of dissection may be incorrect"); - consumed = 1; - } - else - { + consumed = 1; + } + else + { gchar *a_add_string; - a_add_string=ep_alloc(1024); - a_add_string[0] = '\0'; - consumed = (*elem_funcs[idx])(tvb, subtree, curr_offset + 1, -1, a_add_string, 1024); + a_add_string=ep_alloc(1024); + a_add_string[0] = '\0'; + consumed = (*elem_funcs[idx])(tvb, subtree, curr_offset + 1, -1, a_add_string, 1024); - if (a_add_string[0] != '\0') - { - proto_item_append_text(item, "%s", a_add_string); - } - } + if (a_add_string[0] != '\0') + { + proto_item_append_text(item, "%s", a_add_string); + } + } - consumed++; + consumed++; - proto_item_set_len(item, consumed); + proto_item_set_len(item, consumed); } return(consumed); @@ -495,46 +493,46 @@ guint8 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, if ((oct & 0xf0) == (iei & 0xf0)) { - item = - proto_tree_add_text(tree, - tvb, curr_offset, -1, - "%s%s", - elem_names[idx].strptr, - (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); + item = + proto_tree_add_text(tree, + tvb, curr_offset, -1, + "%s%s", + elem_names[idx].strptr, + (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); - subtree = proto_item_add_subtree(item, elem_ett[idx]); + subtree = proto_item_add_subtree(item, elem_ett[idx]); - other_decode_bitfield_value(buf, oct, 0xf0, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Element ID", - buf); + other_decode_bitfield_value(buf, oct, 0xf0, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Element ID", + buf); - if (elem_funcs[idx] == NULL) - { - /* BAD THING, CANNOT DETERMINE LENGTH */ + if (elem_funcs[idx] == NULL) + { + /* BAD THING, CANNOT DETERMINE LENGTH */ - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "No element dissector, rest of dissection may be incorrect"); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "No element dissector, rest of dissection may be incorrect"); - consumed++; - } - else - { + consumed++; + } + else + { gchar *a_add_string; - a_add_string=ep_alloc(1024); - a_add_string[0] = '\0'; - consumed = (*elem_funcs[idx])(tvb, subtree, curr_offset, -1, a_add_string, 1024); + a_add_string=ep_alloc(1024); + a_add_string[0] = '\0'; + consumed = (*elem_funcs[idx])(tvb, subtree, curr_offset, -1, a_add_string, 1024); - if (a_add_string[0] != '\0') - { - proto_item_append_text(item, "%s", a_add_string); - } - } + if (a_add_string[0] != '\0') + { + proto_item_append_text(item, "%s", a_add_string); + } + } - proto_item_set_len(item, consumed); + proto_item_set_len(item, consumed); } return(consumed); @@ -561,14 +559,14 @@ guint8 elem_t(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int id if (oct == iei) { - proto_tree_add_uint_format(tree, - get_hf_elem_id(pdu_type), tvb, - curr_offset, 1, oct, - "%s%s", - elem_names[idx].strptr, - (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); - - consumed = 1; + proto_tree_add_uint_format(tree, + get_hf_elem_id(pdu_type), tvb, + curr_offset, 1, oct, + "%s%s", + elem_names[idx].strptr, + (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); + + consumed = 1; } return(consumed); @@ -577,7 +575,7 @@ guint8 elem_t(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int id /* * Length Value (LV) element dissector */ -guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add) +guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 offset, guint len _U_, const gchar *name_add) { guint8 parm_len; guint8 consumed; @@ -588,7 +586,6 @@ guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 gint *elem_ett; guint8 (**elem_funcs)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len); - len = len; curr_offset = offset; consumed = 0; @@ -597,42 +594,42 @@ guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 parm_len = tvb_get_guint8(tvb, curr_offset); item = - proto_tree_add_text(tree, - tvb, curr_offset, parm_len + 1, - "%s%s", - elem_names[idx].strptr, - (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); + proto_tree_add_text(tree, + tvb, curr_offset, parm_len + 1, + "%s%s", + elem_names[idx].strptr, + (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); proto_tree_add_uint(subtree, hf_gsm_a_length, tvb, - curr_offset, 1, parm_len); + curr_offset, 1, parm_len); if (parm_len > 0) { - if (elem_funcs[idx] == NULL) - { - proto_tree_add_text(subtree, - tvb, curr_offset + 1, parm_len, - "Element Value"); + if (elem_funcs[idx] == NULL) + { + proto_tree_add_text(subtree, + tvb, curr_offset + 1, parm_len, + "Element Value"); - consumed = parm_len; - } - else - { + consumed = parm_len; + } + else + { gchar *a_add_string; - a_add_string=ep_alloc(1024); - a_add_string[0] = '\0'; - consumed = - (*elem_funcs[idx])(tvb, subtree, curr_offset + 1, - parm_len, a_add_string, 1024); + a_add_string=ep_alloc(1024); + a_add_string[0] = '\0'; + consumed = + (*elem_funcs[idx])(tvb, subtree, curr_offset + 1, + parm_len, a_add_string, 1024); - if (a_add_string[0] != '\0') - { - proto_item_append_text(item, "%s", a_add_string); - } - } + if (a_add_string[0] != '\0') + { + proto_item_append_text(item, "%s", a_add_string); + } + } } return(consumed + 1); @@ -659,21 +656,21 @@ guint8 elem_v(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 o if (elem_funcs[idx] == NULL) { - /* BAD THING, CANNOT DETERMINE LENGTH */ + /* BAD THING, CANNOT DETERMINE LENGTH */ - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "No element dissector, rest of dissection may be incorrect"); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "No element dissector, rest of dissection may be incorrect"); - consumed = 1; + consumed = 1; } else { gchar *a_add_string; - a_add_string=ep_alloc(1024); - a_add_string[0] = '\0'; - consumed = (*elem_funcs[idx])(tvb, tree, curr_offset, -1, a_add_string, 1024); + a_add_string=ep_alloc(1024); + a_add_string[0] = '\0'; + consumed = (*elem_funcs[idx])(tvb, tree, curr_offset, -1, a_add_string, 1024); } return(consumed); @@ -702,13 +699,13 @@ guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, gui if (elem_funcs[idx] == NULL) { - /* NOT A BAD THING - LENGTH IS HALF NIBBLE */ + /* NOT A BAD THING - LENGTH IS HALF NIBBLE */ - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "No element dissector"); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "No element dissector"); - consumed = 1; + consumed = 1; } else { @@ -766,24 +763,24 @@ my_dgt_tbcd_unpack( while (num_octs) { - /* - * unpack first value in byte - */ - i = *in++; - *out++ = dgt->out[i & 0x0f]; - cnt++; - - /* - * unpack second value in byte - */ - i >>= 4; - - if (i == 0x0f) /* odd number bytes - hit filler */ - break; - - *out++ = dgt->out[i]; - cnt++; - num_octs--; + /* + * unpack first value in byte + */ + i = *in++; + *out++ = dgt->out[i & 0x0f]; + cnt++; + + /* + * unpack second value in byte + */ + i >>= 4; + + if (i == 0x0f) /* odd number bytes - hit filler */ + break; + + *out++ = dgt->out[i]; + cnt++; + num_octs--; } *out = '\0'; @@ -799,77 +796,77 @@ mcc_mnc_aux(guint8 *octs, gchar *mcc, gchar *mnc) { if ((octs[0] & 0x0f) <= 9) { - mcc[0] = Dgt_tbcd.out[octs[0] & 0x0f]; + mcc[0] = Dgt_tbcd.out[octs[0] & 0x0f]; } else { - mcc[0] = (octs[0] & 0x0f) + 55; + mcc[0] = (octs[0] & 0x0f) + 55; } if (((octs[0] & 0xf0) >> 4) <= 9) { - mcc[1] = Dgt_tbcd.out[(octs[0] & 0xf0) >> 4]; + mcc[1] = Dgt_tbcd.out[(octs[0] & 0xf0) >> 4]; } else { - mcc[1] = ((octs[0] & 0xf0) >> 4) + 55; + mcc[1] = ((octs[0] & 0xf0) >> 4) + 55; } if ((octs[1] & 0x0f) <= 9) { - mcc[2] = Dgt_tbcd.out[octs[1] & 0x0f]; + mcc[2] = Dgt_tbcd.out[octs[1] & 0x0f]; } else { - mcc[2] = (octs[1] & 0x0f) + 55; + mcc[2] = (octs[1] & 0x0f) + 55; } mcc[3] = '\0'; if (((octs[1] & 0xf0) >> 4) <= 9) { - mnc[2] = Dgt_tbcd.out[(octs[1] & 0xf0) >> 4]; + mnc[2] = Dgt_tbcd.out[(octs[1] & 0xf0) >> 4]; } else { - mnc[2] = ((octs[1] & 0xf0) >> 4) + 55; + mnc[2] = ((octs[1] & 0xf0) >> 4) + 55; } if ((octs[2] & 0x0f) <= 9) { - mnc[0] = Dgt_tbcd.out[octs[2] & 0x0f]; + mnc[0] = Dgt_tbcd.out[octs[2] & 0x0f]; } else { - mnc[0] = (octs[2] & 0x0f) + 55; + mnc[0] = (octs[2] & 0x0f) + 55; } if (((octs[2] & 0xf0) >> 4) <= 9) { - mnc[1] = Dgt_tbcd.out[(octs[2] & 0xf0) >> 4]; + mnc[1] = Dgt_tbcd.out[(octs[2] & 0xf0) >> 4]; } else { - mnc[1] = ((octs[2] & 0xf0) >> 4) + 55; + mnc[1] = ((octs[2] & 0xf0) >> 4) + 55; } if (mnc[1] == 'F') { - /* - * only a 1 digit MNC (very old) - */ - mnc[1] = '\0'; + /* + * only a 1 digit MNC (very old) + */ + mnc[1] = '\0'; } else if (mnc[2] == 'F') { - /* - * only a 2 digit MNC - */ - mnc[2] = '\0'; + /* + * only a 2 digit MNC + */ + mnc[2] = '\0'; } else { - mnc[3] = '\0'; + mnc[3] = '\0'; } } @@ -896,7 +893,7 @@ de_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [3] 10.5.1.3 */ guint8 -de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 octs[3]; guint16 value; @@ -906,13 +903,12 @@ de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_st gchar mcc[4]; gchar mnc[4]; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 5, - gsm_common_elem_strings[DE_LAI].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 5, + gsm_common_elem_strings[DE_LAI].strptr); subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_LAI]); @@ -924,20 +920,20 @@ de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_st proto_tree_add_text(subtree, - tvb, curr_offset, 3, - "Mobile Country Code (MCC): %s, Mobile Network Code (MNC): %s", - mcc, - mnc); + tvb, curr_offset, 3, + "Mobile Country Code (MCC): %s, Mobile Network Code (MNC): %s", + mcc, + mnc); curr_offset += 3; value = tvb_get_ntohs(tvb, curr_offset); proto_tree_add_text(subtree, - tvb, curr_offset, 2, - "Location Area Code (LAC): 0x%04x (%u)", - value, - value); + tvb, curr_offset, 2, + "Location Area Code (LAC): 0x%04x (%u)", + value, + value); proto_item_append_text(item, " - LAC (0x%04x)", value); @@ -974,149 +970,144 @@ de_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_st switch (oct & 0x07) { case 0: /* No Identity */ - other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Unused", - a_bigbuf); + other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Unused", + a_bigbuf); - proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); - if (add_string) - g_snprintf(add_string, string_len, " - No Identity Code"); + if (add_string) + g_snprintf(add_string, string_len, " - No Identity Code"); - curr_offset++; + curr_offset++; - if (len > 1) - { - proto_tree_add_text(tree, tvb, curr_offset, len - 1, - "Format not supported"); - } + if (len > 1) + { + proto_tree_add_text(tree, tvb, curr_offset, len - 1, + "Format not supported"); + } - curr_offset += len - 1; - break; + curr_offset += len - 1; + break; case 3: /* IMEISV */ - - /* FALLTHRU */ + /* FALLTHRU */ case 1: /* IMSI */ + other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Identity Digit 1: %c", + a_bigbuf, + Dgt1_9_bcd.out[(oct & 0xf0) >> 4]); - other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Identity Digit 1: %c", - a_bigbuf, - Dgt1_9_bcd.out[(oct & 0xf0) >> 4]); - - odd = oct & 0x08; - - proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + odd = oct & 0x08; - proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); - a_bigbuf[0] = Dgt1_9_bcd.out[(oct & 0xf0) >> 4]; - curr_offset++; + a_bigbuf[0] = Dgt1_9_bcd.out[(oct & 0xf0) >> 4]; + curr_offset++; - poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); + poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); - my_dgt_tbcd_unpack(&a_bigbuf[1], poctets, len - (curr_offset - offset), - &Dgt1_9_bcd); + my_dgt_tbcd_unpack(&a_bigbuf[1], poctets, len - (curr_offset - offset), + &Dgt1_9_bcd); - proto_tree_add_string_format(tree, - ((oct & 0x07) == 3) ? hf_gsm_a_imeisv : hf_gsm_a_imsi, - tvb, curr_offset, len - (curr_offset - offset), - a_bigbuf, - "BCD Digits: %s", - a_bigbuf); + proto_tree_add_string_format(tree, + ((oct & 0x07) == 3) ? hf_gsm_a_imeisv : hf_gsm_a_imsi, + tvb, curr_offset, len - (curr_offset - offset), + a_bigbuf, + "BCD Digits: %s", + a_bigbuf); - if (sccp_assoc && ! sccp_assoc->calling_party) { - sccp_assoc->calling_party = se_strdup_printf( - ((oct & 0x07) == 3) ? "IMEISV: %s" : "IMSI: %s", - a_bigbuf ); - } + if (sccp_assoc && ! sccp_assoc->calling_party) { + sccp_assoc->calling_party = se_strdup_printf( + ((oct & 0x07) == 3) ? "IMEISV: %s" : "IMSI: %s", + a_bigbuf ); + } - if (add_string) - g_snprintf(add_string, string_len, " - %s (%s)", - ((oct & 0x07) == 3) ? "IMEISV" : "IMSI", - a_bigbuf); + if (add_string) + g_snprintf(add_string, string_len, " - %s (%s)", + ((oct & 0x07) == 3) ? "IMEISV" : "IMSI", + a_bigbuf); - curr_offset += len - (curr_offset - offset); + curr_offset += len - (curr_offset - offset); - if (!odd) - { - oct = tvb_get_guint8(tvb, curr_offset - 1); + if (!odd) + { + oct = tvb_get_guint8(tvb, curr_offset - 1); - other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset - 1, 1, - "%s : Filler", - a_bigbuf); - } - break; + other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); + proto_tree_add_text(tree, + tvb, curr_offset - 1, 1, + "%s : Filler", + a_bigbuf); + } + break; case 2: /* IMEI */ - other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Identity Digit 1: %c", - a_bigbuf, - Dgt1_9_bcd.out[(oct & 0xf0) >> 4]); - - proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Identity Digit 1: %c", + a_bigbuf, + Dgt1_9_bcd.out[(oct & 0xf0) >> 4]); - proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); - a_bigbuf[0] = Dgt1_9_bcd.out[(oct & 0xf0) >> 4]; - curr_offset++; + a_bigbuf[0] = Dgt1_9_bcd.out[(oct & 0xf0) >> 4]; + curr_offset++; - poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); + poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); - my_dgt_tbcd_unpack(&a_bigbuf[1], poctets, len - (curr_offset - offset), - &Dgt1_9_bcd); + my_dgt_tbcd_unpack(&a_bigbuf[1], poctets, len - (curr_offset - offset), + &Dgt1_9_bcd); - proto_tree_add_string_format(tree, - hf_gsm_a_imei, - tvb, curr_offset, len - (curr_offset - offset), - a_bigbuf, - "BCD Digits: %s", - a_bigbuf); + proto_tree_add_string_format(tree, + hf_gsm_a_imei, + tvb, curr_offset, len - (curr_offset - offset), + a_bigbuf, + "BCD Digits: %s", + a_bigbuf); - if (add_string) - g_snprintf(add_string, string_len, " - IMEI (%s)", a_bigbuf); + if (add_string) + g_snprintf(add_string, string_len, " - IMEI (%s)", a_bigbuf); - curr_offset += len - (curr_offset - offset); - break; + curr_offset += len - (curr_offset - offset); + break; case 4: /* TMSI/P-TMSI */ - other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Unused", - a_bigbuf); - - proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : Unused", + a_bigbuf); - proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset++; - value = tvb_get_ntohl(tvb, curr_offset); + value = tvb_get_ntohl(tvb, curr_offset); - proto_tree_add_uint(tree, hf_gsm_a_tmsi, - tvb, curr_offset, 4, - value); + proto_tree_add_uint(tree, hf_gsm_a_tmsi, + tvb, curr_offset, 4, + value); - if (add_string) - g_snprintf(add_string, string_len, " - TMSI/P-TMSI (0x%04x)", value); + if (add_string) + g_snprintf(add_string, string_len, " - TMSI/P-TMSI (0x%04x)", value); - curr_offset += 4; - break; + curr_offset += 4; + break; case 5: /* TMGI and optional MBMS Session Identity */ /* MBMS Session Identity indication (octet 3) Bit 6 */ @@ -1145,16 +1136,16 @@ de_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_st break; default: /* Reserved */ - proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); - proto_tree_add_text(tree, tvb, curr_offset, len, - "Mobile station identity Format %u, Format Unknown",(oct & 0x07)); + proto_tree_add_item(tree, hf_gsm_a_odd_even_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_mobile_identity_type, tvb, curr_offset, 1, FALSE); + proto_tree_add_text(tree, tvb, curr_offset, len, + "Mobile station identity Format %u, Format Unknown",(oct & 0x07)); - if (add_string) - g_snprintf(add_string, string_len, " - Format Unknown"); + if (add_string) + g_snprintf(add_string, string_len, " - Format Unknown"); - curr_offset += len; - break; + curr_offset += len; + break; } EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -1166,21 +1157,21 @@ de_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_st * [3] 10.5.1.5 */ guint8 -de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; proto_tree *subtree; proto_item *item; - len = len; + curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_common_elem_strings[DE_MS_CM_1].strptr); + tvb, curr_offset, 1, + gsm_common_elem_strings[DE_MS_CM_1].strptr); subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_MS_CM_1]); @@ -1210,7 +1201,6 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad guint32 curr_offset; curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); proto_tree_add_item(tree, hf_gsm_a_MSC_rev, tvb, curr_offset, 1, FALSE); @@ -1271,16 +1261,15 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [3] 10.5.1.8 */ static guint8 -de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Spare Nibble"); + tvb, curr_offset, 1, + "Spare Nibble"); curr_offset++; @@ -1293,37 +1282,36 @@ de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [3] 10.5.1.9 */ guint8 -de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 value; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; value = tvb_get_ntohl(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, value, 0xffffffe0, 32); proto_tree_add_text(tree, tvb, curr_offset, 4, - "%s : Group or Broadcast call reference: %u (0x%04x)", - a_bigbuf, - (value & 0xffffffe0) >> 5, - (value & 0xffffffe0) >> 5); + "%s : Group or Broadcast call reference: %u (0x%04x)", + a_bigbuf, + (value & 0xffffffe0) >> 5, + (value & 0xffffffe0) >> 5); other_decode_bitfield_value(a_bigbuf, value, 0x00000010, 32); proto_tree_add_text(tree, tvb, curr_offset, 4, - "%s : SF Service Flag: %s", - a_bigbuf, - (value & 0x00000010) ? - "VGCS (Group call reference)" : "VBS (Broadcast call reference)"); + "%s : SF Service Flag: %s", + a_bigbuf, + (value & 0x00000010) ? + "VGCS (Group call reference)" : "VBS (Broadcast call reference)"); other_decode_bitfield_value(a_bigbuf, value, 0x00000008, 32); proto_tree_add_text(tree, tvb, curr_offset, 4, - "%s : AF Acknowledgement Flag: acknowledgment is %srequired", - a_bigbuf, - (value & 0x00000008) ? "" : "not "); + "%s : AF Acknowledgement Flag: acknowledgment is %srequired", + a_bigbuf, + (value & 0x00000008) ? "" : "not "); switch (value & 0x00000007) { @@ -1341,9 +1329,9 @@ de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch other_decode_bitfield_value(a_bigbuf, value, 0x00000007, 32); proto_tree_add_text(tree, tvb, curr_offset, 4, - "%s : Call Priority: %s", - a_bigbuf, - str); + "%s : Call Priority: %s", + a_bigbuf, + str); curr_offset += 4; @@ -1351,13 +1339,13 @@ de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, tvb, curr_offset, 1, - "%s : Ciphering Information", - a_bigbuf); + "%s : Ciphering Information", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + "%s : Spare", + a_bigbuf); curr_offset++; @@ -1370,7 +1358,7 @@ de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [3] 10.5.1.10a */ static guint8 -de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; @@ -1378,22 +1366,21 @@ de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad proto_item *item; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_PD_SAPI].strptr); + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_PD_SAPI].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_PD_SAPI]); other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8); proto_tree_add_text(subtree, tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + "%s : Spare", + a_bigbuf); switch ((oct & 0x30) >> 4) { @@ -1406,9 +1393,9 @@ de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8); proto_tree_add_text(subtree, tvb, curr_offset, 1, - "%s : SAPI (Sevice Access Point Identifier): %s", - a_bigbuf, - str); + "%s : SAPI (Sevice Access Point Identifier): %s", + a_bigbuf, + str); proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, FALSE); @@ -1423,23 +1410,22 @@ 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" }, + { 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_) +de_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); @@ -1475,11 +1461,11 @@ de_plmn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * mcc_mnc_aux(octs, mcc, mnc); proto_tree_add_text(tree, - tvb, curr_offset, 3, - "PLMN[%u] Mobile Country Code (MCC): %s, Mobile Network Code (MNC): %s", - num_plmn + 1, - mcc, - mnc); + tvb, curr_offset, 3, + "PLMN[%u] Mobile Country Code (MCC): %s, Mobile Network Code (MNC): %s", + num_plmn + 1, + mcc, + mnc); curr_offset += 3; @@ -1488,7 +1474,7 @@ de_plmn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * if (add_string) g_snprintf(add_string, string_len, " - %u PLMN%s", - num_plmn, plurality(num_plmn, "", "s")); + num_plmn, plurality(num_plmn, "", "s")); EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -1518,120 +1504,120 @@ guint8 (*common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui void proto_register_gsm_a_common(void) { - guint i; - guint last_offset; + guint i; + guint last_offset; /* Setup list of header fields */ static hf_register_info hf[] = { { &hf_gsm_a_common_elem_id, - { "Element ID", "gsm_a_common.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_common.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_imsi, - { "IMSI", "gsm_a.imsi", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } + { "IMSI", "gsm_a.imsi", + FT_STRING, BASE_DEC, 0, 0, + "", HFILL } }, { &hf_gsm_a_tmsi, - { "TMSI/P-TMSI", "gsm_a.tmsi", - FT_UINT32, BASE_HEX, 0, 0x0, - "", HFILL } + { "TMSI/P-TMSI", "gsm_a.tmsi", + FT_UINT32, BASE_HEX, 0, 0x0, + "", HFILL } }, { &hf_gsm_a_imei, - { "IMEI", "gsm_a.imei", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } + { "IMEI", "gsm_a.imei", + FT_STRING, BASE_DEC, 0, 0, + "", HFILL } }, { &hf_gsm_a_imeisv, - { "IMEISV", "gsm_a.imeisv", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } + { "IMEISV", "gsm_a.imeisv", + FT_STRING, BASE_DEC, 0, 0, + "", HFILL } }, { &hf_gsm_a_MSC_rev, { "Revision Level","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(gsm_a_msc_rev_vals), 0x60, + FT_UINT8,BASE_DEC, VALS(gsm_a_msc_rev_vals), 0x60, "Revision level", HFILL } }, { &hf_gsm_a_ES_IND, { "ES IND","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(ES_IND_vals), 0x10, + FT_UINT8,BASE_DEC, VALS(ES_IND_vals), 0x10, "ES IND", HFILL } }, { &hf_gsm_a_A5_1_algorithm_sup, { "A5/1 algorithm supported","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(A5_1_algorithm_sup_vals), 0x08, + FT_UINT8,BASE_DEC, VALS(A5_1_algorithm_sup_vals), 0x08, "A5/1 algorithm supported ", HFILL } }, { &hf_gsm_a_RF_power_capability, { "RF Power Capability","gsm_a.MSC2_rev", - FT_UINT8,BASE_DEC, VALS(RF_power_capability_vals), 0x07, + FT_UINT8,BASE_DEC, VALS(RF_power_capability_vals), 0x07, "RF Power Capability", HFILL } }, { &hf_gsm_a_ps_sup_cap, { "PS capability (pseudo-synchronization capability)","gsm_a.ps_sup_cap", - FT_UINT8,BASE_DEC, VALS(ps_sup_cap_vals), 0x40, + FT_UINT8,BASE_DEC, VALS(ps_sup_cap_vals), 0x40, "PS capability (pseudo-synchronization capability)", HFILL } }, { &hf_gsm_a_SS_screening_indicator, { "SS Screening Indicator","gsm_a.SS_screening_indicator", - FT_UINT8,BASE_DEC, VALS(SS_screening_indicator_vals), 0x30, + FT_UINT8,BASE_DEC, VALS(SS_screening_indicator_vals), 0x30, "SS Screening Indicator", HFILL } }, { &hf_gsm_a_SM_capability, { "SM capability (MT SMS pt to pt capability)","gsm_a.SM_cap", - FT_UINT8,BASE_DEC, VALS(SM_capability_vals), 0x08, + FT_UINT8,BASE_DEC, VALS(SM_capability_vals), 0x08, "SM capability (MT SMS pt to pt capability)", HFILL } }, { &hf_gsm_a_VBS_notification_rec, { "VBS notification reception ","gsm_a.VBS_notification_rec", - FT_UINT8,BASE_DEC, VALS(VBS_notification_rec_vals), 0x04, + FT_UINT8,BASE_DEC, VALS(VBS_notification_rec_vals), 0x04, "VBS notification reception ", HFILL } }, { &hf_gsm_a_VGCS_notification_rec, { "VGCS notification reception ","gsm_a.VGCS_notification_rec", - FT_UINT8,BASE_DEC, VALS(VGCS_notification_rec_vals), 0x02, + FT_UINT8,BASE_DEC, VALS(VGCS_notification_rec_vals), 0x02, "VGCS notification reception", HFILL } }, { &hf_gsm_a_FC_frequency_cap, { "FC Frequency Capability","gsm_a.FC_frequency_cap", - FT_UINT8,BASE_DEC, VALS(FC_frequency_cap_vals), 0x01, + FT_UINT8,BASE_DEC, VALS(FC_frequency_cap_vals), 0x01, "FC Frequency Capability", HFILL } }, { &hf_gsm_a_CM3, { "CM3","gsm_a.CM3", - FT_UINT8,BASE_DEC, VALS(CM3_vals), 0x80, + FT_UINT8,BASE_DEC, VALS(CM3_vals), 0x80, "CM3", HFILL } }, { &hf_gsm_a_LCS_VA_cap, { "LCS VA capability (LCS value added location request notification capability) ","gsm_a.LCS_VA_cap", - FT_UINT8,BASE_DEC, VALS(LCS_VA_cap_vals), 0x20, + FT_UINT8,BASE_DEC, VALS(LCS_VA_cap_vals), 0x20, "LCS VA capability (LCS value added location request notification capability) ", HFILL } }, { &hf_gsm_a_UCS2_treatment, { "UCS2 treatment ","gsm_a.UCS2_treatment", - FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x10, + FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x10, "UCS2 treatment ", HFILL } }, { &hf_gsm_a_SoLSA, { "SoLSA","gsm_a.SoLSA", - FT_UINT8,BASE_DEC, VALS(SoLSA_vals), 0x08, + FT_UINT8,BASE_DEC, VALS(SoLSA_vals), 0x08, "SoLSA", HFILL } }, { &hf_gsm_a_CMSP, { "CMSP: CM Service Prompt","gsm_a.CMSP", - FT_UINT8,BASE_DEC, VALS(CMSP_vals), 0x04, + FT_UINT8,BASE_DEC, VALS(CMSP_vals), 0x04, "CMSP: CM Service Prompt", HFILL } }, { &hf_gsm_a_A5_3_algorithm_sup, { "A5/3 algorithm supported","gsm_a.A5_3_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_3_algorithm_sup_vals), 0x02, + FT_UINT8,BASE_DEC, VALS(A5_3_algorithm_sup_vals), 0x02, "A5/3 algorithm supported", HFILL } }, { &hf_gsm_a_A5_2_algorithm_sup, { "A5/2 algorithm supported","gsm_a.A5_2_algorithm_sup", - FT_UINT8,BASE_DEC, VALS(A5_2_algorithm_sup_vals), 0x01, + FT_UINT8,BASE_DEC, VALS(A5_2_algorithm_sup_vals), 0x01, "A5/2 algorithm supported", HFILL } }, { &hf_gsm_a_mobile_identity_type, @@ -1647,42 +1633,41 @@ proto_register_gsm_a_common(void) { &hf_gsm_a_tmgi_mcc_mnc_ind, { "MCC/MNC indication", "gsm_a.tmgi_mcc_mnc_ind", FT_BOOLEAN, 8, TFS(&gsm_a_present_vals), 0x10, - "MCC/MNC indication", HFILL}}, - + "MCC/MNC indication", HFILL} + }, { &hf_gsm_a_mbs_ses_id_ind, { "MBMS Session Identity indication", "gsm_a.tmgi_mcc_mnc_ind", FT_BOOLEAN, 8, TFS(&gsm_a_present_vals), 0x20, - "MBMS Session Identity indication", HFILL}}, - + "MBMS Session Identity indication", HFILL} + }, { &hf_gsm_a_mbs_service_id, - { "MBMS Service ID", "gsm_a.mbs_service_id", + { "MBMS Service ID", "gsm_a.mbs_service_id", FT_BYTES, BASE_HEX, NULL, 0x0, "MBMS Service ID", HFILL } }, - { &hf_gsm_a_L3_protocol_discriminator, { "Protocol discriminator","gsm_a.L3_protocol_discriminator", - FT_UINT8,BASE_DEC, VALS(protocol_discriminator_vals), 0x0f, + FT_UINT8,BASE_DEC, VALS(protocol_discriminator_vals), 0x0f, "Protocol discriminator", HFILL } }, { &hf_gsm_a_call_prio, - { "Call priority", "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", + { "Skip Indicator", "gsm_a.skip.ind", FT_UINT8, BASE_DEC, NULL, 0xf0, "Skip Indicator", HFILL } }, { &hf_gsm_a_b7spare, - { "Spare","gsm_a.spareb7", - FT_UINT8,BASE_DEC, NULL, 0x40, - "Spare", HFILL } + { "Spare","gsm_a.spareb7", + FT_UINT8,BASE_DEC, NULL, 0x40, + "Spare", HFILL } }, { &hf_gsm_a_b8spare, { "Spare","gsm_a.spareb8", - FT_UINT8,BASE_DEC, NULL, 0x80, + FT_UINT8,BASE_DEC, NULL, 0x80, "Spare", HFILL } }, }; @@ -1696,8 +1681,8 @@ proto_register_gsm_a_common(void) for (i=0; i < NUM_GSM_COMMON_ELEM; i++, last_offset++) { - ett_gsm_common_elem[i] = -1; - ett[last_offset] = &ett_gsm_common_elem[i]; + ett_gsm_common_elem[i] = -1; + ett[last_offset] = &ett_gsm_common_elem[i]; } /* Register the protocol name and description */ diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index 060b16f4e4..e7240a0414 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -2,6 +2,31 @@ * * $Id$ * + * Reference [3] + * Mobile radio interface Layer 3 specification; + * Core network protocols; + * Stage 3 + * (3GPP TS 24.008 version 4.7.0 Release 4) + * (ETSI TS 124 008 V6.8.0 (2005-03)) + * + * Reference [5] + * Point-to-Point (PP) Short Message Service (SMS) + * support on mobile radio interface + * (3GPP TS 24.011 version 4.1.1 Release 4) + * + * Reference [7] + * Mobile radio interface Layer 3 specification; + * Core network protocols; + * Stage 3 + * (3GPP TS 24.008 version 5.9.0 Release 5) + * + * Reference [8] + * Mobile radio interface Layer 3 specification; + * Core network protocols; + * Stage 3 + * (3GPP TS 24.008 version 6.7.0 Release 6) + * (3GPP TS 24.008 version 6.8.0 Release 6) + * * Copyright 2003, Michael Lum , * In association with Telos Technology Inc. * @@ -130,8 +155,8 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx); * changed here to unsigned integer as it wouldn't compile (Warnings on Ubuntu) * uggly hack... */ -#define UPPER_NIBBLE (2) -#define LOWER_NIBBLE (1) +#define UPPER_NIBBLE (2) +#define LOWER_NIBBLE (1) /* FUNCTIONS */ @@ -140,72 +165,71 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx); #define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \ if (((edc_len) > (edc_max_len))||lower_nibble) \ { \ - proto_tree_add_text(tree, tvb, \ - curr_offset, (edc_len) - (edc_max_len), "Extraneous Data"); \ - curr_offset += ((edc_len) - (edc_max_len)); \ + proto_tree_add_text(tree, tvb, \ + curr_offset, (edc_len) - (edc_max_len), "Extraneous Data"); \ + curr_offset += ((edc_len) - (edc_max_len)); \ } #define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \ if ((sdc_len) < (sdc_min_len)) \ { \ - proto_tree_add_text(tree, tvb, \ - curr_offset, (sdc_len), "Short Data (?)"); \ - curr_offset += (sdc_len); \ - return(curr_offset - offset); \ + proto_tree_add_text(tree, tvb, \ + curr_offset, (sdc_len), "Short Data (?)"); \ + curr_offset += (sdc_len); \ + return(curr_offset - offset); \ } #define EXACT_DATA_CHECK(edc_len, edc_eq_len) \ if ((edc_len) != (edc_eq_len)) \ { \ - proto_tree_add_text(tree, tvb, \ - curr_offset, (edc_len), "Unexpected Data Length"); \ - curr_offset += (edc_len); \ - return(curr_offset - offset); \ + proto_tree_add_text(tree, tvb, \ + curr_offset, (edc_len), "Unexpected Data Length"); \ + curr_offset += (edc_len); \ + return(curr_offset - offset); \ } #define NO_MORE_DATA_CHECK(nmdc_len) \ if ((nmdc_len) == (curr_offset - offset)) return(nmdc_len); #define SET_ELEM_VARS(SEV_pdu_type, SEV_elem_names, SEV_elem_ett, SEV_elem_funcs) \ - switch (SEV_pdu_type) \ - { \ - case GSM_A_PDU_TYPE_BSSMAP: \ - SEV_elem_names = gsm_bssmap_elem_strings; \ - SEV_elem_ett = ett_gsm_bssmap_elem; \ - SEV_elem_funcs = bssmap_elem_fcn; \ - break; \ - case GSM_A_PDU_TYPE_DTAP: \ - SEV_elem_names = gsm_dtap_elem_strings; \ - SEV_elem_ett = ett_gsm_dtap_elem; \ - SEV_elem_funcs = dtap_elem_fcn; \ - break; \ - case GSM_A_PDU_TYPE_RP: \ - SEV_elem_names = gsm_rp_elem_strings; \ - SEV_elem_ett = ett_gsm_rp_elem; \ - SEV_elem_funcs = rp_elem_fcn; \ - break; \ - case GSM_A_PDU_TYPE_RR: \ - SEV_elem_names = gsm_rr_elem_strings; \ - SEV_elem_ett = ett_gsm_rr_elem; \ - SEV_elem_funcs = rr_elem_fcn; \ - break; \ - case GSM_A_PDU_TYPE_COMMON: \ - SEV_elem_names = gsm_common_elem_strings; \ - SEV_elem_ett = ett_gsm_common_elem; \ - SEV_elem_funcs = common_elem_fcn; \ - break; \ - case GSM_A_PDU_TYPE_GM: \ - SEV_elem_names = gsm_gm_elem_strings; \ - SEV_elem_ett = ett_gsm_gm_elem; \ - SEV_elem_funcs = gm_elem_fcn; \ - break; \ - default: \ - proto_tree_add_text(tree, \ - tvb, curr_offset, -1, \ - "Unknown PDU type (%u)", SEV_pdu_type); \ - return(consumed); \ - } - + switch (SEV_pdu_type) \ + { \ + case GSM_A_PDU_TYPE_BSSMAP: \ + SEV_elem_names = gsm_bssmap_elem_strings; \ + SEV_elem_ett = ett_gsm_bssmap_elem; \ + SEV_elem_funcs = bssmap_elem_fcn; \ + break; \ + case GSM_A_PDU_TYPE_DTAP: \ + SEV_elem_names = gsm_dtap_elem_strings; \ + SEV_elem_ett = ett_gsm_dtap_elem; \ + SEV_elem_funcs = dtap_elem_fcn; \ + break; \ + case GSM_A_PDU_TYPE_RP: \ + SEV_elem_names = gsm_rp_elem_strings; \ + SEV_elem_ett = ett_gsm_rp_elem; \ + SEV_elem_funcs = rp_elem_fcn; \ + break; \ + case GSM_A_PDU_TYPE_RR: \ + SEV_elem_names = gsm_rr_elem_strings; \ + SEV_elem_ett = ett_gsm_rr_elem; \ + SEV_elem_funcs = rr_elem_fcn; \ + break; \ + case GSM_A_PDU_TYPE_COMMON: \ + SEV_elem_names = gsm_common_elem_strings; \ + SEV_elem_ett = ett_gsm_common_elem; \ + SEV_elem_funcs = common_elem_fcn; \ + break; \ + case GSM_A_PDU_TYPE_GM: \ + SEV_elem_names = gsm_gm_elem_strings; \ + SEV_elem_ett = ett_gsm_gm_elem; \ + SEV_elem_funcs = gm_elem_fcn; \ + break; \ + default: \ + proto_tree_add_text(tree, \ + tvb, curr_offset, -1, \ + "Unknown PDU type (%u)", SEV_pdu_type); \ + return(consumed); \ + } /* * Type Length Value (TLV) element dissector @@ -262,18 +286,18 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_tlv(tvb, tree, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ else \ { \ - proto_tree_add_text(tree, \ - tvb, curr_offset, 0, \ - "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ - EMT_iei, \ - get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ - (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \ - ); \ + proto_tree_add_text(tree, \ + tvb, curr_offset, 0, \ + "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ + EMT_iei, \ + get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ + (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \ + ); \ } \ if (curr_len <= 0) return; \ } @@ -282,8 +306,8 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_tlv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ if (curr_len <= 0) return; \ } @@ -292,18 +316,18 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_tv(tvb, tree, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, EMT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ else \ { \ - proto_tree_add_text(tree, \ - tvb, curr_offset, 0, \ - "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ - EMT_iei, \ - get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ - (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \ - ); \ + proto_tree_add_text(tree, \ + tvb, curr_offset, 0, \ + "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ + EMT_iei, \ + get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ + (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \ + ); \ } \ if (curr_len <= 0) return; \ } @@ -312,8 +336,8 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_tv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ if (curr_len <= 0) return; \ } @@ -322,8 +346,8 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_tv_short(tvb, tree, EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ if (curr_len <= 0) return; \ } @@ -332,8 +356,8 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_t(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ if (curr_len <= 0) return; \ } @@ -342,12 +366,12 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_lv(tvb, tree, EML_pdu_type, EML_elem_idx, curr_offset, curr_len, EML_elem_name_addition)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ else \ { \ - /* Mandatory, but nothing we can do */ \ + /* Mandatory, but nothing we can do */ \ } \ if (curr_len <= 0) return; \ } @@ -356,12 +380,12 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_v(tvb, tree, EMV_pdu_type, EMV_elem_idx, curr_offset)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ else \ { \ - /* Mandatory, but nothing we can do */ \ + /* Mandatory, but nothing we can do */ \ } \ if (curr_len <= 0) return; \ } @@ -370,49 +394,48 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i {\ if ((consumed = elem_v_short(tvb, tree, EMV_pdu_type, EMV_elem_idx, curr_offset)) > 0) \ { \ - curr_offset += consumed; \ - curr_len -= consumed; \ + curr_offset += consumed; \ + curr_len -= consumed; \ } \ else \ { \ - /* Mandatory, but nothing we can do */ \ + /* Mandatory, but nothing we can do */ \ } \ if (curr_len <= 0) return; \ } - /* * this enum must be kept in-sync with 'gsm_a_pd_str' * it is used as an index into the array */ typedef enum { - PD_GCC = 0, - PD_BCC, - PD_RSVD_1, - PD_CC, - PD_GTTP, - PD_MM, - PD_RR, - PD_UNK_1, - PD_GMM, - PD_SMS, - PD_SM, - PD_SS, - PD_LCS, - PD_UNK_2, - PD_RSVD_EXT, - PD_RSVD_TEST + PD_GCC = 0, + PD_BCC, + PD_RSVD_1, + PD_CC, + PD_GTTP, + PD_MM, + PD_RR, + PD_UNK_1, + PD_GMM, + PD_SMS, + PD_SM, + PD_SS, + PD_LCS, + PD_UNK_2, + PD_RSVD_EXT, + PD_RSVD_TEST } gsm_a_pd_str_e; typedef struct _gsm_a_tap_rec_t { - /* - * value from packet-bssap.h - */ - guint8 pdu_type; - guint8 message_type; - gsm_a_pd_str_e protocol_disc; + /* + * value from packet-bssap.h + */ + guint8 pdu_type; + guint8 message_type; + gsm_a_pd_str_e protocol_disc; } gsm_a_tap_rec_t; void dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); @@ -483,8 +506,7 @@ extern const value_string gsm_a_numbering_plan_id_values[]; typedef enum { - /* Common Information Elements 10.5.1 */ - /* Pos 0 */ + /* Common Information Elements [3] 10.5.1 */ DE_CELL_ID, /* Cell Identity */ DE_CIPH_KEY_SEQ_NUM, /* Ciphering Key Sequence Number */ DE_LAI, /* Location Area Identification */ @@ -496,7 +518,6 @@ typedef enum DE_D_GB_CALL_REF, /* Descriptive group or broadcast call reference */ DE_G_CIPH_KEY_NUM, /* Group Cipher Key Number */ DE_PD_SAPI, /* PD and SAPI $(CCBS)$ */ - /* Pos 10 */ DE_PRIO, /* Priority Level */ DE_PLMN_LIST, /* PLMN List */ @@ -506,7 +527,7 @@ common_elem_idx_t; typedef enum { - /* Mobility Management Information Elements 10.5.3 */ + /* Mobility Management Information Elements [3] 10.5.3 */ DE_AUTH_PARAM_RAND, /* Authentication Parameter RAND */ DE_AUTH_PARAM_AUTN, /* Authentication Parameter AUTN (UMTS authentication challenge only) */ DE_AUTH_RESP_PARAM, /* Authentication Response Parameter */ @@ -566,25 +587,25 @@ typedef enum /* Short Message Service Information Elements [5] 8.1.4 */ DE_CP_USER_DATA, /* CP-User Data */ DE_CP_CAUSE, /* CP-Cause */ - /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */ - DE_TP_SUB_CHANNEL, /* Close TCH Loop Cmd Sub-channel */ - DE_TP_ACK, /* Open Loop Cmd Ack */ - DE_TP_LOOP_TYPE, /* Close Multi-slot Loop Cmd Loop type*/ - DE_TP_LOOP_ACK, /* Close Multi-slot Loop Ack Result */ - DE_TP_TESTED_DEVICE, /* Test Interface Tested device */ - DE_TP_PDU_DESCRIPTION, /* GPRS Test Mode Cmd PDU description */ - DE_TP_MODE_FLAG, /* GPRS Test Mode Cmd Mode flag */ - DE_TP_EGPRS_MODE_FLAG, /* EGPRS Start Radio Block Loopback Cmd Mode flag */ - DE_TP_UE_TEST_LOOP_MODE, /* Close UE Test Loop Mode */ - DE_TP_UE_POSITIONING_TECHNOLOGY, /* UE Positioning Technology */ - DE_TP_RLC_SDU_COUNTER_VALUE, /* RLC SDU Counter Value */ + /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */ + DE_TP_SUB_CHANNEL, /* Close TCH Loop Cmd Sub-channel */ + DE_TP_ACK, /* Open Loop Cmd Ack */ + DE_TP_LOOP_TYPE, /* Close Multi-slot Loop Cmd Loop type*/ + DE_TP_LOOP_ACK, /* Close Multi-slot Loop Ack Result */ + DE_TP_TESTED_DEVICE, /* Test Interface Tested device */ + DE_TP_PDU_DESCRIPTION, /* GPRS Test Mode Cmd PDU description */ + DE_TP_MODE_FLAG, /* GPRS Test Mode Cmd Mode flag */ + DE_TP_EGPRS_MODE_FLAG, /* EGPRS Start Radio Block Loopback Cmd Mode flag */ + DE_TP_UE_TEST_LOOP_MODE, /* Close UE Test Loop Mode */ + DE_TP_UE_POSITIONING_TECHNOLOGY, /* UE Positioning Technology */ + DE_TP_RLC_SDU_COUNTER_VALUE, /* RLC SDU Counter Value */ DE_NONE /* NONE */ } dtap_elem_idx_t; typedef enum { - /* GPRS Mobility Management Information Elements 10.5.5 */ + /* GPRS Mobility Management Information Elements [3] 10.5.5 */ DE_ATTACH_RES, /* [7] 10.5.1 Attach Result*/ DE_ATTACH_TYPE, /* [7] 10.5.2 Attach Type */ DE_CIPH_ALG, /* [7] 10.5.3 Cipher Algorithm */ @@ -612,7 +633,7 @@ typedef enum DE_NET_FEAT_SUP, /* [7] 10.5.23 Network Feature Support */ DE_RAT_INFO_CONTAINER, /* [7] 10.5.24 Inter RAT information container */ /* [7] 10.5.25 Requested MS information */ - /* Session Management Information Elements 10.5.6 */ + /* Session Management Information Elements [3] 10.5.6 */ DE_ACC_POINT_NAME, /* Access Point Name */ DE_NET_SAPI, /* Network Service Access Point Identifier */ DE_PRO_CONF_OPT, /* Protocol Configuration Options */ @@ -624,7 +645,7 @@ typedef enum DE_TEAR_DOWN_IND, /* Tear Down Indicator */ DE_PACKET_FLOW_ID, /* Packet Flow Identifier */ DE_TRAFFIC_FLOW_TEMPLATE, /* Traffic Flow Template */ - /* GPRS Common Information Elements 10.5.7 */ + /* GPRS Common Information Elements [8] 10.5.7 */ DE_PDP_CONTEXT_STAT, /* [8] 10.5.7.1 PDP Context Status */ DE_RAD_PRIO, /* [8] 10.5.7.2 Radio Priority */ DE_GPRS_TIMER, /* [8] 10.5.7.3 GPRS Timer */ diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c index 79e2877e69..4dedd82121 100644 --- a/epan/dissectors/packet-gsm_a_dtap.c +++ b/epan/dissectors/packet-gsm_a_dtap.c @@ -20,11 +20,6 @@ * * Title 3GPP Other * - * Reference [1] - * Mobile radio interface signalling layer 3; - * General Aspects - * (3GPP TS 24.007 version 3.9.0 Release 1999) - * * Reference [3] * Mobile radio interface Layer 3 specification; * Core network protocols; @@ -189,31 +184,31 @@ const value_string gsm_a_dtap_msg_ss_strings[] = { }; const value_string gsm_a_dtap_msg_tp_strings[] = { - { 0x00, "Close TCH Loop Cmd" }, - { 0x01, "Close TCH Loop Ack" }, - { 0x06, "Open Loop Cmd" }, - { 0x0c, "Act EMMI Cmd" }, - { 0x0d, "Act EMMI Ack" }, - { 0x10, "Deact EMMI" }, - { 0x14, "Test Interface" }, - { 0x20, "Close Multi-slot Loop Cmd" }, - { 0x21, "Close Multi-slot Loop Ack" }, - { 0x22, "Open Multi-slot Loop Cmd" }, - { 0x23, "Open Multi-slot Loop Ack" }, - { 0x24, "GPRS Test Mode Cmd" }, - { 0x25, "EGPRS Start Radio Block Loopback Cmd" }, - { 0x40, "Close UE Test Loop" }, - { 0x41, "Close UE Test Loop Complete" }, - { 0x42, "Open UE Test Loop" }, - { 0x43, "Open UE Test Loop Complete" }, - { 0x44, "Activate RB Test Mode" }, - { 0x45, "Activate RB Test Mode Complete" }, - { 0x46, "Deactivate RB Test Mode" }, - { 0x47, "Deactivate RB Test Mode Complete" }, - { 0x48, "Reset UE Positioning Stored Information" }, - { 0x49, "UE Test Loop Mode 3 RLC SDU Counter Request" }, - { 0x4A, "UE Test Loop Mode 3 RLC SDU Counter Response" }, - { 0, NULL } + { 0x00, "Close TCH Loop Cmd" }, + { 0x01, "Close TCH Loop Ack" }, + { 0x06, "Open Loop Cmd" }, + { 0x0c, "Act EMMI Cmd" }, + { 0x0d, "Act EMMI Ack" }, + { 0x10, "Deact EMMI" }, + { 0x14, "Test Interface" }, + { 0x20, "Close Multi-slot Loop Cmd" }, + { 0x21, "Close Multi-slot Loop Ack" }, + { 0x22, "Open Multi-slot Loop Cmd" }, + { 0x23, "Open Multi-slot Loop Ack" }, + { 0x24, "GPRS Test Mode Cmd" }, + { 0x25, "EGPRS Start Radio Block Loopback Cmd" }, + { 0x40, "Close UE Test Loop" }, + { 0x41, "Close UE Test Loop Complete" }, + { 0x42, "Open UE Test Loop" }, + { 0x43, "Open UE Test Loop Complete" }, + { 0x44, "Activate RB Test Mode" }, + { 0x45, "Activate RB Test Mode Complete" }, + { 0x46, "Deactivate RB Test Mode" }, + { 0x47, "Deactivate RB Test Mode Complete" }, + { 0x48, "Reset UE Positioning Stored Information" }, + { 0x49, "UE Test Loop Mode 3 RLC SDU Counter Request" }, + { 0x4A, "UE Test Loop Mode 3 RLC SDU Counter Response" }, + { 0, NULL } }; const value_string gsm_dtap_elem_strings[] = { @@ -225,7 +220,6 @@ const value_string gsm_dtap_elem_strings[] = { { 0x00, "Authentication Failure Parameter (UMTS authentication challenge only)" }, { 0x00, "CM Service Type" }, { 0x00, "Identity Type" }, - /* Pos 50 */ { 0x00, "Location Updating Type" }, { 0x00, "Network Name" }, { 0x00, "Reject Cause" }, @@ -237,7 +231,6 @@ const value_string gsm_dtap_elem_strings[] = { { 0x00, "Daylight Saving Time" }, { 0x00, "Emergency Number List" }, /* Call Control Information Elements 10.5.4 */ - /* Pos 60 */ { 0x00, "Auxiliary States" }, /* 10.5.4.4 Auxiliary states */ { 0x00, "Bearer Capability" }, /* 10.5.4.4a Backup bearer capability */ { 0x00, "Call Control Capabilities" }, @@ -288,18 +281,18 @@ const value_string gsm_dtap_elem_strings[] = { { 0x00, "RP-Destination Address" }, { 0x00, "RP-User Data" }, { 0x00, "RP-Cause" }, - /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */ - { 0x00, "Close TCH Loop Cmd Sub-channel"}, - { 0x00, "Open Loop Cmd Ack"}, - { 0x00, "Close Multi-slot Loop Cmd Loop type"}, - { 0x00, "Close Multi-slot Loop Ack Result"}, - { 0x00, "Test Interface Tested device"}, - { 0x00, "GPRS Test Mode Cmd PDU description"}, - { 0x00, "GPRS Test Mode Cmd Mode flag"}, - { 0x00, "EGPRS Start Radio Block Loopback Cmd Mode flag"}, - { 0x00, "Close UE Test Loop Mode"}, - { 0x00, "UE Positioning Technology"}, - { 0x00, "RLC SDU Counter Value"}, + /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */ + { 0x00, "Close TCH Loop Cmd Sub-channel"}, + { 0x00, "Open Loop Cmd Ack"}, + { 0x00, "Close Multi-slot Loop Cmd Loop type"}, + { 0x00, "Close Multi-slot Loop Ack Result"}, + { 0x00, "Test Interface Tested device"}, + { 0x00, "GPRS Test Mode Cmd PDU description"}, + { 0x00, "GPRS Test Mode Cmd Mode flag"}, + { 0x00, "EGPRS Start Radio Block Loopback Cmd Mode flag"}, + { 0x00, "Close UE Test Loop Mode"}, + { 0x00, "UE Positioning Technology"}, + { 0x00, "RLC SDU Counter Value"}, { 0, NULL } }; @@ -319,7 +312,7 @@ const gchar *gsm_a_pd_str[] = { "Location Services", "Unknown", "Reserved for extension of the PD to one octet length", - "Special conformance testing functions" + "Special conformance testing functions" }; /* L3 Protocol discriminator values according to TS 24 007 (6.4.0) */ const value_string protocol_discriminator_vals[] = { @@ -457,9 +450,9 @@ de_auth_param_rand(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g #define AUTH_PARAM_RAND_LEN 16 proto_tree_add_text(tree, - tvb, curr_offset, AUTH_PARAM_RAND_LEN, - "RAND value: %s", - tvb_bytes_to_str(tvb, curr_offset, AUTH_PARAM_RAND_LEN)); + tvb, curr_offset, AUTH_PARAM_RAND_LEN, + "RAND value: %s", + tvb_bytes_to_str(tvb, curr_offset, AUTH_PARAM_RAND_LEN)); curr_offset += AUTH_PARAM_RAND_LEN; @@ -479,9 +472,9 @@ de_auth_param_autn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; proto_tree_add_text(tree, - tvb, curr_offset, len, - "AUTN value: %s", - tvb_bytes_to_str(tvb, curr_offset, len)); + tvb, curr_offset, len, + "AUTN value: %s", + tvb_bytes_to_str(tvb, curr_offset, len)); curr_offset += len; @@ -507,9 +500,9 @@ de_auth_resp_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g #define AUTH_PARAM_SRES_LEN 4 proto_tree_add_text(tree, - tvb, curr_offset, AUTH_PARAM_SRES_LEN, - "SRES value: %s", - tvb_bytes_to_str(tvb, curr_offset, AUTH_PARAM_SRES_LEN)); + tvb, curr_offset, AUTH_PARAM_SRES_LEN, + "SRES value: %s", + tvb_bytes_to_str(tvb, curr_offset, AUTH_PARAM_SRES_LEN)); curr_offset += AUTH_PARAM_SRES_LEN; @@ -529,9 +522,9 @@ de_auth_resp_param_ext(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le curr_offset = offset; proto_tree_add_text(tree, - tvb, curr_offset, len, - "XRES value: %s", - tvb_bytes_to_str(tvb, curr_offset, len)); + tvb, curr_offset, len, + "XRES value: %s", + tvb_bytes_to_str(tvb, curr_offset, len)); curr_offset += len; @@ -551,9 +544,9 @@ de_auth_fail_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; proto_tree_add_text(tree, - tvb, curr_offset, len, - "AUTS value: %s", - tvb_bytes_to_str(tvb, curr_offset, len)); + tvb, curr_offset, len, + "AUTS value: %s", + tvb_bytes_to_str(tvb, curr_offset, len)); curr_offset += len; @@ -583,25 +576,25 @@ de_network_name(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha case 0x00: str = "Cell Broadcast data coding scheme, GSM default alphabet, language unspecified, defined in 3GPP TS 03.38"; break; case 0x01: str = "UCS2 (16 bit)"; break; default: - str = "Reserved"; + str = "Reserved"; break; } other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Coding Scheme: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Coding Scheme: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Add CI: The MS should %s", - a_bigbuf, - (oct & 0x08) ? - "add the letters for the Country's Initials and a separator (e.g. a space) to the text string" : - "The MS should not add the letters for the Country's Initials to the text string"); + tvb, curr_offset, 1, + "%s : Add CI: The MS should %s", + a_bigbuf, + (oct & 0x08) ? + "add the letters for the Country's Initials and a separator (e.g. a space) to the text string" : + "The MS should not add the letters for the Country's Initials to the text string"); switch (oct & 0x07) { @@ -613,24 +606,24 @@ de_network_name(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha case 6: str = "bits 3 to 8(inclusive) are spare and set to '0' in octet n"; break; case 7: str = "bits 2 to 8(inclusive) are spare and set to '0' in octet n"; break; default: - str = "this field carries no information about the number of spare bits in octet n"; + str = "this field carries no information about the number of spare bits in octet n"; break; } other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Number of spare bits in last octet: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Number of spare bits in last octet: %s", + a_bigbuf, + str); curr_offset++; NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - 1, - "Text string encoded according to Coding Scheme"); + tvb, curr_offset, len - 1, + "Text string encoded according to Coding Scheme"); curr_offset += len - 1; @@ -643,13 +636,12 @@ de_network_name(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [3] 10.5.3.6 Reject cause */ guint8 -de_rej_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rej_cause(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -683,24 +675,24 @@ de_rej_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * case 0x65: str = "Message not compatible with the protocol state"; break; case 0x6f: str = "Protocol error, unspecified"; break; default: - switch (is_uplink) - { - case IS_UPLINK_FALSE: - str = "Service option temporarily out of order"; - break; - default: - str = "Protocol error, unspecified"; - break; - } - break; + switch (is_uplink) + { + case IS_UPLINK_FALSE: + str = "Service option temporarily out of order"; + break; + default: + str = "Protocol error, unspecified"; + break; + } + break; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Reject Cause value: 0x%02x (%u) %s", - oct, - oct, - str); + tvb, curr_offset, 1, + "Reject Cause value: 0x%02x (%u) %s", + oct, + oct, + str); curr_offset++; @@ -713,13 +705,12 @@ de_rej_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * * [3] 10.5.3.8 */ static guint8 -de_time_zone(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_time_zone(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; char sign; - len = len; curr_offset = offset; /* 3GPP TS 23.040 version 6.6.0 Release 6 @@ -736,9 +727,9 @@ de_time_zone(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * oct = (oct >> 4) + (oct & 0x07) * 10; proto_tree_add_text(tree, - tvb, offset, 1, - "Timezone: GMT %c %d hours %d minutes", - sign, oct / 4, oct % 4 * 15); + tvb, offset, 1, + "Timezone: GMT %c %d hours %d minutes", + sign, oct / 4, oct % 4 * 15); curr_offset++; /* no length check possible */ @@ -750,13 +741,12 @@ de_time_zone(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * * [3] 10.5.3.9 */ static guint8 -de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct, oct2, oct3; guint32 curr_offset; char sign; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -764,14 +754,14 @@ de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc oct3 = tvb_get_guint8(tvb, curr_offset+2); proto_tree_add_text(tree, - tvb, curr_offset, 3, - "Year %u%u, Month %u%u, Day %u%u", - oct & 0x0f, - (oct & 0xf0) >> 4, - oct2 & 0x0f, - (oct2 & 0xf0) >> 4, - oct3 & 0x0f, - (oct3 & 0xf0) >> 4); + tvb, curr_offset, 3, + "Year %u%u, Month %u%u, Day %u%u", + oct & 0x0f, + (oct & 0xf0) >> 4, + oct2 & 0x0f, + (oct2 & 0xf0) >> 4, + oct3 & 0x0f, + (oct3 & 0xf0) >> 4); curr_offset += 3; @@ -780,14 +770,14 @@ de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc oct3 = tvb_get_guint8(tvb, curr_offset+2); proto_tree_add_text(tree, - tvb, curr_offset, 3, - "Hour %u%u, Minutes %u%u, Seconds %u%u", - oct & 0x0f, - (oct & 0xf0) >> 4, - oct2 & 0x0f, - (oct2 & 0xf0) >> 4, - oct3 & 0x0f, - (oct3 & 0xf0) >> 4); + tvb, curr_offset, 3, + "Hour %u%u, Minutes %u%u, Seconds %u%u", + oct & 0x0f, + (oct & 0xf0) >> 4, + oct2 & 0x0f, + (oct2 & 0xf0) >> 4, + oct3 & 0x0f, + (oct3 & 0xf0) >> 4); curr_offset += 3; @@ -805,9 +795,9 @@ de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc oct = (oct >> 4) + (oct & 0x07) * 10; proto_tree_add_text(tree, - tvb, offset, 1, - "Timezone: GMT %c %d hours %d minutes", - sign, oct / 4, oct % 4 * 15); + tvb, offset, 1, + "Timezone: GMT %c %d hours %d minutes", + sign, oct / 4, oct % 4 * 15); curr_offset++; @@ -855,9 +845,9 @@ de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x03) { @@ -865,16 +855,16 @@ de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g case 1: str = "+1 hour adjustment for Daylight Saving Time"; break; case 2: str = "+2 hours adjustment for Daylight Saving Time"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : %s", + a_bigbuf, + str); curr_offset++; @@ -901,9 +891,9 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch ((oct & 0x0c) >> 2) { @@ -911,16 +901,16 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 1: str = "Hold request"; break; case 2: str = "Call held"; break; default: - str = "Retrieve request"; - break; + str = "Retrieve request"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Hold auxiliary state: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Hold auxiliary state: %s", + a_bigbuf, + str); switch (oct & 0x03) { @@ -928,16 +918,16 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 1: str = "MPTY request"; break; case 2: str = "Call in MPTY"; break; default: - str = "Split request"; - break; + str = "Split request"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Multi party auxiliary state: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Multi party auxiliary state: %s", + a_bigbuf, + str); curr_offset++; @@ -983,68 +973,68 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); switch (is_uplink) { case IS_UPLINK_FALSE: - str = "Spare"; - break; + str = "Spare"; + break; case IS_UPLINK_TRUE: - /* - * depends on Information transfer capability - */ - switch (itc) - { - case DE_BC_ITC_SPEECH: - if (extended) - { - switch ((oct & 0x60) >> 5) - { - case 1: str = "MS supports at least full rate speech version 1 but does not support half rate speech version 1"; break; - case 2: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for half rate speech version 1 than for full rate speech version 1"; break; - case 3: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for full rate speech version 1 than for half rate speech version 1"; break; - default: - str = "Reserved"; - break; - } - } - else - { - switch ((oct & 0x60) >> 5) + /* + * depends on Information transfer capability + */ + switch (itc) { - case 1: str = "Full rate support only MS/fullrate speech version 1 supported"; break; - case 2: str = "Dual rate support MS/half rate speech version 1 preferred, full rate speech version 1 also supported"; break; - case 3: str = "Dual rate support MS/full rate speech version 1 preferred, half rate speech version 1 also supported"; break; + case DE_BC_ITC_SPEECH: + if (extended) + { + switch ((oct & 0x60) >> 5) + { + case 1: str = "MS supports at least full rate speech version 1 but does not support half rate speech version 1"; break; + case 2: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for half rate speech version 1 than for full rate speech version 1"; break; + case 3: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for full rate speech version 1 than for half rate speech version 1"; break; + default: + str = "Reserved"; + break; + } + } + else + { + switch ((oct & 0x60) >> 5) + { + case 1: str = "Full rate support only MS/fullrate speech version 1 supported"; break; + case 2: str = "Dual rate support MS/half rate speech version 1 preferred, full rate speech version 1 also supported"; break; + case 3: str = "Dual rate support MS/full rate speech version 1 preferred, half rate speech version 1 also supported"; break; + default: + str = "Reserved"; + break; + } + } + break; + default: - str = "Reserved"; - break; + switch ((oct & 0x60) >> 5) + { + case 1: str = "Full rate support only MS"; break; + case 2: str = "Dual rate support MS/half rate preferred"; break; + case 3: str = "Dual rate support MS/full rate preferred"; break; + default: + str = "Reserved"; + break; + } + break; } - } - break; - - default: - switch ((oct & 0x60) >> 5) - { - case 1: str = "Full rate support only MS"; break; - case 2: str = "Dual rate support MS/half rate preferred"; break; - case 3: str = "Dual rate support MS/full rate preferred"; break; - default: - str = "Reserved"; break; - } - break; - } - break; - default: - str = "(dissect problem)"; - break; - } + default: + str = "(dissect problem)"; + break; + } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(tree, @@ -1055,17 +1045,17 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Coding standard: %s", - a_bigbuf, - (oct & 0x10) ? "reserved" : "GSM standardized coding"); + tvb, curr_offset, 1, + "%s : Coding standard: %s", + a_bigbuf, + (oct & 0x10) ? "reserved" : "GSM standardized coding"); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Transfer mode: %s", - a_bigbuf, - (oct & 0x08) ? "packet" : "circuit"); + tvb, curr_offset, 1, + "%s : Transfer mode: %s", + a_bigbuf, + (oct & 0x08) ? "packet" : "circuit"); switch (itc) { @@ -1076,19 +1066,19 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case DE_BC_ITC_OTHER_ITC: str = "Other ITC (See Octet 5a)"; break; case DE_BC_ITC_RSVD_NET: str = "Reserved, to be used in the network"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Information transfer capability: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Information transfer capability: %s", + a_bigbuf, + str); if (add_string) - g_snprintf(add_string, string_len, " - (%s)", str); + g_snprintf(add_string, string_len, " - (%s)", str); curr_offset++; @@ -1097,154 +1087,154 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar switch (itc) { case DE_BC_ITC_SPEECH: - /* octets 3a */ - - item = - proto_tree_add_text(tree, - tvb, curr_offset, -1, - "Octets 3a - Speech Versions"); - - subtree = proto_item_add_subtree(item, ett_bc_oct_3a); - - saved_offset = curr_offset; - - do - { - oct = tvb_get_guint8(tvb, curr_offset); + /* octets 3a */ - extended = (oct & 0x80) ? FALSE : TRUE; + item = + proto_tree_add_text(tree, + tvb, curr_offset, -1, + "Octets 3a - Speech Versions"); - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + subtree = proto_item_add_subtree(item, ett_bc_oct_3a); - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Coding: octet used for %s", - a_bigbuf, - (oct & 0x40) ? "other extension of octet 3" : - "extension of information transfer capability"); + saved_offset = curr_offset; - other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + do + { + oct = tvb_get_guint8(tvb, curr_offset); + + extended = (oct & 0x80) ? FALSE : TRUE; + + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); + + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Coding: octet used for %s", + a_bigbuf, + (oct & 0x40) ? "other extension of octet 3" : + "extension of information transfer capability"); + + other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); + + switch (oct & 0x0f) + { + case 0: str = "GSM full rate speech version 1"; break; + case 2: str = "GSM full rate speech version 2"; break; + case 4: str = "GSM full rate speech version 3"; break; + case 1: str = "GSM half rate speech version 1"; break; + case 5: str = "GSM half rate speech version 3"; break; + default: + str = "Speech version TBD"; + break; + } + + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Speech version indication: %s", + a_bigbuf, + str); + + curr_offset++; + } + while (extended && + ((len - (curr_offset - offset)) > 0)); - switch (oct & 0x0f) - { - case 0: str = "GSM full rate speech version 1"; break; - case 2: str = "GSM full rate speech version 2"; break; - case 4: str = "GSM full rate speech version 3"; break; - case 1: str = "GSM half rate speech version 1"; break; - case 5: str = "GSM half rate speech version 3"; break; - default: - str = "Speech version TBD"; + proto_item_set_len(item, curr_offset - saved_offset); break; - } - - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Speech version indication: %s", - a_bigbuf, - str); - - curr_offset++; - } - while (extended && - ((len - (curr_offset - offset)) > 0)); - - proto_item_set_len(item, curr_offset - saved_offset); - break; - default: - /* octet 4 */ - - item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Octet 4"); - - subtree = proto_item_add_subtree(item, ett_bc_oct_4); - - oct = tvb_get_guint8(tvb, curr_offset); - - extended = (oct & 0x80) ? FALSE : TRUE; - - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + default: + /* octet 4 */ - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Compression: data compression %s%s", - a_bigbuf, - (oct & 0x40) ? "" : "not ", - is_uplink ? "allowed" : "possible"); + item = + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Octet 4"); - switch ((oct & 0x30) >> 4) - { - case 0x00: str = "Service data unit integrity"; break; - case 0x03: str = "Unstructured"; break; - default: - str = "Reserved"; - break; - } + subtree = proto_item_add_subtree(item, ett_bc_oct_4); - other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Structure: %s", - a_bigbuf, - str); + oct = tvb_get_guint8(tvb, curr_offset); - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Duplex mode: %s", - a_bigbuf, - (oct & 0x08) ? "Full" : "Half"); + extended = (oct & 0x80) ? FALSE : TRUE; - other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Configuration: %s", - a_bigbuf, - (oct & 0x04) ? "Reserved" : "Point-to-point"); + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : NIRR: %s", - a_bigbuf, - (oct & 0x02) ? - "Data up to and including 4.8 kb/s, full rate, non-transparent, 6 kb/s radio interface rate is requested" : - "No meaning is associated with this value"); + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Compression: data compression %s%s", + a_bigbuf, + (oct & 0x40) ? "" : "not ", + is_uplink ? "allowed" : "possible"); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Establishment: %s", - a_bigbuf, - (oct & 0x01) ? "Reserved" : "Demand"); + switch ((oct & 0x30) >> 4) + { + case 0x00: str = "Service data unit integrity"; break; + case 0x03: str = "Unstructured"; break; + default: + str = "Reserved"; + break; + } - curr_offset++; + other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Structure: %s", + a_bigbuf, + str); + + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Duplex mode: %s", + a_bigbuf, + (oct & 0x08) ? "Full" : "Half"); + + other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Configuration: %s", + a_bigbuf, + (oct & 0x04) ? "Reserved" : "Point-to-point"); + + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : NIRR: %s", + a_bigbuf, + (oct & 0x02) ? + "Data up to and including 4.8 kb/s, full rate, non-transparent, 6 kb/s radio interface rate is requested" : + "No meaning is associated with this value"); + + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Establishment: %s", + a_bigbuf, + (oct & 0x01) ? "Reserved" : "Demand"); + + curr_offset++; NO_MORE_DATA_CHECK(len); /* octet 5 */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 5"); @@ -1256,17 +1246,17 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Access Identity: %s", - a_bigbuf, - (oct & 0x60) ? "Reserved" : "Octet identifier"); + tvb, curr_offset, 1, + "%s : Access Identity: %s", + a_bigbuf, + (oct & 0x60) ? "Reserved" : "Octet identifier"); switch ((oct & 0x18) >> 3) { @@ -1274,16 +1264,16 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x01: str = "V.110, I.460/X.30 rate adaptation"; break; case 0x02: str = "ITU-T X.31 flag stuffing"; break; default: - str = "Other rate adaption (see octet 5a)"; - break; + str = "Other rate adaption (see octet 5a)"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x18, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Rate Adaption: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Rate Adaption: %s", + a_bigbuf, + str); switch (oct & 0x07) { @@ -1294,16 +1284,16 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x05: str = "Reserved: was allocated in earlier phases of the protocol"; break; case 0x06: str = "Reserved: was allocated in earlier phases of the protocol"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Signalling Access Protocol: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Signalling Access Protocol: %s", + a_bigbuf, + str); curr_offset++; @@ -1314,7 +1304,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar /* octet 5a */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 5a"); @@ -1326,17 +1316,17 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Other ITC: %s", - a_bigbuf, - (oct & 0x60) ? "Reserved" : "Restricted digital information"); + tvb, curr_offset, 1, + "%s : Other ITC: %s", + a_bigbuf, + (oct & 0x60) ? "Reserved" : "Restricted digital information"); switch ((oct & 0x18) >> 3) { @@ -1344,22 +1334,22 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x01: str = "H.223 & H.245"; break; case 0x02: str = "PIAFS"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x18, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Other Rate Adaption: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Other Rate Adaption: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; @@ -1370,7 +1360,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar /* octet 5b */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 5b"); @@ -1382,60 +1372,60 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Rate Adaption Header: %sincluded", - a_bigbuf, - (oct & 0x40) ? "" : "not "); + tvb, curr_offset, 1, + "%s : Rate Adaption Header: %sincluded", + a_bigbuf, + (oct & 0x40) ? "" : "not "); other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Multiple frame establishment support in data link: %s", - a_bigbuf, - (oct & 0x20) ? "Supported" : "Not supported, only UI frames allowed"); + tvb, curr_offset, 1, + "%s : Multiple frame establishment support in data link: %s", + a_bigbuf, + (oct & 0x20) ? "Supported" : "Not supported, only UI frames allowed"); other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Mode of operation: %s", - a_bigbuf, - (oct & 0x10) ? "Protocol sensitive" : "Bit transparent"); + tvb, curr_offset, 1, + "%s : Mode of operation: %s", + a_bigbuf, + (oct & 0x10) ? "Protocol sensitive" : "Bit transparent"); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Logical link identifier negotiation: %s", - a_bigbuf, - (oct & 0x08) ? "Full protocol negotiation" : "Default, LLI=256 only"); + tvb, curr_offset, 1, + "%s : Logical link identifier negotiation: %s", + a_bigbuf, + (oct & 0x08) ? "Full protocol negotiation" : "Default, LLI=256 only"); other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Assignor/Assignee: Message originator is '%s'", - a_bigbuf, - (oct & 0x04) ? "assignor only" : "default assignee"); + tvb, curr_offset, 1, + "%s : Assignor/Assignee: Message originator is '%s'", + a_bigbuf, + (oct & 0x04) ? "assignor only" : "default assignee"); other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : In band/Out of band negotiation: Negotiation is done %s", - a_bigbuf, - (oct & 0x02) ? + tvb, curr_offset, 1, + "%s : In band/Out of band negotiation: Negotiation is done %s", + a_bigbuf, + (oct & 0x02) ? "with USER INFORMATION messages on a temporary signalling connection" : "in-band using logical link zero"); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; @@ -1446,7 +1436,7 @@ bc_octet_6: /* octet 6 */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6"); @@ -1458,31 +1448,31 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Layer 1 Identity: %s", - a_bigbuf, - ((oct & 0x60) == 0x20) ? "Octet identifier" : "Reserved"); + tvb, curr_offset, 1, + "%s : Layer 1 Identity: %s", + a_bigbuf, + ((oct & 0x60) == 0x20) ? "Octet identifier" : "Reserved"); other_decode_bitfield_value(a_bigbuf, oct, 0x1e, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : User information layer 1 protocol: %s", - a_bigbuf, - (oct & 0x1e) ? "Reserved" : "Default layer 1 protocol"); + tvb, curr_offset, 1, + "%s : User information layer 1 protocol: %s", + a_bigbuf, + (oct & 0x1e) ? "Reserved" : "Default layer 1 protocol"); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Synchronous/asynchronous: %s", - a_bigbuf, - (oct & 0x01) ? "Asynchronous" : "Synchronous"); + tvb, curr_offset, 1, + "%s : Synchronous/asynchronous: %s", + a_bigbuf, + (oct & 0x01) ? "Asynchronous" : "Synchronous"); curr_offset++; @@ -1493,7 +1483,7 @@ bc_octet_6: /* octet 6a */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6a"); @@ -1505,31 +1495,31 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Number of Stop Bits: %s", - a_bigbuf, - (oct & 0x40) ? "2" : "1"); + tvb, curr_offset, 1, + "%s : Number of Stop Bits: %s", + a_bigbuf, + (oct & 0x40) ? "2" : "1"); other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Negotiation: %s", - a_bigbuf, - (oct & 0x20) ? "Reserved" : "In-band negotiation not possible"); + tvb, curr_offset, 1, + "%s : Negotiation: %s", + a_bigbuf, + (oct & 0x20) ? "Reserved" : "In-band negotiation not possible"); other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Number of data bits excluding parity bit if present: %s", - a_bigbuf, - (oct & 0x10) ? "8" : "7"); + tvb, curr_offset, 1, + "%s : Number of data bits excluding parity bit if present: %s", + a_bigbuf, + (oct & 0x10) ? "8" : "7"); switch (oct & 0x0f) { @@ -1541,16 +1531,16 @@ bc_octet_6: case 0x06: str = "12.0 kbit/s transparent (non compliance with X.1 and V.110)"; break; case 0x07: str = "Reserved: was allocated in earlier phases of the protocol"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : User rate: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : User rate: %s", + a_bigbuf, + str); curr_offset++; @@ -1561,7 +1551,7 @@ bc_octet_6: /* octet 6b */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6b"); @@ -1573,40 +1563,40 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); switch ((oct & 0x60) >> 5) { case 0x02: str = "8 kbit/s"; break; case 0x03: str = "16 kbit/s"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : V.110/X.30 rate adaptation Intermediate rate: %s", - a_bigbuf, - str); - + tvb, curr_offset, 1, + "%s : V.110/X.30 rate adaptation Intermediate rate: %s", + a_bigbuf, + str); + other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Network independent clock (NIC) on transmission (Tx): %s to send data with network independent clock", - a_bigbuf, - (oct & 0x10) ? "requires" : "does not require"); + tvb, curr_offset, 1, + "%s : Network independent clock (NIC) on transmission (Tx): %s to send data with network independent clock", + a_bigbuf, + (oct & 0x10) ? "requires" : "does not require"); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Network independent clock (NIC) on reception (Rx): %s accept data with network independent clock", - a_bigbuf, - (oct & 0x08) ? "can" : "cannot"); + tvb, curr_offset, 1, + "%s : Network independent clock (NIC) on reception (Rx): %s accept data with network independent clock", + a_bigbuf, + (oct & 0x08) ? "can" : "cannot"); switch (oct & 0x07) { @@ -1616,16 +1606,16 @@ bc_octet_6: case 0x04: str = "Forced to 0"; break; case 0x05: str = "Forced to 1"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Parity information: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Parity information: %s", + a_bigbuf, + str); curr_offset++; @@ -1636,7 +1626,7 @@ bc_octet_6: /* octet 6c */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6c"); @@ -1648,10 +1638,10 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); switch ((oct & 0x60) >> 5) { @@ -1659,16 +1649,16 @@ bc_octet_6: case 0x02: str = "Both, transparent preferred"; break; case 0x03: str = "Both, non transparent preferred"; break; default: - str = "Transparent"; - break; + str = "Transparent"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Connection element: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Connection element: %s", + a_bigbuf, + str); switch (oct & 0x1f) { @@ -1682,16 +1672,16 @@ bc_octet_6: case 0x07: str = "Modem for undefined interface"; break; case 0x08: str = "Autobauding type 1"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Modem type: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Modem type: %s", + a_bigbuf, + str); curr_offset++; @@ -1702,7 +1692,7 @@ bc_octet_6: /* octet 6d */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6d"); @@ -1714,26 +1704,26 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); switch ((oct & 0x60) >> 5) { case 0x00: str = "No other modem type specified in this field"; break; case 0x02: str = "V.34"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Other modem type: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Other modem type: %s", + a_bigbuf, + str); switch (oct & 0x1f) { @@ -1750,16 +1740,16 @@ bc_octet_6: case 0x0a: str = "32.0 kbit/s Recommendation I.460"; break; case 0x0b: str = "31.2 kbit/s Recommendation V.34"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Fixed network user rate: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Fixed network user rate: %s", + a_bigbuf, + str); curr_offset++; @@ -1770,7 +1760,7 @@ bc_octet_6: /* octet 6e */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6e"); @@ -1782,42 +1772,42 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); if (is_uplink == IS_UPLINK_TRUE) { - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings: TCH/F14.4 %sacceptable", a_bigbuf, (oct & 0x40) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings: Spare", a_bigbuf); - other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings: TCH/F9.6 %sacceptable", a_bigbuf, (oct & 0x10) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings: TCH/F4.8 %sacceptable", a_bigbuf, (oct & 0x08) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Maximum number of traffic channels: %u TCH", a_bigbuf, @@ -1825,14 +1815,14 @@ bc_octet_6: } else { - other_decode_bitfield_value(a_bigbuf, oct, 0x78, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x78, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings: Spare", a_bigbuf); - other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Maximum number of traffic channels: Spare", a_bigbuf); @@ -1847,7 +1837,7 @@ bc_octet_6: /* octet 6f */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6f"); @@ -1859,10 +1849,10 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); switch ((oct & 0x70) >> 4) { @@ -1872,40 +1862,40 @@ bc_octet_6: case 0x03: str = "up to 3 TCH/F allowed/may be requested"; break; case 0x04: str = "up to 4 TCH/F allowed/may be requested"; break; default: - str = "up to 4 TCH/F may be requested"; - break; + str = "up to 4 TCH/F may be requested"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : UIMI, User initiated modification indication: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : UIMI, User initiated modification indication: %s", + a_bigbuf, + str); if (is_uplink == IS_UPLINK_TRUE) { - switch (oct & 0x0f) - { - case 0x00: str = "Air interface user rate not applicable/No meaning associated with this value"; break; - case 0x01: str = "9.6 kbit/s"; break; - case 0x02: str = "14.4 kbit/s"; break; - case 0x03: str = "19.2 kbit/s"; break; - case 0x05: str = "28.8 kbit/s"; break; - case 0x06: str = "38.4 kbit/s"; break; - case 0x07: str = "43.2 kbit/s"; break; - case 0x08: str = "57.6 kbit/s"; break; - case 0x09: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; - case 0x0a: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; - case 0x0b: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; - case 0x0c: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; - default: + switch (oct & 0x0f) + { + case 0x00: str = "Air interface user rate not applicable/No meaning associated with this value"; break; + case 0x01: str = "9.6 kbit/s"; break; + case 0x02: str = "14.4 kbit/s"; break; + case 0x03: str = "19.2 kbit/s"; break; + case 0x05: str = "28.8 kbit/s"; break; + case 0x06: str = "38.4 kbit/s"; break; + case 0x07: str = "43.2 kbit/s"; break; + case 0x08: str = "57.6 kbit/s"; break; + case 0x09: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; + case 0x0a: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; + case 0x0b: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; + case 0x0c: str = "interpreted by the network as 38.4 kbit/s in this version of the protocol"; break; + default: str = "Reserved"; break; - } + } - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Wanted air interface user rate: %s", a_bigbuf, @@ -1913,8 +1903,8 @@ bc_octet_6: } else { - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Wanted air interface user rate: Spare", a_bigbuf); @@ -1929,7 +1919,7 @@ bc_octet_6: /* octet 6g */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 6g"); @@ -1941,53 +1931,53 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); if (is_uplink == IS_UPLINK_TRUE) { - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings extended: TCH/F28.8 %sacceptable", a_bigbuf, (oct & 0x40) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings extended: TCH/F32.0 %sacceptable", a_bigbuf, (oct & 0x20) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings extended: TCH/F43.2 %sacceptable", a_bigbuf, (oct & 0x10) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Acceptable channel codings extended: TCH/F43.2 %sacceptable", a_bigbuf, (oct & 0x10) ? "" : "not "); - switch ((oct & 0x0c) >> 2) - { - case 0: str = "Channel coding symmetry preferred"; break; - case 2: str = "Downlink biased channel coding asymmetry is preferred"; break; - case 1: str = "Uplink biased channel coding asymmetry is preferred"; break; - default: + switch ((oct & 0x0c) >> 2) + { + case 0: str = "Channel coding symmetry preferred"; break; + case 2: str = "Downlink biased channel coding asymmetry is preferred"; break; + case 1: str = "Uplink biased channel coding asymmetry is preferred"; break; + default: str = "Unused, treat as Channel coding symmetry preferred"; break; - } + } - other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : Channel Coding Asymmetry Indication: %s", a_bigbuf, @@ -1995,8 +1985,8 @@ bc_octet_6: } else { - other_decode_bitfield_value(a_bigbuf, oct, 0x7c, 8); - proto_tree_add_text(subtree, + other_decode_bitfield_value(a_bigbuf, oct, 0x7c, 8); + proto_tree_add_text(subtree, tvb, curr_offset, 1, "%s : EDGE Channel Codings: Spare", a_bigbuf); @@ -2004,42 +1994,38 @@ bc_octet_6: other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; NO_MORE_DATA_CHECK(len); bc_octet_7: - /* octet 7 */ item = - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Octet 7"); subtree = proto_item_add_subtree(item, ett_bc_oct_7); - - extended = (oct & 0x80) ? FALSE : TRUE; - - oct = tvb_get_guint8(tvb, curr_offset); - - other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); + extended = (oct & 0x80) ? FALSE : TRUE; + oct = tvb_get_guint8(tvb, curr_offset); + other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - extended ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + extended ? "extended" : "not extended"); other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Layer 2 Identity: %s", - a_bigbuf, - ((oct & 0x60) == 0x40) ? "Octet identifier" : "Reserved"); + tvb, curr_offset, 1, + "%s : Layer 2 Identity: %s", + a_bigbuf, + ((oct & 0x60) == 0x40) ? "Octet identifier" : "Reserved"); switch (oct & 0x1f) { @@ -2050,16 +2036,16 @@ bc_octet_7: case 0x0c: str = "COPnoFlCt (Character oriented Protocol with no Flow Control mechanism)"; break; case 0x0d: str = "Reserved: was allocated in earlier phases of the protocol"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : User information layer 2 protocol: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : User information layer 2 protocol: %s", + a_bigbuf, + str); break; } @@ -2087,41 +2073,41 @@ de_cc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add { case 0: proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Maximum number of supported bearers: 1", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Maximum number of supported bearers: 1", + a_bigbuf); break; default: proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Maximum number of supported bearers: %u", - a_bigbuf, - (oct & 0xf0) >> 4); + tvb, curr_offset, 1, + "%s : Maximum number of supported bearers: %u", + a_bigbuf, + (oct & 0xf0) >> 4); break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : PCP: the mobile station %s the Prolonged Clearing Procedure", - a_bigbuf, - (oct & 0x02) ? "supports" : "does not support"); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s : PCP: the mobile station %s the Prolonged Clearing Procedure", + a_bigbuf, + (oct & 0x02) ? "supports" : "does not support"); other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : DTMF: %s", - a_bigbuf, - (oct & 0x01) ? - "the mobile station supports DTMF as specified in subclause 5.5.7 of TS 24.008" : - "reserved for earlier versions of the protocol"); + tvb, curr_offset, 1, + "%s : DTMF: %s", + a_bigbuf, + (oct & 0x01) ? + "the mobile station supports DTMF as specified in subclause 5.5.7 of TS 24.008" : + "reserved for earlier versions of the protocol"); curr_offset++; @@ -2131,16 +2117,16 @@ de_cc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Maximum number of speech bearers: %u", - a_bigbuf, - oct & 0x0f); + tvb, curr_offset, 1, + "%s : Maximum number of speech bearers: %u", + a_bigbuf, + oct & 0x0f); curr_offset++; @@ -2153,7 +2139,7 @@ de_cc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add * [3] 10.5.4.6 */ static guint8 -de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; @@ -2161,15 +2147,14 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar proto_item *item; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_CALL_STATE].strptr); + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_CALL_STATE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CALL_STATE]); @@ -2179,16 +2164,16 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 1: str = "Reserved for other international standards"; break; case 2: str = "National standard"; break; default: - str = "Standard defined for the GSM PLMNS"; - break; + str = "Standard defined for the GSM PLMNS"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Coding standard: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Coding standard: %s", + a_bigbuf, + str); switch (oct & 0x3f) { @@ -2214,16 +2199,16 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0x1b: str = "U27- mobile terminating modify N27- mobile terminating modify"; break; case 0x1c: str = " N28- connect indication"; break; default: - str = "Unknown"; - break; + str = "Unknown"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Call state value: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Call state value: %s", + a_bigbuf, + str); curr_offset++; @@ -2233,32 +2218,32 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar } static const true_false_string gsm_a_extension_value = { - "No Extension", - "Extension" + "No Extension", + "Extension" }; const value_string gsm_a_type_of_number_values[] = { - { 0x00, "unknown" }, - { 0x01, "International Number" }, - { 0x02, "National number" }, - { 0x03, "Network Specific Number" }, - { 0x04, "Dedicated access, short code" }, - { 0x05, "Reserved" }, - { 0x06, "Reserved" }, - { 0x07, "Reserved for extension" }, + { 0x00, "unknown" }, + { 0x01, "International Number" }, + { 0x02, "National number" }, + { 0x03, "Network Specific Number" }, + { 0x04, "Dedicated access, short code" }, + { 0x05, "Reserved" }, + { 0x06, "Reserved" }, + { 0x07, "Reserved for extension" }, { 0, NULL } }; const value_string gsm_a_numbering_plan_id_values[] = { - { 0x00, "unknown" }, - { 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" }, - { 0x02, "spare" }, - { 0x03, "Data Numbering (ITU-T Rec. X.121)" }, - { 0x04, "Telex Numbering (ITU-T Rec. F.69)" }, - { 0x08, "National Numbering" }, - { 0x09, "Private Numbering" }, - { 0x0d, "reserved for CTS (see 3GPP TS 44.056 [91])" }, - { 0x0f, "Reserved for extension" }, + { 0x00, "unknown" }, + { 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" }, + { 0x02, "spare" }, + { 0x03, "Data Numbering (ITU-T Rec. X.121)" }, + { 0x04, "Telex Numbering (ITU-T Rec. F.69)" }, + { 0x08, "National Numbering" }, + { 0x09, "Private Numbering" }, + { 0x0d, "reserved for CTS (see 3GPP TS 44.056 [91])" }, + { 0x0f, "Reserved for extension" }, { 0, NULL } }; @@ -2284,13 +2269,13 @@ de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); my_dgt_tbcd_unpack(a_bigbuf, poctets, len - (curr_offset - offset), - &Dgt_mbcd); + &Dgt_mbcd); proto_tree_add_string_format(tree, hf_gsm_a_cld_party_bcd_num, - tvb, curr_offset, len - (curr_offset - offset), - a_bigbuf, - "BCD Digits: %s", - a_bigbuf); + tvb, curr_offset, len - (curr_offset - offset), + a_bigbuf, + "BCD Digits: %s", + a_bigbuf); if (sccp_assoc && ! sccp_assoc->called_party) { sccp_assoc->called_party = se_strdup(a_bigbuf); @@ -2299,7 +2284,7 @@ de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, curr_offset += len - (curr_offset - offset); if (add_string) - g_snprintf(add_string, string_len, " - (%s)", a_bigbuf); + g_snprintf(add_string, string_len, " - (%s)", a_bigbuf); EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); @@ -2327,38 +2312,38 @@ de_cld_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len case 0: str = "NSAP (X.213/ISO 8348 AD2)"; break; case 2: str = "User specified"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Type of subaddress: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Type of subaddress: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Odd/Even indicator: %s", - a_bigbuf, - (oct & 0x08) ? - "odd number of address signals" : "even number of address signals"); + tvb, curr_offset, 1, + "%s : Odd/Even indicator: %s", + a_bigbuf, + (oct & 0x08) ? + "odd number of address signals" : "even number of address signals"); other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Subaddress information"); + tvb, curr_offset, len - (curr_offset - offset), + "Subaddress information"); curr_offset += len - (curr_offset - offset); @@ -2396,22 +2381,22 @@ de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, case 1: str = "Presentation restricted"; break; case 2: str = "Number not available due to interworking"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Presentation indicator: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Presentation indicator: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x1c, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x03) { @@ -2419,16 +2404,16 @@ de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, case 1: str = "User-provided, verified and passed"; break; case 2: str = "User-provided, verified and failed"; break; default: - str = "Network provided"; - break; + str = "Network provided"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Screening indicator: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Screening indicator: %s", + a_bigbuf, + str); curr_offset++; @@ -2437,13 +2422,13 @@ de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, poctets = tvb_get_ephemeral_string(tvb, curr_offset, len - (curr_offset - offset)); my_dgt_tbcd_unpack(a_bigbuf, poctets, len - (curr_offset - offset), - &Dgt_mbcd); + &Dgt_mbcd); proto_tree_add_string_format(tree, hf_gsm_a_clg_party_bcd_num, - tvb, curr_offset, len - (curr_offset - offset), - a_bigbuf, - "BCD Digits: %s", - a_bigbuf); + tvb, curr_offset, len - (curr_offset - offset), + a_bigbuf, + "BCD Digits: %s", + a_bigbuf); curr_offset += len - (curr_offset - offset); @@ -2476,38 +2461,38 @@ de_clg_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len case 0: str = "NSAP (X.213/ISO 8348 AD2)"; break; case 2: str = "User specified"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Type of subaddress: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Type of subaddress: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Odd/Even indicator: %s", - a_bigbuf, - (oct & 0x08) ? - "odd number of address signals" : "even number of address signals"); + tvb, curr_offset, 1, + "%s : Odd/Even indicator: %s", + a_bigbuf, + (oct & 0x08) ? + "odd number of address signals" : "even number of address signals"); other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); curr_offset++; NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Subaddress information"); + tvb, curr_offset, len - (curr_offset - offset), + "Subaddress information"); curr_offset += len - (curr_offset - offset); @@ -2533,10 +2518,10 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "not extended" : "extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "not extended" : "extended"); switch ((oct & 0x60) >> 5) { @@ -2544,8 +2529,8 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ case 1: str = "Reserved for other international standards"; break; case 2: str = "National standard"; break; default: - str = "Standard defined for the GSM PLMNS"; - break; + str = "Standard defined for the GSM PLMNS"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); @@ -2572,16 +2557,16 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ case 7: str = "International network"; break; case 10: str = "Network beyond interworking point"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Location: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Location: %s", + a_bigbuf, + str); curr_offset++; @@ -2593,9 +2578,9 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Recommendation", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Recommendation", + a_bigbuf); curr_offset++; @@ -2657,34 +2642,34 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ case 111: str = "Protocol error, unspecified"; break; case 127: str = "Interworking, unspecified"; break; default: - if (cause <= 31) { str = "Treat as Normal, unspecified"; } - else if ((cause >= 32) && (cause <= 47)) { str = "Treat as Resources unavailable, unspecified"; } - else if ((cause >= 48) && (cause <= 63)) { str = "Treat as Service or option not available, unspecified"; } - else if ((cause >= 64) && (cause <= 79)) { str = "Treat as Service or option not implemented, unspecified"; } - else if ((cause >= 80) && (cause <= 95)) { str = "Treat as Semantically incorrect message"; } - else if ((cause >= 96) && (cause <= 111)) { str = "Treat as Protocol error, unspecified"; } - else if ((cause >= 112) && (cause <= 127)) { str = "Treat as Interworking, unspecified"; } - break; + if (cause <= 31) { str = "Treat as Normal, unspecified"; } + else if ((cause >= 32) && (cause <= 47)) { str = "Treat as Resources unavailable, unspecified"; } + else if ((cause >= 48) && (cause <= 63)) { str = "Treat as Service or option not available, unspecified"; } + else if ((cause >= 64) && (cause <= 79)) { str = "Treat as Service or option not implemented, unspecified"; } + else if ((cause >= 80) && (cause <= 95)) { str = "Treat as Semantically incorrect message"; } + else if ((cause >= 96) && (cause <= 111)) { str = "Treat as Protocol error, unspecified"; } + else if ((cause >= 112) && (cause <= 127)) { str = "Treat as Interworking, unspecified"; } + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_uint_format(tree, hf_gsm_a_dtap_cause, - tvb, curr_offset, 1, cause, - "%s : Cause: (%u) %s", - a_bigbuf, - cause, - str); + tvb, curr_offset, 1, cause, + "%s : Cause: (%u) %s", + a_bigbuf, + cause, + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - (%u) %s", cause, str); + g_snprintf(add_string, string_len, " - (%u) %s", cause, str); NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Diagnostics"); + tvb, curr_offset, len - (curr_offset - offset), + "Diagnostics"); curr_offset += len - (curr_offset - offset); @@ -2731,7 +2716,6 @@ de_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint fac_len, gcha asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, gsm_a_dtap_pinfo); - save_private_data= gsm_a_dtap_pinfo->private_data; saved_offset = offset; gsm_a_dtap_pinfo->private_data = NULL; @@ -2752,47 +2736,44 @@ de_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint fac_len, gcha dissect_ROS_Component(FALSE, tvb, offset, &asn1_ctx, tree, hf_ROS_component); TODO Call gsm map here */ - SS_tvb = tvb_new_subset(tvb, offset, component_len, component_len); + SS_tvb = tvb_new_subset(tvb, offset, component_len, component_len); call_dissector(gsm_map_handle, SS_tvb, gsm_a_dtap_pinfo, tree); offset = offset + component_len; } gsm_a_dtap_pinfo->private_data = save_private_data; return(fac_len); - - } /* * [3] 10.5.4.17 */ static guint8 -de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Keypad information: %c", - a_bigbuf, - oct & 0x7f); + tvb, curr_offset, 1, + "%s : Keypad information: %c", + a_bigbuf, + oct & 0x7f); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - %c", oct & 0x7f); + g_snprintf(add_string, string_len, " - %c", oct & 0x7f); /* no length check possible */ @@ -2803,23 +2784,22 @@ de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [3] 10.5.4.21 */ static guint8 -de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { 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, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); switch ((oct & 0x60) >> 5) { @@ -2827,22 +2807,22 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 1: str = "Reserved for other international standards"; break; case 2: str = "National standard"; break; default: - str = "Standard defined for the GSM PLMNS"; - break; + str = "Standard defined for the GSM PLMNS"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Coding standard: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Coding standard: %s", + a_bigbuf, + str); other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x0f) { @@ -2853,16 +2833,16 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 5: str = "Private network serving the remote user"; break; case 10: str = "Network beyond interworking point"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Location: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Location: %s", + a_bigbuf, + str); curr_offset++; @@ -2870,10 +2850,10 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); switch (oct & 0x7f) { @@ -2885,20 +2865,20 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 32: str = "Call is end-to-end PLMN/ISDN"; break; case 64: str = "Queueing"; break; default: - str = "Unspecific"; - break; + str = "Unspecific"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Progress Description: %s (%d)", - a_bigbuf, - str, - oct & 0x7f); + tvb, curr_offset, 1, + "%s : Progress Description: %s (%d)", + a_bigbuf, + str, + oct & 0x7f); if (add_string) - g_snprintf(add_string, string_len, " - %d", oct & 0x7f); + g_snprintf(add_string, string_len, " - %d", oct & 0x7f); curr_offset++; @@ -2911,13 +2891,12 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a * [3] 10.5.4.22 */ static guint8 -de_repeat_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_repeat_ind(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2925,19 +2904,19 @@ de_repeat_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar switch (oct & 0x0f) { case 1: str = "Circular for successive selection 'mode 1 alternate mode 2'"; break; - case 2: str = "Support of fallback mode 1 preferred, mode 2 selected if setup of mode 1 fails"; break; + case 2: str = "Support of fallback mode 1 preferred, mode 2 selected if setup of mode 1 fails"; break; case 3: str = "Reserved: was allocated in earlier phases of the protocol"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : %s", + a_bigbuf, + str); curr_offset++; @@ -2965,14 +2944,14 @@ de_ss_ver_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar case 0: str = "Phase 2 service, ellipsis notation, and phase 2 error handling is supported"; break; case 1: str = "SS-Protocol version 3 is supported, and phase 2 error handling is supported"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s", - str); + tvb, curr_offset, 1, + "%s", + str); curr_offset++; @@ -2993,7 +2972,7 @@ de_cp_user_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha curr_offset = offset; proto_tree_add_text(tree, tvb, curr_offset, len, - "RPDU (not displayed)"); + "RPDU (not displayed)"); /* * dissect the embedded RP message @@ -3013,13 +2992,12 @@ de_cp_user_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [5] 8.1.4.2 */ static guint8 -de_cp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) +de_cp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { guint8 oct; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -3036,20 +3014,20 @@ de_cp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 99: str = "Information element non-existent or not implemented"; break; case 111: str = "Protocol error, unspecified"; break; default: - str = "Reserved, treat as Protocol error, unspecified"; - break; + str = "Reserved, treat as Protocol error, unspecified"; + break; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Cause: (%u) %s", - oct, - str); + tvb, curr_offset, 1, + "Cause: (%u) %s", + oct, + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - (%u) %s", oct, str); + g_snprintf(add_string, string_len, " - (%u) %s", oct, str); /* no length check possible */ @@ -3059,346 +3037,346 @@ de_cp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a static guint8 de_tp_sub_channel(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; - const gchar *str; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset) & 0x3f; - if ((oct & 0x38) == 0x38) - str = "I"; - else if ((oct & 0x38) == 0x18) - str = "F"; - else if ((oct & 0x38) == 0x10) - str = "E"; - else if ((oct & 0x38) == 0x08) - str = "D"; - else if ((oct & 0x3c) == 0x04) - str = "C"; - else if ((oct & 0x3e) == 0x02) - str = "B"; - else if ((oct & 0x3e) == 0x00) - str = "A"; - else - str = "unknown"; - - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Test Loop %s",str); - - if (oct & 0x01) - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Only one TCH active or sub-channel 0 of two half rate channels is to be looped"); - else - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Sub-channel 1 of two half rate channels is to be looped"); - - curr_offset+= 1; - - return(curr_offset - offset); + guint32 curr_offset; + guchar oct; + const gchar *str; + + curr_offset = offset; + + oct = tvb_get_guint8(tvb, curr_offset) & 0x3f; + if ((oct & 0x38) == 0x38) + str = "I"; + else if ((oct & 0x38) == 0x18) + str = "F"; + else if ((oct & 0x38) == 0x10) + str = "E"; + else if ((oct & 0x38) == 0x08) + str = "D"; + else if ((oct & 0x3c) == 0x04) + str = "C"; + else if ((oct & 0x3e) == 0x02) + str = "B"; + else if ((oct & 0x3e) == 0x00) + str = "A"; + else + str = "unknown"; + + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Test Loop %s",str); + + if (oct & 0x01) + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Only one TCH active or sub-channel 0 of two half rate channels is to be looped"); + else + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Sub-channel 1 of two half rate channels is to be looped"); + + curr_offset+= 1; + + return(curr_offset - offset); } static guint8 de_tp_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; + guint32 curr_offset; + guchar oct; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - if ((oct & 0xF0) == 0x80) - proto_tree_add_text(tree,tvb, curr_offset, 1, "Acknowledgment element: %d",oct&0x01); - else - proto_tree_add_text(tree,tvb, curr_offset, 1, "No acknowledgment element present"); + if ((oct & 0xF0) == 0x80) + proto_tree_add_text(tree,tvb, curr_offset, 1, "Acknowledgment element: %d",oct&0x01); + else + proto_tree_add_text(tree,tvb, curr_offset, 1, "No acknowledgment element present"); - curr_offset+= 1; + curr_offset+= 1; - return(curr_offset - offset); + return(curr_offset - offset); } static guint8 de_tp_loop_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - - switch (oct & 0x03) - { - case 0x00: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding not needed. The Burst-by-Burst loop is activated, type G"); - break; - case 0x01: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding needed. Frame erasure is to be signalled, type H"); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding reserved (%d)",oct & 0x03); - break; - } - - switch (oct & 0x1c) - { - case 0x00: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1"); - proto_tree_add_text(tree, tvb, curr_offset, 1, "Timeslot number %d",(oct & 0xe0)>>5); - break; - case 0x04: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2"); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x1c)>>2); - break; - } - - curr_offset+= 1; - - return(curr_offset - offset); + guint32 curr_offset; + guchar oct; + + curr_offset = offset; + + oct = tvb_get_guint8(tvb, curr_offset); + + switch (oct & 0x03) + { + case 0x00: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding not needed. The Burst-by-Burst loop is activated, type G"); + break; + case 0x01: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding needed. Frame erasure is to be signalled, type H"); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding reserved (%d)",oct & 0x03); + break; + } + + switch (oct & 0x1c) + { + case 0x00: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1"); + proto_tree_add_text(tree, tvb, curr_offset, 1, "Timeslot number %d",(oct & 0xe0)>>5); + break; + case 0x04: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2"); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x1c)>>2); + break; + } + + curr_offset+= 1; + + return(curr_offset - offset); } static guint8 de_tp_loop_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - - switch (oct & 0x30) - { - case 0x00: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding not needed. The Burst-by-Burst loop is activated, type G"); - break; - case 0x10: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding needed. Frame erasure is to be signalled, type H"); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding reserved (%d)",(oct & 0x30)>>4); - break; - } - - switch (oct & 0x0e) - { - case 0x00: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1"); - break; - case 0x02: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2"); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x0e)>>1); - break; - } - - if (oct & 0x01) - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was not closed due to error"); - else - proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was closed successfully"); - - curr_offset+= 1; - - return(curr_offset - offset); + guint32 curr_offset; + guchar oct; + + curr_offset = offset; + + oct = tvb_get_guint8(tvb, curr_offset); + + switch (oct & 0x30) + { + case 0x00: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding not needed. The Burst-by-Burst loop is activated, type G"); + break; + case 0x10: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding needed. Frame erasure is to be signalled, type H"); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Channel coding reserved (%d)",(oct & 0x30)>>4); + break; + } + + switch (oct & 0x0e) + { + case 0x00: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1"); + break; + case 0x02: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2"); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x0e)>>1); + break; + } + + if (oct & 0x01) + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was not closed due to error"); + else + proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was closed successfully"); + + curr_offset+= 1; + + return(curr_offset - offset); } static guint8 de_tp_tested_device(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - - switch (oct) - { - case 0: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Normal operation (no tested device via DAI)"); - break; - case 1: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of speech decoder / DTX functions (downlink)"); - break; - case 2: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of speech encoder / DTX functions (uplink)"); - break; - case 4: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of acoustic devices and A/D & D/A"); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 1, "Tested device reserved (%d)",oct); - break; - } - - curr_offset+= 1; - - return(curr_offset - offset); + guint32 curr_offset; + guchar oct; + + curr_offset = offset; + + oct = tvb_get_guint8(tvb, curr_offset); + + switch (oct) + { + case 0: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Normal operation (no tested device via DAI)"); + break; + case 1: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of speech decoder / DTX functions (downlink)"); + break; + case 2: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of speech encoder / DTX functions (uplink)"); + break; + case 4: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Test of acoustic devices and A/D & D/A"); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 1, "Tested device reserved (%d)",oct); + break; + } + + curr_offset+= 1; + + return(curr_offset - offset); } static guint8 de_tp_pdu_description(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint16 value; + guint32 curr_offset; + guint16 value; - curr_offset = offset; + curr_offset = offset; - value = tvb_get_ntohs(tvb, curr_offset); - curr_offset += 2; + value = tvb_get_ntohs(tvb, curr_offset); + curr_offset += 2; - if (value & 0x8000) - { - if ((value & 0xfff) == 0) - proto_tree_add_text(tree, tvb, curr_offset, 1, "Infinite number of PDUs to be transmitted in the TBF"); - else - proto_tree_add_text(tree, tvb, curr_offset, 1, "%d PDUs to be transmitted in the TBF",value & 0xfff); - } - else - proto_tree_add_text(tree, tvb, curr_offset, 1, "PDU description reserved"); + if (value & 0x8000) + { + if ((value & 0xfff) == 0) + proto_tree_add_text(tree, tvb, curr_offset, 1, "Infinite number of PDUs to be transmitted in the TBF"); + else + proto_tree_add_text(tree, tvb, curr_offset, 1, "%d PDUs to be transmitted in the TBF",value & 0xfff); + } + else + proto_tree_add_text(tree, tvb, curr_offset, 1, "PDU description reserved"); - return(curr_offset - offset); + return(curr_offset - offset); } static guint8 de_tp_mode_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; + guint32 curr_offset; + guchar oct; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - if (oct & 0x01) - proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall select the loop back option"); - else - proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall itself generate the pseudorandom data"); + if (oct & 0x01) + proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall select the loop back option"); + else + proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall itself generate the pseudorandom data"); - proto_tree_add_text(tree, tvb, curr_offset, 1, "Downlink Timeslot Offset: timeslot number %d",(oct & 0x0e)>>1); + proto_tree_add_text(tree, tvb, curr_offset, 1, "Downlink Timeslot Offset: timeslot number %d",(oct & 0x0e)>>1); - curr_offset+= 1; + curr_offset+= 1; - return(curr_offset - offset); + return(curr_offset - offset); } static guint8 de_tp_egprs_mode_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; + guint32 curr_offset; + guchar oct; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - if (oct & 0x01) - proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using GMSK modulation only"); - else - proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using either GMSK or 8-PSK modulation following the detected received modulation"); + if (oct & 0x01) + proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using GMSK modulation only"); + else + proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using either GMSK or 8-PSK modulation following the detected received modulation"); - proto_tree_add_text(tree, tvb, curr_offset, 1, "Downlink Timeslot Offset: timeslot number %d",(oct & 0x0e)>>1); + proto_tree_add_text(tree, tvb, curr_offset, 1, "Downlink Timeslot Offset: timeslot number %d",(oct & 0x0e)>>1); - curr_offset+= 1; + curr_offset+= 1; - return(curr_offset - offset); + return(curr_offset - offset); } static guint8 de_tp_ue_test_loop_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guchar oct; - guint8 lb_setup_length,i,j; - guint16 value; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - curr_offset+= 1; - - switch (oct & 0x03) - { - case 0: - { - proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 1 loop back (loopback of RLC SDUs or PDCP SDUs)"); - lb_setup_length = tvb_get_guint8(tvb, curr_offset); - curr_offset += 1; - for (i=0,j=0; (i> 4) { case 0x07: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: No key is available", - a_bigbuf); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: No key is available", + a_bigbuf); + break; default: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: %u", - a_bigbuf, - (oct & 0x70) >> 4); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: %u", + a_bigbuf, + (oct & 0x70) >> 4); + break; } item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_CM_SRVC_TYPE].strptr); + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_CM_SRVC_TYPE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CM_SRVC_TYPE]); @@ -3809,17 +3785,17 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) case 0x0a: str = "Voice broadcast call establishment"; break; case 0x0b: str = "Location Services"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Service Type: (%u) %s", - a_bigbuf, - oct & 0x0f, - str); + tvb, curr_offset, 1, + "%s : Service Type: (%u) %s", + a_bigbuf, + oct & 0x0f, + str); curr_offset++; curr_len--; @@ -3860,22 +3836,22 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_ID_TYPE].strptr); + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_ID_TYPE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_ID_TYPE]); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x07) { @@ -3884,16 +3860,16 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) case 3: str = "IMEISV"; break; case 4: str = "TMSI"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Type of identity: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Type of identity: %s", + a_bigbuf, + str); curr_offset++; curr_len--; @@ -4017,56 +3993,56 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_common_elem_strings[DE_CIPH_KEY_SEQ_NUM].strptr); + tvb, curr_offset, 1, + gsm_common_elem_strings[DE_CIPH_KEY_SEQ_NUM].strptr); subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]); other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); switch ((oct & 0x70) >> 4) { case 0x07: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: No key is available", - a_bigbuf); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: No key is available", + a_bigbuf); + break; default: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: %u", - a_bigbuf, - (oct & 0x70) >> 4); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: %u", + a_bigbuf, + (oct & 0x70) >> 4); + break; } item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_LOC_UPD_TYPE].strptr); + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_LOC_UPD_TYPE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_LOC_UPD_TYPE]); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Follow-On Request (FOR): %s", - a_bigbuf, - (oct & 0x08) ? "Follow-on request pending" : "No follow-on request pending"); + tvb, curr_offset, 1, + "%s : Follow-On Request (FOR): %s", + a_bigbuf, + (oct & 0x08) ? "Follow-on request pending" : "No follow-on request pending"); other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); switch (oct & 0x03) { @@ -4074,16 +4050,16 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) case 1: str = "Periodic"; break; case 2: str = "IMSI attach"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Updating Type: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Updating Type: %s", + a_bigbuf, + str); proto_item_append_text(item, " - %s", str); @@ -4294,14 +4270,14 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_dtap_elem_strings[DE_CONGESTION].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_dtap_elem_strings[DE_CONGESTION].strptr); subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CONGESTION]); @@ -4310,16 +4286,16 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin case 0: str = "Receiver ready"; break; case 15: str = "Receiver not ready"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Congestion level: %s", - a_bigbuf, - str); + tvb, curr_offset, 1, + "%s : Congestion level: %s", + a_bigbuf, + str); curr_offset++; curr_len--; @@ -5021,154 +4997,154 @@ dtap_sms_cp_error(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void dtap_tp_close_tch_loop_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_SUB_CHANNEL ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_SUB_CHANNEL ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_open_loop_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - if (curr_len) - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_ACK ); + if (curr_len) + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_ACK ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_multi_slot_loop_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_TYPE ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_TYPE ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_multi_slot_loop_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_ACK ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_ACK ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_test_interface(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_TESTED_DEVICE ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_TESTED_DEVICE ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_gprs_test_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_PDU_DESCRIPTION ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_PDU_DESCRIPTION ); - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MODE_FLAG ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MODE_FLAG ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_egprs_start_radio_block_loopback_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EGPRS_MODE_FLAG ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EGPRS_MODE_FLAG ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_close_ue_test_loop(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_TEST_LOOP_MODE ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_TEST_LOOP_MODE ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_reset_ue_positioning_ue_stored_information(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_POSITIONING_TECHNOLOGY ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_POSITIONING_TECHNOLOGY ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } static void dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_len = len; - curr_offset = offset; + curr_len = len; + curr_offset = offset; - ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_RLC_SDU_COUNTER_VALUE ); + ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_RLC_SDU_COUNTER_VALUE ); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } #define NUM_GSM_DTAP_MSG_MM (sizeof(gsm_a_dtap_msg_mm_strings)/sizeof(value_string)) @@ -5262,31 +5238,31 @@ static void (*dtap_msg_ss_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset #define NUM_GSM_DTAP_MSG_TP (sizeof(gsm_a_dtap_msg_tp_strings)/sizeof(value_string)) static gint ett_gsm_dtap_msg_tp[NUM_GSM_DTAP_MSG_TP]; static void (*dtap_msg_tp_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) = { - dtap_tp_close_tch_loop_cmd, /* CLOSE TCH LOOP CMD */ - NULL, /* CLOSE TCH LOOP ACK */ - dtap_tp_open_loop_cmd, /* OPEN LOOP CMD */ - NULL, /* ACT EMMI CMD */ - NULL, /* ACT EMMI ACK */ - NULL, /* DEACT EMMI */ - dtap_tp_test_interface, /* Test Interface */ - dtap_tp_multi_slot_loop_cmd, /* CLOSE Multi-slot LOOP CMD */ - dtap_tp_multi_slot_loop_ack, /* CLOSE Multi-slot LOOP ACK */ - NULL, /* OPEN Multi-slot LOOP CMD */ - NULL, /* OPEN Multi-slot LOOP ACK */ - dtap_tp_gprs_test_mode_cmd, /* GPRS TEST MODE CMD */ - dtap_tp_egprs_start_radio_block_loopback_cmd, /* EGPRS START RADIO BLOCK LOOPBACK CMD */ - dtap_tp_close_ue_test_loop, /* CLOSE UE TEST LOOP */ - NULL, /* CLOSE UE TEST LOOP COMPLETE */ - NULL, /* OPEN UE TEST LOOP */ - NULL, /* OPEN UE TEST LOOP COMPLETE */ - NULL, /* ACTIVATE RB TEST MODE */ - NULL, /* ACTIVATE RB TEST MODE COMPLETE */ - NULL, /* DEACTIVATE RB TEST MODE */ - NULL, /* DEACTIVATE RB TEST MODE COMPLETE */ - dtap_tp_reset_ue_positioning_ue_stored_information, /* RESET UE POSITIONING STORED INFORMATION */ - NULL, /* UE Test Loop Mode 3 RLC SDU Counter Request */ - dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response, /* UE Test Loop Mode 3 RLC SDU Counter Response */ - NULL, /* NONE */ + dtap_tp_close_tch_loop_cmd, /* CLOSE TCH LOOP CMD */ + NULL, /* CLOSE TCH LOOP ACK */ + dtap_tp_open_loop_cmd, /* OPEN LOOP CMD */ + NULL, /* ACT EMMI CMD */ + NULL, /* ACT EMMI ACK */ + NULL, /* DEACT EMMI */ + dtap_tp_test_interface, /* Test Interface */ + dtap_tp_multi_slot_loop_cmd, /* CLOSE Multi-slot LOOP CMD */ + dtap_tp_multi_slot_loop_ack, /* CLOSE Multi-slot LOOP ACK */ + NULL, /* OPEN Multi-slot LOOP CMD */ + NULL, /* OPEN Multi-slot LOOP ACK */ + dtap_tp_gprs_test_mode_cmd, /* GPRS TEST MODE CMD */ + dtap_tp_egprs_start_radio_block_loopback_cmd, /* EGPRS START RADIO BLOCK LOOPBACK CMD */ + dtap_tp_close_ue_test_loop, /* CLOSE UE TEST LOOP */ + NULL, /* CLOSE UE TEST LOOP COMPLETE */ + NULL, /* OPEN UE TEST LOOP */ + NULL, /* OPEN UE TEST LOOP COMPLETE */ + NULL, /* ACTIVATE RB TEST MODE */ + NULL, /* ACTIVATE RB TEST MODE COMPLETE */ + NULL, /* DEACTIVATE RB TEST MODE */ + NULL, /* DEACTIVATE RB TEST MODE COMPLETE */ + dtap_tp_reset_ue_positioning_ue_stored_information, /* RESET UE POSITIONING STORED INFORMATION */ + NULL, /* UE Test Loop Mode 3 RLC SDU Counter Request */ + dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response, /* UE Test Loop Mode 3 RLC SDU Counter Response */ + NULL, /* NONE */ }; /* GENERIC DISSECTOR FUNCTIONS */ @@ -5319,16 +5295,16 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (len < 2) { - /* - * too short to be DTAP - */ - call_dissector(data_handle, tvb, pinfo, tree); - return; + /* + * too short to be DTAP + */ + call_dissector(data_handle, tvb, pinfo, tree); + return; } if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_str(pinfo->cinfo, COL_INFO, "(DTAP) "); + col_append_str(pinfo->cinfo, COL_INFO, "(DTAP) "); } /* @@ -5337,7 +5313,7 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tap_current++; if (tap_current >= 4) { - tap_current = 0; + tap_current = 0; } tap_p = &tap_rec[tap_current]; @@ -5355,12 +5331,12 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if ((((oct_1 & DTAP_TI_MASK) >> 4) & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK) { - /* - * eventhough we don't know if a TI should be in the message yet - * we rely on the TI/SKIP indicator to be 0 to avoid taking this - * octet - */ - oct_2 = tvb_get_guint8(tvb, offset++); + /* + * eventhough we don't know if a TI should be in the message yet + * we rely on the TI/SKIP indicator to be 0 to avoid taking this + * octet + */ + oct_2 = tvb_get_guint8(tvb, offset++); } oct = tvb_get_guint8(tvb, offset); @@ -5374,7 +5350,7 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) nsd = FALSE; if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ",val_to_str(pd,gsm_a_pd_short_str_vals,"unknown")); + col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ",val_to_str(pd,gsm_a_pd_short_str_vals,"unknown")); } /* @@ -5383,64 +5359,64 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) switch (pd) { case 3: - msg_str = match_strval_idx((guint32) (oct & DTAP_CC_IEI_MASK), gsm_a_dtap_msg_cc_strings, &idx); - ett_tree = ett_gsm_dtap_msg_cc[idx]; - hf_idx = hf_gsm_a_dtap_msg_cc_type; - msg_fcn = dtap_msg_cc_fcn[idx]; - ti = (oct_1 & DTAP_TI_MASK) >> 4; - nsd = TRUE; - break; + msg_str = match_strval_idx((guint32) (oct & DTAP_CC_IEI_MASK), gsm_a_dtap_msg_cc_strings, &idx); + ett_tree = ett_gsm_dtap_msg_cc[idx]; + hf_idx = hf_gsm_a_dtap_msg_cc_type; + msg_fcn = dtap_msg_cc_fcn[idx]; + ti = (oct_1 & DTAP_TI_MASK) >> 4; + nsd = TRUE; + break; case 5: - msg_str = match_strval_idx((guint32) (oct & DTAP_MM_IEI_MASK), gsm_a_dtap_msg_mm_strings, &idx); - ett_tree = ett_gsm_dtap_msg_mm[idx]; - hf_idx = hf_gsm_a_dtap_msg_mm_type; - msg_fcn = dtap_msg_mm_fcn[idx]; - nsd = TRUE; - break; + msg_str = match_strval_idx((guint32) (oct & DTAP_MM_IEI_MASK), gsm_a_dtap_msg_mm_strings, &idx); + ett_tree = ett_gsm_dtap_msg_mm[idx]; + hf_idx = hf_gsm_a_dtap_msg_mm_type; + msg_fcn = dtap_msg_mm_fcn[idx]; + nsd = TRUE; + break; case 6: get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - break; + break; case 8: get_gmm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - break; + break; case 9: - msg_str = match_strval_idx((guint32) (oct & DTAP_SMS_IEI_MASK), gsm_a_dtap_msg_sms_strings, &idx); - ett_tree = ett_gsm_dtap_msg_sms[idx]; - hf_idx = hf_gsm_a_dtap_msg_sms_type; - msg_fcn = dtap_msg_sms_fcn[idx]; - ti = (oct_1 & DTAP_TI_MASK) >> 4; - break; + msg_str = match_strval_idx((guint32) (oct & DTAP_SMS_IEI_MASK), gsm_a_dtap_msg_sms_strings, &idx); + ett_tree = ett_gsm_dtap_msg_sms[idx]; + hf_idx = hf_gsm_a_dtap_msg_sms_type; + msg_fcn = dtap_msg_sms_fcn[idx]; + ti = (oct_1 & DTAP_TI_MASK) >> 4; + break; case 10: get_sm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - ti = (oct_1 & DTAP_TI_MASK) >> 4; - break; + ti = (oct_1 & DTAP_TI_MASK) >> 4; + break; case 11: - msg_str = match_strval_idx((guint32) (oct & DTAP_SS_IEI_MASK), gsm_a_dtap_msg_ss_strings, &idx); - ett_tree = ett_gsm_dtap_msg_ss[idx]; - hf_idx = hf_gsm_a_dtap_msg_ss_type; - msg_fcn = dtap_msg_ss_fcn[idx]; - ti = (oct_1 & DTAP_TI_MASK) >> 4; - nsd = TRUE; - break; + msg_str = match_strval_idx((guint32) (oct & DTAP_SS_IEI_MASK), gsm_a_dtap_msg_ss_strings, &idx); + ett_tree = ett_gsm_dtap_msg_ss[idx]; + hf_idx = hf_gsm_a_dtap_msg_ss_type; + msg_fcn = dtap_msg_ss_fcn[idx]; + ti = (oct_1 & DTAP_TI_MASK) >> 4; + nsd = TRUE; + break; - case 15: - msg_str = match_strval_idx((guint32) (oct & DTAP_TP_IEI_MASK), gsm_a_dtap_msg_tp_strings, &idx); - ett_tree = ett_gsm_dtap_msg_tp[idx]; - hf_idx = hf_gsm_a_dtap_msg_tp_type; - msg_fcn = dtap_msg_tp_fcn[idx]; - ti = (oct_1 & DTAP_TI_MASK) >> 4; - nsd = TRUE; - break; + case 15: + msg_str = match_strval_idx((guint32) (oct & DTAP_TP_IEI_MASK), gsm_a_dtap_msg_tp_strings, &idx); + ett_tree = ett_gsm_dtap_msg_tp[idx]; + hf_idx = hf_gsm_a_dtap_msg_tp_type; + msg_fcn = dtap_msg_tp_fcn[idx]; + ti = (oct_1 & DTAP_TI_MASK) >> 4; + nsd = TRUE; + break; default: - /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */ - return; + /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */ + return; } sccp_msg = pinfo->sccp_info; @@ -5457,110 +5433,110 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (msg_str == NULL) { - dtap_item = - proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len, - "GSM A-I/F DTAP - Unknown DTAP Message Type (0x%02x)", - oct); + dtap_item = + proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len, + "GSM A-I/F DTAP - Unknown DTAP Message Type (0x%02x)", + oct); - dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap_msg); + dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap_msg); - if (sccp_msg && !sccp_msg->data.co.label) { - sccp_msg->data.co.label = se_strdup_printf("DTAP (0x%02x)",oct); - } + if (sccp_msg && !sccp_msg->data.co.label) { + sccp_msg->data.co.label = se_strdup_printf("DTAP (0x%02x)",oct); + } } else { - dtap_item = - proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, -1, - "GSM A-I/F DTAP - %s", - msg_str); + dtap_item = + proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, -1, + "GSM A-I/F DTAP - %s", + msg_str); - dtap_tree = proto_item_add_subtree(dtap_item, ett_tree); + dtap_tree = proto_item_add_subtree(dtap_item, ett_tree); - if (sccp_msg && !sccp_msg->data.co.label) { - sccp_msg->data.co.label = se_strdup(msg_str); - } + if (sccp_msg && !sccp_msg->data.co.label) { + sccp_msg->data.co.label = se_strdup(msg_str); + } - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str); - } + if (check_col(pinfo->cinfo, COL_INFO)) + { + col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str); + } } oct_1_item = proto_tree_add_text(dtap_tree, - tvb, 0, 1, - "Protocol Discriminator: %s", - val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)")); + tvb, 0, 1, + "Protocol Discriminator: %s", + val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)")); pd_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1); if (ti == -1) { - proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 0, 1, FALSE); + proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 0, 1, FALSE); } else { - other_decode_bitfield_value(a_bigbuf, oct_1, 0x80, 8); - proto_tree_add_text(pd_tree, - tvb, 0, 1, - "%s : TI flag: %s", - a_bigbuf, - ((oct_1 & 0x80) ? "allocated by receiver" : "allocated by sender")); - - if ((ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK) - { - /* ti is extended to next octet */ + other_decode_bitfield_value(a_bigbuf, oct_1, 0x80, 8); + proto_tree_add_text(pd_tree, + tvb, 0, 1, + "%s : TI flag: %s", + a_bigbuf, + ((oct_1 & 0x80) ? "allocated by receiver" : "allocated by sender")); + + if ((ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK) + { + /* ti is extended to next octet */ - other_decode_bitfield_value(a_bigbuf, oct_1, 0x70, 8); - proto_tree_add_text(pd_tree, - tvb, 0, 1, - "%s : TIO: The TI value is given by the TIE in octet 2", - a_bigbuf); - } - else - { - other_decode_bitfield_value(a_bigbuf, oct_1, 0x70, 8); - proto_tree_add_text(pd_tree, - tvb, 0, 1, - "%s : TIO: %u", - a_bigbuf, - ti & DTAP_TIE_PRES_MASK); - } + other_decode_bitfield_value(a_bigbuf, oct_1, 0x70, 8); + proto_tree_add_text(pd_tree, + tvb, 0, 1, + "%s : TIO: The TI value is given by the TIE in octet 2", + a_bigbuf); + } + else + { + other_decode_bitfield_value(a_bigbuf, oct_1, 0x70, 8); + proto_tree_add_text(pd_tree, + tvb, 0, 1, + "%s : TIO: %u", + a_bigbuf, + ti & DTAP_TIE_PRES_MASK); + } } proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, FALSE); if ((ti != -1) && - (ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK) + (ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK) { - proto_tree_add_item(tree, hf_gsm_a_extension, tvb, 1, 1, FALSE); - - other_decode_bitfield_value(a_bigbuf, oct_2, DTAP_TIE_MASK, 8); - proto_tree_add_text(pd_tree, - tvb, 1, 1, - "%s : TIE: %u", - a_bigbuf, - oct_2 & DTAP_TIE_MASK); + proto_tree_add_item(tree, hf_gsm_a_extension, tvb, 1, 1, FALSE); + + other_decode_bitfield_value(a_bigbuf, oct_2, DTAP_TIE_MASK, 8); + proto_tree_add_text(pd_tree, + tvb, 1, 1, + "%s : TIE: %u", + a_bigbuf, + oct_2 & DTAP_TIE_MASK); } /* * N(SD) */ if ((pinfo->p2p_dir == P2P_DIR_RECV) && - nsd) + nsd) { - /* XXX */ + /* XXX */ } /* * add DTAP message name */ proto_tree_add_uint_format(dtap_tree, hf_idx, - tvb, offset, 1, oct, - "Message Type %s",msg_str ? msg_str : "(Unknown)"); + tvb, offset, 1, oct, + "Message Type %s",msg_str ? msg_str : "(Unknown)"); offset++; @@ -5579,13 +5555,13 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (msg_fcn == NULL) { - proto_tree_add_text(dtap_tree, - tvb, offset, len - offset, - "Message Elements"); + proto_tree_add_text(dtap_tree, + tvb, offset, len - offset, + "Message Elements"); } else { - (*msg_fcn)(tvb, dtap_tree, offset, len - offset); + (*msg_fcn)(tvb, dtap_tree, offset, len - offset); } } @@ -5602,62 +5578,65 @@ proto_register_gsm_a_dtap(void) static hf_register_info hf[] = { { &hf_gsm_a_dtap_msg_mm_type, - { "DTAP Mobility Management Message Type", "gsm_a.dtap_msg_mm_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_mm_strings), 0x0, - "", HFILL } + { "DTAP Mobility Management Message Type", "gsm_a.dtap_msg_mm_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_mm_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_msg_cc_type, - { "DTAP Call Control Message Type", "gsm_a.dtap_msg_cc_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_cc_strings), 0x0, - "", HFILL } + { "DTAP Call Control Message Type", "gsm_a.dtap_msg_cc_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_cc_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_msg_sms_type, - { "DTAP Short Message Service Message Type", "gsm_a.dtap_msg_sms_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sms_strings), 0x0, - "", HFILL } + { "DTAP Short Message Service Message Type", "gsm_a.dtap_msg_sms_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sms_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_msg_ss_type, - { "DTAP Non call Supplementary Service Message Type", "gsm_a.dtap_msg_ss_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_ss_strings), 0x0, - "", HFILL } + { "DTAP Non call Supplementary Service Message Type", "gsm_a.dtap_msg_ss_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_ss_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_msg_tp_type, - { "DTAP Tests Procedures Message Type", "gsm_a.dtap_msg_tp_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_tp_strings), 0x0, - "", HFILL } + { "DTAP Tests Procedures Message Type", "gsm_a.dtap_msg_tp_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_tp_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_elem_id, - { "Element ID", "gsm_a_dtap.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_dtap.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_cld_party_bcd_num, - { "Called Party BCD Number", "gsm_a.cld_party_bcd_num", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } + { "Called Party BCD Number", "gsm_a.cld_party_bcd_num", + FT_STRING, BASE_DEC, 0, 0, + "", HFILL } }, { &hf_gsm_a_clg_party_bcd_num, - { "Calling Party BCD Number", "gsm_a.clg_party_bcd_num", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } + { "Calling Party BCD Number", "gsm_a.clg_party_bcd_num", + FT_STRING, BASE_DEC, 0, 0, + "", HFILL } }, { &hf_gsm_a_dtap_cause, - { "DTAP Cause", "gsm_a_dtap.cause", - FT_UINT8, BASE_HEX, 0, 0x0, - "", HFILL } + { "DTAP Cause", "gsm_a_dtap.cause", + FT_UINT8, BASE_HEX, 0, 0x0, + "", HFILL } }, - { &hf_gsm_a_extension, - { "Extension", "gsm_a.extension", + { &hf_gsm_a_extension, + { "Extension", "gsm_a.extension", FT_BOOLEAN, 8, TFS(&gsm_a_extension_value), 0x80, - "Extension", HFILL }}, - { &hf_gsm_a_type_of_number, - { "Type of number", "gsm_a.type_of_number", + "Extension", HFILL } + }, + { &hf_gsm_a_type_of_number, + { "Type of number", "gsm_a.type_of_number", FT_UINT8, BASE_HEX, VALS(gsm_a_type_of_number_values), 0x70, - "Type of number", HFILL }}, - { &hf_gsm_a_numbering_plan_id, - { "Numbering plan identification", "gsm_a.numbering_plan_id", + "Type of number", HFILL } + }, + { &hf_gsm_a_numbering_plan_id, + { "Numbering plan identification", "gsm_a.numbering_plan_id", FT_UINT8, BASE_HEX, VALS(gsm_a_numbering_plan_id_values), 0x0f, - "Numbering plan identification", HFILL }}, + "Numbering plan identification", HFILL } + }, { &hf_gsm_a_lsa_id, { "LSA Identifier", "gsm_a.lsa_id", FT_UINT24, BASE_HEX, NULL, 0x0, @@ -5695,45 +5674,44 @@ proto_register_gsm_a_dtap(void) for (i=0; i < NUM_GSM_DTAP_MSG_MM; i++, last_offset++) { - ett_gsm_dtap_msg_mm[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_mm[i]; + ett_gsm_dtap_msg_mm[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_mm[i]; } for (i=0; i < NUM_GSM_DTAP_MSG_CC; i++, last_offset++) { - ett_gsm_dtap_msg_cc[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_cc[i]; + ett_gsm_dtap_msg_cc[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_cc[i]; } for (i=0; i < NUM_GSM_DTAP_MSG_SMS; i++, last_offset++) { - ett_gsm_dtap_msg_sms[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_sms[i]; + ett_gsm_dtap_msg_sms[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_sms[i]; } for (i=0; i < NUM_GSM_DTAP_MSG_SS; i++, last_offset++) { - ett_gsm_dtap_msg_ss[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_ss[i]; + ett_gsm_dtap_msg_ss[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_ss[i]; } - for (i=0; i < NUM_GSM_DTAP_MSG_TP; i++, last_offset++) - { - ett_gsm_dtap_msg_tp[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_tp[i]; - } + for (i=0; i < NUM_GSM_DTAP_MSG_TP; i++, last_offset++) + { + ett_gsm_dtap_msg_tp[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_tp[i]; + } for (i=0; i < NUM_GSM_DTAP_ELEM; i++, last_offset++) { - ett_gsm_dtap_elem[i] = -1; - ett[last_offset] = &ett_gsm_dtap_elem[i]; + ett_gsm_dtap_elem[i] = -1; + ett[last_offset] = &ett_gsm_dtap_elem[i]; } - /* Register the protocol name and description */ proto_a_dtap = - proto_register_protocol("GSM A-I/F DTAP", "GSM DTAP", "gsm_a_dtap"); + proto_register_protocol("GSM A-I/F DTAP", "GSM DTAP", "gsm_a_dtap"); proto_register_field_array(proto_a_dtap, hf, array_length(hf)); @@ -5750,8 +5728,8 @@ proto_reg_handoff_gsm_a_dtap(void) dtap_handle = find_dissector("gsm_a_dtap"); rp_handle = find_dissector("gsm_a_rp"); - dissector_add("bssap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle); - dissector_add("ranap.nas_pdu", BSSAP_PDU_TYPE_DTAP, dtap_handle); + dissector_add("bssap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle); + dissector_add("ranap.nas_pdu", BSSAP_PDU_TYPE_DTAP, dtap_handle); dissector_add("llcgprs.sapi", 1 , dtap_handle); /* GPRS Mobility Management */ dissector_add("llcgprs.sapi", 7 , dtap_handle); /* SMS */ data_handle = find_dissector("data"); diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index b890237231..550775603d 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -12,13 +12,6 @@ * * Title 3GPP Other * - * Reference [3] - * Mobile radio interface Layer 3 specification; - * Core network protocols; - * Stage 3 - * (3GPP TS 24.008 version 4.7.0 Release 4) - * (ETSI TS 124 008 V6.8.0 (2005-03)) - * * Reference [7] * Mobile radio interface Layer 3 specification; * Core network protocols; @@ -256,13 +249,12 @@ gint ett_gsm_gm_elem[NUM_GSM_GM_ELEM]; * [7] 10.5.5.1 */ static guint8 -de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_attach_res(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -275,10 +267,10 @@ de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Attach Result: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Attach Result: (%u) %s", + oct&7, + str); curr_offset++; @@ -291,17 +283,16 @@ de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.2 */ static guint8 -de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; - guint8 oct_ciph; + guint8 oct_ciph; guint32 curr_offset; const gchar *str_follow; const gchar *str_attach; - proto_item *tf = NULL; - proto_tree *tf_tree = NULL; + proto_item *tf = NULL; + proto_tree *tf_tree = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -329,22 +320,22 @@ de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g tf_tree = proto_item_add_subtree(tf, ett_gmm_attach_type ); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Type: (%u) %s", - oct&7, - str_attach); + tvb, curr_offset, 1, + "Type: (%u) %s", + oct&7, + str_attach); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Follow: (%u) %s", - (oct>>3)&1, - str_follow); + tvb, curr_offset, 1, + "Follow: (%u) %s", + (oct>>3)&1, + str_follow); /* The ciphering key sequence number is added here */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Ciphering key sequence number: 0x%02x (%u)", - oct_ciph, - oct_ciph); + tvb, curr_offset, 1, + "Ciphering key sequence number: 0x%02x (%u)", + oct_ciph, + oct_ciph); curr_offset++; @@ -357,13 +348,12 @@ de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [7] 10.5.5.3 */ static guint8 -de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ciph_alg(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -382,10 +372,10 @@ de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Ciphering Algorithm: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Ciphering Algorithm: (%u) %s", + oct&7, + str); curr_offset++; @@ -398,13 +388,12 @@ de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [7] 10.5.5.4 */ static guint8 -de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_tmsi_stat(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -417,10 +406,10 @@ de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "TMSI Status: (%u) %s", - oct&1, - str); + tvb, curr_offset, 1, + "TMSI Status: (%u) %s", + oct&1, + str); /* curr_offset++; - It is encoded in the octed before */ @@ -433,16 +422,15 @@ de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [7] 10.5.5.5 */ static guint8 -de_gmm_detach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_detach_type(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; const gchar *str_power; proto_item *tf = NULL; - proto_tree *tf_tree = NULL; + proto_tree *tf_tree = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -468,16 +456,16 @@ de_gmm_detach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g tf_tree = proto_item_add_subtree(tf, ett_gmm_detach_type ); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Type: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Type: (%u) %s", + oct&7, + str); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Power: (%u) %s", - (oct>>3)&1, - str_power); + tvb, curr_offset, 1, + "Power: (%u) %s", + (oct>>3)&1, + str_power); curr_offset++; @@ -494,8 +482,8 @@ de_gmm_detach_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * 1 Split pg cycle on CCCH is supported by the mobile station */ static const true_false_string gsm_a_gmm_split_on_ccch_value = { - "Split pg cycle on CCCH is supported by the mobile station", - "Split pg cycle on CCCH is not supported by the mobile station" + "Split pg cycle on CCCH is supported by the mobile station", + "Split pg cycle on CCCH is not supported by the mobile station" }; /* non-DRX timer, octet 3 @@ -549,7 +537,7 @@ static const value_string gsm_a_gmm_cn_spec_drs_cycle_len_coef_strings[] = { { 0, NULL }, }; guint8 -de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; @@ -558,7 +546,6 @@ de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch proto_item *tf = NULL; proto_tree *tf_tree = NULL; - len = len; curr_offset = offset; tf = proto_tree_add_text(tree, @@ -614,10 +601,10 @@ de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch } proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Split PG Cycle Code: (%u) %s", - oct, - str); + tvb, curr_offset, 1, + "Split PG Cycle Code: (%u) %s", + oct, + str); curr_offset++; proto_tree_add_item(tf_tree, hf_gsm_a_gmm_cn_spec_drs_cycle_len_coef, tvb, curr_offset, 1, FALSE); @@ -635,13 +622,12 @@ de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [7] 10.5.5.7 */ static guint8 -de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ftostby(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -653,10 +639,10 @@ de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Force to Standby: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Force to Standby: (%u) %s", + oct&7, + str); curr_offset++; @@ -669,13 +655,12 @@ de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [7] 10.5.5.7 */ static guint8 -de_gmm_ftostby_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ftostby_h(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -690,10 +675,10 @@ de_gmm_ftostby_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Force to Standby: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Force to Standby: (%u) %s", + oct&7, + str); curr_offset++; @@ -710,7 +695,9 @@ de_gmm_ptmsi_sig(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, { guint32 curr_offset; proto_item *curr_item; + curr_offset = offset; + curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig,tvb,curr_offset,3,FALSE); proto_item_append_text(curr_item,"%s",add_string ? add_string : ""); @@ -729,6 +716,7 @@ de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc { guint32 curr_offset; proto_item *curr_item; + curr_offset = offset; curr_item= proto_tree_add_item(tree,hf_gsm_a_ptmsi_sig2,tvb,curr_offset,3,FALSE); @@ -744,13 +732,12 @@ de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.9 */ static guint8 -de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -760,14 +747,14 @@ de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g case 2: str="IMEI"; break; case 3: str="IMEISV"; break; case 4: str="TMSI"; break; - default: str="IMSI"; + default: str="IMSI"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Identity Type 2: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Identity Type 2: (%u) %s", + oct&7, + str); curr_offset++; @@ -780,13 +767,12 @@ de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [7] 10.5.5.10 */ static guint8 -de_gmm_imeisv_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_imeisv_req(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -797,14 +783,14 @@ de_gmm_imeisv_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc switch ( oct&7 ) { case 1: str="IMEISV requested"; break; - default: str="IMEISV not requested"; + default: str="IMEISV not requested"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "IMEISV Request: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "IMEISV Request: (%u) %s", + oct&7, + str); curr_offset++; @@ -829,36 +815,35 @@ de_gmm_rec_npdu_lst(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, do { - guint32 oct; - oct = tvb_get_guint8(tvb, curr_offset); - oct <<=8; - oct |= tvb_get_guint8(tvb, curr_offset+1); - curr_len -= 2; - oct <<=8; - - proto_tree_add_text(tree, - tvb, curr_offset, 2, - "NSAPI %d: 0x%02x (%u)", - oct>>20, - (oct>>12)&0xff, - (oct>>12)&0xff); - curr_offset+= 2; - - if ( curr_len > 2 ) - { - oct |= tvb_get_guint8(tvb, curr_offset+2); - curr_len--; - oct <<= 12; - - proto_tree_add_text(tree, - tvb, curr_offset-1, 2, + guint32 oct; + oct = tvb_get_guint8(tvb, curr_offset); + oct <<=8; + oct |= tvb_get_guint8(tvb, curr_offset+1); + curr_len -= 2; + oct <<=8; + + proto_tree_add_text(tree, + tvb, curr_offset, 2, "NSAPI %d: 0x%02x (%u)", oct>>20, (oct>>12)&0xff, (oct>>12)&0xff); - curr_offset++; - } + curr_offset+= 2; + + if ( curr_len > 2 ) + { + oct |= tvb_get_guint8(tvb, curr_offset+2); + curr_len--; + oct <<= 12; + proto_tree_add_text(tree, + tvb, curr_offset-1, 2, + "NSAPI %d: 0x%02x (%u)", + oct>>20, + (oct>>12)&0xff, + (oct>>12)&0xff); + curr_offset++; + } } while ( curr_len > 1 ); @@ -913,58 +898,58 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc /* bit 8 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GEA1: (%u) %s", - oct>>7, - answer_gea[oct>>7]); + tvb, curr_offset, 1, + "GEA1: (%u) %s", + oct>>7, + answer_gea[oct>>7]); oct<<=1; /* bit 7 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "SM capabilities via dedicated channels: (%u) %s", - oct>>7, - answer_smdch[oct>>7]); + tvb, curr_offset, 1, + "SM capabilities via dedicated channels: (%u) %s", + oct>>7, + answer_smdch[oct>>7]); oct<<=1; /* bit 6 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "SM capabilities via GPRS channels: (%u) %s", - oct>>7, - answer_smgprs[oct>>7]); + tvb, curr_offset, 1, + "SM capabilities via GPRS channels: (%u) %s", + oct>>7, + answer_smgprs[oct>>7]); oct<<=1; /* bit 5 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "UCS2 support: (%u) %s", - oct>>7, - answer_ucs2[oct>>7]); + tvb, curr_offset, 1, + "UCS2 support: (%u) %s", + oct>>7, + answer_ucs2[oct>>7]); oct<<=1; /* bit 4 3 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "SS Screening Indicator: (%u) %s", - oct>>6, - answer_ssid[oct>>6]); + tvb, curr_offset, 1, + "SS Screening Indicator: (%u) %s", + oct>>6, + answer_ssid[oct>>6]); oct<<=2; /* bit 2 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "SoLSA Capability: (%u) %s", - oct>>7, - answer_solsa[oct>>7]); + tvb, curr_offset, 1, + "SoLSA Capability: (%u) %s", + oct>>7, + answer_solsa[oct>>7]); oct<<=1; /* bit 1 */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Revision level indicator: (%u) %s", - oct>>7, - answer_rev[oct>>7]); + tvb, curr_offset, 1, + "Revision level indicator: (%u) %s", + oct>>7, + answer_rev[oct>>7]); curr_offset++; @@ -973,27 +958,27 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc curr_len--; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "PFC feature mode: (%u) %s", - oct>>7, - answer_pfc[oct>>7]); + tvb, curr_offset, 1, + "PFC feature mode: (%u) %s", + oct>>7, + answer_pfc[oct>>7]); oct<<=1; for( gea_val=2; gea_val<8 ; gea_val++ ) { - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GEA%d: (%u) %s", gea_val, - oct>>7, - answer_gea[oct>>7]); - oct<<=1; + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "GEA%d: (%u) %s", gea_val, + oct>>7, + answer_gea[oct>>7]); + oct<<=1; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "LCS VA capability:: (%u) %s", - oct>>7, - answer_lcs[oct>>7]); + tvb, curr_offset, 1, + "LCS VA capability:: (%u) %s", + oct>>7, + answer_lcs[oct>>7]); curr_offset++; @@ -1006,46 +991,46 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.12a */ #define GET_DATA /* check if we have enough bits left */ \ - if ( curr_bits_length < bits_needed ) \ - continue; \ - /* check if oct has enougth bits */ \ - if ( bits_in_oct < bits_needed ) \ + if ( curr_bits_length < bits_needed ) \ + continue; \ + /* check if oct has enougth bits */ \ + if ( bits_in_oct < bits_needed ) \ + { \ + guint32 tmp_oct; \ + if ( curr_len == 0 ) \ { \ - guint32 tmp_oct; \ - if ( curr_len == 0 ) \ - { \ - proto_tree_add_text(tf_tree, \ + proto_tree_add_text(tf_tree, \ tvb, curr_offset, 1, \ "Not enough data available"); \ - } \ - tmp_oct = tvb_get_guint8(tvb, curr_offset); \ - oct |= tmp_oct<<(32-8-bits_in_oct); \ - curr_len--; \ - curr_offset++; \ - if ( bits_in_oct != 0 ) \ - add_ocetets = 1; \ - else \ - add_ocetets = 0; \ - bits_in_oct += 8; \ } \ + tmp_oct = tvb_get_guint8(tvb, curr_offset); \ + oct |= tmp_oct<<(32-8-bits_in_oct); \ + curr_len--; \ + curr_offset++; \ + if ( bits_in_oct != 0 ) \ + add_ocetets = 1; \ else \ - add_ocetets = 0; + add_ocetets = 0; \ + bits_in_oct += 8; \ + } \ + else \ + add_ocetets = 0; guint8 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint curr_len; + guint32 curr_offset; + guint curr_len; proto_item *tf = NULL; - proto_tree *tf_tree = NULL; + proto_tree *tf_tree = NULL; guint32 oct; guchar bits_in_oct; guchar bits_needed; guint bits_length; guint add_ocetets; /* octets which are covered by one element -1 */ guint curr_bits_length; - guchar acc_type; - const gchar *str; + guchar acc_type; + const gchar *str; gchar multi_slot_str[64][230] = { "Not specified", /* 00 */ "Max Rx-Slot/TDMA:1 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:2 Tta:3 Ttb:2 Tra:4 Trb:2 Type:1", /* 01 */ @@ -1112,7 +1097,7 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l "Not specified", /* 62 */ "Not specified", /* 63 */ }; - guint indx = 0; + guint indx = 0; guchar dtm_gprs_mslot = 0; guchar dtm_egprs_mslot = 4; gboolean finished = TRUE; @@ -1125,58 +1110,58 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l do { - /* check for a new round */ - if (( curr_len*8 + bits_in_oct ) < 11 ) - break; + /* check for a new round */ + if (( curr_len*8 + bits_in_oct ) < 11 ) + break; - /* now read the first 11 bits */ + /* now read the first 11 bits */ curr_bits_length = 11; - /* - * - */ - if ( curr_len != len ) - { - bits_needed = 1; - GET_DATA; - - if (( oct>>(32-bits_needed) ) == 1 ) + /* + * + */ + if ( curr_len != len ) { - curr_bits_length -= bits_needed; + bits_needed = 1; + GET_DATA; + + if (( oct>>(32-bits_needed) ) == 1 ) + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - - if (( curr_len*8 + bits_in_oct ) < 11 ) - break; - curr_bits_length = 11; - } - else - { - curr_bits_length -= bits_needed; + bits_in_oct -= bits_needed; + + if (( curr_len*8 + bits_in_oct ) < 11 ) + break; + curr_bits_length = 11; + } + else + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - break; + bits_in_oct -= bits_needed; + break; + } } - } - indx++; - tf = proto_tree_add_text(tree, - tvb, curr_offset, 1, - "MS RA capability %d",indx); + indx++; + tf = proto_tree_add_text(tree, + tvb, curr_offset, 1, + "MS RA capability %d",indx); - tf_tree = proto_item_add_subtree(tf, ett_gmm_radio_cap ); + tf_tree = proto_item_add_subtree(tf, ett_gmm_radio_cap ); - /* - * Access Technology - */ - bits_needed = 4; - GET_DATA; + /* + * Access Technology + */ + bits_needed = 4; + GET_DATA; - acc_type = oct>>(32-bits_needed); - switch ( acc_type ) - { - case 0x00: str="GSM P"; break; + acc_type = oct>>(32-bits_needed); + switch ( acc_type ) + { + case 0x00: str="GSM P"; break; case 0x01: str="GSM E --note that GSM E covers GSM P"; break; - case 0x02: str="GSM R --note that GSM R covers GSM E and GSM P"; break; + case 0x02: str="GSM R --note that GSM R covers GSM E and GSM P"; break; case 0x03: str="GSM 1800"; break; case 0x04: str="GSM 1900"; break; case 0x05: str="GSM 450"; break; @@ -1184,214 +1169,214 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l case 0x07: str="GSM 850"; break; case 0x08: str="GSM 700"; break; case 0x0f: str="Indicates the presence of a list of Additional access technologies"; break; - default: str="unknown"; - } + default: str="unknown"; + } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, "Access Technology Type: (%u) %s",acc_type,str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - /* - * get bits_length - */ - bits_needed = 7; - GET_DATA; + /* + * get bits_length + */ + bits_needed = 7; + GET_DATA; - bits_length = curr_bits_length = oct>>(32-bits_needed); - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Length: 0x%02x bits (%u)",bits_length,bits_length); + bits_length = curr_bits_length = oct>>(32-bits_needed); + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Length: 0x%02x bits (%u)",bits_length,bits_length); /* This is already done - length doesn't contain this field curr_bits_length -= bits_needed; */ oct <<= bits_needed; bits_in_oct -= bits_needed; - if ( acc_type == 0x0f ) - { - do + if ( acc_type == 0x0f ) { - /* - * Additional access technologies: - */ - finished = TRUE; /* Break out of the loop unless proven unfinished */ - - /* - * Presence bit - */ - bits_needed = 1; - GET_DATA; - - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + do { - case 0x00: str="Not Present"; finished = TRUE; break; - case 0x01: str="Present"; finished = FALSE; break; - default: str="This should not happen"; - } - - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Presence: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; + /* + * Additional access technologies: + */ + finished = TRUE; /* Break out of the loop unless proven unfinished */ - if (finished) - { /* - * No more valid data, get spare bits if any + * Presence bit */ - while ( curr_bits_length > 0 ) + bits_needed = 1; + GET_DATA; + + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - if ( curr_bits_length > 8 ) - bits_needed = 8; - else - bits_needed = curr_bits_length; - GET_DATA; - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; + case 0x00: str="Not Present"; finished = TRUE; break; + case 0x01: str="Present"; finished = FALSE; break; + default: str="This should not happen"; } - continue; - } - /* - * Access Technology - */ - bits_needed = 4; - GET_DATA; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Presence: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; - acc_type = oct>>(32-bits_needed); - switch ( acc_type ) - { - case 0x00: str="GSM P"; break; - case 0x01: str="GSM E --note that GSM E covers GSM P"; break; - case 0x02: str="GSM R --note that GSM R covers GSM E and GSM P"; break; - case 0x03: str="GSM 1800"; break; - case 0x04: str="GSM 1900"; break; - case 0x05: str="GSM 450"; break; - case 0x06: str="GSM 480"; break; - case 0x07: str="GSM 850"; break; - case 0x08: str="GSM 700"; break; - case 0x0f: str="Indicates the presence of a list of Additional access technologies"; break; - default: str="unknown"; - } + if (finished) + { + /* + * No more valid data, get spare bits if any + */ + while ( curr_bits_length > 0 ) + { + if ( curr_bits_length > 8 ) + bits_needed = 8; + else + bits_needed = curr_bits_length; + GET_DATA; + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + } + continue; + } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Access Technology Type: (%u) %s",acc_type,str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; + /* + * Access Technology + */ + bits_needed = 4; + GET_DATA; - /* - * RF Power - */ - bits_needed = 3; - GET_DATA; + acc_type = oct>>(32-bits_needed); + switch ( acc_type ) + { + case 0x00: str="GSM P"; break; + case 0x01: str="GSM E --note that GSM E covers GSM P"; break; + case 0x02: str="GSM R --note that GSM R covers GSM E and GSM P"; break; + case 0x03: str="GSM 1800"; break; + case 0x04: str="GSM 1900"; break; + case 0x05: str="GSM 450"; break; + case 0x06: str="GSM 480"; break; + case 0x07: str="GSM 850"; break; + case 0x08: str="GSM 700"; break; + case 0x0f: str="Indicates the presence of a list of Additional access technologies"; break; + default: str="unknown"; + } - /* analyse bits */ - if ( acc_type == 0x04 ) /* GSM 1900 */ - { - switch ( oct>>(32-bits_needed) ) - { - case 0x01: str="1 W (30 dBm)"; break; - case 0x02: str="0,25 W (24 dBm)"; break; - case 0x03: str="2 W (33 dBm)"; break; - default: str="Not specified"; - } - } - else if ( acc_type == 0x03 ) - { - switch ( oct>>(32-bits_needed) ) - { - case 0x01: str="1 W (30 dBm)"; break; - case 0x02: str="0,25 W (24 dBm)"; break; - case 0x03: str="4 W (36 dBm)"; break; - default: str="Not specified"; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Access Technology Type: (%u) %s",acc_type,str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + + /* + * RF Power + */ + bits_needed = 3; + GET_DATA; + + /* analyse bits */ + if ( acc_type == 0x04 ) /* GSM 1900 */ + { + switch ( oct>>(32-bits_needed) ) + { + case 0x01: str="1 W (30 dBm)"; break; + case 0x02: str="0,25 W (24 dBm)"; break; + case 0x03: str="2 W (33 dBm)"; break; + default: str="Not specified"; + } } - } - else if ( acc_type <= 0x08 ) - { - switch ( oct>>(32-bits_needed) ) + else if ( acc_type == 0x03 ) { - case 0x02: str="8 W (39 dBm)"; break; - case 0x03: str="5 W (37 dBm)"; break; - case 0x04: str="2 W (33 dBm)"; break; - case 0x05: str="0,8 W (29 dBm)"; break; - default: str="Not specified"; - } - } - else - str="Not specified??"; + switch ( oct>>(32-bits_needed) ) + { + case 0x01: str="1 W (30 dBm)"; break; + case 0x02: str="0,25 W (24 dBm)"; break; + case 0x03: str="4 W (36 dBm)"; break; + default: str="Not specified"; + } + } + else if ( acc_type <= 0x08 ) + { + switch ( oct>>(32-bits_needed) ) + { + case 0x02: str="8 W (39 dBm)"; break; + case 0x03: str="5 W (37 dBm)"; break; + case 0x04: str="2 W (33 dBm)"; break; + case 0x05: str="0,8 W (29 dBm)"; break; + default: str="Not specified"; + } + } + else + str="Not specified??"; - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "RF Power Capability, GMSK Power Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "RF Power Capability, GMSK Power Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; - /* - * 8PSK Power Class - */ - bits_needed = 2; - GET_DATA; + /* + * 8PSK Power Class + */ + bits_needed = 2; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="8PSK modulation not supported for uplink"; break; - case 0x01: str="Power class E1"; break; - case 0x02: str="Power class E2"; break; - case 0x03: str="Power class E3"; break; - default: str="This should not happen"; - } + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="8PSK modulation not supported for uplink"; break; + case 0x01: str="Power class E1"; break; + case 0x02: str="Power class E2"; break; + case 0x03: str="Power class E3"; break; + default: str="This should not happen"; + } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "8PSK Power Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "8PSK Power Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; - } while (!finished); - - /* goto next one */ - continue; - } + } while (!finished); + + /* goto next one */ + continue; + } /* * RF Power */ bits_needed = 3; - GET_DATA; + GET_DATA; - /* analyse bits */ - if ( acc_type == 0x04 ) /* GSM 1900 */ - { + /* analyse bits */ + if ( acc_type == 0x04 ) /* GSM 1900 */ + { switch ( oct>>(32-bits_needed) ) - { + { case 0x01: str="1 W (30 dBm)"; break; case 0x02: str="0,25 W (24 dBm)"; break; - case 0x03: str="2 W (33 dBm)"; break; + case 0x03: str="2 W (33 dBm)"; break; default: str="Not specified"; } } else if ( acc_type == 0x03 ) { switch ( oct>>(32-bits_needed) ) - { + { case 0x01: str="1 W (30 dBm)"; break; case 0x02: str="0,25 W (24 dBm)"; break; case 0x03: str="4 W (36 dBm)"; break; default: str="Not specified"; } } - else if ( acc_type <= 0x08 ) + else if ( acc_type <= 0x08 ) { switch ( oct>>(32-bits_needed) ) { @@ -1406,8 +1391,8 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l str="Not specified??"; proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "RF Power Capability, GMSK Power Class: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "RF Power Capability, GMSK Power Class: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -1416,72 +1401,72 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * A5 Bits? */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "A5 Bits: (%u) same values apply for parameters as in the immediately preceding Access capabilities field within this IE",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "A5 Bits: (%u) same values apply for parameters as in the immediately preceding Access capabilities field within this IE",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { int i; - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "A5 Bits: (%u) A5 bits follows",oct>>(32-bits_needed)); + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "A5 Bits: (%u) A5 bits follows",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; for (i=1; i<= 7 ; i++ ) { - /* - * A5 Bits decoding - */ - bits_needed = 1; - GET_DATA; - - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="encryption algorithm not available"; break; - case 0x01: str="encryption algorithm available"; break; - default: str="This should not happen"; - } + /* + * A5 Bits decoding + */ + bits_needed = 1; + GET_DATA; - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "A5/%d: (%u) %s",i,oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - } - } + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="encryption algorithm not available"; break; + case 0x01: str="encryption algorithm available"; break; + default: str="This should not happen"; + } + + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "A5/%d: (%u) %s",i,oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + } + } /* * ES IND */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="controlled early Classmark Sending option is not implemented"; break; - case 0x01: str="controlled early Classmark Sending option is implemented"; break; - default: str="This should not happen"; + case 0x00: str="controlled early Classmark Sending option is not implemented"; break; + case 0x01: str="controlled early Classmark Sending option is implemented"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Controlled early Classmark Sending: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Controlled early Classmark Sending: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -1490,19 +1475,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * PS */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="PS capability not present"; break; - case 0x01: str="PS capability present"; break; - default: str="This should not happen"; + case 0x00: str="PS capability not present"; break; + case 0x01: str="PS capability present"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Pseudo Synchronisation: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Pseudo Synchronisation: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -1511,19 +1496,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * VGCS */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="no VGCS capability or no notifications wanted"; break; - case 0x01: str="VGCS capability and notifications wanted"; break; - default: str="This should not happen"; + case 0x00: str="no VGCS capability or no notifications wanted"; break; + case 0x01: str="VGCS capability and notifications wanted"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Voice Group Call Service: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Voice Group Call Service: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -1532,19 +1517,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * VBS */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="no VBS capability or no notifications wanted"; break; - case 0x01: str="VBS capability and notifications wanted"; break; - default: str="This should not happen"; + case 0x00: str="no VBS capability or no notifications wanted"; break; + case 0x01: str="VBS capability and notifications wanted"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Voice Broadcast Service: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Voice Broadcast Service: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -1553,367 +1538,300 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * Multislot capability? */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Multislot capability: (%u) same values apply for parameters as in the immediately preceding Access capabilities field within this IE",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Multislot capability: (%u) same values apply for parameters as in the immediately preceding Access capabilities field within this IE",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { - proto_tree_add_text(tf_tree, + proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, "Multislot capability: (%u) Multislot capability struct available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* + /* * HSCSD multislot class? - */ - bits_needed = 1; - GET_DATA; + */ + bits_needed = 1; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "HSCSD multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "HSCSD multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } else - { - curr_bits_length -= bits_needed; + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * HSCSD multislot class + /* + * HSCSD multislot class */ - bits_needed = 5; - GET_DATA; + bits_needed = 5; + GET_DATA; - /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "HSCSD multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); - curr_bits_length -= bits_needed; + /* analyse bits */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "HSCSD multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } - /* + /* * GPRS multislot class? - */ - bits_needed = 1; - GET_DATA; + */ + bits_needed = 1; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GPRS multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GPRS multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } else - { - curr_bits_length -= bits_needed; + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * GPRS multislot class + /* + * GPRS multislot class */ - bits_needed = 5; - GET_DATA; + bits_needed = 5; + GET_DATA; - /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GPRS multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); - curr_bits_length -= bits_needed; + /* analyse bits */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GPRS multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * GPRS Extended Dynamic Allocation Capability + /* + * GPRS Extended Dynamic Allocation Capability */ - bits_needed = 1; - GET_DATA; + bits_needed = 1; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="Extended Dynamic Allocation Capability for GPRS is not implemented"; break; - case 0x01: str="Extended Dynamic Allocation Capability for GPRS is implemented"; break; - default: str="This should not happen"; - } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GPRS Extended Dynamic Allocation Capability: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="Extended Dynamic Allocation Capability for GPRS is not implemented"; break; + case 0x01: str="Extended Dynamic Allocation Capability for GPRS is implemented"; break; + default: str="This should not happen"; + } + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GPRS Extended Dynamic Allocation Capability: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } - /* - * SMS/SM values - */ - bits_needed = 1; - GET_DATA; + /* + * SMS/SM values + */ + bits_needed = 1; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "SMS/SM values: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "SMS/SM values: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } else - { - curr_bits_length -= bits_needed; + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * Switch-Measure-Switch value + /* + * Switch-Measure-Switch value */ - bits_needed = 4; - GET_DATA; + bits_needed = 4; + GET_DATA; - /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Switch-Measure-Switch value: (%u) %d/4 timeslot (~%d microseconds)", + /* analyse bits */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Switch-Measure-Switch value: (%u) %d/4 timeslot (~%d microseconds)", oct>>(32-bits_needed),oct>>(32-bits_needed),(oct>>(32-bits_needed))*144); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * Switch-Measure value + /* + * Switch-Measure value */ - bits_needed = 4; - GET_DATA; + bits_needed = 4; + GET_DATA; - /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Switch-Measure value: (%u) %d/4 timeslot (~%d microseconds)", + /* analyse bits */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Switch-Measure value: (%u) %d/4 timeslot (~%d microseconds)", oct>>(32-bits_needed),oct>>(32-bits_needed),(oct>>(32-bits_needed))*144); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } - /* + /* * ECSD multislot class? - */ - bits_needed = 1; - GET_DATA; - - /* analyse bits */ - if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "ECSD multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - } - else - { - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - - /* - * ECSD multislot class - */ - bits_needed = 5; + */ + bits_needed = 1; GET_DATA; /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "ECSD multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - } - - /* - * EGPRS multislot class? - */ - bits_needed = 1; - GET_DATA; - - /* analyse bits */ if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "EGPRS multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "ECSD multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } else - { - curr_bits_length -= bits_needed; + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * EGPRS multislot class + /* + * ECSD multislot class */ - bits_needed = 5; - GET_DATA; + bits_needed = 5; + GET_DATA; - /* analyse bits */ - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "EGPRS multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); - curr_bits_length -= bits_needed; + /* analyse bits */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "ECSD multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; + } - /* - * EGPRS Extended Dynamic Allocation Capability - */ - bits_needed = 1; + /* + * EGPRS multislot class? + */ + bits_needed = 1; GET_DATA; /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="Extended Dynamic Allocation Capability for EGPRS is not implemented"; break; - case 0x01: str="Extended Dynamic Allocation Capability for EGPRS is implemented"; break; - default: str="This should not happen"; - } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "EGPRS Extended Dynamic Allocation Capability: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - } - - /* - * DTM GPRS Multi Slot Class ? - */ - bits_needed = 1; - GET_DATA; - - /* analyse bits */ if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "DTM GPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "EGPRS multislot class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } else - { - curr_bits_length -= bits_needed; + { + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * DTM GPRS Multi Slot Class + /* + * EGPRS multislot class */ - bits_needed = 2; - GET_DATA; - - /* analyse bits */ - dtm_gprs_mslot = oct>>(32-bits_needed); + bits_needed = 5; + GET_DATA; - switch ( oct>>(32-bits_needed) ) - { - case 0: str="Unused. If received, the network shall interpret this as Multislot class 5"; break; - case 1: str="Multislot class 5 supported"; break; - case 2: str="Multislot class 9 supported"; break; - case 3: str="Multislot class 11 supported"; break; - default: str="This should not happen"; - } - - proto_tree_add_text(tf_tree, + /* analyse bits */ + proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "DTM GPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + "EGPRS multislot class: (%u) %s",oct>>(32-bits_needed),multi_slot_str[oct>>(32-bits_needed)]); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* - * Single Slot DTM + /* + * EGPRS Extended Dynamic Allocation Capability */ - bits_needed = 1; - GET_DATA; + bits_needed = 1; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="Single Slot DTM not supported"; break; - case 0x01: str="Single Slot DTM supported"; break; - default: str="This should not happen"; - } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Single Slot DTM: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="Extended Dynamic Allocation Capability for EGPRS is not implemented"; break; + case 0x01: str="Extended Dynamic Allocation Capability for EGPRS is implemented"; break; + default: str="This should not happen"; + } + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "EGPRS Extended Dynamic Allocation Capability: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; + } /* - * DTM EGPRS Multi Slot Class ? + * DTM GPRS Multi Slot Class ? */ - bits_needed = 1; + bits_needed = 1; GET_DATA; /* analyse bits */ - dtm_egprs_mslot = oct>>(32-bits_needed); - - if ((oct>>(32-bits_needed))==0) - { - proto_tree_add_text(tf_tree, + if ((oct>>(32-bits_needed))==0) + { + proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "DTM EGPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; - oct <<= bits_needed; + "DTM GPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + } + else + { + curr_bits_length -= bits_needed; + oct <<= bits_needed; bits_in_oct -= bits_needed; - } - else - { - curr_bits_length -= bits_needed; - oct <<= bits_needed; - bits_in_oct -= bits_needed; - /* - * DTM EGPRS Multi Slot Class - */ - bits_needed = 2; + /* + * DTM GPRS Multi Slot Class + */ + bits_needed = 2; GET_DATA; /* analyse bits */ + dtm_gprs_mslot = oct>>(32-bits_needed); + switch ( oct>>(32-bits_needed) ) { case 0: str="Unused. If received, the network shall interpret this as Multislot class 5"; break; @@ -1923,79 +1841,146 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l default: str="This should not happen"; } - proto_tree_add_text(tf_tree, + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "DTM GPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + + /* + * Single Slot DTM + */ + bits_needed = 1; + GET_DATA; + + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="Single Slot DTM not supported"; break; + case 0x01: str="Single Slot DTM supported"; break; + default: str="This should not happen"; + } + proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "DTM EGPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + "Single Slot DTM: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + + /* + * DTM EGPRS Multi Slot Class ? + */ + bits_needed = 1; + GET_DATA; + + /* analyse bits */ + dtm_egprs_mslot = oct>>(32-bits_needed); + + if ((oct>>(32-bits_needed))==0) + { + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "DTM EGPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + } + else + { + curr_bits_length -= bits_needed; + oct <<= bits_needed; + bits_in_oct -= bits_needed; + + /* + * DTM EGPRS Multi Slot Class + */ + bits_needed = 2; + GET_DATA; + + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0: str="Unused. If received, the network shall interpret this as Multislot class 5"; break; + case 1: str="Multislot class 5 supported"; break; + case 2: str="Multislot class 9 supported"; break; + case 3: str="Multislot class 11 supported"; break; + default: str="This should not happen"; + } + + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "DTM EGPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; + } } } - } /* * 8PSK Power Capability? */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "8PSK Power Capability: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "8PSK Power Capability: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* + /* * 8PSK Power Capability - */ + */ bits_needed = 2; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="Reserved"; break; - case 0x01: str="Power class E1"; break; - case 0x02: str="Power class E2"; break; - case 0x03: str="Power class E3"; break; - default: str="This should not happen"; - } + case 0x00: str="Reserved"; break; + case 0x01: str="Power class E1"; break; + case 0x02: str="Power class E2"; break; + case 0x03: str="Power class E3"; break; + default: str="This should not happen"; + } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "8PSK Power Capability: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "8PSK Power Capability: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - } + } /* * COMPACT Interference Measurement Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="COMPACT Interference Measurement Capability is not implemented"; break; - case 0x01: str="COMPACT Interference Measurement Capability is implemented"; break; - default: str="This should not happen"; + case 0x00: str="COMPACT Interference Measurement Capability is not implemented"; break; + case 0x01: str="COMPACT Interference Measurement Capability is implemented"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "COMPACT Interference Measurement Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "COMPACT Interference Measurement Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2004,19 +1989,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * Revision Level Indicator */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="The ME is Release 98 or older"; break; - case 0x01: str="The ME is Release 99 onwards"; break; - default: str="This should not happen"; + case 0x00: str="The ME is Release 98 or older"; break; + case 0x01: str="The ME is Release 99 onwards"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Revision Level Indicator: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Revision Level Indicator: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2025,19 +2010,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * UMTS FDD Radio Access Technology Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="UMTS FDD not supported"; break; - case 0x01: str="UMTS FDD supported"; break; - default: str="This should not happen"; + case 0x00: str="UMTS FDD not supported"; break; + case 0x01: str="UMTS FDD supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "UMTS FDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "UMTS FDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2046,19 +2031,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * UMTS 3.84 Mcps TDD Radio Access Technology Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="UMTS 3.84 Mcps TDD not supported"; break; - case 0x01: str="UMTS 3.84 Mcps TDD supported"; break; - default: str="This should not happen"; + case 0x00: str="UMTS 3.84 Mcps TDD not supported"; break; + case 0x01: str="UMTS 3.84 Mcps TDD supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "UMTS 3.84 Mcps TDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "UMTS 3.84 Mcps TDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2067,19 +2052,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * CDMA 2000 Radio Access Technology Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="CDMA 2000 not supported"; break; - case 0x01: str="CDMA 2000 supported"; break; - default: str="This should not happen"; + case 0x00: str="CDMA 2000 not supported"; break; + case 0x01: str="CDMA 2000 supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "CDMA 2000 Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "CDMA 2000 Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2088,19 +2073,19 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * UMTS 1.28 Mcps TDD Radio Access Technology Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="UMTS 1.28 Mcps TDD not supported"; break; - case 0x01: str="UMTS 1.28 Mcps TDD supported"; break; - default: str="This should not happen"; + case 0x00: str="UMTS 1.28 Mcps TDD not supported"; break; + case 0x01: str="UMTS 1.28 Mcps TDD supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "UMTS 1.28 Mcps TDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "UMTS 1.28 Mcps TDD Radio Access Technology Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2109,14 +2094,14 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * GERAN Feature Package 1 */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="GERAN feature package 1 not supported"; break; - case 0x01: str="GERAN feature package 1 supported"; break; - default: str="This should not happen"; + case 0x00: str="GERAN feature package 1 not supported"; break; + case 0x01: str="GERAN feature package 1 supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, @@ -2130,32 +2115,32 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * Extended DTM (E)GPRS Multi Slot Class */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Extended DTM (E)GPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Extended DTM (E)GPRS Multi Slot Class: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* + /* * Extended DTM GPRS Multi Slot Class - */ + */ bits_needed = 2; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( (oct>>(32-bits_needed))|(dtm_gprs_mslot<<4) ) + /* analyse bits */ + switch ( (oct>>(32-bits_needed))|(dtm_gprs_mslot<<4) ) { case 0x00: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; case 0x01: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; @@ -2174,29 +2159,29 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l case 0x32: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; case 0x33: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; default: str="This should not happen"; - } + } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Extended DTM GPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Extended DTM GPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - if ( dtm_egprs_mslot <= 3 ) - { - /* + if ( dtm_egprs_mslot <= 3 ) + { + /* * Extended DTM EGPRS Multi Slot Class - */ - bits_needed = 2; - GET_DATA; + */ + bits_needed = 2; + GET_DATA; - /* analyse bits */ - switch ( (oct>>(32-bits_needed))|(dtm_egprs_mslot<<4) ) + /* analyse bits */ + switch ( (oct>>(32-bits_needed))|(dtm_egprs_mslot<<4) ) { case 0x00: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; case 0x01: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; - case 0x02: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; + case 0x02: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; case 0x03: str="Unused. If received, it shall be interpreted as Multislot class 5 supported"; break; case 0x10: str="Multislot class 5 supported"; break; case 0x11: str="Multislot class 6 supported"; break; @@ -2208,37 +2193,37 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l case 0x23: str="Unused. If received, it shall be interpreted as Multislot class 9 supported"; break; case 0x30: str="Multislot class 11 supported"; break; case 0x31: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; - case 0x32: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; + case 0x32: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; case 0x33: str="Unused. If received, it shall be interpreted as Multislot class 11 supported"; break; default: str="This should not happen"; - } + } - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Extended DTM EGPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Extended DTM EGPRS Multi Slot Class: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; + } } - } /* * Modulation based multislot class support */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="Modulation based multislot class not supported"; break; - case 0x01: str="Modulation based multislot class supported"; break; - default: str="This should not happen"; + case 0x00: str="Modulation based multislot class not supported"; break; + case 0x01: str="Modulation based multislot class supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "Modulation based multislot class support: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "Modulation based multislot class support: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2247,57 +2232,56 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * High Multislot Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "High Multislot Capability: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "High Multislot Capability: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* + /* * High Multislot Capability - */ + */ bits_needed = 2; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, "High Multislot Capability: 0x%02x (%u) - This field effect all other multislot fields. To understand the value please read TS 24.008 5.6.0 Release 5 Chap 10.5.5.12 Page 406",oct>>(32-bits_needed),oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - - } + } /* * GERAN Iu Mode Capability */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) { - case 0x00: str="GERAN Iu mode not supported"; break; - case 0x01: str="GERAN Iu mode supported"; break; - default: str="This should not happen"; + case 0x00: str="GERAN Iu mode not supported"; break; + case 0x01: str="GERAN Iu mode supported"; break; + default: str="This should not happen"; } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GERAN Iu Mode Capability: (%u) %s",oct>>(32-bits_needed),str); + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GERAN Iu Mode Capability: (%u) %s",oct>>(32-bits_needed),str); curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; @@ -2306,86 +2290,86 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * GMSK/8-PSK Multislot Power Profile */ bits_needed = 1; - GET_DATA; + GET_DATA; - /* analyse bits */ + /* analyse bits */ if ((oct>>(32-bits_needed))==0) { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GMSK/8-PSK Multislot Power Profile: (%u) Bits are not available",oct>>(32-bits_needed)); - curr_bits_length -= bits_needed; + proto_tree_add_text(tf_tree, + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GMSK/8-PSK Multislot Power Profile: (%u) Bits are not available",oct>>(32-bits_needed)); + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; } else { - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; + bits_in_oct -= bits_needed; - /* + /* * GMSK Multislot Power Profile - */ + */ bits_needed = 2; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="GMSK_MULTISLOT_POWER_PROFILE 0"; break; - case 0x01: str="GMSK_MULTISLOT_POWER_PROFILE 1"; break; - case 0x02: str="GMSK_MULTISLOT_POWER_PROFILE 2"; break; - case 0x03: str="GMSK_MULTISLOT_POWER_PROFILE 3"; break; - default: str="This should not happen"; - } + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="GMSK_MULTISLOT_POWER_PROFILE 0"; break; + case 0x01: str="GMSK_MULTISLOT_POWER_PROFILE 1"; break; + case 0x02: str="GMSK_MULTISLOT_POWER_PROFILE 2"; break; + case 0x03: str="GMSK_MULTISLOT_POWER_PROFILE 3"; break; + default: str="This should not happen"; + } proto_tree_add_text(tf_tree, - tvb, curr_offset-1-add_ocetets, 1+add_ocetets, - "GMSK Multislot Power Profile: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + tvb, curr_offset-1-add_ocetets, 1+add_ocetets, + "GMSK Multislot Power Profile: (%u) %s",oct>>(32-bits_needed),str); + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - /* + /* * 8-PSK Multislot Power Profile - */ + */ bits_needed = 2; - GET_DATA; + GET_DATA; - /* analyse bits */ - switch ( oct>>(32-bits_needed) ) - { - case 0x00: str="8-PSK_MULTISLOT_POWER_PROFILE 0"; break; - case 0x01: str="8-PSK_MULTISLOT_POWER_PROFILE 1"; break; - case 0x02: str="8-PSK_MULTISLOT_POWER_PROFILE 2"; break; - case 0x03: str="8-PSK_MULTISLOT_POWER_PROFILE 3"; break; - default: str="This should not happen"; - } + /* analyse bits */ + switch ( oct>>(32-bits_needed) ) + { + case 0x00: str="8-PSK_MULTISLOT_POWER_PROFILE 0"; break; + case 0x01: str="8-PSK_MULTISLOT_POWER_PROFILE 1"; break; + case 0x02: str="8-PSK_MULTISLOT_POWER_PROFILE 2"; break; + case 0x03: str="8-PSK_MULTISLOT_POWER_PROFILE 3"; break; + default: str="This should not happen"; + } proto_tree_add_text(tf_tree, tvb, curr_offset-1-add_ocetets, 1+add_ocetets, "8-PSK Multislot Power Profile: (%u) %s",oct>>(32-bits_needed),str); - curr_bits_length -= bits_needed; + curr_bits_length -= bits_needed; oct <<= bits_needed; bits_in_oct -= bits_needed; - } + } - /* - * we are too long ... so jump over it - */ - while ( curr_bits_length > 0 ) - { - if ( curr_bits_length > 8 ) - bits_needed = 8; - else - bits_needed = curr_bits_length; - GET_DATA; - curr_bits_length -= bits_needed; + /* + * we are too long ... so jump over it + */ + while ( curr_bits_length > 0 ) + { + if ( curr_bits_length > 8 ) + bits_needed = 8; + else + bits_needed = curr_bits_length; + GET_DATA; + curr_bits_length -= bits_needed; oct <<= bits_needed; - bits_in_oct -= bits_needed; - } + bits_in_oct -= bits_needed; + } } while ( 1 ); @@ -2400,13 +2384,12 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * [7] 10.5.5.14 */ static guint8 -de_gmm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_cause(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2463,14 +2446,14 @@ de_gmm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * case 0x64: str="Conditional IE error"; break; case 0x65: str="Message not compatible with the protocol state"; break; case 0x6f: str="Protocol error, unspecified"; break; - default: str="Protocol error, unspecified"; + default: str="Protocol error, unspecified"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "gmm Cause: (%u) %s", - oct, - str); + tvb, curr_offset, 1, + "gmm Cause: (%u) %s", + oct, + str); curr_offset++; @@ -2483,18 +2466,16 @@ de_gmm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * * [7] 10.5.5.15 Routing area identification */ guint8 -de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *subtree; - proto_item *item; - + proto_tree *subtree; + proto_item *item; guint32 mcc; guint32 mnc; guint32 lac; guint32 rac; guint32 curr_offset; - len = len; curr_offset = offset; mcc = (tvb_get_guint8(tvb, curr_offset) & 0x0f) <<8; @@ -2529,13 +2510,12 @@ de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [7] 10.5.5.17 */ static guint8 -de_gmm_update_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_update_res(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2551,10 +2531,10 @@ de_gmm_update_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Update Result: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Update Result: (%u) %s", + oct&7, + str); curr_offset++; @@ -2567,7 +2547,7 @@ de_gmm_update_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.18 */ static guint8 -de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint8 oct_ciph; @@ -2575,9 +2555,8 @@ de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g const gchar *str_follow; const gchar *str_update; proto_item *tf = NULL; - proto_tree *tf_tree = NULL; + proto_tree *tf_tree = NULL; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2606,22 +2585,22 @@ de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g tf_tree = proto_item_add_subtree(tf, ett_gmm_update_type ); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Type: (%u) %s", - oct&7, - str_update); + tvb, curr_offset, 1, + "Type: (%u) %s", + oct&7, + str_update); proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "Follow: (%u) %s", - (oct>>3)&1, - str_follow); + tvb, curr_offset, 1, + "Follow: (%u) %s", + (oct>>3)&1, + str_follow); /* The ciphering key sequence number is added here */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Ciphering key sequence number: 0x%02x (%u)", - oct_ciph, - oct_ciph); + tvb, curr_offset, 1, + "Ciphering key sequence number: 0x%02x (%u)", + oct_ciph, + oct_ciph); curr_offset++; @@ -2634,21 +2613,20 @@ de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [7] 10.5.5.19 */ static guint8 -de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "A&C reference number: 0x%02x (%u)", - oct&0xf, - oct&0xf); + tvb, curr_offset, 1, + "A&C reference number: 0x%02x (%u)", + oct&0xf, + oct&0xf); curr_offset++; @@ -2661,12 +2639,11 @@ de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [7] 10.5.5.19 */ static guint8 -de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2675,10 +2652,10 @@ de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g oct >>= 4; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "A&C reference number: 0x%02x (%u)", - oct, - oct); + tvb, curr_offset, 1, + "A&C reference number: 0x%02x (%u)", + oct, + oct); curr_offset++; @@ -2691,14 +2668,13 @@ de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [8] 10.5.5.20 */ static guint8 -de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint8 oct_ciph; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2718,16 +2694,16 @@ de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, /* The ciphering key sequence number is added here */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Ciphering key sequence number: 0x%02x (%u)", - oct_ciph, - oct_ciph); + tvb, curr_offset, 1, + "Ciphering key sequence number: 0x%02x (%u)", + oct_ciph, + oct_ciph); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Service Type: (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Service Type: (%u) %s", + oct&7, + str); curr_offset++; @@ -2740,11 +2716,10 @@ de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [7] 10.5.5.21 */ static guint8 -de_gmm_cell_notfi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_cell_notfi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree, @@ -2760,7 +2735,7 @@ de_gmm_cell_notfi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.22 */ static guint8 -de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; @@ -2770,7 +2745,6 @@ de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc gchar str_gps[2][40]={ "MS assisted GPS not supported", "MS assisted GPS supported" }; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2778,35 +2752,35 @@ de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc oct <<=3; /* move away the spare bits */ proto_tree_add_text(tree, - tvb, curr_offset, 1, - "OTD-A: (%u) %s", - oct>>7, - str_otd[oct>>7]); - oct <<=1; + tvb, curr_offset, 1, + "OTD-A: (%u) %s", + oct>>7, + str_otd[oct>>7]); + oct <<=1; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "OTD-B: (%u) %s", - oct>>7, - str_otd[oct>>7]); - oct <<=1; + tvb, curr_offset, 1, + "OTD-B: (%u) %s", + oct>>7, + str_otd[oct>>7]); + oct <<=1; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPS-A: (%u) %s", - oct>>7, - str_gps[oct>>7]); - oct <<=1; + tvb, curr_offset, 1, + "GPS-A: (%u) %s", + oct>>7, + str_gps[oct>>7]); + oct <<=1; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPS-B: (%u) %s", - oct>>7, - str_gps[oct>>7]); - oct <<=1; + tvb, curr_offset, 1, + "GPS-B: (%u) %s", + oct>>7, + str_gps[oct>>7]); + oct <<=1; proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPS-C: (%u) %s", - oct>>7, - str_gps[oct>>7]); + tvb, curr_offset, 1, + "GPS-C: (%u) %s", + oct>>7, + str_gps[oct>>7]); curr_offset++; @@ -2819,13 +2793,12 @@ de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [7] 10.5.5.23 */ static guint8 -de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_net_feat_supp(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2837,10 +2810,10 @@ de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Network Feature Support: (%u) %s", - (oct>>3)&1, - str); + tvb, curr_offset, 1, + "Network Feature Support: (%u) %s", + (oct>>3)&1, + str); curr_offset++; @@ -2851,11 +2824,10 @@ de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, /* [7] 10.5.24 Inter RAT information container */ static guint8 -de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; /* The value part of the Inter RAT information container information element is the INTER RAT HANDOVER INFO as @@ -2870,17 +2842,16 @@ defined in 3GPP TS 25.331 [23c]. If this field includes padding bits, they are d * [7] 10.5.7.1 */ static guint8 -de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint16 pdp_nr; guint32 curr_offset; proto_item *tf = NULL; - proto_tree *tf_tree = NULL; + proto_tree *tf_tree = NULL; gchar str[2][20]={ "PDP-INACTIVE", "PDP-ACTIVE" }; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2895,17 +2866,17 @@ de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g for ( pdp_nr=0;pdp_nr<16; pdp_nr++ ) { - if ( pdp_nr == 8 ) - { - curr_offset++; - oct = tvb_get_guint8(tvb, curr_offset); - } - proto_tree_add_text(tf_tree, - tvb, curr_offset, 1, - "NSAPI %d: (%u) %s",pdp_nr, - oct&1, - str[oct&1]); - oct>>=1; + if ( pdp_nr == 8 ) + { + curr_offset++; + oct = tvb_get_guint8(tvb, curr_offset); + } + proto_tree_add_text(tf_tree, + tvb, curr_offset, 1, + "NSAPI %d: (%u) %s",pdp_nr, + oct&1, + str[oct&1]); + oct>>=1; } curr_offset++; @@ -2919,13 +2890,12 @@ de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [7] 10.5.7.2 */ static guint8 -de_gc_radio_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gc_radio_prio(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2940,10 +2910,10 @@ de_gc_radio_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Radio Priority (PDP or SMS): (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Radio Priority (PDP or SMS): (%u) %s", + oct&7, + str); curr_offset++; @@ -2954,14 +2924,13 @@ de_gc_radio_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [7] 10.5.7.3 */ static guint8 -de_gc_timer(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gc_timer(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint16 val; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -2974,18 +2943,18 @@ de_gc_timer(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 1: str="min"; break; case 2: str="min"; val*=6; break; case 7: - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPRS Timer: timer is deactivated"); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "GPRS Timer: timer is deactivated"); default: str="min"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPRS Timer: (%u) %u %s", - oct, val, - str); + tvb, curr_offset, 1, + "GPRS Timer: (%u) %u %s", + oct, val, + str); curr_offset++; @@ -2998,14 +2967,13 @@ de_gc_timer(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a * [7] 10.5.7.4 */ static guint8 -de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) +de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_) { guint8 oct; guint16 val; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -3018,36 +2986,34 @@ de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * case 1: str="min"; break; case 2: str="min"; val*=6; break; case 7: - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPRS Timer: timer is deactivated"); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "GPRS Timer: timer is deactivated"); default: str="min"; } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "GPRS Timer: (%u) %u %s %s", - oct, val, - str, add_string ? add_string : ""); + tvb, curr_offset, 1, + "GPRS Timer: (%u) %u %s %s", + oct, val, + str, add_string ? add_string : ""); curr_offset++; return(curr_offset - offset); } - /* * [7] 10.5.7.5 */ static guint8 -de_gc_radio_prio2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gc_radio_prio2(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; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -3065,10 +3031,10 @@ de_gc_radio_prio2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Radio Priority (TOM8): (%u) %s", - oct&7, - str); + tvb, curr_offset, 1, + "Radio Priority (TOM8): (%u) %s", + oct&7, + str); curr_offset++; @@ -3079,11 +3045,10 @@ de_gc_radio_prio2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [8] 10.5.7.6 MBMS context status */ static guint8 -de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len, "MBMS context status - Not decoded"); @@ -3099,13 +3064,12 @@ guint8 de_sm_apn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) { guint32 curr_offset; - guint curr_len; + guint curr_len; const guint8 *cptr; - guint8 str[MAX_APN_LENGTH+1]; + guint8 str[MAX_APN_LENGTH+1]; cptr = tvb_get_ptr(tvb, offset, len); - curr_offset = offset; /* init buffer and copy it */ @@ -3135,20 +3099,19 @@ de_sm_apn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add * [7] 10.5.6.2 */ static guint8 -de_sm_nsapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) +de_sm_nsapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "NSAPI: 0x%02x (%u) %s", - oct&0x0f, oct&0x0f,add_string ? add_string : ""); + tvb, curr_offset, 1, + "NSAPI: 0x%02x (%u) %s", + oct&0x0f, oct&0x0f,add_string ? add_string : ""); curr_offset++; @@ -3180,81 +3143,83 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add { guchar e_len; guint16 prot; - tvbuff_t *l3_tvb; - dissector_handle_t handle = NULL; - static packet_info p_info; - - prot = tvb_get_guint8(tvb, curr_offset); - prot <<= 8; - prot |= tvb_get_guint8(tvb, curr_offset+1); - e_len = tvb_get_guint8(tvb, curr_offset+2); + tvbuff_t *l3_tvb; + dissector_handle_t handle = NULL; + static packet_info p_info; + + prot = tvb_get_guint8(tvb, curr_offset); + prot <<= 8; + prot |= tvb_get_guint8(tvb, curr_offset+1); + e_len = tvb_get_guint8(tvb, curr_offset+2); curr_len-=3; curr_offset+=3; switch ( prot ) { case 0x0001: - { - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) P-CSCF Address" , prot ); - proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - - tvb_get_ipv6(tvb, curr_offset, &ipv6_addr); - proto_tree_add_text(tree, - tvb, curr_offset, 16, - "IPv6: %s", ip6_to_str(&ipv6_addr)); - break; - } + { + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) P-CSCF Address" , prot ); + proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); + + tvb_get_ipv6(tvb, curr_offset, &ipv6_addr); + proto_tree_add_text(tree, + tvb, curr_offset, 16, + "IPv6: %s", ip6_to_str(&ipv6_addr)); + break; + } case 0x0002: - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) IM CN Subsystem Signaling Flag" , prot ); - proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - break; + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) IM CN Subsystem Signaling Flag" , prot ); + proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); + break; case 0x0003: { - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) DNS Server Address" , prot ); - proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - - tvb_get_ipv6(tvb, curr_offset, &ipv6_addr); - proto_tree_add_text(tree, - tvb, curr_offset, 16, - "IPv6: %s", ip6_to_str(&ipv6_addr)); - break; - } - case 0x0004: - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) Policy Control rejection code" , prot ); - proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_text(tree,tvb, curr_offset, 1, "Reject Code: 0x%02x (%u)", e_len , e_len); - break; - default: - handle = dissector_get_port_handle ( gprs_sm_pco_subdissector_table , prot ); - if ( handle != NULL ) - { - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Protocol: (%u) %s" , - prot , val_to_str(prot, ppp_vals, "Unknown")); + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) DNS Server Address" , prot ); proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - /* - * dissect the embedded message - */ - l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len); - call_dissector(handle, l3_tvb , &p_info , tree ); + + tvb_get_ipv6(tvb, curr_offset, &ipv6_addr); + proto_tree_add_text(tree, + tvb, curr_offset, 16, + "IPv6: %s", ip6_to_str(&ipv6_addr)); + break; } - else - { - proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Protocol/Parameter: (%u) unknwown" , prot ); + case 0x0004: + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Parameter: (%u) Policy Control rejection code" , prot ); proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); - /* - * dissect the embedded DATA message - */ - l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len); - call_dissector(data_handle, l3_tvb, &p_info , tree); + oct = tvb_get_guint8(tvb, curr_offset); + proto_tree_add_text(tree,tvb, curr_offset, 1, "Reject Code: 0x%02x (%u)", e_len , e_len); + break; + default: + { + handle = dissector_get_port_handle ( gprs_sm_pco_subdissector_table , prot ); + if ( handle != NULL ) + { + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Protocol: (%u) %s" , + prot , val_to_str(prot, ppp_vals, "Unknown")); + proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); + /* + * dissect the embedded message + */ + l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len); + call_dissector(handle, l3_tvb , &p_info , tree ); + } + else + { + proto_tree_add_text(tree,tvb, curr_offset-3, 2, "Protocol/Parameter: (%u) unknwown" , prot ); + proto_tree_add_text(tree,tvb, curr_offset-1, 1, "Length: 0x%02x (%u)", e_len , e_len); + /* + * dissect the embedded DATA message + */ + l3_tvb = tvb_new_subset(tvb, curr_offset, e_len, e_len); + call_dissector(data_handle, l3_tvb, &p_info , tree); + } } } - curr_len-= e_len; - curr_offset+= e_len; + curr_len-= e_len; + curr_offset+= e_len; } curr_offset+= curr_len; - + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); return(curr_offset - offset); @@ -3269,8 +3234,8 @@ de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar guint32 curr_offset; guint curr_len; const gchar *str; - guchar oct; - guchar oct2; + guchar oct; + guchar oct2; struct e_in6_addr ipv6_addr; curr_len = len; @@ -3294,26 +3259,26 @@ de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar if (( oct&0x0f ) == 0 ) { - switch ( oct2 ) - { + switch ( oct2 ) + { case 0x00: str="Reserved, used in earlier version of this protocol"; break; case 0x01: str="PDP-type PPP"; break; default: str="reserved"; - } + } } else if (( oct&0x0f) == 1 ) { - switch ( oct2 ) - { - case 0x21: str="IPv4 address"; break; + switch ( oct2 ) + { + case 0x21: str="IPv4 address"; break; case 0x57: str="IPv6 address"; break; default: str="IPv4 address"; - } + } } else if ((oct2==0) && (( oct&0x0f) == 0x0f )) - str="Empty"; + str="Empty"; else - str="Not specified"; + str="Not specified"; proto_tree_add_text(tree, tvb, curr_offset+1, 1, @@ -3321,80 +3286,79 @@ de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar if (( len == 2 ) && (( oct2 == 0x21 ) || ( oct2 == 0x57 ))) { - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset+1, 1, "Dynamic addressing"); - - curr_offset+= curr_len; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + curr_offset+= curr_len; - return(curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + + return(curr_offset - offset); } else if ( len == 2 ) { - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset+1, 1, "No PDP address is included"); - - curr_offset+= curr_len; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + curr_offset+= curr_len; - return(curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + + return(curr_offset - offset); } else if ( len < 2 ) { - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset+1, 1, "Length is bogus - should be >= 2"); - - curr_offset+= curr_len; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + curr_offset+= curr_len; - return(curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + + return(curr_offset - offset); } if ((( oct2 == 0x21 ) && ( len != 6 )) || (( oct2 == 0x57 ) && ( len != 18 ))) { - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset+2, len-2, "Can't display address"); } - switch ( oct2 ) { case 0x21: if (len-2 != 4) { proto_tree_add_text(tree, - tvb, curr_offset+2, 0, - "IPv4: length is wrong"); - } else { + tvb, curr_offset+2, 0, + "IPv4: length is wrong"); + } else { proto_tree_add_text(tree, - tvb, curr_offset+2, len-2, - "IPv4: %s", ip_to_str(tvb_get_ptr(tvb, offset+2, 4))); - } - break; + tvb, curr_offset+2, len-2, + "IPv4: %s", ip_to_str(tvb_get_ptr(tvb, offset+2, 4))); + } + break; case 0x57: if (len-2 != 16) { proto_tree_add_text(tree, - tvb, curr_offset+2, 0, - "IPv6: length is wrong"); - } else { - tvb_get_ipv6(tvb, curr_offset+2, &ipv6_addr); + tvb, curr_offset+2, 0, + "IPv6: length is wrong"); + } else { + tvb_get_ipv6(tvb, curr_offset+2, &ipv6_addr); proto_tree_add_text(tree, tvb, curr_offset+2, len-2, - "IPv6: %s", ip6_to_str(&ipv6_addr)); - } - break; + "IPv6: %s", ip6_to_str(&ipv6_addr)); + } + break; } curr_offset+= curr_len; - + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); return(curr_offset - offset); @@ -3497,7 +3461,7 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add { guint32 curr_offset; guint curr_len; - guchar oct, tmp_oct; + guchar oct, tmp_oct; const gchar *str; curr_len = len; @@ -3505,17 +3469,17 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_qos_delay_cls, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_qos_qos_reliability_cls, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_qos_delay_cls, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_qos_qos_reliability_cls, tvb, curr_offset, 1, FALSE); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3559,9 +3523,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3601,9 +3565,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } proto_tree_add_item(tree, hf_gsm_a_qos_traffic_cls, tvb, curr_offset, 1, FALSE); @@ -3615,9 +3579,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3633,22 +3597,22 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x96 )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum SDU size: (%u) %u octets",oct,oct*10); + "Maximum SDU size: (%u) %u octets",oct,oct*10); else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum SDU size: (%u) %s",oct,str); + "Maximum SDU size: (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3661,30 +3625,30 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x3f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for uplink: (%u) %ukbps",oct,oct); + "Maximum bit rate for uplink: (%u) %ukbps",oct,oct); else if (( oct >= 0x40 ) && ( oct <= 0x7f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for uplink: (%u) %ukbps",oct,(oct-0x40)*8+64); /* - was (oct-0x40)*8 */ + "Maximum bit rate for uplink: (%u) %ukbps",oct,(oct-0x40)*8+64); /* - was (oct-0x40)*8 */ else if (( oct >= 0x80 ) && ( oct <= 0xfe )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for uplink: (%u) %ukbps",oct,(oct-0x80)*64+576); /* - was (oct-0x80)*64 */ + "Maximum bit rate for uplink: (%u) %ukbps",oct,(oct-0x80)*64+576); /* - was (oct-0x80)*64 */ else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for uplink: (%u) %s",oct,str); + "Maximum bit rate for uplink: (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3697,30 +3661,30 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x3f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink: (%u) %ukbps",oct,oct); + "Maximum bit rate for downlink: (%u) %ukbps",oct,oct); else if (( oct >= 0x40 ) && ( oct <= 0x7f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as above*/ + "Maximum bit rate for downlink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as above*/ else if (( oct >= 0x80 ) && ( oct <= 0xfe )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as above*/ + "Maximum bit rate for downlink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as above*/ else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink: (%u) %s",oct,str); + "Maximum bit rate for downlink: (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } proto_tree_add_item(tree, hf_gsm_a_qos_ber, tvb, curr_offset, 1, FALSE); @@ -3731,9 +3695,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3748,19 +3712,19 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add tmp_oct = oct>>2; if (( tmp_oct >= 1 ) && ( tmp_oct <= 0x0f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Transfer Delay: (%u) %ums",oct>>2,(oct>>2)*10); else if (( tmp_oct >= 0x10 ) && ( tmp_oct <= 0x1f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Transfer Delay: (%u) %ums",oct>>2,((oct>>2)-0x10)*50+200); else if (( tmp_oct >= 0x20 ) && ( tmp_oct <= 0x3e )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Transfer Delay: (%u) %ums",oct>>2,((oct>>2)-0x20)*100+1000); else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Transfer Delay: (%u) %s",oct>>2,str); @@ -3782,9 +3746,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3797,30 +3761,30 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x3f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for uplink: (%u) %ukbps",oct,oct); + "Guaranteed bit rate for uplink: (%u) %ukbps",oct,oct); else if (( oct >= 0x40 ) && ( oct <= 0x7f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for uplink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as for max bit rate*/ + "Guaranteed bit rate for uplink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as for max bit rate*/ else if (( oct >= 0x80 ) && ( oct <= 0xfe )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for uplink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as for max bit rate*/ + "Guaranteed bit rate for uplink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as for max bit rate*/ else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for uplink: (%u) %s",oct,str); + "Guaranteed bit rate for uplink: (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3833,30 +3797,30 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x3f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink: (%u) %ukbps",oct,oct); + "Guaranteed bit rate for downlink: (%u) %ukbps",oct,oct); else if (( oct >= 0x40 ) && ( oct <= 0x7f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as above*/ + "Guaranteed bit rate for downlink: (%u) %ukbps",oct,(oct-0x40)*8+64);/*same as above*/ else if (( oct >= 0x80 ) && ( oct <= 0xfe )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as above*/ + "Guaranteed bit rate for downlink: (%u) %ukbps",oct,(oct-0x80)*64+576);/*same as above*/ else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink: (%u) %s",oct,str); + "Guaranteed bit rate for downlink: (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3888,9 +3852,9 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } @@ -3903,22 +3867,22 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x3f )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink (extended): (%u) %ukbps",oct,oct*100); + "Maximum bit rate for downlink (extended): (%u) %ukbps",oct,oct*100); else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Maximum bit rate for downlink (extended): (%u) %s",oct,str); + "Maximum bit rate for downlink (extended): (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; if ( curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } oct = tvb_get_guint8(tvb, curr_offset); @@ -3930,13 +3894,13 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add } if (( oct >= 1 ) && ( oct <= 0x4a )) - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink (extended): (%u) %ukbps",oct,oct*100); + "Guaranteed bit rate for downlink (extended): (%u) %ukbps",oct,oct*100); else - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, - "Guaranteed bit rate for downlink (extended): (%u) %s",oct,str); + "Guaranteed bit rate for downlink (extended): (%u) %s",oct,str); curr_offset+= 1; curr_len-= 1; @@ -3950,13 +3914,12 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add * [8] 10.5.6.6 SM cause */ static guint8 -de_sm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) +de_sm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_) { guint8 oct; guint32 curr_offset; const gchar *str; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -4002,9 +3965,9 @@ de_sm_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a } proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Cause: (%u) %s %s", - oct, str,add_string ? add_string : ""); + tvb, curr_offset, 1, + "Cause: (%u) %s %s", + oct, str,add_string ? add_string : ""); curr_offset++; @@ -4019,9 +3982,9 @@ de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha { guint32 curr_offset; guint curr_len; - gchar oct; + gchar oct; - gchar ti_flag[2][80]={ "The message is sent from the side that originates the TI" , + gchar ti_flag[2][80]={ "The message is sent from the side that originates the TI" , "The message is sent to the side that originates the TI" }; curr_len = len; @@ -4036,21 +3999,21 @@ de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha if ( curr_len > 1 ) { oct = tvb_get_guint8(tvb, curr_offset); - + proto_tree_add_text(tree, - tvb, curr_offset, 1, - "TI value: 0x%02x (%u)",oct&0x7f,oct&0x7f); + tvb, curr_offset, 1, + "TI value: 0x%02x (%u)",oct&0x7f,oct&0x7f); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "ext: 0x%02x (%u)",oct>>7,oct>>7); + tvb, curr_offset, 1, + "ext: 0x%02x (%u)",oct>>7,oct>>7); } else { proto_tree_add_text(tree, - tvb, curr_offset, 1, - "TI value: 0x%02x (%u)",(oct>>4)&7,(oct>>4)&7); + tvb, curr_offset, 1, + "TI value: 0x%02x (%u)",(oct>>4)&7,(oct>>4)&7); } curr_offset+= curr_len; @@ -4064,20 +4027,19 @@ de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [7] 10.5.6.9 */ static guint8 -de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) +de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "LLC SAPI: 0x%02x (%u) %s", - oct&0x0f, oct&0x0f,add_string ? add_string : ""); + tvb, curr_offset, 1, + "LLC SAPI: 0x%02x (%u) %s", + oct&0x0f, oct&0x0f,add_string ? add_string : ""); curr_offset++; @@ -4088,21 +4050,20 @@ de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad * [7] 10.5.6.10 */ static guint8 -de_sm_tear_down(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len _U_) +de_sm_tear_down(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_) { guint8 oct; guint32 curr_offset; gchar str[2][30] = { "tear down not requested" , "tear down requested" }; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Tear Down Indicator: (%u) %s %s", - oct&1, str[oct&1],add_string ? add_string : ""); + tvb, curr_offset, 1, + "Tear Down Indicator: (%u) %s %s", + oct&1, str[oct&1],add_string ? add_string : ""); curr_offset++; @@ -4175,18 +4136,18 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch { guint32 curr_offset; guint curr_len; - proto_item *tf = NULL; - proto_tree *tf_tree = NULL; - proto_tree *comp_tree = NULL; + proto_item *tf = NULL; + proto_tree *tf_tree = NULL; + proto_tree *comp_tree = NULL; guchar op_code; guchar pkt_fil_count; - guchar e_bit; - const gchar *str; - guchar count; + guchar e_bit; + const gchar *str; + guchar count; guchar oct; - gint pf_length; - gint pf_identifier; - gint pack_component_type; + gint pf_length; + gint pf_identifier; + gint pack_component_type; curr_len = len; curr_offset = offset; @@ -4211,96 +4172,94 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch count = 0; if ( op_code == 2 ) /* delete TFT contains no packet filters. so we will jump over it */ - count = pkt_fil_count; + count = pkt_fil_count; while ( count < pkt_fil_count ) { - tf = proto_tree_add_text(tree, + tf = proto_tree_add_text(tree, tvb, curr_offset, 1, "Packet filter %d",count); /* 0-> 7 */ tf_tree = proto_item_add_subtree(tf, ett_sm_tft ); - if ( op_code == 5 ) /* Delete packet filters from existing TFT - just a list of identifiers */ - - { - if ((curr_offset-offset)<1) { - proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); - return(curr_offset-offset); - } - oct = tvb_get_guint8(tvb, curr_offset); - curr_offset++; - curr_len--; - - proto_tree_add_text(tf_tree, - tvb, curr_offset-1, 1, - "Packet filter identifier: 0x%02x (%u)",oct,oct ); - } - else /* create new, Add packet filters or Replace packet filters */ - { - - if ((curr_offset-offset)<1) { - proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); - return(curr_offset-offset); - } - pf_identifier = tvb_get_guint8(tvb, curr_offset); - curr_offset++; - curr_len--; - - proto_tree_add_text(tf_tree, - tvb, curr_offset-1, 1, - "Packet filter identifier: %u (%u)",pf_identifier, pf_identifier); + if ( op_code == 5 ) /* Delete packet filters from existing TFT - just a list of identifiers */ + { + if ((curr_offset-offset)<1) { + proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); + return(curr_offset-offset); + } + oct = tvb_get_guint8(tvb, curr_offset); + curr_offset++; + curr_len--; - if ((curr_offset-offset)<1) { - proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); - return(curr_offset-offset); + proto_tree_add_text(tf_tree, + tvb, curr_offset-1, 1, + "Packet filter identifier: 0x%02x (%u)",oct,oct ); } - oct = tvb_get_guint8(tvb, curr_offset); - curr_offset++; - curr_len--; - - proto_tree_add_text(tf_tree, - tvb, curr_offset-1, 1, - "Packet evaluation precedence: 0x%02x (%u)",oct,oct ); - - if ((curr_offset-offset)<1) { proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); return(curr_offset-offset);} - pf_length = tvb_get_guint8(tvb, curr_offset); - curr_offset++; - curr_len--; + else /* create new, Add packet filters or Replace packet filters */ + { - proto_tree_add_text(tf_tree, - tvb, curr_offset-1, 1, - "Packet filter length: 0x%02x (%u)",pf_length,pf_length ); - /* New tree for component */ + if ((curr_offset-offset)<1) { + proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); + return(curr_offset-offset); + } + pf_identifier = tvb_get_guint8(tvb, curr_offset); + curr_offset++; + curr_len--; - /* Dissect Packet filter Component */ - /* while ( filter_len > 1 ) */ - /* packet filter component type identifier: */ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1, 1, + "Packet filter identifier: %u (%u)",pf_identifier, pf_identifier); - if (pf_length > 0 ){ if ((curr_offset-offset)<1) { proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); return(curr_offset-offset); } - pack_component_type = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); curr_offset++; curr_len--; - tf=proto_tree_add_text(tf_tree,tvb, curr_offset-1, 1,"Packet filter component type identifier: "); - comp_tree = proto_item_add_subtree(tf, ett_sm_tft ); - - switch ( pack_component_type ){ + proto_tree_add_text(tf_tree, + tvb, curr_offset-1, 1, + "Packet evaluation precedence: 0x%02x (%u)",oct,oct ); + + if ((curr_offset-offset)<1) { proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); return(curr_offset-offset);} + pf_length = tvb_get_guint8(tvb, curr_offset); + curr_offset++; + curr_len--; + + proto_tree_add_text(tf_tree, + tvb, curr_offset-1, 1, + "Packet filter length: 0x%02x (%u)",pf_length,pf_length ); + /* New tree for component */ + + /* Dissect Packet filter Component */ + /* while ( filter_len > 1 ) */ + /* packet filter component type identifier: */ + + if (pf_length > 0 ){ + if ((curr_offset-offset)<1) { + proto_tree_add_text(tf_tree,tvb, curr_offset, 1,"Not enough data"); + return(curr_offset-offset); + } + pack_component_type = tvb_get_guint8(tvb, curr_offset); + curr_offset++; + curr_len--; + + tf=proto_tree_add_text(tf_tree,tvb, curr_offset-1, 1,"Packet filter component type identifier: "); + comp_tree = proto_item_add_subtree(tf, ett_sm_tft ); + + switch ( pack_component_type ){ case 0x10: str="IPv4 source address type"; proto_tree_add_item(comp_tree,hf_gsm_a_tft_ip4_address,tvb,curr_offset,4,FALSE); - curr_offset+=4; - curr_len-=4; + curr_offset+=4; + curr_len-=4; proto_tree_add_item(comp_tree,hf_gsm_a_tft_ip4_mask,tvb,curr_offset,4,FALSE); - curr_offset+=4; - curr_len-=4; + curr_offset+=4; + curr_len-=4; break; - case 0x20: str="IPv6 source address type"; proto_tree_add_item(comp_tree,hf_gsm_a_tft_ip6_address,tvb,curr_offset,16,FALSE); @@ -4372,22 +4331,21 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch default: str="not specified"; - } - proto_item_append_text(tf, "(%u) %s", pack_component_type, str ); - count++; + } + proto_item_append_text(tf, "(%u) %s", pack_component_type, str ); + count++; } } } - /* The parameters list contains a variable number of parameters that might need to be * transferred in addition to the packet filters. If the parameters list is included, the E * bit is set to 1; otherwise, the E bit is set to 0. */ - if (e_bit == 1){ + if (e_bit == 1){ proto_tree_add_text(tf_tree, tvb, curr_offset, 1, "Note: Possible Authorizaton Token/Flow Identifier not decoded yet"); - } - return(curr_offset - offset); + } + return(curr_offset - offset); } guint8 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = { @@ -4723,18 +4681,18 @@ dtap_gmm_auth_ciph_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le #else if ( curr_len > 0 ) { - oct = tvb_get_guint8(tvb, curr_offset); - if (( oct & 0xf0 ) == 0x80 ) - { + oct = tvb_get_guint8(tvb, curr_offset); + if (( oct & 0xf0 ) == 0x80 ) + { /* The ciphering key sequence number is added here */ - proto_tree_add_text(tree, + proto_tree_add_text(tree, tvb, curr_offset, 1, "Ciphering key sequence number: 0x%02x (%u)", - oct&7, + oct&7, oct&7); - curr_offset++; + curr_offset++; curr_len--; - } + } } #endif @@ -4786,7 +4744,6 @@ static void dtap_gmm_auth_ciph_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { guint32 curr_offset; -/* guint32 consumed; */ guint curr_len; curr_offset = offset; @@ -4887,7 +4844,6 @@ dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM ); curr_offset--; curr_len++; - */ ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_UPD_TYPE ); @@ -4986,6 +4942,7 @@ dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) /* Inter RAT information container 10.5.5.24 TS 24.008 version 6.8.0 Release 6 */ /*TO DO: Implement */ ELEM_OPT_TLV( 0x27 , GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER , "" ); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } @@ -5526,7 +5483,6 @@ dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len EXTRANEOUS_DATA_CHECK(curr_len, 0); } - /* * [8] 9.5.15 Deactivate PDP context accept */ @@ -5694,53 +5650,60 @@ proto_register_gsm_a_gm(void) static hf_register_info hf[] = { { &hf_gsm_a_dtap_msg_gmm_type, - { "DTAP GPRS Mobility Management Message Type", "gsm_a.dtap_msg_gmm_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_gmm_strings), 0x0, - "", HFILL } + { "DTAP GPRS Mobility Management Message Type", "gsm_a.dtap_msg_gmm_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_gmm_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_dtap_msg_sm_type, - { "DTAP GPRS Session Management Message Type", "gsm_a.dtap_msg_sm_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sm_strings), 0x0, - "", HFILL } + { "DTAP GPRS Session Management Message Type", "gsm_a.dtap_msg_sm_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sm_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_gm_elem_id, - { "Element ID", "gsm_a_gm.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_gm.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_qos_delay_cls, { "Delay class", "gsm_a.qos.delay_cls", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_delay_cls_vals), 0x38, - "Quality of Service Delay Class", HFILL }}, + "Quality of Service Delay Class", HFILL } + }, { &hf_gsm_a_qos_qos_reliability_cls, { "Reliability class", "gsm_a.qos.delay_cls", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_delay_cls_vals), 0x07, - "Reliability class", HFILL }}, + "Reliability class", HFILL } + }, { &hf_gsm_a_qos_traffic_cls, { "Traffic class", "gsm_a.qos.traffic_cls", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_traffic_cls_vals), 0xe0, - "Traffic class", HFILL }}, + "Traffic class", HFILL } + }, { &hf_gsm_a_qos_del_order, { "Delivery order", "gsm_a.qos.del_order", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_traffic_cls_vals), 0x18, - "Delivery order", HFILL }}, + "Delivery order", HFILL } + }, { &hf_gsm_a_qos_del_of_err_sdu, { "Delivery of erroneous SDUs", "gsm_a.qos.del_of_err_sdu", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_del_of_err_sdu_vals), 0x03, - "Delivery of erroneous SDUs", HFILL }}, + "Delivery of erroneous SDUs", HFILL } + }, { &hf_gsm_a_qos_ber, { "Residual Bit Error Rate (BER)", "gsm_a.qos.ber", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_ber_vals), 0xf0, - "Residual Bit Error Rate (BER)", HFILL }}, + "Residual Bit Error Rate (BER)", HFILL } + }, { &hf_gsm_a_qos_sdu_err_rat, { "SDU error ratio", "gsm_a.qos.sdu_err_rat", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_sdu_err_rat_vals), 0x0f, - "SDU error ratio", HFILL }}, + "SDU error ratio", HFILL } + }, { &hf_gsm_a_qos_traff_hdl_pri, { "Traffic handling priority", "gsm_a.qos.traff_hdl_pri", FT_UINT8, BASE_DEC, VALS(gsm_a_qos_traff_hdl_pri_vals), 0x03, - "Traffic handling priority", HFILL }}, - + "Traffic handling priority", HFILL } + }, { &hf_gsm_a_gmm_split_on_ccch, { "SPLIT on CCCH","gsm_a.gmm.split_on_ccch", FT_BOOLEAN,8, TFS(&gsm_a_gmm_split_on_ccch_value), 0x08, @@ -5771,43 +5734,53 @@ proto_register_gsm_a_gm(void) FT_UINT8, BASE_DEC, NULL, 0x0f, "Number of packet filters", HFILL } }, - - { &hf_gsm_a_tft_ip4_address, - { "IPv4 adress", "gsm_a.tft.ip4_address", FT_IPv4, BASE_NONE, NULL, 0x0, - "IPv4 address", HFILL }}, + { &hf_gsm_a_tft_ip4_address, + { "IPv4 adress", "gsm_a.tft.ip4_address", FT_IPv4, BASE_NONE, NULL, 0x0, + "IPv4 address", HFILL } + }, { &hf_gsm_a_tft_ip4_mask, - { "IPv4 address mask", "gsm_a.tft.ip4_mask", FT_IPv4, BASE_NONE, NULL, 0x0, + { "IPv4 address mask", "gsm_a.tft.ip4_mask", FT_IPv4, BASE_NONE, NULL, 0x0, "IPv4 address mask", HFILL }}, { &hf_gsm_a_tft_ip6_address, - { "IPv6 adress", "gsm_a.tft.ip6_address", FT_IPv6, BASE_NONE, NULL, 0x0, - "IPv6 address", HFILL }}, + { "IPv6 adress", "gsm_a.tft.ip6_address", FT_IPv6, BASE_NONE, NULL, 0x0, + "IPv6 address", HFILL } + }, { &hf_gsm_a_tft_ip6_mask, - { "IPv6 adress mask", "gsm_a.tft.ip6_mask", FT_IPv6, BASE_NONE, NULL, 0x0, - "IPv6 address mask", HFILL }}, + { "IPv6 adress mask", "gsm_a.tft.ip6_mask", FT_IPv6, BASE_NONE, NULL, 0x0, + "IPv6 address mask", HFILL } + }, { &hf_gsm_a_tft_protocol_header, - { "Protocol/header", "gsm_a.tft.protocol_header", FT_UINT8, BASE_HEX, NULL, 0x0, - "Protocol/header", HFILL }}, + { "Protocol/header", "gsm_a.tft.protocol_header", FT_UINT8, BASE_HEX, NULL, 0x0, + "Protocol/header", HFILL } + }, { &hf_gsm_a_tft_port, - { "Port", "gsm_a.tft.port", FT_UINT16, BASE_DEC, NULL, 0x0, - "Port", HFILL }}, + { "Port", "gsm_a.tft.port", FT_UINT16, BASE_DEC, NULL, 0x0, + "Port", HFILL } + }, { &hf_gsm_a_tft_port_low, - { "Low limit port", "gsm_a.tft.port_low", FT_UINT16, BASE_DEC, NULL, 0x0, - "Low limit port", HFILL }}, + { "Low limit port", "gsm_a.tft.port_low", FT_UINT16, BASE_DEC, NULL, 0x0, + "Low limit port", HFILL } + }, { &hf_gsm_a_tft_port_high, - { "High limit port", "gsm_a.tft.port_high", FT_UINT16, BASE_DEC, NULL, 0x0, - "High limit port", HFILL }}, + { "High limit port", "gsm_a.tft.port_high", FT_UINT16, BASE_DEC, NULL, 0x0, + "High limit port", HFILL } + }, { &hf_gsm_a_tft_security, - { "IPSec security parameter index", "gsm_a.tft.security", FT_UINT32, BASE_HEX, NULL, 0x0, - "IPSec security parameter index", HFILL }}, + { "IPSec security parameter index", "gsm_a.tft.security", FT_UINT32, BASE_HEX, NULL, 0x0, + "IPSec security parameter index", HFILL } + }, { &hf_gsm_a_tft_traffic_mask, - { "Mask field", "gsm_a.tft.traffic_mask", FT_UINT8, BASE_HEX, NULL, 0x0, - "Mask field", HFILL }}, + { "Mask field", "gsm_a.tft.traffic_mask", FT_UINT8, BASE_HEX, NULL, 0x0, + "Mask field", HFILL } + }, { &hf_gsm_a_ptmsi_sig, - { "P-TMSI Signature", "gsm_a.ptmsi_sig", FT_UINT24, BASE_HEX, NULL, 0x0, - "P-TMSI Signature", HFILL }}, + { "P-TMSI Signature", "gsm_a.ptmsi_sig", FT_UINT24, BASE_HEX, NULL, 0x0, + "P-TMSI Signature", HFILL } + }, { &hf_gsm_a_ptmsi_sig2, - { "P-TMSI Signature 2", "gsm_a.ptmsi_sig2", FT_UINT24, BASE_HEX, NULL, 0x0, - "P-TMSI Signature 2", HFILL }}, + { "P-TMSI Signature 2", "gsm_a.ptmsi_sig2", FT_UINT24, BASE_HEX, NULL, 0x0, + "P-TMSI Signature 2", HFILL } + }, }; /* Setup protocol subtree array */ @@ -5836,24 +5809,24 @@ proto_register_gsm_a_gm(void) for (i=0; i < NUM_GSM_DTAP_MSG_GMM; i++, last_offset++) { - ett_gsm_dtap_msg_gmm[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_gmm[i]; + ett_gsm_dtap_msg_gmm[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_gmm[i]; } for (i=0; i < NUM_GSM_DTAP_MSG_SM; i++, last_offset++) { - ett_gsm_dtap_msg_sm[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_sm[i]; + ett_gsm_dtap_msg_sm[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_sm[i]; } for (i=0; i < NUM_GSM_GM_ELEM; i++, last_offset++) { - ett_gsm_gm_elem[i] = -1; - ett[last_offset] = &ett_gsm_gm_elem[i]; + ett_gsm_gm_elem[i] = -1; + ett[last_offset] = &ett_gsm_gm_elem[i]; } proto_a_gm = - proto_register_protocol("GSM A-I/F GPRS Mobility and Session Management", "GSM Management", "gsm_a_gm"); + proto_register_protocol("GSM A-I/F GPRS Mobility and Session Management", "GSM Management", "gsm_a_gm"); proto_register_field_array(proto_a_gm, hf, array_length(hf)); @@ -5864,10 +5837,8 @@ proto_register_gsm_a_gm(void) "GPRS SM PCO PPP protocol", FT_UINT16, BASE_HEX); } - void proto_reg_handoff_gsm_a_gm(void) { - data_handle = find_dissector("data"); } diff --git a/epan/dissectors/packet-gsm_a_rp.c b/epan/dissectors/packet-gsm_a_rp.c index 965604265a..b97ed0ead3 100644 --- a/epan/dissectors/packet-gsm_a_rp.c +++ b/epan/dissectors/packet-gsm_a_rp.c @@ -96,7 +96,6 @@ typedef enum DE_RP_DEST_ADDR, /* RP-Destination Address */ DE_RP_USER_DATA, /* RP-User Data */ DE_RP_CAUSE, /* RP-Cause */ - DE_RP_NONE /* NONE */ } rp_elem_idx_t; @@ -108,21 +107,20 @@ gint ett_gsm_rp_elem[NUM_GSM_RP_ELEM]; * [5] 8.2.3 */ static guint8 -de_rp_message_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rp_message_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "RP-Message Reference: 0x%02x (%u)", - oct, - oct); + tvb, curr_offset, 1, + "RP-Message Reference: 0x%02x (%u)", + oct, + oct); curr_offset++; @@ -161,7 +159,7 @@ de_rp_user_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha curr_offset = offset; proto_tree_add_text(tree, tvb, curr_offset, len, - "TPDU (not displayed)"); + "TPDU (not displayed)"); /* * dissect the embedded TPDU message @@ -193,10 +191,10 @@ de_rp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Extension: %s", - a_bigbuf, - (oct & 0x80) ? "extended" : "not extended"); + tvb, curr_offset, 1, + "%s : Extension: %s", + a_bigbuf, + (oct & 0x80) ? "extended" : "not extended"); switch (oct & 0x7f) { @@ -225,28 +223,28 @@ de_rp_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a case 111: str = "Protocol error, unspecified"; break; case 127: str = "Interworking, unspecified"; break; default: - str = "Reserved"; - break; + str = "Reserved"; + break; } other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s : Cause: (%u) %s", - a_bigbuf, - oct & 0x7f, - str); + tvb, curr_offset, 1, + "%s : Cause: (%u) %s", + a_bigbuf, + oct & 0x7f, + str); curr_offset++; if (add_string) - g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); + g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); NO_MORE_DATA_CHECK(len); proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Diagnostic field"); + tvb, curr_offset, len - (curr_offset - offset), + "Diagnostic field"); curr_offset += len - (curr_offset - offset); @@ -457,7 +455,7 @@ dissect_rp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_str(pinfo->cinfo, COL_INFO, "(RP) "); + col_append_str(pinfo->cinfo, COL_INFO, "(RP) "); } /* @@ -466,7 +464,7 @@ dissect_rp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (!tree) { - return; + return; } offset = 0; @@ -489,26 +487,26 @@ dissect_rp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (str == NULL) { - rp_item = - proto_tree_add_protocol_format(tree, proto_a_rp, tvb, 0, len, - "GSM A-I/F RP - Unknown RP Message Type (0x%02x)", - oct); + rp_item = + proto_tree_add_protocol_format(tree, proto_a_rp, tvb, 0, len, + "GSM A-I/F RP - Unknown RP Message Type (0x%02x)", + oct); - rp_tree = proto_item_add_subtree(rp_item, ett_rp_msg); + rp_tree = proto_item_add_subtree(rp_item, ett_rp_msg); } else { - rp_item = - proto_tree_add_protocol_format(tree, proto_a_rp, tvb, 0, -1, - "GSM A-I/F RP - %s", - str); + rp_item = + proto_tree_add_protocol_format(tree, proto_a_rp, tvb, 0, -1, + "GSM A-I/F RP - %s", + str); - rp_tree = proto_item_add_subtree(rp_item, ett_gsm_rp_msg[idx]); + rp_tree = proto_item_add_subtree(rp_item, ett_gsm_rp_msg[idx]); - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } + if (check_col(pinfo->cinfo, COL_INFO)) + { + col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); + } } /* @@ -526,13 +524,13 @@ dissect_rp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) */ if (rp_msg_fcn[idx] == NULL) { - proto_tree_add_text(rp_tree, - tvb, offset, len - offset, - "Message Elements"); + proto_tree_add_text(rp_tree, + tvb, offset, len - offset, + "Message Elements"); } else { - (*rp_msg_fcn[idx])(tvb, rp_tree, offset, len - offset); + (*rp_msg_fcn[idx])(tvb, rp_tree, offset, len - offset); } } @@ -548,14 +546,14 @@ proto_register_gsm_a_rp(void) static hf_register_info hf[] = { { &hf_gsm_a_rp_msg_type, - { "RP Message Type", "gsm_a.rp_msg_type", - FT_UINT8, BASE_HEX, VALS(gsm_rp_msg_strings), 0x0, - "", HFILL } + { "RP Message Type", "gsm_a.rp_msg_type", + FT_UINT8, BASE_HEX, VALS(gsm_rp_msg_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_rp_elem_id, - { "Element ID", "gsm_a_rp.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_rp.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, }; @@ -570,27 +568,26 @@ proto_register_gsm_a_rp(void) for (i=0; i < NUM_GSM_RP_MSG; i++, last_offset++) { - ett_gsm_rp_msg[i] = -1; - ett[last_offset] = &ett_gsm_rp_msg[i]; + ett_gsm_rp_msg[i] = -1; + ett[last_offset] = &ett_gsm_rp_msg[i]; } for (i=0; i < NUM_GSM_RP_ELEM; i++, last_offset++) { - ett_gsm_rp_elem[i] = -1; - ett[last_offset] = &ett_gsm_rp_elem[i]; + ett_gsm_rp_elem[i] = -1; + ett[last_offset] = &ett_gsm_rp_elem[i]; } - /* Register the protocol name and description */ proto_a_rp = - proto_register_protocol("GSM A-I/F RP", "GSM RP", "gsm_a_rp"); + proto_register_protocol("GSM A-I/F RP", "GSM RP", "gsm_a_rp"); proto_register_field_array(proto_a_rp, hf, array_length(hf)); sms_dissector_table = - register_dissector_table("gsm_a.sms_tpdu", "GSM SMS TPDU", - FT_UINT8, BASE_DEC); + register_dissector_table("gsm_a.sms_tpdu", "GSM SMS TPDU", + FT_UINT8, BASE_DEC); proto_register_subtree_array(ett, array_length(ett)); diff --git a/epan/dissectors/packet-gsm_a_rr.c b/epan/dissectors/packet-gsm_a_rr.c index 2220082192..a22ec3df04 100644 --- a/epan/dissectors/packet-gsm_a_rr.c +++ b/epan/dissectors/packet-gsm_a_rr.c @@ -10,6 +10,13 @@ * * Title 3GPP Other * + * Reference [3] + * Mobile radio interface Layer 3 specification; + * Core network protocols; + * Stage 3 + * (3GPP TS 24.008 version 4.7.0 Release 4) + * (ETSI TS 124 008 V6.8.0 (2005-03)) + * * Reference [4] * Mobile radio interface layer 3 specification; * Radio Resource Control Protocol @@ -196,7 +203,7 @@ const value_string gsm_rr_elem_strings[] = { /* [3] 10.5.2.8b Channel Request Description 2 */ /* Pos 20 */ { 0x00, "Cipher Mode Setting" }, /* [3] 10.5.2.9 */ - { 0x00, "Cipher Mode Response" }, /* [3] 10.5.2.10 */ + { 0x00, "Cipher Mode Response" }, /* [3] 10.5.2.10 */ { 0x00, "Control Channel Description" }, /* [3] 10.5.2.11 Control Channel Description */ /* [3] 10.5.2.11a DTM Information Details */ { 0x00, "Dynamic ARFCN Mapping" }, /* [3] 10.5.2.11b */ @@ -315,38 +322,38 @@ const value_string gsm_rr_elem_strings[] = { /* RR cause value (octet 2) TS 44.018 6.11.0*/ static const value_string gsm_a_rr_RR_cause_vals[] = { - { 0, "Normal event"}, - { 1, "Abnormal release, unspecified"}, - { 2, "Abnormal release, channel unacceptable"}, - { 3, "Abnormal release, timer expired"}, - { 4, "Abnormal release, no activity on the radio path"}, - { 5, "Preemptive release"}, - { 6, "UTRAN configuration unknown"}, - { 8, "Handover impossible, timing advance out of range"}, - { 9, "Channel mode unacceptable"}, - { 10, "Frequency not implemented"}, - { 13, "Originator or talker leaving group call area"}, - { 12, "Lower layer failure"}, - { 0x41, "Call already cleared"}, - { 0x5f, "Semantically incorrect message"}, - { 0x60, "Invalid mandatory information"}, - { 0x61, "Message type non-existent or not implemented"}, - { 0x62, "Message type not compatible with protocol state"}, - { 0x64, "Conditional IE error"}, - { 0x65, "No cell allocation available"}, - { 0x6f, "Protocol error unspecified"}, + { 0, "Normal event"}, + { 1, "Abnormal release, unspecified"}, + { 2, "Abnormal release, channel unacceptable"}, + { 3, "Abnormal release, timer expired"}, + { 4, "Abnormal release, no activity on the radio path"}, + { 5, "Preemptive release"}, + { 6, "UTRAN configuration unknown"}, + { 8, "Handover impossible, timing advance out of range"}, + { 9, "Channel mode unacceptable"}, + { 10, "Frequency not implemented"}, + { 13, "Originator or talker leaving group call area"}, + { 12, "Lower layer failure"}, + { 0x41, "Call already cleared"}, + { 0x5f, "Semantically incorrect message"}, + { 0x60, "Invalid mandatory information"}, + { 0x61, "Message type non-existent or not implemented"}, + { 0x62, "Message type not compatible with protocol state"}, + { 0x64, "Conditional IE error"}, + { 0x65, "No cell allocation available"}, + { 0x6f, "Protocol error unspecified"}, { 0, NULL } }; static const value_string gsm_a_algorithm_identifier_vals[] = { - { 0, "Cipher with algorithm A5/1"}, - { 1, "Cipher with algorithm A5/2"}, - { 2, "Cipher with algorithm A5/3"}, - { 3, "Cipher with algorithm A5/4"}, - { 4, "Cipher with algorithm A5/5"}, - { 5, "Cipher with algorithm A5/6"}, - { 6, "Cipher with algorithm A5/7"}, - { 7, "Reserved"}, + { 0, "Cipher with algorithm A5/1"}, + { 1, "Cipher with algorithm A5/2"}, + { 2, "Cipher with algorithm A5/3"}, + { 3, "Cipher with algorithm A5/4"}, + { 4, "Cipher with algorithm A5/5"}, + { 5, "Cipher with algorithm A5/6"}, + { 6, "Cipher with algorithm A5/7"}, + { 7, "Reserved"}, { 0, NULL } }; @@ -488,9 +495,8 @@ typedef enum DE_RR_CHNL_NEEDED, /* [3] 10.5.2.8 Channel Needed * [3] 10.5.2.8a (void) * [3] 10.5.2.8b Channel Request Description 2 */ - /* Pos 20 */ DE_RR_CIP_MODE_SET, /* [3] 10.5.2.9 Cipher Mode Setting */ - DE_RR_CIP_MODE_RESP, /* [3] 10.5.2.10 Cipher Response */ + DE_RR_CIP_MODE_RESP, /* [3] 10.5.2.10 Cipher Response */ DE_RR_CTRL_CH_DESC, /* [3] 10.5.2.11 Control Channel Description */ /* [3] 10.5.2.11a DTM Information Details */ DE_RR_DYN_ARFCN_MAP, /* [3] 10.5.2.11b Dynamic ARFCN Mapping */ @@ -515,7 +521,6 @@ typedef enum DE_RR_MOB_ALL, /* [3] 10.5.2.21 Mobile Allocation */ DE_RR_MOB_TIME_DIFF, /* [3] 10.5.2.21a Mobile Time Difference */ DE_RR_MULTIRATE_CONF, /* [3] 10.5.2.21aa MultiRate configuration */ - /* Pos 30 */ DE_RR_MULT_ALL, /* [3] 10.5.2.21b Multislot Allocation */ /* * [3] 10.5.2.21c NC mode @@ -572,7 +577,6 @@ typedef enum /* * [3] 10.5.2.42 TMSI/P-TMSI */ DE_RR_VGCS_TAR_MODE_IND, /* [3] 10.5.2.42a VGCS target mode Indication */ - /* Pos 40 */ DE_RR_VGCS_CIP_PAR, /* [3] 10.5.2.42b VGCS Ciphering Parameters */ DE_RR_WAIT_IND, /* [3] 10.5.2.43 Wait Indication */ @@ -626,143 +630,142 @@ gint ett_gsm_rr_elem[NUM_GSM_RR_ELEM]; static void display_channel_list(guint8 *list, tvbuff_t *tvb, proto_tree *tree) { - int arfcn; - proto_item *ti=NULL; + int arfcn; + proto_item *ti=NULL; - ti = proto_tree_add_text(tree, tvb, 0, 16, "List of ARFCNs ="); - for (arfcn=0; arfcn<=ARFCN_MAX; arfcn++) { - if (list[arfcn]) - proto_item_append_text(ti, " %d", arfcn); - } + ti = proto_tree_add_text(tree, tvb, 0, 16, "List of ARFCNs ="); + for (arfcn=0; arfcn<=ARFCN_MAX; arfcn++) { + if (list[arfcn]) + proto_item_append_text(ti, " %d", arfcn); + } - return; + return; } static int f_k(int k, int *w, int range) { - int index=k, j=1, n; - - /* J := GREATEST_POWER_OF_2_LESSER_OR_EQUAL_TO(INDEX); */ - if (index>1) { - do { - j<<=1; - } while (j<=index); - j >>= 1; - } + int index=k, j=1, n; + + /* J := GREATEST_POWER_OF_2_LESSER_OR_EQUAL_TO(INDEX); */ + if (index>1) { + do { + j<<=1; + } while (j<=index); + j >>= 1; + } n = w[index]; while (index>1) { - if (2*index < 3*j) { /* left child */ - index -= j>>1; - n = (n + w[index] - range/j - 1)%((2*range/j) - 1) + 1; - } - else { /* right child */ - index -= j; - n = (n + w[index] - 1)%((2*range)/j - 1) + 1; - } - j >>= 1; - } - - return n%1024; + if (2*index < 3*j) { /* left child */ + index -= j>>1; + n = (n + w[index] - range/j - 1)%((2*range/j) - 1) + 1; + } + else { /* right child */ + index -= j; + n = (n + w[index] - 1)%((2*range)/j - 1) + 1; + } + j >>= 1; + } + + return n%1024; } static void dissect_channel_list_n_range(tvbuff_t *tvb, proto_tree *tree, int range) { - int offset=0, f0, arfcn_orig, bits, w[64], wsize, i, wi; - int octet, nwi=1, jwi=0, wbits, imax, iused, arfcn; - guint8 list[1024]; - - memset((void*)list,0,sizeof(list)); - - octet = tvb_get_guint8(tvb, offset++); - if (range==1024) { - f0 = (octet>>2)&1; - if (f0) - list[0] = 1; - bits = 2; - arfcn_orig = 0; - wsize = 10; - imax = 16; - } - else { - arfcn_orig = (octet&1); - arfcn_orig = (arfcn_orig << 8) + tvb_get_guint8(tvb, offset++); - octet = tvb_get_guint8(tvb, offset++); - arfcn_orig = (arfcn_orig << 1) + (octet>>7); - list[arfcn_orig] = 1; - bits = 7; - switch (range) { - case 512: - wsize=9; - imax = 17; - break; - case 256: - wsize=8; - imax = 21; - break; - case 128: - wsize=7; - imax = 29; - break; + int offset=0, f0, arfcn_orig, bits, w[64], wsize, i, wi; + int octet, nwi=1, jwi=0, wbits, imax, iused, arfcn; + guint8 list[1024]; + + memset((void*)list,0,sizeof(list)); + + octet = tvb_get_guint8(tvb, offset++); + if (range==1024) { + f0 = (octet>>2)&1; + if (f0) + list[0] = 1; + bits = 2; + arfcn_orig = 0; + wsize = 10; + imax = 16; + } + else { + arfcn_orig = (octet&1); + arfcn_orig = (arfcn_orig << 8) + tvb_get_guint8(tvb, offset++); + octet = tvb_get_guint8(tvb, offset++); + arfcn_orig = (arfcn_orig << 1) + (octet>>7); + list[arfcn_orig] = 1; + bits = 7; + switch (range) { + case 512: + wsize=9; + imax = 17; + break; + case 256: + wsize=8; + imax = 21; + break; + case 128: + wsize=7; + imax = 29; + break; default: - wsize=0; - imax = 0; - DISSECTOR_ASSERT_NOT_REACHED(); - } - } - iused = imax; /* in case the list is actually full */ - - /* extract the variable size w[] elements */ - for (i=1; i<=imax; i++) { - wi = octet & ~(0xff<wbits) { /* need to extract more bits from the next octet */ - octet = tvb_get_guint8(tvb, offset++); - wi = (wi << 8) + octet; - bits = 8; - wbits += 8; - } - - if (wbits>wsize) { /* now we have too many bits - save some */ - bits = wbits - wsize; - wi >>= bits; - } - else /* just right number of bits */ - bits = 0; - - w[i] = wi; - if (w[i]==0) { - iused = i - 1; - break; /* all remaining elements must also be zero */ - } - - if (++jwi==nwi) { /* check if the number of wi at this wsize has been extracted */ - jwi = 0; /* reset the count of wi at this size */ - nwi <<= 1; /* get twice as many of the next size */ - wsize--; /* make the next size 1 bit smaller */ - } - } - - for (i=1; i<=iused; i++) { - arfcn = (f_k(i, w, range) + arfcn_orig)%1024; - list[arfcn] = 1; - } - - display_channel_list(list, tvb, tree); - - return; + wsize=0; + imax = 0; + DISSECTOR_ASSERT_NOT_REACHED(); + } + } + iused = imax; /* in case the list is actually full */ + + /* extract the variable size w[] elements */ + for (i=1; i<=imax; i++) { + wi = octet & ~(0xff<wbits) { /* need to extract more bits from the next octet */ + octet = tvb_get_guint8(tvb, offset++); + wi = (wi << 8) + octet; + bits = 8; + wbits += 8; + } + + if (wbits>wsize) { /* now we have too many bits - save some */ + bits = wbits - wsize; + wi >>= bits; + } + else /* just right number of bits */ + bits = 0; + + w[i] = wi; + if (w[i]==0) { + iused = i - 1; + break; /* all remaining elements must also be zero */ + } + + if (++jwi==nwi) { /* check if the number of wi at this wsize has been extracted */ + jwi = 0; /* reset the count of wi at this size */ + nwi <<= 1; /* get twice as many of the next size */ + wsize--; /* make the next size 1 bit smaller */ + } + } + + for (i=1; i<=iused; i++) { + arfcn = (f_k(i, w, range) + arfcn_orig)%1024; + list[arfcn] = 1; + } + + display_channel_list(list, tvb, tree); + + return; } static guint8 -dissect_arfcn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +dissect_arfcn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; guint8 oct,bit,byte; guint16 arfcn; proto_item *item; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); @@ -838,9 +841,9 @@ dissect_arfcn_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g } } - return(curr_offset - offset); } + guint8 de_rr_cell_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { @@ -854,7 +857,7 @@ de_rr_cell_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [3] 10.5.2.2 Cell Description */ guint8 -de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; @@ -862,14 +865,13 @@ de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar guint32 curr_offset; guint16 bcch_arfcn; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); item = - proto_tree_add_text(tree, - tvb, curr_offset, 2, - gsm_rr_elem_strings[DE_RR_CELL_DSC].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 2, + gsm_rr_elem_strings[DE_RR_CELL_DSC].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CELL_DSC]); @@ -888,14 +890,14 @@ de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.3 Cell Options (BCCH) */ static const value_string gsm_a_rr_dtx_bcch_vals[] = { - { 0x00, "The MSs may use uplink discontinuous transmission" }, - { 0x01, "The MSs shall use uplink discontinuous transmission" }, - { 0x02, "The MSs shall not use uplink discontinuous transmission" }, - { 0x03, "Reserved" }, - { 0, NULL } }; + { 0x00, "The MSs may use uplink discontinuous transmission" }, + { 0x01, "The MSs shall use uplink discontinuous transmission" }, + { 0x02, "The MSs shall not use uplink discontinuous transmission" }, + { 0x03, "Reserved" }, + { 0, NULL } }; static guint8 -de_rr_cell_opt_bcch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cell_opt_bcch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; @@ -903,13 +905,12 @@ de_rr_cell_opt_bcch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, guint8 rlt; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); rlt = ((1+(oct&0x0f))<<2); /* Radio Link Timeout is in units of 4 frames, starting at 4 */ item = proto_tree_add_text(tree, tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_CELL_OPT_BCCH].strptr); + gsm_rr_elem_strings[DE_RR_CELL_OPT_BCCH].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CELL_OPT_BCCH]); @@ -926,18 +927,18 @@ de_rr_cell_opt_bcch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [3] 10.5.2.3a Cell Options (SACCH) */ static const value_string gsm_a_rr_dtx_sacch_vals[] = { - { 0x00, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, - { 0x01, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, - { 0x02, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, - { 0x03, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" }, - { 0x04, "The MS may use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" }, - { 0x05, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, - { 0x06, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, - { 0x07, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, - { 0, NULL } }; + { 0x00, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, + { 0x01, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, + { 0x02, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" }, + { 0x03, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" }, + { 0x04, "The MS may use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" }, + { 0x05, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, + { 0x06, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, + { 0x07, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" }, + { 0, NULL } }; static guint8 -de_rr_cell_opt_sacch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cell_opt_sacch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; @@ -946,14 +947,13 @@ de_rr_cell_opt_sacch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, guint8 rlt; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); dtx = ((oct&0x80)>>5)|((oct&0x30)>>4); /* DTX is a split filed in bits 8, 6 and 5 */ rlt = ((1+(oct&0x0f))<<2); /* Radio Link Timeout is in units of 4 frames, starting at 4 */ item = proto_tree_add_text(tree, tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_CELL_OPT_SACCH].strptr); + gsm_rr_elem_strings[DE_RR_CELL_OPT_SACCH].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CELL_OPT_SACCH]); @@ -970,19 +970,18 @@ de_rr_cell_opt_sacch(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [3] 10.5.2.4 Cell Selection Parameters */ static guint8 -de_rr_cell_sel_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cell_sel_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; oct = tvb_get_guint8(tvb, curr_offset); item = proto_tree_add_text(tree, tvb, curr_offset, 2, - gsm_rr_elem_strings[DE_RR_CELL_SEL_PARAM].strptr); + gsm_rr_elem_strings[DE_RR_CELL_SEL_PARAM].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CELL_SEL_PARAM]); @@ -1005,7 +1004,7 @@ de_rr_cell_sel_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [3] 10.5.2.5 Channel Description */ guint8 -de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; guint8 oct8,subchannel; @@ -1014,7 +1013,6 @@ de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * proto_item *item; const gchar *str; - len = len; curr_offset = offset; item = proto_tree_add_text(tree,tvb, curr_offset, 3,gsm_rr_elem_strings[DE_RR_CH_DSC].strptr); @@ -1100,7 +1098,7 @@ de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * * [3] 10.5.2.5a Channel Description 2 */ static guint8 -de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; guint8 oct8,subchannel; @@ -1109,7 +1107,6 @@ de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar proto_item *item; const gchar *str; - len = len; curr_offset = offset; item = proto_tree_add_text(tree,tvb, curr_offset, 3,gsm_rr_elem_strings[DE_RR_CH_DSC2].strptr); @@ -1181,7 +1178,6 @@ de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar oct8 = tvb_get_guint8(tvb, curr_offset); other_decode_bitfield_value(a_bigbuf, oct8, 0xe0, 8); proto_tree_add_text(subtree,tvb, curr_offset, 1,"%s = Training Sequence: %d",a_bigbuf,((oct8 & 0xe0)>>5)); - if ((oct8 & 0x10) == 0x10) { @@ -1218,35 +1214,34 @@ de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar */ /* Channel Mode */ static const value_string gsm_a_rr_channel_mode_vals[] = { -{ 0x00, "signalling only"}, -{ 0x01, "speech full rate or half rate version 1(GSM FR or GSM HR)"}, -{ 0x21, "speech full rate or half rate version 2(GSM EFR)"}, -{ 0x41, "speech full rate or half rate version 3(FR AMR or HR AMR)"}, -{ 0x81, "speech full rate or half rate version 4(OFR AMR-WB or OHR AMR-WB)"}, -{ 0x82, "speech full rate or half rate version 5(FR AMR-WB )"}, -{ 0x83, "speech full rate or half rate version 6(OHR AMR )"}, -{ 0x61, "data, 43.5 kbit/s (downlink)+14.5 kbps (uplink)"}, -{ 0x62, "data, 29.0 kbit/s (downlink)+14.5 kbps (uplink)"}, -{ 0x64, "data, 43.5 kbit/s (downlink)+29.0 kbps (uplink)"}, -{ 0x67, "data, 14.5 kbit/s (downlink)+43.5 kbps (uplink)"}, -{ 0x65, "data, 14.5 kbit/s (downlink)+29.0 kbps (uplink)"}, -{ 0x66, "data, 29.0 kbit/s (downlink)+43.5 kbps (uplink)"}, -{ 0x27, "data, 43.5 kbit/s radio interface rate"}, -{ 0x63, "data, 32.0 kbit/s radio interface rate"}, -{ 0x43, "data, 29.0 kbit/s radio interface rate"}, -{ 0x0f, "data, 14.5 kbit/s radio interface rate"}, -{ 0x03, "data, 12.0 kbit/s radio interface rate"}, -{ 0x0b, "data, 6.0 kbit/s radio interface rate"}, -{ 0x13, "data, 3.6 kbit/s radio interface rate"}, + { 0x00, "signalling only"}, + { 0x01, "speech full rate or half rate version 1(GSM FR or GSM HR)"}, + { 0x21, "speech full rate or half rate version 2(GSM EFR)"}, + { 0x41, "speech full rate or half rate version 3(FR AMR or HR AMR)"}, + { 0x81, "speech full rate or half rate version 4(OFR AMR-WB or OHR AMR-WB)"}, + { 0x82, "speech full rate or half rate version 5(FR AMR-WB )"}, + { 0x83, "speech full rate or half rate version 6(OHR AMR )"}, + { 0x61, "data, 43.5 kbit/s (downlink)+14.5 kbps (uplink)"}, + { 0x62, "data, 29.0 kbit/s (downlink)+14.5 kbps (uplink)"}, + { 0x64, "data, 43.5 kbit/s (downlink)+29.0 kbps (uplink)"}, + { 0x67, "data, 14.5 kbit/s (downlink)+43.5 kbps (uplink)"}, + { 0x65, "data, 14.5 kbit/s (downlink)+29.0 kbps (uplink)"}, + { 0x66, "data, 29.0 kbit/s (downlink)+43.5 kbps (uplink)"}, + { 0x27, "data, 43.5 kbit/s radio interface rate"}, + { 0x63, "data, 32.0 kbit/s radio interface rate"}, + { 0x43, "data, 29.0 kbit/s radio interface rate"}, + { 0x0f, "data, 14.5 kbit/s radio interface rate"}, + { 0x03, "data, 12.0 kbit/s radio interface rate"}, + { 0x0b, "data, 6.0 kbit/s radio interface rate"}, + { 0x13, "data, 3.6 kbit/s radio interface rate"}, { 0, NULL } }; guint8 -de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_channel_mode, tvb, curr_offset, 1, FALSE); @@ -1260,23 +1255,22 @@ de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar */ static const value_string gsm_a_rr_channel_mode2_vals[] = { -{ 0x00, "signalling only"}, -{ 0x05, "speech half rate version 1(GSM HR)"}, -{ 0x25, "speech half rate version 2(GSM EFR)"}, -{ 0x45, "speech half rate version 3(HR AMR)"}, -{ 0x85, "speech half rate version 4(OHR AMR-WB)"}, -{ 0x06, "speech half rate version 6(OHR AMR )"}, -{ 0x0f, "data, 6.0 kbit/s radio interface rate"}, -{ 0x17, "data, 3.6 kbit/s radio interface rate"}, + { 0x00, "signalling only"}, + { 0x05, "speech half rate version 1(GSM HR)"}, + { 0x25, "speech half rate version 2(GSM EFR)"}, + { 0x45, "speech half rate version 3(HR AMR)"}, + { 0x85, "speech half rate version 4(OHR AMR-WB)"}, + { 0x06, "speech half rate version 6(OHR AMR )"}, + { 0x0f, "data, 6.0 kbit/s radio interface rate"}, + { 0x17, "data, 3.6 kbit/s radio interface rate"}, { 0, NULL } }; static guint8 -de_rr_ch_mode2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ch_mode2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_channel_mode2, tvb, curr_offset, 1, FALSE); @@ -1307,27 +1301,26 @@ de_rr_ch_mode2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * Bits 2 - 1: spare(0). */ static const true_false_string gsm_a_msg_req_value = { - "message is not requested", - "message is requested" + "message is not requested", + "message is requested" }; static const value_string gsm_a_rr_utran_cm_cng_msg_req_vals[] = { -{ 0x0, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x1, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x2, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x3, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x4, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x5, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x6, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, -{ 0x7, "message including status on predefined configurations (i.e. Sequence Description) is not requested."}, -{ 0, NULL } + { 0x0, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x1, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x2, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x3, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x4, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x5, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x6, "message including status on predefined configurations (i.e. Sequence Description) is requested"}, + { 0x7, "message including status on predefined configurations (i.e. Sequence Description) is not requested."}, + { 0, NULL } }; guint8 -de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_cm_cng_msg_req, tvb, curr_offset, 1, FALSE); @@ -1343,18 +1336,17 @@ de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc * [3] 10.5.2.8 Channel Needed */ static const value_string gsm_a_rr_channel_needed_vals[] = { -{ 0x00, "Any channel"}, -{ 0x01, "SDCCH"}, -{ 0x02, "TCH/F (Full rate)"}, -{ 0x03, "TCH/H or TCH/F (Dual rate)"}, -{ 0, NULL } + { 0x00, "Any channel"}, + { 0x01, "SDCCH"}, + { 0x02, "TCH/F (Full rate)"}, + { 0x03, "TCH/H or TCH/F (Dual rate)"}, + { 0, NULL } }; guint8 -de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, curr_offset, 1, FALSE); @@ -1373,8 +1365,8 @@ de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc */ /* SC (octet 1) */ static const value_string gsm_a_rr_sc_vals[] = { - { 0, "No ciphering"}, - { 1, "Start ciphering"}, + { 0, "No ciphering"}, + { 1, "Start ciphering"}, { 0, NULL } }; /* algorithm identifier @@ -1440,42 +1432,41 @@ de_rr_cip_mode_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, /* [3] 10.5.2.11 Control Channel Description */ static const value_string gsm_a_rr_mscr_vals[] = { - { 0, "MSC is Release '98 or older"}, - { 1, "MSC is Release '99 onwards"}, + { 0, "MSC is Release '98 or older"}, + { 1, "MSC is Release '99 onwards"}, { 0, NULL } }; static const value_string gsm_a_rr_att_vals[] = { - { 0, "MSs in the cell are not allowed to apply IMSI attach and detach procedure"}, - { 1, "MSs in the cell shall apply IMSI attach and detach procedure"}, + { 0, "MSs in the cell are not allowed to apply IMSI attach and detach procedure"}, + { 1, "MSs in the cell shall apply IMSI attach and detach procedure"}, { 0, NULL } }; static const value_string gsm_a_rr_ccch_conf_vals[] = { - { 0, "1 basic physical channel used for CCCH, not combined with SDCCHs"}, - { 1, "1 basic physical channel used for CCCH, combined with SDCCHs"}, - { 2, "2 basic physical channels used for CCCH, not combined with SDCCHs"}, - { 3, "Reserved"}, - { 4, "3 basic physical channels used for CCCH, not combined with SDCCHs"}, - { 5, "Reserved"}, - { 6, "4 basic physical channels used for CCCH, not combined with SDCCHs"}, - { 7, "Reserved"}, + { 0, "1 basic physical channel used for CCCH, not combined with SDCCHs"}, + { 1, "1 basic physical channel used for CCCH, combined with SDCCHs"}, + { 2, "2 basic physical channels used for CCCH, not combined with SDCCHs"}, + { 3, "Reserved"}, + { 4, "3 basic physical channels used for CCCH, not combined with SDCCHs"}, + { 5, "Reserved"}, + { 6, "4 basic physical channels used for CCCH, not combined with SDCCHs"}, + { 7, "Reserved"}, { 0, NULL } }; static guint8 -de_rr_ctrl_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ctrl_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint8 oct; guint32 curr_offset; - len = len; curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, 3, - gsm_rr_elem_strings[DE_RR_CTRL_CH_DESC].strptr); + gsm_rr_elem_strings[DE_RR_CTRL_CH_DESC].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CTRL_CH_DESC]); @@ -1498,23 +1489,20 @@ de_rr_ctrl_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g return(curr_offset - offset); } - /* [3] 10.5.2.11a DTM Information Details */ /* * [3] 10.5.2.11b Dynamic ARFCN Mapping */ static guint8 -de_rr_dyn_arfcn_map(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_dyn_arfcn_map(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len,"Dynamic ARFCN Mapping content(Not decoded)"); - curr_offset = curr_offset + len; return(curr_offset - offset); @@ -1523,11 +1511,10 @@ de_rr_dyn_arfcn_map(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [3] 10.5.2.12 Frequency Channel Sequence */ static guint8 -de_rr_freq_ch_seq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_freq_ch_seq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, 9,"Frequency Channel Sequence(Not decoded)"); @@ -1536,6 +1523,7 @@ de_rr_freq_ch_seq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc return(curr_offset - offset); } + /* * [3] 10.5.2.13 Frequency List */ @@ -1553,22 +1541,22 @@ de_rr_freq_ch_seq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc */ /* The mask 0xce (1100 1110) will produce the result 0110 0111*/ static const value_string gsm_a_rr_freq_list_format_id_vals[] = { - { 0x00, "bit map 0"}, - { 0x02, "bit map 0"}, - { 0x04, "bit map 0"}, - { 0x06, "bit map 0"}, - { 0x08, "bit map 0"}, - { 0x0a, "bit map 0"}, - { 0x0c, "bit map 0"}, - { 0x0e, "bit map 0"}, - { 0x40, "1024 range"}, - { 0x41, "1024 range"}, - { 0x42, "1024 range"}, - { 0x43, "1024 range"}, - { 0x44, "512 range"}, - { 0x45, "256 range"}, - { 0x46, "128 range"}, - { 0x47, "variable bit map"}, + { 0x00, "bit map 0"}, + { 0x02, "bit map 0"}, + { 0x04, "bit map 0"}, + { 0x06, "bit map 0"}, + { 0x08, "bit map 0"}, + { 0x0a, "bit map 0"}, + { 0x0c, "bit map 0"}, + { 0x0e, "bit map 0"}, + { 0x40, "1024 range"}, + { 0x41, "1024 range"}, + { 0x42, "1024 range"}, + { 0x43, "1024 range"}, + { 0x44, "512 range"}, + { 0x45, "256 range"}, + { 0x46, "128 range"}, + { 0x47, "variable bit map"}, { 0x00, NULL } }; static guint8 @@ -1585,12 +1573,12 @@ de_rr_freq_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * except that it has a fixed length instead of a variable length and does * not contain a length indicator and that it shall not be encoded in bitmap 0 format. */ -static guint8 -de_rr_freq_short_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) + + static guint8 +de_rr_freq_short_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; /* FORMAT-ID, Format Identifier (part of octet 3)*/ @@ -1602,6 +1590,7 @@ de_rr_freq_short_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len return(curr_offset - offset); } + /* * [3] 10.5.2.14a Frequency Short List 2 * @@ -1612,11 +1601,10 @@ de_rr_freq_short_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len * not contain a length indicator and that it shall not be encoded in bitmap 0 format. */ static guint8 -de_rr_freq_short_list2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_freq_short_list2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; /* FORMAT-ID, Format Identifier (part of octet 3)*/ @@ -1638,19 +1626,18 @@ de_rr_freq_short_list2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le * [3] 10.5.2.15 Handover Reference */ static guint8 -de_rr_ho_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ho_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_HO_REF].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_rr_elem_strings[DE_RR_HO_REF].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_HO_REF]); @@ -1679,9 +1666,9 @@ de_rr_ia_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_IA_REST_OCT].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, len, + gsm_rr_elem_strings[DE_RR_IA_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_IA_REST_OCT]); @@ -1691,6 +1678,7 @@ de_rr_ia_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc return curr_offset-offset; } + /* * [3] 10.5.2.17 IAR Rest Octets */ @@ -1707,8 +1695,8 @@ de_rr_iar_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g item = proto_tree_add_text(tree, - tvb, curr_offset, 3, - gsm_rr_elem_strings[DE_RR_IAR_REST_OCT].strptr); + tvb, curr_offset, 3, + gsm_rr_elem_strings[DE_RR_IAR_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_IAR_REST_OCT]); @@ -1718,10 +1706,10 @@ de_rr_iar_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g return curr_offset-offset; } + /* * [3] 10.5.2.18 IAX Rest Octets */ - static guint8 de_rr_iax_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { @@ -1737,8 +1725,8 @@ de_rr_iax_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g item = proto_tree_add_text(tree, - tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_IAX_REST_OCT].strptr); + tvb, curr_offset, len, + gsm_rr_elem_strings[DE_RR_IAX_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_IAX_REST_OCT]); @@ -1753,16 +1741,15 @@ de_rr_iax_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g * [3] 10.5.2.19 L2 Pseudo Length */ static guint8 -de_rr_l2_pseudo_len(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_l2_pseudo_len(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; - item = proto_tree_add_text(tree,tvb, curr_offset, 1, gsm_rr_elem_strings[DE_RR_L2_PSEUDO_LEN].strptr); + item = proto_tree_add_text(tree,tvb, curr_offset, 1, gsm_rr_elem_strings[DE_RR_L2_PSEUDO_LEN].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_L2_PSEUDO_LEN]); @@ -1773,80 +1760,81 @@ de_rr_l2_pseudo_len(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, return(curr_offset - offset); } + /* * [3] 10.5.2.20 Measurement Results */ static const value_string gsm_a_rr_dtx_vals[] = { { 0, "DTX was not used"}, { 1, "DTX was used"}, - { 0, NULL} + { 0, NULL} }; static const value_string gsm_a_rr_rxlev_vals [] = { - {0, "< -110 dBm"}, - {1, "-110 <= x < -109 dBm"}, - {2, "-109 <= x < -108 dBm"}, - {3, "-108 <= x < -107 dBm"}, - {4, "-107 <= x < -106 dBm"}, - {5, "-106 <= x < -105 dBm"}, - {6, "-105 <= x < -104 dBm"}, - {7, "-104 <= x < -103 dBm"}, - {8, "-103 <= x < -102 dBm"}, - {9, "-102 <= x < -101 dBm"}, - {10, "-101 <= x < -100 dBm"}, - {11, "-100 <= x < -99 dBm"}, - {12, "-99 <= x < -98 dBm"}, - {13, "-98 <= x < -97 dBm"}, - {14, "-97 <= x < -96 dBm"}, - {15, "-96 <= x < -95 dBm"}, - {16, "-95 <= x < -94 dBm"}, - {17, "-94 <= x < -93 dBm"}, - {18, "-93 <= x < -92 dBm"}, - {19, "-92 <= x < -91 dBm"}, - {20, "-91 <= x < -90 dBm"}, - {21, "-90 <= x < -89 dBm"}, - {22, "-89 <= x < -88 dBm"}, - {23, "-88 <= x < -87 dBm"}, - {24, "-87 <= x < -86 dBm"}, - {25, "-86 <= x < -85 dBm"}, - {26, "-85 <= x < -84 dBm"}, - {27, "-84 <= x < -83 dBm"}, - {28, "-83 <= x < -82 dBm"}, - {29, "-82 <= x < -81 dBm"}, - {30, "-81 <= x < -80 dBm"}, - {31, "-80 <= x < -79 dBm"}, - {32, "-79 <= x < -78 dBm"}, - {33, "-78 <= x < -77 dBm"}, - {34, "-77 <= x < -76 dBm"}, - {35, "-76 <= x < -75 dBm"}, - {36, "-75 <= x < -74 dBm"}, - {37, "-74 <= x < -73 dBm"}, - {38, "-73 <= x < -72 dBm"}, - {39, "-72 <= x < -71 dBm"}, - {40, "-71 <= x < -70 dBm"}, - {41, "-70 <= x < -69 dBm"}, - {42, "-69 <= x < -68 dBm"}, - {43, "-68 <= x < -67 dBm"}, - {44, "-67 <= x < -66 dBm"}, - {45, "-66 <= x < -65 dBm"}, - {46, "-65 <= x < -64 dBm"}, - {47, "-64 <= x < -63 dBm"}, - {48, "-63 <= x < -62 dBm"}, - {49, "-62 <= x < -61 dBm"}, - {50, "-61 <= x < -60 dBm"}, - {51, "-60 <= x < -59 dBm"}, - {52, "-59 <= x < -58 dBm"}, - {53, "-58 <= x < -57 dBm"}, - {54, "-57 <= x < -56 dBm"}, - {55, "-56 <= x < -55 dBm"}, - {56, "-55 <= x < -54 dBm"}, - {57, "-54 <= x < -53 dBm"}, - {58, "-53 <= x < -52 dBm"}, - {59, "-52 <= x < -51 dBm"}, - {60, "-51 <= x < -50 dBm"}, - {61, "-50 <= x < -49 dBm"}, - {62, "-49 <= x < -48 dBm"}, - {63, ">= -48 dBm"}, - { 0, NULL} + {0, "< -110 dBm"}, + {1, "-110 <= x < -109 dBm"}, + {2, "-109 <= x < -108 dBm"}, + {3, "-108 <= x < -107 dBm"}, + {4, "-107 <= x < -106 dBm"}, + {5, "-106 <= x < -105 dBm"}, + {6, "-105 <= x < -104 dBm"}, + {7, "-104 <= x < -103 dBm"}, + {8, "-103 <= x < -102 dBm"}, + {9, "-102 <= x < -101 dBm"}, + {10, "-101 <= x < -100 dBm"}, + {11, "-100 <= x < -99 dBm"}, + {12, "-99 <= x < -98 dBm"}, + {13, "-98 <= x < -97 dBm"}, + {14, "-97 <= x < -96 dBm"}, + {15, "-96 <= x < -95 dBm"}, + {16, "-95 <= x < -94 dBm"}, + {17, "-94 <= x < -93 dBm"}, + {18, "-93 <= x < -92 dBm"}, + {19, "-92 <= x < -91 dBm"}, + {20, "-91 <= x < -90 dBm"}, + {21, "-90 <= x < -89 dBm"}, + {22, "-89 <= x < -88 dBm"}, + {23, "-88 <= x < -87 dBm"}, + {24, "-87 <= x < -86 dBm"}, + {25, "-86 <= x < -85 dBm"}, + {26, "-85 <= x < -84 dBm"}, + {27, "-84 <= x < -83 dBm"}, + {28, "-83 <= x < -82 dBm"}, + {29, "-82 <= x < -81 dBm"}, + {30, "-81 <= x < -80 dBm"}, + {31, "-80 <= x < -79 dBm"}, + {32, "-79 <= x < -78 dBm"}, + {33, "-78 <= x < -77 dBm"}, + {34, "-77 <= x < -76 dBm"}, + {35, "-76 <= x < -75 dBm"}, + {36, "-75 <= x < -74 dBm"}, + {37, "-74 <= x < -73 dBm"}, + {38, "-73 <= x < -72 dBm"}, + {39, "-72 <= x < -71 dBm"}, + {40, "-71 <= x < -70 dBm"}, + {41, "-70 <= x < -69 dBm"}, + {42, "-69 <= x < -68 dBm"}, + {43, "-68 <= x < -67 dBm"}, + {44, "-67 <= x < -66 dBm"}, + {45, "-66 <= x < -65 dBm"}, + {46, "-65 <= x < -64 dBm"}, + {47, "-64 <= x < -63 dBm"}, + {48, "-63 <= x < -62 dBm"}, + {49, "-62 <= x < -61 dBm"}, + {50, "-61 <= x < -60 dBm"}, + {51, "-60 <= x < -59 dBm"}, + {52, "-59 <= x < -58 dBm"}, + {53, "-58 <= x < -57 dBm"}, + {54, "-57 <= x < -56 dBm"}, + {55, "-56 <= x < -55 dBm"}, + {56, "-55 <= x < -54 dBm"}, + {57, "-54 <= x < -53 dBm"}, + {58, "-53 <= x < -52 dBm"}, + {59, "-52 <= x < -51 dBm"}, + {60, "-51 <= x < -50 dBm"}, + {61, "-50 <= x < -49 dBm"}, + {62, "-49 <= x < -48 dBm"}, + {63, ">= -48 dBm"}, + { 0, NULL} }; static const value_string gsm_a_rr_mv_vals[] = { { 0, "The measurement results are valid"}, @@ -1854,42 +1842,41 @@ static const value_string gsm_a_rr_mv_vals[] = { { 0, NULL} }; static const value_string gsm_a_rr_rxqual_vals [] = { - {0, "BER < 0.2%, Mean value 0.14%"}, - {1, "0.2% <= BER < 0.4%, Mean value 0.28%"}, - {2, "0.4% <= BER < 0.8%, Mean value 0.57%"}, - {3, "0.8% <= BER < 1.6%, Mean value 1.13%"}, - {4, "1.6% <= BER < 3.2%, Mean value 2.26%"}, - {5, "3.2% <= BER < 6.4%, Mean value 4.53%"}, - {6, "6.4% <= BER < 12.8%, Mean value 9.05%"}, - {7, "BER > 12.8%, Mean value 18.10%"}, - {0, NULL} + {0, "BER < 0.2%, Mean value 0.14%"}, + {1, "0.2% <= BER < 0.4%, Mean value 0.28%"}, + {2, "0.4% <= BER < 0.8%, Mean value 0.57%"}, + {3, "0.8% <= BER < 1.6%, Mean value 1.13%"}, + {4, "1.6% <= BER < 3.2%, Mean value 2.26%"}, + {5, "3.2% <= BER < 6.4%, Mean value 4.53%"}, + {6, "6.4% <= BER < 12.8%, Mean value 9.05%"}, + {7, "BER > 12.8%, Mean value 18.10%"}, + {0, NULL} }; static const value_string gsm_a_rr_ncell_vals [] = { - {0, "No neighbour cell measurement result"}, - {1, "1 neighbour cell measurement result"}, - {2, "2 neighbour cell measurement result"}, - {3, "3 neighbour cell measurement result"}, - {4, "4 neighbour cell measurement result"}, - {5, "5 neighbour cell measurement result"}, - {6, "6 neighbour cell measurement result"}, - {7, "Neighbour cell information not available for serving cell"}, - {0, NULL} + {0, "No neighbour cell measurement result"}, + {1, "1 neighbour cell measurement result"}, + {2, "2 neighbour cell measurement result"}, + {3, "3 neighbour cell measurement result"}, + {4, "4 neighbour cell measurement result"}, + {5, "5 neighbour cell measurement result"}, + {6, "6 neighbour cell measurement result"}, + {7, "Neighbour cell information not available for serving cell"}, + {0, NULL} }; - guint8 -de_rr_meas_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_meas_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *subtree; - proto_item *item; - guint32 curr_offset; - guint8 oct, nextoct, val; - len = len; - curr_offset = offset; + proto_tree *subtree; + proto_item *item; + guint32 curr_offset; + guint8 oct, nextoct, val; + + curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 16, - gsm_rr_elem_strings[DE_RR_MEAS_RES].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 16, + gsm_rr_elem_strings[DE_RR_MEAS_RES].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_MEAS_RES]); /* 2nd octet */ @@ -1944,7 +1931,7 @@ de_rr_meas_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar val_to_str(val, gsm_a_rr_ncell_vals, "Reserved (0x%02x)"),val); curr_offset = curr_offset + len; - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1958,15 +1945,14 @@ de_rr_mob_all(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)"); curr_offset = curr_offset + len; return(curr_offset - offset); - } + /* * [3] 10.5.2.21a Mobile Time Difference */ @@ -1975,7 +1961,6 @@ de_rr_mob_time_diff(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)"); @@ -1989,20 +1974,20 @@ de_rr_mob_time_diff(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, */ /* Multirate speech version Octet 3 Bits 8 7 6 */ static const value_string multirate_speech_ver_vals[] = { - { 1, "Adaptive Multirate speech version 1"}, - { 2, "Adaptive Multirate speech version 2"}, + { 1, "Adaptive Multirate speech version 1"}, + { 2, "Adaptive Multirate speech version 2"}, { 0, NULL } }; /* Bit 5 NSCB: Noise Suppression Control Bit */ static const value_string NSCB_vals[] = { - { 0, "Noise Suppression can be used (default)"}, - { 1, "Noise Suppression shall be turned off"}, + { 0, "Noise Suppression can be used (default)"}, + { 1, "Noise Suppression shall be turned off"}, { 0, NULL } }; /* Bit 4 ICMI: Initial Codec Mode Indicator */ static const value_string ICMI_vals[] = { - { 0, "The initial codec mode is defined by the implicit rule provided in 3GPP TS 05.09"}, - { 1, "The initial codec mode is defined by the Start Mode field"}, + { 0, "The initial codec mode is defined by the implicit rule provided in 3GPP TS 05.09"}, + { 1, "The initial codec mode is defined by the Start Mode field"}, { 0, NULL } }; /* @@ -2010,17 +1995,16 @@ Table 10.5.2.21aa.2: Set of adaptive multirate codec modes field (octet 4) for the Multirate speech version 1 */ static const true_false_string gsm_a_rr_set_of_amr_codec_modes = { - "is part of the subset", - "is not part of the subset" + "is part of the subset", + "is not part of the subset" }; guint8 -de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; guint8 oct; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_multirate_speech_ver, tvb, curr_offset, 1, FALSE); @@ -2045,7 +2029,6 @@ de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, curr_offset++; proto_tree_add_text(tree,tvb, curr_offset, len-2 ,"Parameters for multirate speech field(Not decoded)"); - break; case 2: /* Adaptive Multirate speech version 2 */ @@ -2061,7 +2044,7 @@ de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, default: proto_tree_add_text(tree,tvb,offset,1,"Unknown version"); proto_tree_add_text(tree,tvb, curr_offset, len-1 ,"Data(Not decoded)"); - break; + break; } curr_offset = offset + len; @@ -2076,7 +2059,6 @@ de_rr_mult_all(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)"); @@ -2093,17 +2075,15 @@ de_rr_mult_all(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.22 Neighbour Cell Description */ static const value_string gsm_a_rr_ext_ind_vals[] = { - { 0, "The information element carries the complete BA"}, - { 1, "The information element carries only a part of the BA"}, + { 0, "The information element carries the complete BA"}, + { 1, "The information element carries only a part of the BA"}, { 0, NULL } }; - static guint8 de_rr_neigh_cell_desc(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; proto_tree_add_item(tree, hf_gsm_a_rr_ext_ind, tvb, curr_offset, 1, FALSE); @@ -2120,7 +2100,6 @@ de_rr_neigh_cell_desc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_multiband_reporting, tvb, curr_offset, 1, FALSE); @@ -2141,9 +2120,8 @@ de_rr_neigh_cell_desc2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le * [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_) +de_rr_packet_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; guint8 oct8; guint16 arfcn, hsn, maio; @@ -2151,7 +2129,6 @@ de_rr_packet_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, proto_item *item; const gchar *str; - len = len; curr_offset = offset; item = proto_tree_add_text(tree,tvb,curr_offset,3,gsm_rr_elem_strings[DE_RR_PACKET_CH_DESC].strptr); @@ -2207,31 +2184,29 @@ de_rr_packet_ch_desc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, */ static const value_string gsm_a_rr_dedicated_mode_or_tbf_vals[] = { - { 0, "This message assigns a dedicated mode resource"}, - { 1, "This message assigns an uplink TBF or is the second message of two in a two-message assignment of an uplink or downlink TBF"}, - { 2, "Not used"}, - { 3, "This message assigns a downlink TBF to the mobile station identified in the IA Rest Octets IE"}, - { 4, "Not used"}, - { 5, "This message is the first message of two in a two-message assignment of an uplink TBF"}, - { 6, "Not used"}, - { 7, "This message is the first message of two in a two-message assignment of a downlink TBF to the mobile station identified in the IA Rest Octets IE"}, + { 0, "This message assigns a dedicated mode resource"}, + { 1, "This message assigns an uplink TBF or is the second message of two in a two-message assignment of an uplink or downlink TBF"}, + { 2, "Not used"}, + { 3, "This message assigns a downlink TBF to the mobile station identified in the IA Rest Octets IE"}, + { 4, "Not used"}, + { 5, "This message is the first message of two in a two-message assignment of an uplink TBF"}, + { 6, "Not used"}, + { 7, "This message is the first message of two in a two-message assignment of a downlink TBF to the mobile station identified in the IA Rest Octets IE"}, { 0, NULL } }; - static guint8 -de_rr_ded_mod_or_tbf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ded_mod_or_tbf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_DED_MOD_OR_TBF].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_rr_elem_strings[DE_RR_DED_MOD_OR_TBF].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_DED_MOD_OR_TBF]); @@ -2248,27 +2223,25 @@ de_rr_ded_mod_or_tbf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, */ static const value_string gsm_a_rr_page_mode_vals[] = { - { 0, "Normal paging"}, - { 1, "Extended paging"}, - { 2, "Paging reorganization"}, - { 3, "Same as before"}, + { 0, "Normal paging"}, + { 1, "Extended paging"}, + { 2, "Paging reorganization"}, + { 3, "Same as before"}, { 0, NULL } }; - static guint8 -de_rr_page_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_page_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_PAGE_MODE].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_rr_elem_strings[DE_RR_PAGE_MODE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_PAGE_MODE]); @@ -2286,17 +2259,16 @@ de_rr_page_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * [3] 10.5.2.27 NCC Permitted */ static guint8 -de_rr_ncc_perm(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ncc_perm(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_NCC_PERM].strptr); + gsm_rr_elem_strings[DE_RR_NCC_PERM].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_NCC_PERM]); @@ -2315,8 +2287,8 @@ de_rr_ncc_perm(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * 1 Sending of Handover access is optional */ static const true_false_string gsm_a_rr_pow_cmd_atc_value = { - "Sending of Handover access is optional", - "Sending of Handover access is mandatory" + "Sending of Handover access is optional", + "Sending of Handover access is mandatory" }; /* * The EPC mode field (octet 2) indicates whether the assigned channel(s) @@ -2324,8 +2296,8 @@ static const true_false_string gsm_a_rr_pow_cmd_atc_value = { * on which EPC may be used. It is coded as follows: */ static const true_false_string gsm_a_rr_pow_cmd_epc_value = { - "Channel(s) in EPC mode", - "Channel(s) not in EPC mode" + "Channel(s) in EPC mode", + "Channel(s) not in EPC mode" }; /* * FPC_EPC (octet 2) @@ -2337,7 +2309,7 @@ static const true_false_string gsm_a_rr_pow_cmd_epc_value = { * Reporting and Power Control mechanism is used. * It is coded as follows: * Value 0 FPC not in use - * 1 FPC in use + * 1 FPC in use * If the channel mode is such that EPC may be used and the EPC mode * field indicates that the channel is in EPC mode, the FPC_EPC * field indicates whether EPC shall be used for uplink power control. @@ -2347,8 +2319,8 @@ static const true_false_string gsm_a_rr_pow_cmd_epc_value = { * */ static const true_false_string gsm_a_rr_pow_cmd_fpcepc_value = { - "FPC in use/EPC in use for uplink power control", - "FPC not in use/C not in use for uplink power control" + "FPC in use/EPC in use for uplink power control", + "FPC not in use/C not in use for uplink power control" }; /* @@ -2358,19 +2330,18 @@ static const true_false_string gsm_a_rr_pow_cmd_fpcepc_value = { */ static guint8 -de_rr_pow_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_pow_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_POW_CMD].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_rr_elem_strings[DE_RR_POW_CMD].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_POW_CMD]); @@ -2391,19 +2362,18 @@ de_rr_pow_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.28a Power Command and access type */ static guint8 -de_rr_pow_cmd_and_acc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_pow_cmd_and_acc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_rr_elem_strings[DE_RR_POW_CMD_AND_ACC_TYPE].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + gsm_rr_elem_strings[DE_RR_POW_CMD_AND_ACC_TYPE].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_POW_CMD_AND_ACC_TYPE]); @@ -2425,55 +2395,54 @@ de_rr_pow_cmd_and_acc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin */ static const value_string gsm_a_rr_max_retrans_vals[] = { - { 0, "Maximum 1 retransmission"}, - { 1, "Maximum 2 retransmissions"}, - { 2, "Maximum 4 retransmissions"}, - { 3, "Maximum 7 retransmissions"}, + { 0, "Maximum 1 retransmission"}, + { 1, "Maximum 2 retransmissions"}, + { 2, "Maximum 4 retransmissions"}, + { 3, "Maximum 7 retransmissions"}, { 0, NULL } }; static const value_string gsm_a_rr_tx_integer_vals[] = { - { 0, "3 slots used to spread transmission"}, - { 1, "4 slots used to spread transmission"}, - { 2, "5 slots used to spread transmission"}, - { 3, "6 slots used to spread transmission"}, - { 4, "7 slots used to spread transmission"}, - { 5, "8 slots used to spread transmission"}, - { 6, "9 slots used to spread transmission"}, - { 7, "10 slots used to spread transmission"}, - { 8, "11 slots used to spread transmission"}, - { 9, "12 slots used to spread transmission"}, - { 10, "14 slots used to spread transmission"}, - { 11, "16 slots used to spread transmission"}, - { 12, "20 slots used to spread transmission"}, - { 13, "25 slots used to spread transmission"}, - { 14, "32 slots used to spread transmission"}, - { 15, "50 slots used to spread transmission"}, + { 0, "3 slots used to spread transmission"}, + { 1, "4 slots used to spread transmission"}, + { 2, "5 slots used to spread transmission"}, + { 3, "6 slots used to spread transmission"}, + { 4, "7 slots used to spread transmission"}, + { 5, "8 slots used to spread transmission"}, + { 6, "9 slots used to spread transmission"}, + { 7, "10 slots used to spread transmission"}, + { 8, "11 slots used to spread transmission"}, + { 9, "12 slots used to spread transmission"}, + { 10, "14 slots used to spread transmission"}, + { 11, "16 slots used to spread transmission"}, + { 12, "20 slots used to spread transmission"}, + { 13, "25 slots used to spread transmission"}, + { 14, "32 slots used to spread transmission"}, + { 15, "50 slots used to spread transmission"}, { 0, NULL } }; static const value_string gsm_a_rr_cell_barr_access_vals[] = { - { 0, "The cell is not barred"}, - { 1, "The cell is barred"}, + { 0, "The cell is not barred"}, + { 1, "The cell is barred"}, { 0, NULL } }; static const value_string gsm_a_rr_re_vals[] = { - { 0, "Call Reestablishment allowed in the cell"}, - { 1, "Call Reestablishment not allowed in the cell"}, + { 0, "Call Reestablishment allowed in the cell"}, + { 1, "Call Reestablishment not allowed in the cell"}, { 0, NULL } }; static guint8 -de_rr_rach_ctrl_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_rach_ctrl_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; guint32 curr_offset; - len = len; curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, 3, - gsm_rr_elem_strings[DE_RR_RACH_CTRL_PARAM].strptr); + gsm_rr_elem_strings[DE_RR_RACH_CTRL_PARAM].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_RACH_CTRL_PARAM]); @@ -2512,7 +2481,7 @@ static guint16 reduced_frame_number(guint16 fn) } static guint8 -de_rr_req_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_req_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { proto_tree *subtree; proto_item *item; @@ -2520,13 +2489,12 @@ de_rr_req_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar guint16 rfn; guint16 fn; - len = len; curr_offset = offset; item = - proto_tree_add_text(tree, - tvb, curr_offset, 3, - gsm_rr_elem_strings[DE_RR_REQ_REF].strptr); + proto_tree_add_text(tree, + tvb, curr_offset, 3, + gsm_rr_elem_strings[DE_RR_REQ_REF].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_REQ_REF]); @@ -2547,11 +2515,10 @@ de_rr_req_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.31 */ guint8 -de_rr_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_RR_cause, tvb, curr_offset, 1, FALSE); @@ -2575,7 +2542,7 @@ de_rr_si1_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_SI1_REST_OCT].strptr); + gsm_rr_elem_strings[DE_RR_SI1_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_SI1_REST_OCT]); @@ -2605,7 +2572,7 @@ de_rr_si3_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_SI3_REST_OCT].strptr); + gsm_rr_elem_strings[DE_RR_SI3_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_SI3_REST_OCT]); @@ -2633,7 +2600,7 @@ de_rr_si4_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_SI4_REST_OCT].strptr); + gsm_rr_elem_strings[DE_RR_SI4_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_SI4_REST_OCT]); @@ -2658,7 +2625,7 @@ de_rr_si6_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_SI6_REST_OCT].strptr); + gsm_rr_elem_strings[DE_RR_SI6_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_SI6_REST_OCT]); @@ -2688,7 +2655,7 @@ de_rr_si13_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, curr_offset = offset; item = proto_tree_add_text(tree, tvb, curr_offset, len, - gsm_rr_elem_strings[DE_RR_SI13_REST_OCT].strptr); + gsm_rr_elem_strings[DE_RR_SI13_REST_OCT].strptr); subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_SI13_REST_OCT]); @@ -2711,11 +2678,10 @@ de_rr_si13_rest_oct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * [3] 10.5.2.38 Starting Time */ static guint8 -de_rr_starting_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_starting_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, 2 ,"Data(Not decoded)"); @@ -2730,33 +2696,30 @@ de_rr_starting_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, * ROT: Report Observed Time Difference (Octet1 bit 3) */ static const true_false_string sm_a_rr_sync_ind_rot_value = { - "Mobile Time Difference IE shall be included in the HANDOVER COMPLETE message", - "Mobile Time Difference IE shall not be included in the HANDOVER COMPLETE message" + "Mobile Time Difference IE shall be included in the HANDOVER COMPLETE message", + "Mobile Time Difference IE shall not be included in the HANDOVER COMPLETE message" }; /* SI: Synchronization indication (octet 1)Bit2 1 */ static const value_string gsm_a_rr_sync_ind_si_vals[] = { - { 0, "Non-synchronized"}, - { 1, "Synchronized"}, - { 2, "Pre-synchronised"}, - { 3, "Pseudo-synchronised"}, + { 0, "Non-synchronized"}, + { 1, "Synchronized"}, + { 2, "Pre-synchronised"}, + { 3, "Pseudo-synchronised"}, { 0, NULL } }; /* NCI: Normal cell indication (octet 1, bit 4) */ static const true_false_string gsm_a_rr_sync_ind_nci_value = { - "Out of range timing advance shall trigger a handover failure procedure", - "Out of range timing advance is ignored" + "Out of range timing advance shall trigger a handover failure procedure", + "Out of range timing advance is ignored" }; - - static guint8 -de_rr_sync_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_sync_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; /*NCI */ @@ -2775,11 +2738,10 @@ de_rr_sync_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * [3] 10.5.2.40 Timing Advance */ static guint8 -de_rr_timing_adv(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_timing_adv(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_timing_adv, tvb, curr_offset, 1, FALSE); @@ -2792,11 +2754,10 @@ de_rr_timing_adv(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch * [3] 10.5.2.41 Time Difference */ static guint8 -de_rr_time_diff(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_time_diff(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_time_diff, tvb, curr_offset, 1, FALSE); @@ -2809,11 +2770,10 @@ de_rr_time_diff(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha * The TLLI is encoded as a binary number with a length of 4 octets. TLLI is defined in 3GPP TS 23.003 */ guint8 -de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_tlli, tvb, curr_offset, 4, FALSE); @@ -2835,16 +2795,15 @@ Bit 8 7 Other values are reserved for future use. */ static const value_string gsm_a_rr_target_mode_vals[] _U_ = { - { 0, "Dedicated mode"}, - { 1, "Group transmit mode"}, + { 0, "Dedicated mode"}, + { 1, "Group transmit mode"}, { 0, NULL } }; static guint8 -de_rr_vgcs_tar_mode_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_vgcs_tar_mode_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_target_mode, tvb, curr_offset, 1, FALSE); @@ -2858,32 +2817,32 @@ de_rr_vgcs_tar_mode_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * [3] 10.5.2.42b VGCS Ciphering Parameters */ static guint8 -de_rr_vgcs_cip_par(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_vgcs_cip_par(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)"); curr_offset = curr_offset + 2; + return(curr_offset - offset); } /* * [3] 10.5.2.43 Wait Indication */ static guint8 -de_rr_wait_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_wait_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_wait_indication, tvb, curr_offset, 1, FALSE); curr_offset = curr_offset + 1; + return(curr_offset - offset); } @@ -2896,26 +2855,26 @@ de_rr_wait_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar */ /*Suspension cause value (octet 2)*/ static const value_string gsm_a_rr_suspension_cause_vals[] = { - { 0, "Emergency call, mobile originating call or call re-establishment"}, - { 1, "Location Area Update"}, - { 2, "MO Short message service"}, - { 3, "Other procedure which can be completed with an SDCCH"}, - { 4, "MO Voice broadcast or group call"}, - { 5, "Mobile terminating CS connection"}, - { 6, "DTM not supported in the cell"}, + { 0, "Emergency call, mobile originating call or call re-establishment"}, + { 1, "Location Area Update"}, + { 2, "MO Short message service"}, + { 3, "Other procedure which can be completed with an SDCCH"}, + { 4, "MO Voice broadcast or group call"}, + { 5, "Mobile terminating CS connection"}, + { 6, "DTM not supported in the cell"}, { 0, NULL } }; guint8 -de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_suspension_cause, tvb, curr_offset, 1, FALSE); curr_offset = curr_offset + 1; + return(curr_offset - offset); } /* @@ -2933,19 +2892,18 @@ de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar * 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" + "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" + "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_) +de_rr_serv_sup(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, 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 @@ -2960,6 +2918,7 @@ de_rr_serv_sup(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar /* MBMS Broadcast */ proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_broadcast, tvb, curr_offset, 1, FALSE); curr_offset++; + return(curr_offset - offset); } @@ -2973,20 +2932,20 @@ bit 1 1 mobile station shall perform Service Information Sending procedure on new cell. */ static const true_false_string gsm_a_rr_last_segment_value = { - "Mobile station shall perform Service Information Sending procedure on new cell.", - "mobile station shall not perform Service Information Sending procedure on new cell." + "Mobile station shall perform Service Information Sending procedure on new cell.", + "mobile station shall not perform Service Information Sending procedure on new cell." }; static guint8 -de_rr_ded_serv_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) +de_rr_ded_serv_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { guint32 curr_offset; - len = len; curr_offset = offset; proto_tree_add_item(tree, hf_gsm_a_rr_last_segment, tvb, curr_offset, 1, FALSE); curr_offset = curr_offset + 3; + return(curr_offset - offset); } @@ -3022,7 +2981,7 @@ guint8 (*rr_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * [3] 10.5.2.8b Channel Request Description 2 */ /* Pos 20 */ de_rr_cip_mode_set, /* [3] 10.5.2.9 Cipher Mode Setting */ - de_rr_cip_mode_resp, /* [3] 10.5.2.10 Cipher Response */ + de_rr_cip_mode_resp, /* [3] 10.5.2.10 Cipher Response */ de_rr_ctrl_ch_desc, /* [3] 10.5.2.11 Control Channel Description */ /* [3] 10.5.2.11a DTM Information Details */ de_rr_dyn_arfcn_map, /* [3] 10.5.2.11b Dynamic ARFCN Mapping */ @@ -3035,11 +2994,11 @@ guint8 (*rr_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * [3] 10.5.2.14d GPRS broadcast information * [3] 10.5.2.14e Enhanced DTM CS Release Indication */ - de_rr_ho_ref, /* 10.5.2.15 Handover Reference */ - de_rr_ia_rest_oct, /* [3] 10.5.2.16 IA Rest Octets */ - de_rr_iar_rest_oct, /* [3] 10.5.2.17 IAR Rest Octets */ - de_rr_iax_rest_oct, /* [3] 10.5.2.18 IAX Rest Octets */ - de_rr_l2_pseudo_len, /*[3] 10.5.2.19 L2 Pseudo Length */ + de_rr_ho_ref, /* 10.5.2.15 Handover Reference */ + de_rr_ia_rest_oct, /* [3] 10.5.2.16 IA Rest Octets */ + de_rr_iar_rest_oct, /* [3] 10.5.2.17 IAR Rest Octets */ + de_rr_iax_rest_oct, /* [3] 10.5.2.18 IAX Rest Octets */ + de_rr_l2_pseudo_len, /*[3] 10.5.2.19 L2 Pseudo Length */ de_rr_meas_res, /* [3] 10.5.2.20 Measurement Results */ /* * [3] 10.5.2.20a GPRS Measurement Results @@ -3072,10 +3031,10 @@ guint8 (*rr_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l * [3] 10.5.2.26c (void) * [3] 10.5.2.26d (void) */ - de_rr_ncc_perm, /* [3] 10.5.2.27 NCC Permitted */ + de_rr_ncc_perm, /* [3] 10.5.2.27 NCC Permitted */ de_rr_pow_cmd, /* 10.5.2.28 Power Command */ de_rr_pow_cmd_and_acc_type, /* 10.5.2.28a Power Command and access type */ - de_rr_rach_ctrl_param, /* [3] 10.5.2.29 RACH Control Parameters */ + de_rr_rach_ctrl_param, /* [3] 10.5.2.29 RACH Control Parameters */ de_rr_req_ref, /* [3] 10.5.2.30 Request Reference */ de_rr_cause, /* 10.5.2.31 RR Cause */ de_rr_sync_ind, /* 10.5.2.39 Synchronization Indication */ @@ -3815,12 +3774,12 @@ dtap_rr_imm_ass_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void dtap_rr_meas_rep(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; /* Measurement Results 10.5.2.20 M V 16 */ ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_MEAS_RES); @@ -3855,35 +3814,35 @@ dtap_rr_paging_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) item = proto_tree_add_text(tree, - tvb, curr_offset, 1, - gsm_common_elem_strings[DE_CIPH_KEY_SEQ_NUM].strptr); + tvb, curr_offset, 1, + gsm_common_elem_strings[DE_CIPH_KEY_SEQ_NUM].strptr); subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]); other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Spare", - a_bigbuf); + tvb, curr_offset, 1, + "%s : Spare", + a_bigbuf); other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); switch (oct & 0x07) { case 0x07: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: No key is available", - a_bigbuf); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: No key is available", + a_bigbuf); + break; default: - proto_tree_add_text(subtree, - tvb, curr_offset, 1, - "%s : Ciphering Key Sequence Number: %u", - a_bigbuf, - oct & 0x07); - break; + proto_tree_add_text(subtree, + tvb, curr_offset, 1, + "%s : Ciphering Key Sequence Number: %u", + a_bigbuf, + oct & 0x07); + break; } curr_offset++; @@ -4198,18 +4157,16 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) guint32 offset, saved_offset; guint32 len; guint32 oct_1, oct_2; - proto_item *ccch_item = NULL; - proto_tree *ccch_tree = NULL; - proto_item *oct_1_item = NULL; - proto_tree *pd_tree = NULL; - proto_tree *saved_tree = NULL; - const gchar *msg_str; + proto_item *ccch_item = NULL; + proto_tree *ccch_tree = NULL; + proto_item *oct_1_item = NULL; + proto_tree *pd_tree = NULL; + proto_tree *saved_tree = NULL; + const gchar *msg_str; gint ett_tree; gint ti; int hf_idx; - gboolean nsd; - - + gboolean nsd; guint8 pseudo_len; guint32 curr_offset; guint32 consumed; @@ -4234,11 +4191,10 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tap_current++; if (tap_current >= 4) { - tap_current = 0; + tap_current = 0; } tap_p = &tap_rec[tap_current]; - offset = 0; oct_2 = 0; @@ -4278,11 +4234,11 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) switch (pd){ case 6: get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - break; + break; default: - /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */ - return; + /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */ + return; } /* @@ -4291,7 +4247,7 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (msg_str == NULL){ ccch_item = proto_tree_add_protocol_format(tree, proto_a_ccch, tvb, 0, len, "GSM CCCH - Message Type (0x%02x)", - oct); + oct); ccch_tree = proto_item_add_subtree(ccch_item, ett_ccch_msg); }else{ @@ -4324,9 +4280,9 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) oct_1_item = proto_tree_add_text(ccch_tree, - tvb, 1, 1, - "Protocol Discriminator: %s", - val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)")); + tvb, 1, 1, + "Protocol Discriminator: %s", + val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)")); pd_tree = proto_item_add_subtree(oct_1_item, ett_ccch_oct_1); @@ -4365,9 +4321,9 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) * N(SD) */ if ((pinfo->p2p_dir == P2P_DIR_RECV) && - nsd) + nsd) { - /* XXX */ + /* XXX */ } /* @@ -4413,14 +4369,14 @@ proto_register_gsm_a_rr(void) static hf_register_info hf[] = { { &hf_gsm_a_dtap_msg_rr_type, - { "DTAP Radio Resources Management Message Type", "gsm_a.dtap_msg_rr_type", - FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_rr_strings), 0x0, - "", HFILL } + { "DTAP Radio Resources Management Message Type", "gsm_a.dtap_msg_rr_type", + FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_rr_strings), 0x0, + "", HFILL } }, { &hf_gsm_a_rr_elem_id, - { "Element ID", "gsm_a_rr.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } + { "Element ID", "gsm_a_rr.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + "", HFILL } }, { &hf_gsm_a_bcc, { "BCC","gsm_a.bcc", @@ -4452,7 +4408,6 @@ proto_register_gsm_a_rr(void) FT_BOOLEAN,8, TFS(&gsm_a_rr_pow_cmd_atc_value), 0x80, "Spare", HFILL } }, - { &hf_gsm_a_rr_page_mode, { "Page Mode","gsm_a.rr.page_mode", FT_UINT8,BASE_DEC, VALS(gsm_a_rr_page_mode_vals), 0x03, @@ -4594,22 +4549,22 @@ proto_register_gsm_a_rr(void) "Random Access Information (RA)", HFILL } }, { &hf_gsm_a_rr_T1prim, - { "T1'", "gsm_a.rr.T1prim", + { "T1'", "gsm_a.rr.T1prim", FT_UINT8, BASE_DEC, NULL, 0xf8, "T1'", HFILL } }, { &hf_gsm_a_rr_T3, - { "T3", "gsm_a.rr.T3", + { "T3", "gsm_a.rr.T3", FT_UINT16, BASE_DEC, NULL, 0x07e0, "T3", HFILL } }, { &hf_gsm_a_rr_T2, - { "T2", "gsm_a.rr.T2", + { "T2", "gsm_a.rr.T2", FT_UINT8, BASE_DEC, NULL, 0x1f, "T2", HFILL } }, { &hf_gsm_a_rr_rfn, - { "RFN", "gsm_a.rr.rfn", + { "RFN", "gsm_a.rr.rfn", FT_UINT16, BASE_DEC, NULL, 0x0, "Reduced Frame Number", HFILL } }, @@ -4853,19 +4808,19 @@ proto_register_gsm_a_rr(void) for (i=0; i < NUM_GSM_DTAP_MSG_RR; i++, last_offset++) { - ett_gsm_dtap_msg_rr[i] = -1; - ett[last_offset] = &ett_gsm_dtap_msg_rr[i]; + ett_gsm_dtap_msg_rr[i] = -1; + ett[last_offset] = &ett_gsm_dtap_msg_rr[i]; } for (i=0; i < NUM_GSM_RR_ELEM; i++, last_offset++) { - ett_gsm_rr_elem[i] = -1; - ett[last_offset] = &ett_gsm_rr_elem[i]; + ett_gsm_rr_elem[i] = -1; + ett[last_offset] = &ett_gsm_rr_elem[i]; } /* Register the protocol name and description */ proto_a_ccch = - proto_register_protocol("GSM CCCH", "GSM CCCH", "gsm_a_ccch"); + proto_register_protocol("GSM CCCH", "GSM CCCH", "gsm_a_ccch"); proto_register_field_array(proto_a_ccch, hf, array_length(hf)); @@ -4875,7 +4830,6 @@ proto_register_gsm_a_rr(void) register_dissector("gsm_a_ccch", dissect_ccch, proto_a_ccch); } - void proto_reg_handoff_gsm_a_rr(void) { -- 2.34.1