aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-cisco-sm.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-04-24 08:52:18 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-04-24 08:52:18 +0000
commit299228b7d751773768eeeb4cbc01009518541b89 (patch)
treed330faf65d46fb9bb0de28473cd9465e5305ecc6 /epan/dissectors/packet-cisco-sm.c
parent1fb4d00e1cf3a9ab2cd4f9fd7cbf81ec7420aff5 (diff)
From "ars" https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7188
Add dissection of another flavor of Cisco RUDP/SM stack called BSM V1 (version 1 versus Version 0 used for SS7). It used at place where IUA should be used namely for backhauling ISDN PRI from Media Gateway to Media Gateway Controller. svn path=/trunk/; revision=42219
Diffstat (limited to 'epan/dissectors/packet-cisco-sm.c')
-rw-r--r--epan/dissectors/packet-cisco-sm.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/epan/dissectors/packet-cisco-sm.c b/epan/dissectors/packet-cisco-sm.c
index d30123b6be..15fe0ab831 100644
--- a/epan/dissectors/packet-cisco-sm.c
+++ b/epan/dissectors/packet-cisco-sm.c
@@ -105,6 +105,8 @@ static const value_string sm_pdu_type_value[] = {
};
/* TODO: Change to useful name once known */
+#define SM_PROTOCOL_X004 0x0004 /* https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7188 */
+/* RUDP/SM stack called BSM V1 (version 1 versus Version 0 used for SS7). */
#define SM_PROTOCOL_X100 0x0100
#define SM_PROTOCOL_X101 0x0101
#define SM_PROTOCOL_X114 0x0114
@@ -131,6 +133,7 @@ static gint ett_sm = -1;
static dissector_handle_t sdp_handle;
static dissector_handle_t mtp3_handle;
+static dissector_handle_t q931_handle;
static dissector_handle_t data_handle;
/* Code to actually dissect the packets */
@@ -166,6 +169,41 @@ dissect_sm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
protocol = tvb_get_ntohs(tvb,offset);
offset = offset + 2;
switch(protocol){
+ /* start case RUDP BSM v.1 ---------------------------------------------------------- */
+ case SM_PROTOCOL_X004:
+ if (!tree)
+ return;
+
+ proto_tree_add_item(sm_tree, hf_sm_msg_id, tvb, offset, 2, FALSE);
+ offset = offset +2;
+ msg_type = tvb_get_ntohs(tvb,offset);
+ proto_tree_add_uint_format(sm_tree, hf_sm_msg_type, tvb, offset, 2, msg_type,
+ "Message type: %s (0x%0x)", val_to_str(msg_type, sm_pdu_type_value, "reserved"),
+ msg_type);
+ msg_type = tvb_get_ntohs(tvb,offset);
+ offset = offset + 2;
+ proto_tree_add_item(sm_tree, hf_sm_channel, tvb, offset, 2, FALSE);
+ offset = offset + 2;
+ proto_tree_add_item(sm_tree, hf_sm_bearer, tvb, offset, 2, FALSE);
+ offset = offset +2;
+ proto_tree_add_item(sm_tree, hf_sm_len, tvb, offset, 2, FALSE);
+ length = tvb_get_ntohs(tvb,offset);
+ offset = offset +2;
+ proto_item_set_len(ti, 16);
+
+ if (length > 0) {
+ next_tvb = tvb_new_subset(tvb, offset, length, length);
+
+ if ((msg_type == PDU_MTP3_TO_SLT || msg_type == PDU_MTP3_FROM_SLT)) {
+ call_dissector(q931_handle, next_tvb, pinfo, tree);
+ } else {
+ call_dissector(data_handle, next_tvb, pinfo, tree);
+ }
+ }
+
+ break;
+ /* end case RUDP BSM v.1 ---------------------------------------------------------- */
+
case SM_PROTOCOL_X100:
case SM_PROTOCOL_X122:
if (!tree)
@@ -365,6 +403,7 @@ proto_reg_handoff_sm(void)
{
sdp_handle = find_dissector("sdp");
mtp3_handle = find_dissector("mtp3");
+ q931_handle = find_dissector("q931");
data_handle = find_dissector("data");
}