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
* [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 */
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);
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);
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);
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++;
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);
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)
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++;
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);
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;
* [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);
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++;
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
* [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);
* [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++;
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);
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);
* [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);
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)
{
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++;
* [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++;
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
* [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++;
* [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);
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 */
* [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 */
* [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);
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)
{
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++;
* [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++;
* [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);
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 */
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
if (check_col(pinfo->cinfo, COL_INFO))
{
- col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) ");
+ col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) ");
}
/*
tap_current++;
if (tap_current >= 4)
{
- tap_current = 0;
+ tap_current = 0;
}
tap_p = &tap_rec[tap_current];
*/
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;
*/
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);
}
}
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",
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));
{ 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 }
* 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 }
};
/*
* 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;
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;
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;
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);
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);
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);
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);
/*
* 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;
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;
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);
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);
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
{
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';
{
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';
}
}
* [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;
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]);
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);
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 */
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);
* [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]);
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);
* [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++;
* [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)
{
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;
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++;
* [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;
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)
{
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);
* [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);
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;
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);
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,
{ &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 }
},
};
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 */
*
* $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 <mlum [AT] telostech.com>,
* In association with Telos Technology Inc.
*
* 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 */
#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
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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; \
}
{\
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);
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 */
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 */
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 */
/* 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 */
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 */
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 */
*
* 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;
};
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[] = {
{ 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" },
{ 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" },
{ 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 }
};
"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[] = {
#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;
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;
#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;
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;
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;
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)
{
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;
* [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);
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++;
* [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
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 */
* [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);
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;
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;
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++;
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)
{
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++;
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)
{
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)
{
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++;
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,
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)
{
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++;
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");
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)
{
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)
{
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++;
/* octet 5a */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 5a");
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)
{
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++;
/* octet 5b */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 5b");
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++;
/* octet 6 */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"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++;
/* octet 6a */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6a");
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)
{
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++;
/* octet 6b */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6b");
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)
{
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++;
/* octet 6c */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6c");
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 = "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)
{
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++;
/* octet 6d */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6d");
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)
{
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++;
/* octet 6e */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6e");
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,
}
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);
/* octet 6f */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6f");
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)
{
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,
}
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);
/* octet 6g */
item =
- proto_tree_add_text(tree,
+ proto_tree_add_text(tree,
tvb, curr_offset, 1,
"Octet 6g");
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,
}
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);
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)
{
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;
}
{
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++;
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++;
* [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;
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]);
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)
{
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++;
}
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 }
};
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);
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);
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);
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)
{
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++;
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);
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);
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)
{
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);
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++;
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++;
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);
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;
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 */
* [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)
{
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)
{
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++;
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)
{
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++;
* [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);
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++;
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++;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset, len,
- "RPDU (not displayed)");
+ "RPDU (not displayed)");
/*
* dissect the embedded RP message
* [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);
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 */
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<lb_setup_length) && (j<4); i+=3,j++)
- {
- proto_tree_add_text(tree, tvb, curr_offset, 1, "LB setup RB IE %d",j+1);
- value = tvb_get_ntohs(tvb, curr_offset);
- curr_offset += 2;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Uplink RLC SDU size is %d bits",value);
- oct = tvb_get_guint8(tvb, curr_offset);
- curr_offset+= 1;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Radio Bearer %d",oct & 0x1f);
- }
- break;
- }
- case 1:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 2 loop back (loopback of transport block data and CRC bits)");
- break;
- case 2:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 3 RLC SDU counting (counting of received RLC SDUs)");
- oct = tvb_get_guint8(tvb, curr_offset);
- curr_offset+= 1;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MBMS short transmission identity %d",(oct & 0x1f)+1);
- break;
- default:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode reserved (%d)",oct & 0x03);
- break;
- }
-
- return(curr_offset - offset);
+ 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<lb_setup_length) && (j<4); i+=3,j++)
+ {
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "LB setup RB IE %d",j+1);
+ value = tvb_get_ntohs(tvb, curr_offset);
+ curr_offset += 2;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Uplink RLC SDU size is %d bits",value);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset+= 1;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Radio Bearer %d",oct & 0x1f);
+ }
+ break;
+ }
+ case 1:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 2 loop back (loopback of transport block data and CRC bits)");
+ break;
+ case 2:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 3 RLC SDU counting (counting of received RLC SDUs)");
+ oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset+= 1;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MBMS short transmission identity %d",(oct & 0x1f)+1);
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode reserved (%d)",oct & 0x03);
+ break;
+ }
+
+ return(curr_offset - offset);
}
static guint8
de_tp_ue_positioning_technology(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);
- switch (oct)
- {
- case 0:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "AGPS");
- break;
- default:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE positioning technology reserved (%d)",oct);
- break;
- }
+ switch (oct)
+ {
+ case 0:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "AGPS");
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE positioning technology reserved (%d)",oct);
+ break;
+ }
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return(curr_offset - offset);
}
static guint8
de_tp_rlc_sdu_counter_value(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint32 value;
+ guint32 curr_offset;
+ guint32 value;
- curr_offset = offset;
+ curr_offset = offset;
- value = tvb_get_ntohl(tvb, curr_offset);
- curr_offset+= 4;
+ value = tvb_get_ntohl(tvb, curr_offset);
+ curr_offset+= 4;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE received RLC SDU counter value %d",value);
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE received RLC SDU counter value %d",value);
- return(curr_offset - offset);
+ return(curr_offset - offset);
}
guint8 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = {
de_auth_fail_param, /* Authentication Failure Parameter (UMTS authentication challenge only) */
NULL /* handled inline */, /* CM Service Type */
NULL /* handled inline */, /* Identity Type */
- /* Pos 50 */
NULL /* handled inline */, /* Location Updating Type */
de_network_name, /* Network Name */
de_rej_cause, /* Reject Cause */
de_day_saving_time, /* Daylight Saving Time */
NULL, /* Emergency Number List */
/* Call Control Information Elements 10.5.4 */
- /* Pos 60 */
de_aux_states, /* Auxiliary States */
de_bearer_cap, /* Bearer Capability */
de_cc_cap, /* Call Control Capabilities */
/* 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 */
NULL, /* NONE */
};
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_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++;
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_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++;
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_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]);
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--;
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)
{
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--;
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)
{
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);
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]);
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--;
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))
#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 */
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) ");
}
/*
tap_current++;
if (tap_current >= 4)
{
- tap_current = 0;
+ tap_current = 0;
}
tap_p = &tap_rec[tap_current];
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);
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"));
}
/*
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;
*/
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++;
*/
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);
}
}
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,
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));
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");
*
* 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;
* [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);
}
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++;
* [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);
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++;
* [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);
}
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++;
* [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);
}
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 */
* [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);
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++;
* 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
{ 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;
proto_item *tf = NULL;
proto_tree *tf_tree = NULL;
- len = len;
curr_offset = offset;
tf = proto_tree_add_text(tree,
}
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);
* [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);
}
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++;
* [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);
}
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++;
{
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 : "");
{
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);
* [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);
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++;
* [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);
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++;
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 );
/* 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++;
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++;
* [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 */
"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;
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;
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) )
{
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;
* 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;
* 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;
* 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;
* 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;
* 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;
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;
* 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;
* 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;
* 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;
* 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;
* 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;
* 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,
* 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;
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;
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;
* 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;
* 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 );
* [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);
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++;
* [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;
* [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);
}
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++;
* [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;
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);
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++;
* [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++;
* [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);
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++;
* [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);
/* 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++;
* [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,
* [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;
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);
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++;
* [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);
}
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++;
/* [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
* [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);
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++;
* [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);
}
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++;
* [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);
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++;
* [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);
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);
}
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++;
* [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");
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 */
* [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++;
{
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);
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;
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,
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);
{
guint32 curr_offset;
guint curr_len;
- guchar oct, tmp_oct;
+ guchar oct, tmp_oct;
const gchar *str;
curr_len = len;
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);
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);
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);
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);
}
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);
}
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);
}
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);
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);
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);
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);
}
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);
}
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);
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);
}
}
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);
}
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;
* [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);
}
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++;
{
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;
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;
* [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++;
* [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++;
{
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;
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);
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) = {
#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
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;
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 );
/* 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);
}
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
-
/*
* [8] 9.5.15 Deactivate PDP context accept
*/
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,
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 */
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));
"GPRS SM PCO PPP protocol", FT_UINT16, BASE_HEX);
}
-
void
proto_reg_handoff_gsm_a_gm(void)
{
-
data_handle = find_dissector("data");
}
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;
* [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++;
curr_offset = offset;
proto_tree_add_text(tree, tvb, curr_offset, len,
- "TPDU (not displayed)");
+ "TPDU (not displayed)");
/*
* dissect the embedded TPDU message
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)
{
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);
if (check_col(pinfo->cinfo, COL_INFO))
{
- col_append_str(pinfo->cinfo, COL_INFO, "(RP) ");
+ col_append_str(pinfo->cinfo, COL_INFO, "(RP) ");
}
/*
*/
if (!tree)
{
- return;
+ return;
}
offset = 0;
*/
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);
+ }
}
/*
*/
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);
}
}
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 }
},
};
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));
*
* 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
/* [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 */
/* 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 }
};
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 */
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
/*
* [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 */
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<<bits); /* mask "bits" low bits to start wi from existing octet */
- wbits = bits;
- if (wsize>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<<bits); /* mask "bits" low bits to start wi from existing octet */
+ wbits = bits;
+ if (wsize>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);
}
}
-
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_)
{
* [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;
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]);
* [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;
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]);
* [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;
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]);
* [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]);
* [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;
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);
* [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;
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);
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)
{
*/
/* 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);
*/
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);
* 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);
* [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);
*/
/* 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
/* [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]);
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);
* [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)");
return(curr_offset - offset);
}
+
/*
* [3] 10.5.2.13 Frequency List
*/
*/
/* 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
* 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)*/
return(curr_offset - offset);
}
+
/*
* [3] 10.5.2.14a Frequency Short List 2
*
* 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)*/
* [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]);
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]);
return curr_offset-offset;
}
+
/*
* [3] 10.5.2.17 IAR Rest Octets
*/
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]);
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_)
{
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]);
* [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]);
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"},
{ 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 */
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);
}
/*
{
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
*/
{
guint32 curr_offset;
- len = len;
curr_offset = offset;
proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)");
*/
/* 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 }
};
/*
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);
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 */
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;
{
guint32 curr_offset;
- len = len;
curr_offset = offset;
proto_tree_add_text(tree,tvb, curr_offset, len ,"Data(Not decoded)");
* [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);
{
guint32 curr_offset;
- len = len;
curr_offset = offset;
proto_tree_add_item(tree, hf_gsm_a_rr_multiband_reporting, tvb, curr_offset, 1, FALSE);
* [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;
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);
*/
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]);
*/
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]);
* [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]);
* 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)
* 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)
* 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.
*
*/
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"
};
/*
*/
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]);
* [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]);
*/
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]);
}
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;
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]);
* [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);
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]);
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]);
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]);
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]);
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]);
* [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)");
* 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 */
* [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);
* [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);
* 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);
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);
* [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);
}
*/
/*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);
}
/*
* 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
/* MBMS Broadcast */
proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_broadcast, tvb, curr_offset, 1, FALSE);
curr_offset++;
+
return(curr_offset - offset);
}
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);
}
* [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 */
* [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
* [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 */
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);
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++;
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;
tap_current++;
if (tap_current >= 4)
{
- tap_current = 0;
+ tap_current = 0;
}
tap_p = &tap_rec[tap_current];
-
offset = 0;
oct_2 = 0;
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;
}
/*
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{
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);
* N(SD)
*/
if ((pinfo->p2p_dir == P2P_DIR_RECV) &&
- nsd)
+ nsd)
{
- /* XXX */
+ /* XXX */
}
/*
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",
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,
"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 }
},
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));
register_dissector("gsm_a_ccch", dissect_ccch, proto_a_ccch);
}
-
void
proto_reg_handoff_gsm_a_rr(void)
{