aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2007-01-12 17:50:20 +0000
committerAnders Broman <anders.broman@ericsson.com>2007-01-12 17:50:20 +0000
commit69238439c43f07d2d48fc9d22f24e34d7c0891de (patch)
tree827e797f13a81a6c97dac57e5cdaac9352f0944c /epan
parent61b7428ae5ed6053fe202138c7a4cf56fff2410f (diff)
Dissect cdma2000HandoffInvokeIOSData.
svn path=/trunk/; revision=20409
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-ansi_a.c54
-rw-r--r--epan/dissectors/packet-ansi_a.h2
-rw-r--r--epan/dissectors/packet-ansi_map.c122
3 files changed, 137 insertions, 41 deletions
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index 430f88c976..cdf4ae92c8 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -10904,6 +10904,60 @@ static void (*dtap_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, g
NULL, /* NONE */
};
+/* Utillity function to dissect CDMA200 A1 elements in ANSI MAP messages */
+void
+dissect_cdma2000_a1_elements(tvbuff_t *tvb, _U_ packet_info *pinfo, proto_tree *tree, guint32 offset, guint len){
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+ /* 0x22 IS-95 Channel Identity */
+ ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
+ /* 0x09 IS-2000 Channel Identity */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID, "");
+ /* 0x0f IS-2000 Non-Negotiable Service */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_NN_SCR, "");
+ /* 0x62 IS-95/IS-2000 Cause Value */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_CAUSE, "");
+ /* 0x10 Extended Handoff Direction Parameters */
+ ELEM_OPT_TLV(ANSI_A_E_EXT_HO_DIR_PARAMS, "");
+ /* 0x16 Hard Handoff Parameters */
+ ELEM_OPT_TLV(ANSI_A_E_HHO_PARAMS, "");
+ /* 0x11 IS-2000 Mobile Capabilities */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
+ /* 0x0e IS-2000 Service Configuration Record */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_SCR, "");
+ /* 0x14 PDSN IP Address */
+ switch (a_variant)
+ {
+ case A_VARIANT_IOS401:
+ ELEM_OPT_TLV(ANSI_A_E_PDSN_IP_ADDR, "");
+ break;
+ case A_VARIANT_IOS501:
+ ELEM_OPT_TLV(ANSI_A_E_S_PDSN_ADDR, "");
+ break;
+ }
+ /* 0x18 Protocol Type */
+ ELEM_OPT_TLV(ANSI_A_E_PTYPE, "");
+ ELEM_OPT_TLV(ANSI_A_E_QOS_PARAMS, "");
+ /* 0x2a Service Option List */
+ ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
+ /* Source RNC to Target RNC Transparent Container */
+ ELEM_OPT_TLV(ANSI_A_E_SRNC_TRNC_TC, "");
+ /* 0x3a Target RNC to source RNC Transparent Container */
+ ELEM_OPT_TLV(ANSI_A_E_TRNC_SRNC_TC, "");
+ /* Slot Cycle Index */
+ ELEM_OPT_TLV(ANSI_A_E_SCI, ""); /* XXX TV used elswhere?? */
+ ELEM_OPT_TLV(ANSI_A_E_ACC_NET_ID, "");/* XXX TV used elswhere?? */
+ ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID_3X, "");
+ /* 0x2a Service Option List ( XX in Response this is mentioned last
+ * need to repete it here?
+ */
+ ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
+}
+
/* GENERIC MAP DISSECTOR FUNCTIONS */
static void
diff --git a/epan/dissectors/packet-ansi_a.h b/epan/dissectors/packet-ansi_a.h
index ae18cc9b55..ebbe136acb 100644
--- a/epan/dissectors/packet-ansi_a.h
+++ b/epan/dissectors/packet-ansi_a.h
@@ -78,3 +78,5 @@ WS_VAR_IMPORT const ext_value_string_t *ansi_a_elem_1_strings;
* array
*/
#define ANSI_A_MAX_NUM_IOS_ELEM_1_STRINGS 255
+
+void dissect_cdma2000_a1_elements(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len);
diff --git a/epan/dissectors/packet-ansi_map.c b/epan/dissectors/packet-ansi_map.c
index 4ed47013c4..0b9130d234 100644
--- a/epan/dissectors/packet-ansi_map.c
+++ b/epan/dissectors/packet-ansi_map.c
@@ -700,7 +700,14 @@ static gint ett_cdmachanneldata = -1;
static gint ett_cdmastationclassmark = -1;
static gint ett_channeldata = -1;
static gint ett_confidentialitymodes = -1;
+static gint ett_CDMA2000HandoffInvokeIOSData = -1;
+static gint ett_CDMA2000HandoffResponseIOSData = -1;
static gint ett_originationtriggers = -1;
+static gint ett_pacaindicator = -1;
+static gint ett_callingpartyname = -1;
+static gint ett_triggercapability = -1;
+static gint ett_winoperationscapability = -1;
+static gint ett_controlnetworkid = -1;
static gint ett_transactioncapability = -1;
static gint ett_cdmaserviceoption = -1;
static gint ett_systemcapabilities = -1;
@@ -916,7 +923,7 @@ static gint ett_ansi_map_MobileStationMSID = -1;
static gint ett_ansi_map_NewlyAssignedMSID = -1;
/*--- End of included file: packet-ansi_map-ett.c ---*/
-#line 335 "packet-ansi_map-template.c"
+#line 342 "packet-ansi_map-template.c"
/* Global variables */
static dissector_handle_t data_handle=NULL;
@@ -1811,38 +1818,38 @@ dissect_ansi_map_cdmacallmode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
item = get_ber_last_created_item();
subtree = proto_item_add_subtree(item, ett_mscid);
- /* Call Mode (octet 1, bit A) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cdma, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit B) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_amps, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit C) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_namps, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit D) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls1, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit E) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls2, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit F) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls3, tvb, offset, 1, FALSE);
- /* Call Mode (octet 1, bit G) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls4, tvb, offset, 1, FALSE);
/* Call Mode (octet 1, bit H) */
proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls5, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit G) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls4, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit F) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls3, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit E) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls2, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit D) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls1, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit C) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_namps, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit B) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_amps, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 1, bit A) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cdma, tvb, offset, 1, FALSE);
length--;
if ( length == 0)
return;
offset++;
- /* Call Mode (octet 2, bit A) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls6, tvb, offset, 1, FALSE);
- /* Call Mode (octet 2, bit B) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls7, tvb, offset, 1, FALSE);
- /* Call Mode (octet 2, bit C) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls8, tvb, offset, 1, FALSE);
- /* Call Mode (octet 2, bit D) */
- proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls9, tvb, offset, 1, FALSE);
/* Call Mode (octet 2, bit E) */
proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls10, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 2, bit D) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls9, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 2, bit C) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls8, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 2, bit B) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls7, tvb, offset, 1, FALSE);
+ /* Call Mode (octet 2, bit A) */
+ proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls6, tvb, offset, 1, FALSE);
}
/* 6.5.2.30 CDMAChannelData */
@@ -2668,7 +2675,7 @@ dissect_ansi_map_pacaindicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree *subtree;
item = get_ber_last_created_item();
- subtree = proto_item_add_subtree(item, ett_originationtriggers);
+ subtree = proto_item_add_subtree(item, ett_pacaindicator);
/* PACA Level (octet 1, bits B-E) */
proto_tree_add_item(subtree, hf_ansi_map_PACA_Level, tvb, offset, 1, FALSE);
/* Permanent Activation (PA) (octet 1, bit A) */
@@ -3586,7 +3593,7 @@ dissect_ansi_map_callingpartyname(tvbuff_t *tvb, packet_info *pinfo, proto_tree
proto_tree *subtree;
item = get_ber_last_created_item();
- subtree = proto_item_add_subtree(item, ett_originationtriggers);
+ subtree = proto_item_add_subtree(item, ett_callingpartyname);
/* Availability (octet 1, bit E) N.S0012-0 v 1.0*/
/* Presentation Status (octet 1, bits A and B) */
@@ -3638,7 +3645,7 @@ dissect_ansi_map_triggercapability(tvbuff_t *tvb, packet_info *pinfo, proto_tree
proto_tree *subtree;
item = get_ber_last_created_item();
- subtree = proto_item_add_subtree(item, ett_originationtriggers);
+ subtree = proto_item_add_subtree(item, ett_triggercapability);
/* O_No_Answer (ONA) (octet 1, bit H)*/
@@ -3721,7 +3728,7 @@ dissect_ansi_map_winoperationscapability(tvbuff_t *tvb, packet_info *pinfo, prot
proto_tree *subtree;
item = get_ber_last_created_item();
- subtree = proto_item_add_subtree(item, ett_originationtriggers);
+ subtree = proto_item_add_subtree(item, ett_winoperationscapability);
/* PositionRequest (POS) (octet 1, bit C) */
proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_pos, tvb, offset, 1, FALSE);
@@ -3741,7 +3748,7 @@ dissect_ansi_map_controlnetworkid(tvbuff_t *tvb, packet_info *pinfo, proto_tree
proto_tree *subtree;
item = get_ber_last_created_item();
- subtree = proto_item_add_subtree(item, ett_originationtriggers);
+ subtree = proto_item_add_subtree(item, ett_controlnetworkid);
/* MarketID octet 1 and 2 */
proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE);
offset = offset + 2;
@@ -5429,7 +5436,7 @@ static int dissect_reauthenticationReport_impl(packet_info *pinfo, proto_tree *t
static int
dissect_ansi_map_ServiceIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 385 "ansi_map.cnf"
+#line 411 "ansi_map.cnf"
tvbuff_t *parameter_tvb = NULL;
guint8 ServiceIndicator;
offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
@@ -5930,8 +5937,21 @@ static int dissect_alertCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
static int
dissect_ansi_map_CDMA2000HandoffInvokeIOSData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 385 "ansi_map.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ proto_item *item;
+ proto_tree *subtree;
+
offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &parameter_tvb);
+
+ if (parameter_tvb){
+ item = get_ber_last_created_item();
+ subtree = proto_item_add_subtree(item, ett_CDMA2000HandoffInvokeIOSData);
+ dissect_cdma2000_a1_elements(parameter_tvb, pinfo, subtree, 0, tvb_length_remaining(tvb,0));
+ }
+
+
return offset;
}
@@ -6616,8 +6636,21 @@ static int dissect_bsmcstatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
static int
dissect_ansi_map_CDMA2000HandoffResponseIOSData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 398 "ansi_map.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ proto_item *item;
+ proto_tree *subtree;
+
offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &parameter_tvb);
+
+ if (parameter_tvb){
+ item = get_ber_last_created_item();
+ subtree = proto_item_add_subtree(item, ett_CDMA2000HandoffResponseIOSData);
+ dissect_cdma2000_a1_elements(parameter_tvb, pinfo, subtree, 0, tvb_length_remaining(tvb,0));
+ }
+
+
return offset;
}
@@ -13384,7 +13417,7 @@ static void dissect_OriginationRequestRes_PDU(tvbuff_t *tvb, packet_info *pinfo,
/*--- End of included file: packet-ansi_map-fn.c ---*/
-#line 3363 "packet-ansi_map-template.c"
+#line 3370 "packet-ansi_map-template.c"
static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -14444,29 +14477,29 @@ void proto_register_ansi_map(void) {
FT_UINT8, BASE_DEC, VALS(ansi_map_cdmachanneldata_band_cls_vals), 0x7c,
"Band Class", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b6,
- { "Long Code Mask MSB (byte 6)", "ansi_map.cdmachanneldata.lc_mask_b6",
+ { "Long Code Mask (byte 6) MSB", "ansi_map.cdmachanneldata.lc_mask_b6",
FT_UINT8, BASE_HEX, NULL, 0x03,
"Long Code Mask MSB (byte 6)", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b5,
{ "Long Code Mask (byte 5)", "ansi_map.cdmachanneldata.lc_mask_b5",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT8, BASE_HEX, NULL, 0xff,
"Long Code Mask (byte 5)", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b4,
{ "Long Code Mask (byte 4)", "ansi_map.cdmachanneldata.lc_mask_b4",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT8, BASE_HEX, NULL, 0xff,
"Long Code Mask (byte 4)", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b3,
{ "Long Code Mask (byte 3)", "ansi_map.cdmachanneldata.lc_mask_b3",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT8, BASE_HEX, NULL, 0xff,
"Long Code Mask (byte 3)", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b2,
{ "Long Code Mask (byte 2)", "ansi_map.cdmachanneldata.lc_mask_b2",
- FT_UINT8, BASE_HEX, NULL, 0x0,
+ FT_UINT8, BASE_HEX, NULL, 0xff,
"Long Code Mask (byte 2)", HFILL }},
{&hf_ansi_map_cdmachanneldata_lc_mask_b1,
{ "Long Code Mask LSB(byte 1)", "ansi_map.cdmachanneldata.lc_mask_b1",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- "Long Code Mask LSB(byte 1)", HFILL }},
+ FT_UINT8, BASE_HEX, NULL, 0xff,
+ "Long Code Mask (byte 1)LSB", HFILL }},
{&hf_ansi_map_cdmachanneldata_np_ext,
{ "NP EXT", "ansi_map.cdmachanneldata.np_ext",
FT_BOOLEAN, 8, NULL,0x80,
@@ -16205,7 +16238,7 @@ void proto_register_ansi_map(void) {
"ansi_map.MobileStationIMSI", HFILL }},
/*--- End of included file: packet-ansi_map-hfarr.c ---*/
-#line 4735 "packet-ansi_map-template.c"
+#line 4742 "packet-ansi_map-template.c"
};
/* List of subtrees */
@@ -16222,7 +16255,14 @@ void proto_register_ansi_map(void) {
&ett_cdmastationclassmark,
&ett_channeldata,
&ett_confidentialitymodes,
+ &ett_CDMA2000HandoffInvokeIOSData,
+ &ett_CDMA2000HandoffResponseIOSData,
&ett_originationtriggers,
+ &ett_pacaindicator,
+ &ett_callingpartyname,
+ &ett_triggercapability,
+ &ett_winoperationscapability,
+ &ett_controlnetworkid,
&ett_transactioncapability,
&ett_cdmaserviceoption,
&ett_systemcapabilities,
@@ -16437,7 +16477,7 @@ void proto_register_ansi_map(void) {
&ett_ansi_map_NewlyAssignedMSID,
/*--- End of included file: packet-ansi_map-ettarr.c ---*/
-#line 4756 "packet-ansi_map-template.c"
+#line 4770 "packet-ansi_map-template.c"
};