aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuanjo Martin <juanjo@rti.com>2017-11-15 13:00:51 +0100
committerMichael Mann <mmann78@netscape.net>2017-11-23 01:01:00 +0000
commitf5bc86df043d93bb76226f0bbb2c4ef5613f226e (patch)
treecb215a943432cca79fd4b10ec1d4c527d0a4f849
parenta55a96a13ad60785f41f70a67cec2b321670b5de (diff)
RTPS: Topic Information feature now available for all the submessages
Before, the topic information feature showed the topic information only for DATA submessages. Now it is working for all the submessages. Change-Id: Ic2fe0ac1de2377a1db627f6498ac6d5159c9cb13 Reviewed-on: https://code.wireshark.org/review/24442 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/dissectors/packet-rtps.c163
1 files changed, 107 insertions, 56 deletions
diff --git a/epan/dissectors/packet-rtps.c b/epan/dissectors/packet-rtps.c
index fb45155512..3b66d8e7cc 100644
--- a/epan/dissectors/packet-rtps.c
+++ b/epan/dissectors/packet-rtps.c
@@ -3863,27 +3863,36 @@ static void rtps_util_format_typename(gchar * type_name, gchar ** output) {
g_free(result_caps);
}
-static gboolean rtps_util_show_topic_info(proto_tree *tree, packet_info *pinfo,
- tvbuff_t *tvb, gint offset, endpoint_guid * guid,
+static void rtps_util_topic_info_add_tree(proto_tree *tree, tvbuff_t *tvb,
+ gint offset, endpoint_guid * guid) {
+ if (enable_topic_info) {
+ proto_tree * topic_info_tree;
+ proto_item * ti;
+ type_mapping * type_mapping_object = rtps_util_get_topic_info(guid);
+ if (type_mapping_object != NULL) {
+ topic_info_tree = proto_tree_add_subtree(tree, tvb, offset, 0,
+ ett_rtps_topic_info, NULL, "[Topic Information (from Discovery)]");
+ ti = proto_tree_add_string(topic_info_tree, hf_rtps_param_topic_name, tvb, offset, 0,
+ type_mapping_object->topic_name);
+ PROTO_ITEM_SET_GENERATED(ti);
+ ti = proto_tree_add_string(topic_info_tree, hf_rtps_param_type_name, tvb, offset, 0,
+ type_mapping_object->type_name);
+ PROTO_ITEM_SET_GENERATED(ti);
+ }
+ }
+}
+
+static gboolean rtps_util_topic_info_add_column_info_and_try_dissector(proto_tree *tree,
+ packet_info *pinfo, tvbuff_t *tvb, gint offset, endpoint_guid * guid,
rtps_dissector_data * data) {
if (enable_topic_info) {
type_mapping * type_mapping_object = rtps_util_get_topic_info(guid);
if (type_mapping_object != NULL) {
- proto_tree * topic_info_tree;
- proto_item * ti;
gchar * dissector_name = NULL;
tvbuff_t *next_tvb;
/* This part shows information available for the sample */
if (data && !(data->info_displayed)) {
- topic_info_tree = proto_tree_add_subtree(tree, tvb, offset, 0,
- ett_rtps_topic_info, NULL, "[Topic Information (from Discovery)]");
- ti = proto_tree_add_string(topic_info_tree, hf_rtps_param_topic_name, tvb, offset, 0,
- type_mapping_object->topic_name);
- PROTO_ITEM_SET_GENERATED(ti);
- ti = proto_tree_add_string(topic_info_tree, hf_rtps_param_type_name, tvb, offset, 0,
- type_mapping_object->type_name);
- PROTO_ITEM_SET_GENERATED(ti);
col_append_sep_str(pinfo->cinfo, COL_INFO, " -> ", type_mapping_object->topic_name);
data->info_displayed = TRUE;
}
@@ -6258,8 +6267,8 @@ static void dissect_serialized_data(proto_tree *tree, packet_info *pinfo, tvbuff
/* Add Topic Information if enabled (checked inside). This call attemps to dissect
* the sample and will return TRUE if it did. We should return in that case.*/
- if (rtps_util_show_topic_info(rtps_parameter_sequence_tree, pinfo, tvb,
- offset, guid, data))
+ if (rtps_util_topic_info_add_column_info_and_try_dissector(rtps_parameter_sequence_tree,
+ pinfo, tvb, offset, guid, data))
return;
/* The payload */
@@ -6770,7 +6779,8 @@ static void dissect_DATA_v2(tvbuff_t *tvb, packet_info *pinfo, gint offset, guin
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
-
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Sequence number */
rtps_util_add_seq_number(tree, tvb, offset, encoding, "writerSeqNumber");
@@ -6808,7 +6818,6 @@ static void dissect_DATA_v2(tvbuff_t *tvb, packet_info *pinfo, gint offset, guin
if ((flags & FLAG_DATA_D_v2) != 0) {
from_builtin_writer =
(((wid & 0xc2) == 0xc2) || ((wid & 0xc3) == 0xc3)) ? TRUE : FALSE;
- guid->entity_id = wid;
dissect_serialized_data(tree, pinfo, tvb, offset,
octets_to_next_header - (offset - old_offset) + 4,
"serializedData", vendor_id, from_builtin_writer, guid);
@@ -6817,7 +6826,8 @@ static void dissect_DATA_v2(tvbuff_t *tvb, packet_info *pinfo, gint offset, guin
}
static void dissect_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
- const guint encoding, int octets_to_next_header, proto_tree *tree, guint16 vendor_id) {
+ const guint encoding, int octets_to_next_header, proto_tree *tree,
+ guint16 vendor_id, endpoint_guid *guid) {
/*
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -6886,6 +6896,8 @@ static void dissect_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Sequence number */
rtps_util_add_seq_number(tree, tvb, offset, encoding, "writerSeqNumber");
@@ -7187,7 +7199,8 @@ static void dissect_NOKEY_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offs
/* * A C K N A C K * */
/* *********************************************************************** */
static void dissect_ACKNACK(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
- const guint encoding, int octets_to_next_header, proto_tree *tree, proto_item *item) {
+ const guint encoding, int octets_to_next_header, proto_tree *tree,
+ proto_item *item, endpoint_guid *guid) {
/* RTPS 1.0/1.1:
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -7222,7 +7235,7 @@ static void dissect_ACKNACK(tvbuff_t *tvb, packet_info *pinfo, gint offset, guin
*/
gint original_offset; /* Offset to the readerEntityId */
proto_item *octet_item;
-
+ guint32 wid;
proto_tree_add_bitmask_value(tree, tvb, offset + 1, hf_rtps_sm_flags, ett_rtps_flags, ACKNACK_FLAGS, flags);
octet_item = proto_tree_add_item(tree, hf_rtps_sm_octets_to_next_header, tvb, offset + 2, 2, encoding);
@@ -7242,8 +7255,10 @@ static void dissect_ACKNACK(tvbuff_t *tvb, packet_info *pinfo, gint offset, guin
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
- hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", NULL);
+ hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Bitmap */
offset = rtps_util_add_bitmap(tree, tvb, offset, encoding, "readerSNState");
@@ -7337,7 +7352,8 @@ static void dissect_NACK_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
/* * H E A R T B E A T * */
/* *********************************************************************** */
static void dissect_HEARTBEAT(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
- const guint encoding, int octets_to_next_header, proto_tree *tree, guint16 version) {
+ const guint encoding, int octets_to_next_header, proto_tree *tree,
+ guint16 version, endpoint_guid *guid) {
/* RTPS 1.0/1.1:
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -7383,7 +7399,7 @@ static void dissect_HEARTBEAT(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
* +---------------+---------------+---------------+---------------+
*/
proto_item *octet_item;
-
+ guint32 wid;
proto_tree_add_bitmask_value(tree, tvb, offset + 1, hf_rtps_sm_flags, ett_rtps_flags, HEARTBEAT_FLAGS, flags);
octet_item = proto_tree_add_item(tree,
@@ -7411,8 +7427,10 @@ static void dissect_HEARTBEAT(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
- hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", NULL);
+ hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* First available Sequence Number */
rtps_util_add_seq_number(tree, tvb, offset, encoding, "firstAvailableSeqNumber");
@@ -7432,7 +7450,8 @@ static void dissect_HEARTBEAT(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
/* * H E A R T B E A T _ B A T C H * */
/* *********************************************************************** */
static void dissect_HEARTBEAT_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offset,
- guint8 flags, const guint encoding, int octets_to_next_header, proto_tree *tree) {
+ guint8 flags, const guint encoding, int octets_to_next_header,
+ proto_tree *tree, endpoint_guid *guid) {
/*
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -7462,7 +7481,7 @@ static void dissect_HEARTBEAT_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
* +---------------+---------------+---------------+---------------+
*/
proto_item *octet_item;
-
+ guint32 wid;
proto_tree_add_bitmask_value(tree, tvb, offset + 1, hf_rtps_sm_flags, ett_rtps_flags, HEARTBEAT_BATCH_FLAGS, flags);
octet_item = proto_tree_add_item(tree, hf_rtps_sm_octets_to_next_header, tvb,
@@ -7487,8 +7506,10 @@ static void dissect_HEARTBEAT_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
- hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", NULL);
+ hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* First available Batch Sequence Number */
rtps_util_add_seq_number(tree, tvb, offset, encoding, "firstBatchSN");
@@ -7516,7 +7537,7 @@ static void dissect_HEARTBEAT_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
static void dissect_HEARTBEAT_VIRTUAL(tvbuff_t *tvb, packet_info *pinfo _U_, gint offset,
guint8 flags, const guint encoding, int octets_to_next_header, proto_tree *tree,
- guint16 vendor_id _U_) {
+ guint16 vendor_id _U_, endpoint_guid *guid) {
/*
* VIRTUAL_HB:
@@ -7589,7 +7610,7 @@ static void dissect_HEARTBEAT_VIRTUAL(tvbuff_t *tvb, packet_info *pinfo _U_, gin
* +---------------+---------------+---------------+---------------+
*/
- guint32 num_writers, num_virtual_guids;
+ guint32 num_writers, num_virtual_guids, wid;
gint writer_id_offset, virtual_guid_offset = 0, old_offset;
proto_item *octet_item, *ti;
@@ -7625,9 +7646,11 @@ static void dissect_HEARTBEAT_VIRTUAL(tvbuff_t *tvb, packet_info *pinfo _U_, gin
hf_rtps_sm_wrentity_id_kind,
ett_rtps_wrentity,
"writerEntityId",
- NULL);
+ &wid);
writer_id_offset = offset;
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* virtualGUID */
if (!(flags & FLAG_VIRTUAL_HEARTBEAT_V) && !(flags & FLAG_VIRTUAL_HEARTBEAT_N)) {
@@ -7780,7 +7803,7 @@ static void dissect_HEARTBEAT_VIRTUAL(tvbuff_t *tvb, packet_info *pinfo _U_, gin
/* * H E A R T B E A T _ F R A G * */
/* *********************************************************************** */
static void dissect_HEARTBEAT_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
- const guint encoding, int octets_to_next_header, proto_tree *tree) {
+ const guint encoding, int octets_to_next_header, proto_tree *tree, endpoint_guid *guid) {
/*
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -7800,7 +7823,7 @@ static void dissect_HEARTBEAT_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offse
* +---------------+---------------+---------------+---------------+
*/
proto_item *octet_item;
-
+ guint32 wid;
proto_tree_add_bitmask_value(tree, tvb, offset + 1, hf_rtps_sm_flags, ett_rtps_flags, HEARTBEAT_FRAG_FLAGS, flags);
octet_item = proto_tree_add_item(tree, hf_rtps_sm_octets_to_next_header, tvb,
@@ -7825,8 +7848,10 @@ static void dissect_HEARTBEAT_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offse
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
- hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", NULL);
+ hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* First available Sequence Number */
rtps_util_add_seq_number(tree, tvb, offset, encoding, "writerSeqNumber");
@@ -7847,7 +7872,7 @@ static void dissect_HEARTBEAT_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offse
/* *********************************************************************** */
static void dissect_RTPS_DATA(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
guint encoding, int octets_to_next_header, proto_tree *tree,
- guint16 vendor_id, gboolean is_session, endpoint_guid * guid) {
+ guint16 vendor_id, gboolean is_session, endpoint_guid *guid) {
/*
*
* 0...2...........7...............15.............23...............31
@@ -7945,6 +7970,8 @@ static void dissect_RTPS_DATA(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Sequence number */
if (is_session) {
@@ -8178,7 +8205,6 @@ static void dissect_RTPS_DATA(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
from_builtin_writer =
(((wid & 0xc2) == 0xc2) || ((wid & 0xc3) == 0xc3)) ? TRUE : FALSE;
- guid->entity_id = wid;
/* At the end still dissect the rest of the bytes as raw data */
dissect_serialized_data(tree, pinfo, tvb, offset,
octets_to_next_header - (offset - old_offset) + 4,
@@ -8194,7 +8220,7 @@ static void dissect_RTPS_DATA(tvbuff_t *tvb, packet_info *pinfo, gint offset, gu
/* *********************************************************************** */
static void dissect_RTPS_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
const guint encoding, int octets_to_next_header, proto_tree *tree,
- guint16 vendor_id) {
+ guint16 vendor_id, endpoint_guid *guid) {
/*
*
* 0...2...........7...............15.............23...............31
@@ -8266,6 +8292,8 @@ static void dissect_RTPS_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offse
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Sequence number */
@@ -8317,7 +8345,7 @@ static void dissect_RTPS_DATA_FRAG(tvbuff_t *tvb, packet_info *pinfo, gint offse
/* *********************************************************************** */
static void dissect_RTPS_DATA_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offset,
guint8 flags, const guint encoding, int octets_to_next_header,
- proto_tree *tree, guint16 vendor_id, endpoint_guid * guid) {
+ proto_tree *tree, guint16 vendor_id, endpoint_guid *guid) {
/*
*
* 0...2...........7...............15.............23...............31
@@ -8438,8 +8466,9 @@ static void dissect_RTPS_DATA_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset, hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key,
hf_rtps_sm_wrentity_id_kind, ett_rtps_wrentity, "writerEntityId", &wid);
- guid->entity_id = wid;
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* Batch sequence number */
@@ -8595,7 +8624,8 @@ static void dissect_RTPS_DATA_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
proto_tree_add_bytes_format(sil_tree, hf_rtps_serialized_key,
tvb, offset, sample_info_length[count], NULL, "serializedKey[%d]", count);
} else {
- if (!rtps_util_show_topic_info(sil_tree, pinfo, tvb, offset, guid, data)) {
+ if (!rtps_util_topic_info_add_column_info_and_try_dissector(
+ sil_tree, pinfo, tvb, offset, guid, data)) {
proto_tree_add_bytes_format(sil_tree, hf_rtps_serialized_data,
tvb, offset, sample_info_length[count], NULL, "serializedData[%d]", count);
}
@@ -8610,7 +8640,8 @@ static void dissect_RTPS_DATA_BATCH(tvbuff_t *tvb, packet_info *pinfo, gint offs
/* * G A P * */
/* *********************************************************************** */
static void dissect_GAP(tvbuff_t *tvb, packet_info *pinfo, gint offset,
- guint8 flags, const guint encoding, int octets_to_next_header, proto_tree *tree) {
+ guint8 flags, const guint encoding, int octets_to_next_header,
+ proto_tree *tree, endpoint_guid *guid) {
/* RTPS 1.0/1.1:
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -8648,7 +8679,7 @@ static void dissect_GAP(tvbuff_t *tvb, packet_info *pinfo, gint offset,
* +---------------+---------------+---------------+---------------+
*/
proto_item *octet_item;
-
+ guint32 wid;
proto_tree_add_bitmask_value(tree, tvb, offset + 1, hf_rtps_sm_flags, ett_rtps_flags, GAP_FLAGS, flags);
octet_item = proto_tree_add_item(tree, hf_rtps_sm_octets_to_next_header, tvb,
@@ -8670,8 +8701,10 @@ static void dissect_GAP(tvbuff_t *tvb, packet_info *pinfo, gint offset,
/* writerEntityId */
rtps_util_add_entity_id(tree, tvb, offset,
hf_rtps_sm_wrentity_id, hf_rtps_sm_wrentity_id_key, hf_rtps_sm_wrentity_id_kind,
- ett_rtps_wrentity, "writerEntityId", NULL);
+ ett_rtps_wrentity, "writerEntityId", &wid);
offset += 4;
+ guid->entity_id = wid;
+ rtps_util_topic_info_add_tree(tree, tvb, offset, guid);
/* First Sequence Number */
@@ -8899,7 +8932,8 @@ static void dissect_INFO_REPLY_IP4(tvbuff_t *tvb, packet_info *pinfo, gint offse
/* * I N F O _ D S T * */
/* *********************************************************************** */
static void dissect_INFO_DST(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
- const guint encoding, int octets_to_next_header, proto_tree *tree, guint16 version) {
+ const guint encoding, int octets_to_next_header, proto_tree *tree,
+ guint16 version, endpoint_guid *dst_guid) {
/* RTPS 1.0/1.1:
* 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -8949,6 +8983,10 @@ static void dissect_INFO_DST(tvbuff_t *tvb, packet_info *pinfo, gint offset, gui
} else {
rtps_util_add_guid_prefix_v2(tree, tvb, offset, hf_rtps_guid_prefix_dst,
hf_rtps_host_id, hf_rtps_app_id, hf_rtps_sm_instance_id, hf_rtps_guid_prefix);
+
+ dst_guid->host_id = tvb_get_ntohl(tvb, offset);
+ dst_guid->app_id = tvb_get_ntohl(tvb, offset + 4);
+ dst_guid->instance_id = tvb_get_ntohl(tvb, offset + 8);
}
}
@@ -9174,15 +9212,17 @@ static void dissect_SECURE_POSTFIX(tvbuff_t *tvb, packet_info *pinfo _U_, gint o
proto_tree_add_item(sec_data_tag_tree, hf_rtps_secure_datatag_plugin_sec_tag, tvb,
offset, octets_to_next_header, encoding);
}
+
static gboolean dissect_rtps_submessage_v2(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags,
const guint encoding, guint8 submessageId, guint16 vendor_id, gint octets_to_next_header,
proto_tree *rtps_submessage_tree, proto_item *submessage_item,
- endpoint_guid * guid)
+ endpoint_guid * guid, endpoint_guid * dst_guid)
{
switch (submessageId)
{
case SUBMESSAGE_DATA_FRAG:
- dissect_DATA_FRAG(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, vendor_id);
+ dissect_DATA_FRAG(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, vendor_id, guid);
break;
case SUBMESSAGE_NOKEY_DATA_FRAG:
@@ -9195,7 +9235,8 @@ static gboolean dissect_rtps_submessage_v2(tvbuff_t *tvb, packet_info *pinfo, gi
case SUBMESSAGE_ACKNACK_SESSION:
case SUBMESSAGE_ACKNACK_BATCH:
- dissect_ACKNACK(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, submessage_item);
+ dissect_ACKNACK(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, submessage_item, dst_guid);
break;
case SUBMESSAGE_APP_ACK:
@@ -9208,15 +9249,18 @@ static gboolean dissect_rtps_submessage_v2(tvbuff_t *tvb, packet_info *pinfo, gi
case SUBMESSAGE_HEARTBEAT_SESSION:
case SUBMESSAGE_HEARTBEAT_BATCH:
- dissect_HEARTBEAT_BATCH(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree);
+ dissect_HEARTBEAT_BATCH(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, guid);
break;
case SUBMESSAGE_HEARTBEAT_FRAG:
- dissect_HEARTBEAT_FRAG(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree);
+ dissect_HEARTBEAT_FRAG(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, guid);
break;
case SUBMESSAGE_HEARTBEAT_VIRTUAL:
- dissect_HEARTBEAT_VIRTUAL(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, vendor_id);
+ dissect_HEARTBEAT_VIRTUAL(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, vendor_id, guid);
break;
case SUBMESSAGE_RTPS_DATA_SESSION:
@@ -9227,7 +9271,7 @@ static gboolean dissect_rtps_submessage_v2(tvbuff_t *tvb, packet_info *pinfo, gi
case SUBMESSAGE_RTPS_DATA_FRAG:
dissect_RTPS_DATA_FRAG(tvb, pinfo, offset, flags, encoding, octets_to_next_header,
- rtps_submessage_tree, vendor_id);
+ rtps_submessage_tree, vendor_id, guid);
break;
case SUBMESSAGE_RTPS_DATA_BATCH:
@@ -9265,7 +9309,7 @@ static gboolean dissect_rtps_submessage_v2(tvbuff_t *tvb, packet_info *pinfo, gi
static gboolean dissect_rtps_submessage_v1(tvbuff_t *tvb, packet_info *pinfo, gint offset, guint8 flags, const guint encoding,
guint8 submessageId, guint16 version, guint16 vendor_id, gint octets_to_next_header,
proto_tree *rtps_submessage_tree, proto_item *submessage_item,
- endpoint_guid * guid)
+ endpoint_guid * guid, endpoint_guid * dst_guid)
{
switch (submessageId)
{
@@ -9289,15 +9333,18 @@ static gboolean dissect_rtps_submessage_v1(tvbuff_t *tvb, packet_info *pinfo, gi
break;
case SUBMESSAGE_ACKNACK:
- dissect_ACKNACK(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, submessage_item);
+ dissect_ACKNACK(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, submessage_item, dst_guid);
break;
case SUBMESSAGE_HEARTBEAT:
- dissect_HEARTBEAT(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, version);
+ dissect_HEARTBEAT(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, version, guid);
break;
case SUBMESSAGE_GAP:
- dissect_GAP(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree);
+ dissect_GAP(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, guid);
break;
case SUBMESSAGE_INFO_TS:
@@ -9313,7 +9360,8 @@ static gboolean dissect_rtps_submessage_v1(tvbuff_t *tvb, packet_info *pinfo, gi
break;
case SUBMESSAGE_INFO_DST:
- dissect_INFO_DST(tvb, pinfo, offset, flags, encoding, octets_to_next_header, rtps_submessage_tree, version);
+ dissect_INFO_DST(tvb, pinfo, offset, flags, encoding,
+ octets_to_next_header, rtps_submessage_tree, version, dst_guid);
break;
case SUBMESSAGE_INFO_REPLY:
@@ -9342,6 +9390,7 @@ static gboolean dissect_rtps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
int sub_hf;
const value_string *sub_vals;
endpoint_guid guid;
+ endpoint_guid dst_guid;
guint32 magic_number;
/* Check 'RTPS' signature:
* A header is invalid if it has less than 16 octets
@@ -9537,10 +9586,12 @@ static gboolean dissect_rtps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
*/
if (!dissect_rtps_submessage_v1(tvb, pinfo, offset, flags, encoding,
submessageId, version, vendor_id,
- octets_to_next_header, rtps_submessage_tree, ti, &guid)) {
+ octets_to_next_header, rtps_submessage_tree,
+ ti, &guid, &dst_guid)) {
if ((version < 0x0200) ||
!dissect_rtps_submessage_v2(tvb, pinfo, offset, flags, encoding, submessageId,
- vendor_id, octets_to_next_header, rtps_submessage_tree, ti, &guid)) {
+ vendor_id, octets_to_next_header, rtps_submessage_tree,
+ ti, &guid, &dst_guid)) {
proto_tree_add_uint(rtps_submessage_tree, hf_rtps_sm_flags,
tvb, offset + 1, 1, flags);
proto_tree_add_uint(rtps_submessage_tree,