aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-opensafety.c
diff options
context:
space:
mode:
authorRoland Knall <roland.knall@br-automation.com>2015-08-05 09:39:08 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2015-08-05 18:09:20 +0000
commitf0beaa1860d1ddbfe93d3b3d9b877f2af9d4a3a1 (patch)
treeff7c439ecb7d936ad00e4857f9406e915ce9f0af /epan/dissectors/packet-opensafety.c
parent62e56ad92a50c7dd58e83447207b8be0cc0bbb76 (diff)
openSAFETY: Better display of packet info
If multiple packets of openSAFETY are present in a single network packet, searching for the packet needed is complicated. This patch increases the information along the same lines as the eth and frame subdissectors Change-Id: Id3d237135cfadb35c839208749aeeb1652b29830 Reviewed-on: https://code.wireshark.org/review/9871 Reviewed-by: Roland Knall <rknall@gmail.com> Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-opensafety.c')
-rw-r--r--epan/dissectors/packet-opensafety.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/epan/dissectors/packet-opensafety.c b/epan/dissectors/packet-opensafety.c
index ba654847d3..124bf58cd2 100644
--- a/epan/dissectors/packet-opensafety.c
+++ b/epan/dissectors/packet-opensafety.c
@@ -344,7 +344,7 @@ opensafety_packet_node(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *t
}
static void
-opensafety_packet_receiver(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree,
+opensafety_packet_receiver(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree, proto_item *opensafety_item,
opensafety_packet_info *packet, guint16 recv,
guint16 posInFrame, guint16 posSdnInFrame, guint16 sdn )
{
@@ -353,12 +353,13 @@ opensafety_packet_receiver(tvbuff_t * message_tvb, packet_info *pinfo, proto_tre
packet->sdn = sdn;
opensafety_packet_node (message_tvb, pinfo, tree, hf_oss_msg_receiver, recv, posInFrame, posSdnInFrame, sdn );
+ proto_item_append_text(opensafety_item, ", Dst: 0x%03X (%d)", recv, recv);
}
/* Tracks the information that the packet pinfo has been sent by sender, and received by everyone else, and adds that information to
* the tree, using pos, as byte position in the PDU */
static void
-opensafety_packet_sender(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree,
+opensafety_packet_sender(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree, proto_item *opensafety_item,
opensafety_packet_info *packet, guint16 sender,
guint16 posInFrame, guint16 posSdnInFrame, guint16 sdn )
{
@@ -367,17 +368,18 @@ opensafety_packet_sender(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree
packet->sdn = sdn;
opensafety_packet_node (message_tvb, pinfo, tree, hf_oss_msg_sender, sender, posInFrame, posSdnInFrame, sdn );
+ proto_item_append_text(opensafety_item, ", Src: 0x%03X (%d)", sender, sender);
}
/* Tracks the information that the packet pinfo has been sent by sender, and received by receiver, and adds that information to
* the tree, using pos for the sender and pos2 for the receiver, as byte position in the PDU */
static void
-opensafety_packet_sendreceiv(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree,
+opensafety_packet_sendreceiv(tvbuff_t * message_tvb, packet_info *pinfo, proto_tree *tree, proto_item *opensafety_item,
opensafety_packet_info *packet, guint16 send, guint16 pos,
guint16 recv, guint16 pos2, guint16 posnet, guint16 sdn)
{
- opensafety_packet_receiver(message_tvb, pinfo, tree, packet, recv, pos2, posnet, sdn);
- opensafety_packet_sender(message_tvb, pinfo, tree, packet, send, pos, posnet, sdn);
+ opensafety_packet_receiver(message_tvb, pinfo, tree, opensafety_item, packet, recv, pos2, posnet, sdn);
+ opensafety_packet_sender(message_tvb, pinfo, tree, opensafety_item, packet, send, pos, posnet, sdn);
}
static proto_item *
@@ -735,11 +737,11 @@ dissect_data_payload ( proto_tree *epl_tree, tvbuff_t *tvb, packet_info *pinfo,
static void
dissect_opensafety_spdo_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *opensafety_tree,
- opensafety_packet_info * packet )
+ opensafety_packet_info * packet, proto_item * opensafety_item )
{
proto_item *item, *diritem;
proto_tree *spdo_tree, *spdo_flags_tree;
- guint16 ct;
+ guint16 ct, addr;
guint64 ct40bit;
gint16 taddr, sdn;
guint dataLength;
@@ -765,9 +767,10 @@ dissect_opensafety_spdo_message(tvbuff_t *message_tvb, packet_info *pinfo, proto
if ( (OPENSAFETY_SPDO_FEAT_40BIT_USED & spdoFlags ) == OPENSAFETY_SPDO_FEAT_40BIT_USED )
sdn = OPENSAFETY_DEFAULT_DOMAIN;
+ addr = OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1);
opensafety_packet_node ( message_tvb, pinfo, opensafety_tree, hf_oss_msg_sender,
- OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1),
- OSS_FRAME_POS_ADDR + packet->frame.subframe1, packet->frame.subframe2, sdn );
+ addr, OSS_FRAME_POS_ADDR + packet->frame.subframe1, packet->frame.subframe2, sdn );
+ proto_item_append_text(opensafety_item, "; Producer: 0x%03X (%d)", addr, addr);
spdo_tree = opensafety_packet_payloadtree ( message_tvb, opensafety_tree, packet, ett_opensafety_spdo );
@@ -1047,7 +1050,7 @@ static void dissect_opensafety_ssdo_payload ( packet_info *pinfo, tvbuff_t *new_
static void
dissect_opensafety_ssdo_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *opensafety_tree,
- opensafety_packet_info * packet)
+ opensafety_packet_info * packet, proto_item * opensafety_item )
{
proto_item *item;
proto_tree *ssdo_tree, *ssdo_payload;
@@ -1088,20 +1091,20 @@ dissect_opensafety_ssdo_message(tvbuff_t *message_tvb, packet_info *pinfo, proto
sdn = ( OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1) ^
( OSS_FRAME_ADDR_T2(message_tvb, packet->frame.subframe2, packet->scm_udid[0], packet->scm_udid[1]) ) );
- opensafety_packet_sendreceiv ( message_tvb, pinfo, opensafety_tree, packet, taddr,
+ opensafety_packet_sendreceiv ( message_tvb, pinfo, opensafety_tree, opensafety_item, packet, taddr,
packet->frame.subframe2 + 3, OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1),
packet->frame.subframe1, packet->frame.subframe2, sdn );
}
else if ( ! isResponse )
{
- opensafety_packet_sender ( message_tvb, pinfo, opensafety_tree, packet,
+ opensafety_packet_sender ( message_tvb, pinfo, opensafety_tree, opensafety_item, packet,
OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1), packet->frame.subframe1,
packet->frame.subframe2, -1 * ( ( OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1) ) ^
( OSS_FRAME_ADDR_T2(message_tvb, packet->frame.subframe2, packet->scm_udid[0], packet->scm_udid[1]) ) ) );
}
else if ( isResponse )
{
- opensafety_packet_receiver ( message_tvb, pinfo, opensafety_tree, packet,
+ opensafety_packet_receiver ( message_tvb, pinfo, opensafety_tree, opensafety_item, packet,
OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1), packet->frame.subframe1,
packet->frame.subframe2, -1 * ( ( OSS_FRAME_ADDR_T(message_tvb, packet->frame.subframe1) ) ^
( OSS_FRAME_ADDR_T2(message_tvb, packet->frame.subframe2, packet->scm_udid[0], packet->scm_udid[1]) ) ) );
@@ -1364,7 +1367,7 @@ opensafety_parse_scm_udid ( tvbuff_t* tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_opensafety_snmt_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *opensafety_tree,
- opensafety_packet_info *packet )
+ opensafety_packet_info *packet, proto_item * opensafety_item )
{
proto_tree *snmt_tree;
guint32 entry = 0;
@@ -1393,13 +1396,14 @@ dissect_opensafety_snmt_message(tvbuff_t *message_tvb, packet_info *pinfo, proto
( (db0 ^ OPENSAFETY_MSG_SNMT_EXT_SCM_SET_TO_STOP) == 0 ||
(db0 ^ OPENSAFETY_MSG_SNMT_EXT_SCM_SET_TO_OP) == 0 ) )
{
- opensafety_packet_receiver( message_tvb, pinfo, opensafety_tree, packet, addr,
+ opensafety_packet_receiver( message_tvb, pinfo, opensafety_tree, opensafety_item, packet, addr,
OSS_FRAME_POS_ADDR + packet->frame.subframe1, packet->frame.subframe2, sdn );
}
else
{
- opensafety_packet_sendreceiv ( message_tvb, pinfo, opensafety_tree, packet, taddr, packet->frame.subframe2 + 3,
- addr, OSS_FRAME_POS_ADDR + packet->frame.subframe1, packet->frame.subframe2, sdn );
+ opensafety_packet_sendreceiv ( message_tvb, pinfo, opensafety_tree, opensafety_item, packet, taddr,
+ packet->frame.subframe2 + 3, addr, OSS_FRAME_POS_ADDR + packet->frame.subframe1,
+ packet->frame.subframe2, sdn );
}
snmt_tree = opensafety_packet_payloadtree ( message_tvb, opensafety_tree, packet, ett_opensafety_snmt );
@@ -1768,7 +1772,8 @@ dissect_opensafety_message(opensafety_packet_info *packet,
if ( packet->msg_type == OPENSAFETY_SNMT_MESSAGE_TYPE )
{
- dissect_opensafety_snmt_message ( message_tvb, pinfo, opensafety_tree, packet );
+ proto_item_append_text(opensafety_item, ", SNMT");
+ dissect_opensafety_snmt_message ( message_tvb, pinfo, opensafety_tree, packet, opensafety_item );
}
else
{
@@ -1823,15 +1828,19 @@ dissect_opensafety_message(opensafety_packet_info *packet,
if ( packet->msg_type == OPENSAFETY_SSDO_MESSAGE_TYPE || packet->msg_type == OPENSAFETY_SLIM_SSDO_MESSAGE_TYPE )
{
- dissect_opensafety_ssdo_message ( message_tvb, pinfo, opensafety_tree, packet );
+ proto_item_append_text(opensafety_item,
+ (packet->msg_type == OPENSAFETY_SLIM_SSDO_MESSAGE_TYPE) ? ", Slim SSDO" : ", SSDO");
+ dissect_opensafety_ssdo_message ( message_tvb, pinfo, opensafety_tree, packet, opensafety_item );
}
else if ( packet->msg_type == OPENSAFETY_SPDO_MESSAGE_TYPE )
{
- dissect_opensafety_spdo_message ( message_tvb, pinfo, opensafety_tree, packet );
+ proto_item_append_text(opensafety_item, ", SPDO" );
+ dissect_opensafety_spdo_message ( message_tvb, pinfo, opensafety_tree, packet, opensafety_item );
}
else
{
messageTypeUnknown = TRUE;
+ proto_item_append_text(opensafety_item, ", Unknown" );
}
}