aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2009-03-03 19:22:54 +0000
committerAnders Broman <anders.broman@ericsson.com>2009-03-03 19:22:54 +0000
commitf638e28b2191d84dcea1346178b721c31f14d59e (patch)
treeab086da3d582b5e9a2ca62cd8c2b5eec4261b0aa /epan
parentcc5110547c4a86c1aaeb5fbd14e92baef5db425a (diff)
From Michael Lum:
pESN detection fix and additional dissection enhancements. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3254 svn path=/trunk/; revision=27587
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-ansi_a.c524
1 files changed, 335 insertions, 189 deletions
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index 7b3bac7ffb..fbfd4b399c 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -611,6 +611,9 @@ static const value_string ansi_rev_ms_info_rec_str[] = {
#define NUM_REV_MS_INFO_REC (sizeof(ansi_rev_ms_info_rec_str)/sizeof(value_string))
static gint ett_ansi_rev_ms_info_rec[NUM_REV_MS_INFO_REC];
+/*
+ * C.S0057 Table 1.5-1
+ */
static const gchar *band_class_str[] = {
"800 MHz Cellular System",
"1.850 to 1.990 GHz Broadband PCS",
@@ -618,13 +621,20 @@ static const gchar *band_class_str[] = {
"832 to 925 MHz JTACS Band",
"1.750 to 1.870 GHz Korean PCS",
"450 MHz NMT",
- "2 GHz IMT-2000 Band",
- "North American 700 MHz Cellular Band",
+ "2 GHz IMT-2000",
+ "Upper 700 MHz",
"1.710 to 1.880 GHz PCS",
- "880 to 960 MHz Band",
- "Secondary 800 MHz Band",
- "400 MHz European PAMR Band",
- "800 MHz European PAMR Band"
+ "880 to 960 MHz",
+ "Secondary 800 MHz",
+ "400 MHz European PAMR",
+ "800 MHz European PAMR",
+ "2.5 GHz IMT-2000 Extension",
+ "US PCS 1.9 GHz",
+ "AWS",
+ "US 2.5 GHz",
+ "US 2.5 GHz Forward Link Only",
+ "700 MHz Public Safety",
+ "Lower 700 MHz"
};
#define NUM_BAND_CLASS_STR (sizeof(band_class_str)/sizeof(gchar *))
@@ -677,6 +687,7 @@ static int hf_ansi_a_a2p_bearer_udp_port = -1;
static int hf_ansi_a_so = -1;
static int hf_ansi_a_cause_1 = -1; /* 1 octet cause */
static int hf_ansi_a_cause_2 = -1; /* 2 octet cause */
+static int hf_ansi_a_meid_configured = -1;
/* Initialize the subtree pointers */
@@ -696,6 +707,8 @@ static gint ett_so_list = -1;
static gint ett_adds_user_part = -1;
static gint ett_scr = -1;
static gint ett_srvc_con_rec = -1;
+static gint ett_cm2_band_class = -1;
+static gint ett_vp_algs = -1;
static char a_bigbuf[1024];
static dissector_handle_t rtp_handle=NULL;
@@ -710,6 +723,7 @@ static address rtp_src_addr;
static guint32 rtp_ipv4_addr;
static struct e_in6_addr rtp_ipv6_addr;
static guint16 rtp_port;
+static gboolean a_meid_configured = FALSE;
typedef struct dgt_set_t
@@ -1514,10 +1528,10 @@ elem_enc_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
static guint8
elem_cm_info_type_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
- guint8 num_bands;
+ guint8 oct, oct2;
+ guint8 num_bands, band_class_count;
guint32 curr_offset;
- gint temp_int;
+ gint band_class;
proto_tree *subtree;
proto_item *item;
const gchar *str;
@@ -1689,19 +1703,21 @@ elem_cm_info_type_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
if (oct & 0x10)
{
- str = "";
+ str = "";
g_strlcat(add_string, " (MEID configured)", string_len);
+ a_meid_configured = TRUE;
}
else
{
- str = "not ";
+ str = "not ";
}
other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ proto_tree_add_boolean_format(subtree, hf_ansi_a_meid_configured, tvb,
+ curr_offset, 1, a_meid_configured,
"%s : MEID %sconfigured",
- a_bigbuf,
- str);
+ a_bigbuf,
+ str);
other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
proto_tree_add_text(subtree, tvb, curr_offset, 1,
@@ -1730,16 +1746,16 @@ elem_cm_info_type_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
+ NO_MORE_DATA_CHECK(len);
+
+ band_class_count = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_text(tree, tvb, curr_offset, 1,
"Count of Band Class Entries: %u",
- oct);
+ band_class_count);
curr_offset++;
- NO_MORE_DATA_CHECK(len);
-
oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_text(tree, tvb, curr_offset, 1,
@@ -1750,69 +1766,137 @@ elem_cm_info_type_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
NO_MORE_DATA_CHECK(len);
- SHORT_DATA_CHECK(len - (curr_offset - offset), 3);
-
- num_bands = 0;
- do
- {
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- temp_int = oct & 0x1f;
- if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[temp_int];
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
-
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class %u Air Interfaces Supported: %u",
- a_bigbuf,
- num_bands,
- oct & 0x1f);
-
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Band Class %u MS Protocol Level: %u",
- num_bands,
- oct);
-
- curr_offset++;
-
- num_bands++;
+ if (oct > 0)
+ {
+ SHORT_DATA_CHECK(len - (curr_offset - offset), 3);
+
+ num_bands = 0;
+ do
+ {
+ item =
+ proto_tree_add_text(tree, tvb, curr_offset, 3,
+ "Band Class Entry [%u]",
+ num_bands + 1);
+
+ subtree = proto_item_add_subtree(item, ett_cm2_band_class);
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Reserved",
+ a_bigbuf);
+
+ band_class = oct & 0x1f;
+ if ((band_class < 0) || (band_class >= (gint) NUM_BAND_CLASS_STR))
+ {
+ str = "Reserved";
+ }
+ else
+ {
+ str = band_class_str[band_class];
+ }
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class: %s",
+ a_bigbuf,
+ str);
+
+ curr_offset++;
+
+ oct2 = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset+1);
+
+ if (oct < 4)
+ {
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x80, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE0 (CDMA mode in Band Class 1 and Band Class 4)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x40, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE1 (CDMA mode in Band Class 0 and Band Class 3)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x20, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE2 (Analog mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x10, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE3 (Wide analog mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x08, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE4 (Narrow analog mode)",
+ a_bigbuf);
+ }
+ else
+ {
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x80, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE0 (CDMA mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x40, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE1 (CDMA mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x20, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE2 (Analog mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x10, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE3 (Wide analog mode)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x08, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Band Class Air Interfaces OP_MODE4 (Narrow analog mode)",
+ a_bigbuf);
+ }
+
+ other_decode_bitfield_value(a_bigbuf, oct2, 0x07, 8);
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "%s : Reserved",
+ a_bigbuf);
+
+ curr_offset++;
+
+ proto_tree_add_text(subtree,
+ tvb, curr_offset, 1,
+ "Band Class MS Protocol Level: %u",
+ oct);
+
+ curr_offset++;
+
+ proto_item_append_text(item, ": (%d)", band_class);
+
+ num_bands++;
+ }
+ while (((len - (curr_offset - offset)) >= 3) &&
+ (num_bands < band_class_count));
}
- while ((len - (curr_offset - offset)) >= 3);
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -2214,8 +2298,8 @@ elem_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_
value);
g_snprintf(add_string, string_len, " - %sESN (0x%04x)",
- (value & 0x80000000) ? "p" : "",
- value);
+ a_meid_configured ? "p" : "",
+ value);
curr_offset += 4;
break;
@@ -5834,9 +5918,8 @@ elem_is2000_mob_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
guint8 oct;
guint8 oct_len;
guint32 curr_offset;
- gboolean rev_pdch_supported = FALSE;
- gboolean for_pdch_supported = FALSE;
- gboolean dcch_supported;
+ proto_tree *subtree;
+ proto_item *item = NULL;
const gchar *str;
curr_offset = offset;
@@ -5853,19 +5936,17 @@ elem_is2000_mob_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
break;
case A_VARIANT_IOS501:
- rev_pdch_supported = (oct & 0x80) ? TRUE : FALSE;
other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
"%s : REV_PDCH Supported: IS-2000 R-PDCH %ssupported",
a_bigbuf,
- rev_pdch_supported ? "" : "not ");
+ (oct & 0x80) ? "" : "not ");
- for_pdch_supported = (oct & 0x40) ? TRUE : FALSE;
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
"%s : FOR_PDCH Supported: IS-2000 F-PDCH %ssupported",
a_bigbuf,
- for_pdch_supported ? "" : "not ");
+ (oct & 0x40) ? "" : "not ");
other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
@@ -5875,12 +5956,11 @@ elem_is2000_mob_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
break;
}
- dcch_supported = (oct & 0x10) ? TRUE : FALSE;
other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
"%s : DCCH Supported: IS-2000 DCCH %ssupported",
a_bigbuf,
- dcch_supported ? "" : "not ");
+ (oct & 0x10) ? "" : "not ");
other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
@@ -5972,133 +6052,188 @@ elem_is2000_mob_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
NO_MORE_DATA_CHECK(len);
}
- if (dcch_supported)
- {
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * DCCH
+ */
+ oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "DCCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "DCCH Information: Bit-Exact Length Octet Count: %u",
+ oct_len);
- 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, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : Reserved",
+ a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : DCCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : DCCH Information: Bit-Exact Length Fill Bits: %u",
+ a_bigbuf,
+ oct & 0x07);
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (oct_len > 0)
- {
- SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
+ if (oct_len > 0)
+ {
+ SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "DCCH Information Content");
+ proto_tree_add_text(tree, tvb, curr_offset, oct_len,
+ "DCCH Information Content");
- curr_offset += oct_len;
+ curr_offset += oct_len;
- NO_MORE_DATA_CHECK(len);
- }
+ NO_MORE_DATA_CHECK(len);
}
- if (for_pdch_supported)
- {
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * FOR_PDCH
+ */
+ oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "FOR_PDCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "FOR_PDCH Information: Bit-Exact Length Octet Count: %u",
+ oct_len);
- 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, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : Reserved",
+ a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : FOR_PDCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : FOR_PDCH Information: Bit-Exact Length Fill Bits: %u",
+ a_bigbuf,
+ oct & 0x07);
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (oct_len > 0)
- {
- SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
+ if (oct_len > 0)
+ {
+ SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "FOR_PDCH Information Content");
+ proto_tree_add_text(tree, tvb, curr_offset, oct_len,
+ "FOR_PDCH Information Content");
- curr_offset += oct_len;
+ curr_offset += oct_len;
- NO_MORE_DATA_CHECK(len);
- }
+ NO_MORE_DATA_CHECK(len);
}
- if (rev_pdch_supported)
- {
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * REV_PDCH
+ */
+ oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "REV_PDCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "REV_PDCH Information: Bit-Exact Length Octet Count: %u",
+ oct_len);
- 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, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : Reserved",
+ a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : REV_PDCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "%s : REV_PDCH Information: Bit-Exact Length Fill Bits: %u",
+ a_bigbuf,
+ oct & 0x07);
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (oct_len > 0)
- {
- SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
+ if (oct_len > 0)
+ {
+ SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "REV_PDCH Information Content");
+ proto_tree_add_text(tree, tvb, curr_offset, oct_len,
+ "REV_PDCH Information Content");
- curr_offset += oct_len;
+ curr_offset += oct_len;
- NO_MORE_DATA_CHECK(len);
- }
+ NO_MORE_DATA_CHECK(len);
+ }
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ item =
+ proto_tree_add_text(tree, tvb,
+ curr_offset, 1,
+ "VP Algorithms Supported%s",
+ oct ? "" : ": No voice privacy supported");
+
+ if (oct)
+ {
+ subtree =
+ proto_item_add_subtree(item, ett_vp_algs);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : %s",
+ a_bigbuf,
+ (oct & 0x80) ? "No extension" : "Extended");
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A7: Reserved",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A6: Reserved",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A5: Reserved",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A4: Reserved",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A3: Reserved",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A2: Advanced Encryption Standard (AES)",
+ a_bigbuf);
+
+ other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s : A1: Private long code",
+ a_bigbuf);
}
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -7951,15 +8086,15 @@ elem_a2p_bearer_session(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l
static guint8
elem_a2p_bearer_format(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- proto_item *item;
- proto_tree *subtree;
- guint8 num_bearers;
- guint32 curr_offset, orig_offset;
- guint8 ip_addr_type;
- gboolean ext;
- guint8 ext_len;
- const gchar *str;
+ guint8 oct;
+ proto_item *item;
+ proto_tree *subtree;
+ guint8 num_bearers;
+ guint32 curr_offset, orig_offset;
+ guint8 ip_addr_type;
+ gboolean ext;
+ guint8 ext_len;
+ const gchar *str;
const gchar *mime_type;
gboolean format_assigned;
gboolean first_assigned_found;
@@ -11486,7 +11621,7 @@ dissect_cdma2000_a1_elements(tvbuff_t *tvb, _U_ packet_info *pinfo, proto_tree *
ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
}
-/* GENERIC MAP DISSECTOR FUNCTIONS */
+/* GENERIC DISSECTOR FUNCTIONS */
static void
dissect_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
@@ -11576,6 +11711,8 @@ dissect_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if ((len - offset) <= 0) return;
+ a_meid_configured = FALSE;
+
/*
* decode elements
*/
@@ -11771,6 +11908,8 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if ((len - offset) <= 0) return;
+ a_meid_configured = FALSE;
+
/*
* decode elements
*/
@@ -11928,6 +12067,11 @@ proto_register_ansi_a(void)
{ "Cause", "ansi_a_bsmap.cause_2",
FT_UINT16, BASE_DEC, NULL, 0,
"", HFILL }
+ },
+ { &hf_ansi_a_meid_configured,
+ { "Is MEID configured", "ansi_a_bsmap.meid_configured",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "Is MEID configured", HFILL }
}
};
@@ -11947,7 +12091,7 @@ proto_register_ansi_a(void)
#define MAX_NUM_DTAP_MSG MAX(ANSI_A_IOS401_DTAP_NUM_MSG, ANSI_A_IOS501_DTAP_NUM_MSG)
#define MAX_NUM_BSMAP_MSG MAX(ANSI_A_IOS401_BSMAP_NUM_MSG, ANSI_A_IOS501_BSMAP_NUM_MSG)
#define MAX_NUM_ELEM_1 MAX(MAX_IOS401_NUM_ELEM_1, MAX_IOS501_NUM_ELEM_1)
-#define NUM_INDIVIDUAL_ELEMS 16
+#define NUM_INDIVIDUAL_ELEMS 18
gint **ett;
gint ett_len = (NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+MAX_NUM_BSMAP_MSG+MAX_NUM_ELEM_1+NUM_FWD_MS_INFO_REC+NUM_REV_MS_INFO_REC) * sizeof(gint *);
@@ -11982,6 +12126,8 @@ proto_register_ansi_a(void)
ett[13] = &ett_adds_user_part;
ett[14] = &ett_scr;
ett[15] = &ett_srvc_con_rec;
+ ett[16] = &ett_cm2_band_class;
+ ett[17] = &ett_vp_algs;
last_offset = NUM_INDIVIDUAL_ELEMS;