aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2008-03-05 20:42:58 +0000
committerAnders Broman <anders.broman@ericsson.com>2008-03-05 20:42:58 +0000
commit7a5b90df340479218367ca8fe3bbfd382f06da98 (patch)
tree7afdfd866c8dfeaa6a239f4a7c07b398052e3f30 /plugins
parent2cd5211e9548bf830096e075b650787e926c9a32 (diff)
downloadwireshark-7a5b90df340479218367ca8fe3bbfd382f06da98.tar.gz
wireshark-7a5b90df340479218367ca8fe3bbfd382f06da98.tar.bz2
wireshark-7a5b90df340479218367ca8fe3bbfd382f06da98.zip
From Peter Johansson :
Support for EtherCAT subdissectors. svn path=/trunk/; revision=24566
Diffstat (limited to 'plugins')
-rw-r--r--plugins/ethercat/moduleinfo.h3
-rw-r--r--plugins/ethercat/packet-ams.c92
-rw-r--r--plugins/ethercat/packet-ecatmb.c536
-rw-r--r--plugins/ethercat/packet-ethercat-datagram.c403
-rw-r--r--plugins/ethercat/packet-ethercat-frame.c26
5 files changed, 591 insertions, 469 deletions
diff --git a/plugins/ethercat/moduleinfo.h b/plugins/ethercat/moduleinfo.h
index 2a9a0ff1cc..2feb328130 100644
--- a/plugins/ethercat/moduleinfo.h
+++ b/plugins/ethercat/moduleinfo.h
@@ -18,4 +18,5 @@
/*#define VERSION "0.0.10" */
/*#define VERSION "0.0.11" * support of AoE protocol */
/*#define VERSION "0.0.12" * port to Wireshark */
-#define VERSION "0.1.0" /* First version integrated into the Wireshark sources*/
+/*#define VERSION "0.1.0" * First version integrated into the Wireshark sources*/
+#define VERSION "0.1.1" /* Added the ability for sub dissectors to decode the data section of EtherCAT using heuristics */
diff --git a/plugins/ethercat/packet-ams.c b/plugins/ethercat/packet-ams.c
index 7a2e7ff40d..c58d8fa11b 100644
--- a/plugins/ethercat/packet-ams.c
+++ b/plugins/ethercat/packet-ams.c
@@ -52,8 +52,6 @@ int proto_ams = -1;
/* Define the tree for ams */
static int ett_ams = -1;
-static int ett_ams_sender = -1;
-static int ett_ams_target = -1;
static int ett_ams_stateflags = -1;
static int ett_ams_adsreadrequest = -1;
static int ett_ams_adsreadresponse = -1;
@@ -72,8 +70,6 @@ static int ett_ams_adsadddnresponse = -1;
static int ett_ams_adsdeldnrequest = -1;
static int ett_ams_adsdeldnresponse = -1;
static int ett_ams_adsdnrequest = -1;
-static int ett_ams_adsdnresponse = -1;
-static int ett_ams_noteblockstamp = -1;
static int hf_ams_sendernetid = -1;
static int hf_ams_senderport = -1;
@@ -392,7 +388,7 @@ static void NetIdFormater(tvbuff_t *tvb, guint offset, char *szText, gint nMax)
/*ams*/
static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ti, *aitem;
+ proto_item *ti, *anItem;
proto_tree *ams_tree = NULL, *ams_adstree, *ams_statetree;
gint offset = 0;
guint ams_length = tvb_reported_length(tvb);
@@ -443,8 +439,8 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
cmdId = tvb_get_letohs(tvb, offset);
offset+=sizeof(guint16);
- aitem = proto_tree_add_item(ams_tree, hf_ams_stateflags, tvb, offset, sizeof(guint16), TRUE);
- ams_statetree = proto_item_add_subtree(aitem, ett_ams_stateflags);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_stateflags, tvb, offset, sizeof(guint16), TRUE);
+ ams_statetree = proto_item_add_subtree(anItem, ett_ams_stateflags);
proto_tree_add_item(ams_statetree, hf_ams_stateresponse,tvb, offset, sizeof(guint16), TRUE);
proto_tree_add_item(ams_statetree, hf_ams_statenoreturn,tvb, offset, sizeof(guint16), TRUE);
proto_tree_add_item(ams_statetree, hf_ams_stateadscmd,tvb, offset, sizeof(guint16), TRUE);
@@ -486,10 +482,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadrequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadrequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadrequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadrequest);
proto_tree_add_item(ams_adstree, hf_ams_adsindexgroup, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -509,10 +505,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adswriterequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adswriterequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsWriteReq_Len - sizeof(guint16) )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adswriterequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adswriterequest);
proto_tree_add_item(ams_adstree, hf_ams_adsindexgroup, tvb, offset, 4, TRUE);
offset+=sizeof(guint32);
@@ -534,10 +530,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadwriterequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadwriterequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadWriteReq_Len - sizeof(guint16))
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadwriterequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadwriterequest);
proto_tree_add_item(ams_adstree, hf_ams_adsindexgroup, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -562,10 +558,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadstaterequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadstaterequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadStateReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadstaterequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadstaterequest);
proto_tree_add_item(ams_adstree, hf_ams_adsinvokeid, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -578,10 +574,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adswritectrlrequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adswritectrlrequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsWriteControlReq_Len - sizeof(guint16) )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adswritectrlrequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adswritectrlrequest);
proto_tree_add_item(ams_adstree, hf_ams_adsstate, tvb, offset, 2, TRUE);
offset+=sizeof(guint16);
@@ -603,10 +599,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreaddinforequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreaddinforequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadDeviceInfoReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreaddinforequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreaddinforequest);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -619,10 +615,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsadddnrequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsadddnrequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsAddDeviceNotificationReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsadddnrequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsadddnrequest);
proto_tree_add_item(ams_adstree, hf_ams_adsindexgroup, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -651,10 +647,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsdeldnrequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsdeldnrequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsDelDeviceNotificationReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsdeldnrequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsdeldnrequest);
proto_tree_add_item(ams_adstree, hf_ams_adsnotificationhandle, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -670,10 +666,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/*guint32 cbLength;
guint32 nStamps;*/
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsdnrequest, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsdnrequest, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsDeviceNotificationReq_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsdnrequest);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsdnrequest);
proto_tree_add_item(ams_adstree, hf_ams_adscblength, tvb, offset, sizeof(guint32), TRUE);
/*cbLength = tvb_get_letohs(tvb, offset);*/
offset+=sizeof(guint32);
@@ -701,10 +697,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadRes_Len - sizeof(guint16) )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -723,10 +719,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adswriteresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adswriteresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsWriteRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adswriteresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adswriteresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -739,10 +735,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadwriteresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadwriteresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadWriteRes_Len - sizeof(guint16) )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadwriteresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadwriteresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -761,10 +757,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreadstateresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreadstateresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadStateRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreadstateresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreadstateresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -783,10 +779,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adswritectrlresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adswritectrlresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsWriteControlRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adswritectrlresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adswritectrlresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -799,10 +795,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsreaddinforesponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsreaddinforesponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsReadDeviceInfoRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsreaddinforesponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsreaddinforesponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -823,10 +819,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsadddnresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsadddnresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsAddDeviceNotificationRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsadddnresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsadddnresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
offset+=sizeof(guint32);
@@ -842,10 +838,10 @@ static void dissect_ams(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if( tree )
{
- aitem = proto_tree_add_item(ams_tree, hf_ams_adsdeldnresponse, tvb, offset, ams_length-offset, TRUE);
+ anItem = proto_tree_add_item(ams_tree, hf_ams_adsdeldnresponse, tvb, offset, ams_length-offset, TRUE);
if( ams_length-offset >= TAdsDelDeviceNotificationRes_Len )
{
- ams_adstree = proto_item_add_subtree(aitem, ett_ams_adsdeldnresponse);
+ ams_adstree = proto_item_add_subtree(anItem, ett_ams_adsdeldnresponse);
proto_tree_add_item(ams_adstree, hf_ams_adsresult, tvb, offset, sizeof(guint32), TRUE);
}
}
@@ -1210,8 +1206,6 @@ void proto_register_ams(void)
static gint *ett[] =
{
&ett_ams,
- &ett_ams_sender,
- &ett_ams_target,
&ett_ams_stateflags,
&ett_ams_adsreadrequest,
&ett_ams_adsreadresponse,
@@ -1229,15 +1223,13 @@ void proto_register_ams(void)
&ett_ams_adsadddnresponse,
&ett_ams_adsdeldnrequest,
&ett_ams_adsdeldnresponse,
- &ett_ams_adsdnrequest,
- &ett_ams_adsdnresponse,
- &ett_ams_noteblockstamp
+ &ett_ams_adsdnrequest
};
proto_ams = proto_register_protocol("AMS",
- "AMS","ams");
- proto_register_field_array(proto_ams,hf,array_length(hf));
- proto_register_subtree_array(ett,array_length(ett));
+ "AMS", "ams");
+ proto_register_field_array(proto_ams, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
register_dissector("ams", dissect_ams, proto_ams);
}
@@ -1248,7 +1240,7 @@ void proto_reg_handoff_ams(void)
{
static dissector_handle_t ams_handle;
- ams_handle = create_dissector_handle(dissect_ams,proto_ams);
+ ams_handle = create_dissector_handle(dissect_ams, proto_ams);
dissector_add("tcp.port", 0xbf02, ams_handle);
dissector_add("ecatf.type", 2, ams_handle);
}
diff --git a/plugins/ethercat/packet-ecatmb.c b/plugins/ethercat/packet-ecatmb.c
index 8d00b63c83..0f6c59b3a3 100644
--- a/plugins/ethercat/packet-ecatmb.c
+++ b/plugins/ethercat/packet-ecatmb.c
@@ -1,5 +1,5 @@
/* packet-ecatmb.c
- * Routines for ethercat packet disassembly
+ * Routines for EtherCAT packet disassembly
*
* $Id$
*
@@ -70,16 +70,14 @@ static int ett_ecat_mailbox_coe_sdoccs = -1;
static int ett_ecat_mailbox_coe_sdoscs = -1;
static int ett_ecat_mailbox_foe = -1;
static int ett_ecat_mailbox_foe_efw = -1;
-static int ett_ecat_mailbox_soeopmode = -1;
static int ett_ecat_mailbox_soeflag = -1;
static int ett_ecat_mailbox_soe = -1;
static int ett_ecat_mailbox_fraghead = -1;
+static int ett_ecat_mailbox_header = -1;
static int hf_ecat_mailbox = -1;
static int hf_ecat_mailboxlength = -1;
static int hf_ecat_mailboxaddress = -1;
-static int hf_ecat_mailboxtype = -1;
-static int hf_ecat_mailboxcounter = -1;
static int hf_ecat_mailbox_eoe = -1;
static int hf_ecat_mailbox_eoe_fraghead = -1;
static int hf_ecat_mailbox_eoe_type = -1;
@@ -210,11 +208,12 @@ static int hf_ecat_mailbox_soe_error = -1;
static const value_string EcMBoxType[] =
{
{ 0, "Invalid", },
- { 1, "AoE", },
- { 2, "EoE", },
- { 3, "CoE", },
- { 4, "FoE", },
- { 5, "SoE", },
+ { 1, "AoE (Vendor specific; Beckhoff ADS over EtherCAT)", },
+ { 2, "EoE (Ethernet over EtherCAT)", },
+ { 3, "CoE (CANopen over EtherCAT)", },
+ { 4, "FoE (File access over EtherCAT)", },
+ { 5, "SoE (Servo profile over EtherCAT)", },
+ { 15, "VoE (Vendor specific over EtherCAT)"},
{ 0x80+1, "AoE - Err", },
{ 0x80+2, "EoE - Err", },
{ 0x80+3, "CoE - Err", },
@@ -314,7 +313,7 @@ void init_sdo_info_header(PETHERCAT_SDO_INFO_HEADER pInfo, tvbuff_t *tvb, gint o
}
-static void MailboxTypeFormater(PETHERCAT_MBOX_HEADER pMbx, char *szText, gint nMax)
+static void MailboxTypeFormatter(PETHERCAT_MBOX_HEADER pMbx, char *szText, gint nMax)
{
guint32 i;
@@ -329,7 +328,7 @@ static void MailboxTypeFormater(PETHERCAT_MBOX_HEADER pMbx, char *szText, gint n
g_snprintf ( szText, nMax,"Type : %d", pMbx->aControlUnion.v.Type);
}
-static void EoETypeFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
+static void EoETypeFormatter(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
{
switch (pEoE->anEoeHeaderInfoUnion.v.Type)
{
@@ -357,12 +356,12 @@ static void EoETypeFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
}
}
-static void EoEFragNoFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
+static void EoEFragNoFormatter(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
{
g_snprintf ( szText, nMax, "FragNo : %d", pEoE->anEoeHeaderDataUnion.v.Fragment);
}
-static void EoEOffsetFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
+static void EoEOffsetFormatter(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
{
if ( pEoE->anEoeHeaderDataUnion.v.Fragment == 0 )
g_snprintf ( szText, nMax, "BufferSize : %d", 32*pEoE->anEoeHeaderDataUnion.v.OffsetBuffer);
@@ -370,12 +369,12 @@ static void EoEOffsetFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax
g_snprintf ( szText, nMax, "Offset : %d", 32*pEoE->anEoeHeaderDataUnion.v.OffsetBuffer);
}
-static void EoEFrameFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
+static void EoEFrameFormatter(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
{
g_snprintf ( szText, nMax, "FrameNo : %d", pEoE->anEoeHeaderDataUnion.v.FrameNo);
}
-static void EoELastFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
+static void EoELastFormatter(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
{
if ( pEoE->anEoeHeaderInfoUnion.v.LastFragment != 0 )
g_snprintf ( szText, nMax, "Last Frag");
@@ -383,12 +382,12 @@ static void EoELastFormater(PETHERCAT_EOE_HEADER pEoE, char *szText, gint nMax)
g_snprintf ( szText, nMax, "More Frags...");
}
-static void CANopenNumberFormater(PETHERCAT_COE_HEADER pCoE, char *szText, gint nMax)
+static void CANopenNumberFormatter(PETHERCAT_COE_HEADER pCoE, char *szText, gint nMax)
{
g_snprintf( szText, nMax, "Number : %d", pCoE->v.Number);
}
-static void CANopenTypeFormater(PETHERCAT_COE_HEADER pCoE, char *szText, gint nMax)
+static void CANopenTypeFormatter(PETHERCAT_COE_HEADER pCoE, char *szText, gint nMax)
{
switch ( pCoE->v.Type)
{
@@ -418,7 +417,7 @@ static void CANopenTypeFormater(PETHERCAT_COE_HEADER pCoE, char *szText, gint nM
}
}
-static void CANopenSdoReqFormater(PETHERCAT_SDO_HEADER pSdo, char *szText, gint nMax)
+static void CANopenSdoReqFormatter(PETHERCAT_SDO_HEADER pSdo, char *szText, gint nMax)
{
switch ( pSdo->anSdoHeaderUnion.Idq.Ccs )
{
@@ -442,12 +441,12 @@ static void CANopenSdoReqFormater(PETHERCAT_SDO_HEADER pSdo, char *szText, gint
}
}
-static void CANopenSdoResFormater(PETHERCAT_SDO_HEADER pSdo, char *szText, gint nMax)
+static void CANopenSdoResFormatter(PETHERCAT_SDO_HEADER pSdo, char *szText, gint nMax)
{
g_snprintf ( szText, nMax, "SDO Res : Scs %d", pSdo->anSdoHeaderUnion.Ids.Scs);
}
-static void CANopenSdoInfoFormater(PETHERCAT_SDO_INFO_HEADER pHead, char *szText, gint nMax)
+static void CANopenSdoInfoFormatter(PETHERCAT_SDO_INFO_HEADER pHead, char *szText, gint nMax)
{
guint8 opCode = pHead->anSdoControlUnion.v.OpCode & 0x7F;
char* txt2 = "";
@@ -481,7 +480,7 @@ static void CANopenSdoInfoFormater(PETHERCAT_SDO_INFO_HEADER pHead, char *szText
}
}
-static void FoeFormater(tvbuff_t *tvb, gint offset, char *szText, gint nMax, guint foe_length)
+static void FoeFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax, guint foe_length)
{
ETHERCAT_FOE_HEADER foe;
char tmp[50];
@@ -533,7 +532,7 @@ static void SoEIdToString( char* txt, guint16 id, int nMax)
g_snprintf(txt, nMax, "S-%d-%04d", id>>12, id & 0x0FFF );
}
-static void SoeFormater(tvbuff_t *tvb, gint offset, char *szText, gint nMax, guint soe_length)
+static void SoeFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax, guint soe_length)
{
ETHERCAT_SOE_HEADER soe;
char tmp[50];
@@ -593,13 +592,12 @@ static void SoeFormater(tvbuff_t *tvb, gint offset, char *szText, gint nMax, gui
g_snprintf ( szText, nMax, "SoE: Error %04x", tvb_get_letohs(tvb, offset));
}
-
-/*ethercat mailbox*/
+/* ethercat mailbox */
static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree)
{
proto_tree *ecat_coe_tree = NULL, *ecat_sdo_tree, *ecat_coe_sdoccs_tree, *ecat_coe_sdoscs_tree;
- proto_item *aitem = NULL, *aparent = NULL;
+ proto_item *anItem = NULL, *aparent = NULL;
char szText[200];
int nMax = sizeof(szText)-1;
@@ -608,9 +606,9 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if( tree )
{
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_coe, tvb, offset, coe_length, TRUE);
- proto_item_set_text(aitem,"CoE");
- aparent = proto_item_get_parent(aitem);
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_coe, tvb, offset, coe_length, TRUE);
+ proto_item_set_text(anItem,"CoE");
+ aparent = proto_item_get_parent(anItem);
proto_item_append_text(aparent,":CoE ");
}
@@ -623,15 +621,15 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
init_coe_header(&coe, tvb, offset);
if( tree )
{
- ecat_coe_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe);
+ ecat_coe_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe);
- CANopenNumberFormater(&coe, szText, nMax);
- aitem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_number, tvb, offset, ETHERCAT_COE_HEADER_LEN, coe.v.Number);
- proto_item_set_text(aitem, szText);
+ CANopenNumberFormatter(&coe, szText, nMax);
+ anItem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_number, tvb, offset, ETHERCAT_COE_HEADER_LEN, coe.v.Number);
+ proto_item_set_text(anItem, szText);
- CANopenTypeFormater(&coe, szText, nMax);
- aitem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_type, tvb, offset, ETHERCAT_COE_HEADER_LEN, coe.v.Type);
- proto_item_set_text(aitem, szText);
+ CANopenTypeFormatter(&coe, szText, nMax);
+ anItem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_type, tvb, offset, ETHERCAT_COE_HEADER_LEN, coe.v.Type);
+ proto_item_set_text(anItem, szText);
}
offset += ETHERCAT_COE_HEADER_LEN;
@@ -651,7 +649,7 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
init_sdo_header(&sdo, tvb, offset);
- CANopenSdoReqFormater(&sdo, szText, nMax);
+ CANopenSdoReqFormatter(&sdo, szText, nMax);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, szText);
@@ -659,71 +657,71 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
{
proto_item_append_text(aparent, szText);
- aitem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_sdoreq, tvb, offset, 1, sdo.anSdoHeaderUnion.Idq.Ccs);
- proto_item_set_text(aitem, szText);
- ecat_sdo_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_sdo);
+ anItem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_sdoreq, tvb, offset, 1, sdo.anSdoHeaderUnion.Idq.Ccs);
+ proto_item_set_text(anItem, szText);
+ ecat_sdo_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_sdo);
switch ( sdo.anSdoHeaderUnion.Idq.Ccs )
{
case SDO_CCS_INITIATE_DOWNLOAD:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsid, tvb, offset, 1, TRUE);
- ecat_coe_sdoccs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoccs);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_sizeind, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_expedited, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_size0, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_size1, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_complete, tvb, offset, 1, TRUE);
-
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsid, tvb, offset, 1, TRUE);
+ ecat_coe_sdoccs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoccs);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_sizeind, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_expedited, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_size0, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_size1, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_complete, tvb, offset, 1, TRUE);
+
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
if ( sdo.anSdoHeaderUnion.Idq.SizeInd && !sdo.anSdoHeaderUnion.Idq.Expedited )
{
len = coe_length - ETHERCAT_COE_HEADER_LEN - ETHERCAT_SDO_HEADER_LEN;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdolength, tvb, offset+4, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdolength, tvb, offset+4, 4, TRUE);
offset+=ETHERCAT_SDO_HEADER_LEN;
if ( len > 0 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, len, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, len, TRUE);
}
else
{
if ( sdo.anSdoHeaderUnion.Idq.Size == 3 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata1, tvb, offset+4, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata1, tvb, offset+4, 1, TRUE);
else if ( sdo.anSdoHeaderUnion.Idq.Size == 2 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata2, tvb, offset+4, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata2, tvb, offset+4, 2, TRUE);
else
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata, tvb, offset+4, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata, tvb, offset+4, 4, TRUE);
}
break;
case SDO_CCS_INITIATE_UPLOAD:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsiu, tvb, offset, 1, TRUE);
- ecat_coe_sdoccs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoccs);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_complete, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsiu, tvb, offset, 1, TRUE);
+ ecat_coe_sdoccs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoccs);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsid_complete, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
break;
case SDO_CCS_DOWNLOAD_SEGMENT:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsds, tvb, offset, 1, TRUE);
- ecat_coe_sdoccs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoccs);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_lastseg, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_size, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_toggle, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsds, tvb, offset, 1, TRUE);
+ ecat_coe_sdoccs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoccs);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_lastseg, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_size, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsds_toggle, tvb, offset, 1, TRUE);
offset+=1;
if ( coe_length-offset > 0 )
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, coe_length-offset, TRUE);
- proto_item_append_text(aitem, "(len = %d)", coe_length-offset);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, coe_length-offset, TRUE);
+ proto_item_append_text(anItem, "(len = %d)", coe_length-offset);
}
break;
case SDO_CCS_UPLOAD_SEGMENT:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsus, tvb, offset, 1, TRUE);
- ecat_coe_sdoccs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoccs);
- aitem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsus_toggle, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoccsus, tvb, offset, 1, TRUE);
+ ecat_coe_sdoccs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoccs);
+ anItem = proto_tree_add_item(ecat_coe_sdoccs_tree, hf_ecat_mailbox_coe_sdoccsus_toggle, tvb, offset, 1, TRUE);
break;
case SDO_CCS_ABORT_TRANSFER:
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+4, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+4, 4, TRUE);
break;
}
}
@@ -742,65 +740,65 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
init_sdo_header(&sdo, tvb, offset);
- CANopenSdoResFormater(&sdo, szText, nMax);
+ CANopenSdoResFormatter(&sdo, szText, nMax);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, szText);
if( tree )
{
- aitem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_sdores, tvb, offset, 1, sdo.anSdoHeaderUnion.Ids.Scs);
- proto_item_set_text(aitem, szText);
- ecat_sdo_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_sdo);
+ anItem = proto_tree_add_uint(ecat_coe_tree, hf_ecat_mailbox_coe_sdores, tvb, offset, 1, sdo.anSdoHeaderUnion.Ids.Scs);
+ proto_item_set_text(anItem, szText);
+ ecat_sdo_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_sdo);
switch ( sdo.anSdoHeaderUnion.Ids.Scs )
{
case SDO_SCS_INITIATE_DOWNLOAD:
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
break;
case SDO_SCS_INITIATE_UPLOAD:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsiu, tvb, offset, 1, TRUE);
- ecat_coe_sdoscs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoscs);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_sizeind, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_expedited, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_size0, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_size1, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_complete, tvb, offset, 1, TRUE);
-
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsiu, tvb, offset, 1, TRUE);
+ ecat_coe_sdoscs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoscs);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_sizeind, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_expedited, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_size0, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_size1, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsiu_complete, tvb, offset, 1, TRUE);
+
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoidx, tvb, offset+1, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdosub, tvb, offset+3, 1, TRUE);
if ( sdo.anSdoHeaderUnion.Ius.SizeInd && !sdo.anSdoHeaderUnion.Ius.Expedited )
{
len = coe_length - ETHERCAT_COE_HEADER_LEN - ETHERCAT_SDO_HEADER_LEN;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdolength, tvb, offset+4, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdolength, tvb, offset+4, 4, TRUE);
offset+=ETHERCAT_SDO_HEADER_LEN;
if ( len > 0 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, len, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, len, TRUE);
}
else if ( sdo.anSdoHeaderUnion.Ius.SizeInd && sdo.anSdoHeaderUnion.Ius.Expedited && sdo.anSdoHeaderUnion.Ius.Size == 3 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata1, tvb, offset+4, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata1, tvb, offset+4, 1, TRUE);
else if ( sdo.anSdoHeaderUnion.Ius.SizeInd && sdo.anSdoHeaderUnion.Ius.Expedited && sdo.anSdoHeaderUnion.Ius.Size == 2 )
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata2, tvb, offset+4, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata2, tvb, offset+4, 2, TRUE);
else
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata, tvb, offset+4, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdodata, tvb, offset+4, 4, TRUE);
break;
case SDO_SCS_DOWNLOAD_SEGMENT:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsds, tvb, offset, 1, TRUE);
- ecat_coe_sdoscs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoscs);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsds_toggle, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsds, tvb, offset, 1, TRUE);
+ ecat_coe_sdoscs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoscs);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsds_toggle, tvb, offset, 1, TRUE);
break;
case SDO_SCS_UPLOAD_SEGMENT:
- aitem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsus, tvb, offset, 1, TRUE);
- ecat_coe_sdoscs_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_coe_sdoscs);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_lastseg, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_bytes, tvb, offset, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_toggle, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_sdo_tree, hf_ecat_mailbox_coe_sdoscsus, tvb, offset, 1, TRUE);
+ ecat_coe_sdoscs_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_coe_sdoscs);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_lastseg, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_bytes, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_sdoscs_tree, hf_ecat_mailbox_coe_sdoscsus_toggle, tvb, offset, 1, TRUE);
offset+=1;
if ( coe_length-offset> 0 )
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, coe_length-offset, TRUE);
- proto_item_append_text(aitem, "(len = %d)", coe_length-offset);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoldata, tvb, offset, coe_length-offset, TRUE);
+ proto_item_append_text(anItem, "(len = %d)", coe_length-offset);
}
break;
}
@@ -821,107 +819,107 @@ static void dissect_ecat_coe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
init_sdo_info_header(&info, tvb, offset);
- CANopenSdoInfoFormater(&info, szText, nMax);
+ CANopenSdoInfoFormatter(&info, szText, nMax);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, szText);
if( tree )
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoopcode, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoopcode, tvb, offset++, 1, TRUE);
offset++; /*Reserved*/
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfofrag, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfofrag, tvb, offset, 2, TRUE);
offset+=2;
switch ( info.anSdoControlUnion.v.OpCode )
{
case ECAT_COE_INFO_OPCODE_LIST_Q:
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolisttype, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolisttype, tvb, offset, 2, TRUE);
}
break;
case ECAT_COE_INFO_OPCODE_LIST_S:
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolisttype, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolisttype, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolist, tvb, offset, coe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfolist, tvb, offset, coe_length-offset, TRUE);
}
break;
case ECAT_COE_INFO_OPCODE_OBJ_Q:
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
break;
case ECAT_COE_INFO_OPCODE_OBJ_S:
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodatatype, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodatatype, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfomaxsub, tvb, offset++, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoobjcode, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfomaxsub, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoobjcode, tvb, offset++, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoname, tvb, offset, coe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoname, tvb, offset, coe_length-offset, TRUE);
}
break;
case ECAT_COE_INFO_OPCODE_ENTRY_Q:
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfosubindex, tvb, offset++, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfovalueinfo, tvb, offset, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfosubindex, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfovalueinfo, tvb, offset, 1, TRUE);
}
break;
case ECAT_COE_INFO_OPCODE_ENTRY_S:
{
guint16 objlen;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoindex, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfosubindex, tvb, offset++, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfovalueinfo, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfosubindex, tvb, offset++, 1, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfovalueinfo, tvb, offset++, 1, TRUE);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodatatype, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodatatype, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfobitlen, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfobitlen, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoobjaccess, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoobjaccess, tvb, offset, 2, TRUE);
offset+=2;
if ( (info.anSdoInfoUnion.Entry.ValueInfo & 0x08) != 0 )
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfounittype, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfounittype, tvb, offset, 2, TRUE);
offset+=2;
}
if ( (info.anSdoInfoUnion.Entry.ValueInfo & 0x10) != 0 )
{
objlen = BIT2BYTE(info.anSdoInfoUnion.Entry.Res.BitLen);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodefaultvalue, tvb, offset, objlen, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfodefaultvalue, tvb, offset, objlen, TRUE);
offset+=objlen;
}
if ( (info.anSdoInfoUnion.Entry.ValueInfo & 0x20) != 0 )
{
objlen = BIT2BYTE(info.anSdoInfoUnion.Entry.Res.BitLen);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfominvalue, tvb, offset, objlen, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfominvalue, tvb, offset, objlen, TRUE);
offset+=objlen;
}
if ( (info.anSdoInfoUnion.Entry.ValueInfo & 0x40) != 0 )
{
objlen = BIT2BYTE(info.anSdoInfoUnion.Entry.Res.BitLen);
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfomaxvalue, tvb, offset, objlen, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfomaxvalue, tvb, offset, objlen, TRUE);
offset+=objlen;
}
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoname, tvb, offset, coe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoname, tvb, offset, coe_length-offset, TRUE);
}
break;
case ECAT_COE_INFO_OPCODE_ERROR_S:
{
- aitem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoerrorcode, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_coe_tree, hf_ecat_mailbox_coe_sdoinfoerrorcode, tvb, offset, 4, TRUE);
}
break;
}
@@ -941,7 +939,7 @@ static void dissect_ecat_soe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
{
proto_tree *ecat_soeflag_tree, *ecat_soe_tree;
- proto_item *aitem = NULL ,*aparent = NULL;
+ proto_item *anItem = NULL ,*aparent = NULL;
char szText[200];
int nMax = sizeof(szText)-1;
@@ -949,15 +947,15 @@ static void dissect_ecat_soe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if( tree )
{
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_soe, tvb, offset, soe_length, TRUE);
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_soe, tvb, offset, soe_length, TRUE);
- aparent = proto_item_get_parent(aitem);
+ aparent = proto_item_get_parent(anItem);
proto_item_append_text(aparent,":SoE ");
}
if( soe_length >= ETHERCAT_SOE_HEADER_LEN )
{
- SoeFormater(tvb, offset, szText, nMax, soe_length);
+ SoeFormatter(tvb, offset, szText, nMax, soe_length);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, szText);
@@ -967,24 +965,24 @@ static void dissect_ecat_soe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
init_soe_header(&soe, tvb, offset);
proto_item_append_text(aparent, szText);
- proto_item_set_text(aitem, szText);
-
- ecat_soe_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_soe);
- aitem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_header, tvb, offset , 2, TRUE);
-
- ecat_soeflag_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_soeflag);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_opcode, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_incomplete, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_error, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_driveno, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_datastate, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_name, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_attribute, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_unit, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_min, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_max, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_value, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_reserved, tvb, offset, 2, TRUE);
+ proto_item_set_text(anItem, szText);
+
+ ecat_soe_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_soe);
+ anItem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_header, tvb, offset , 2, TRUE);
+
+ ecat_soeflag_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_soeflag);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_opcode, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_incomplete, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_error, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_driveno, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_datastate, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_name, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_attribute, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_unit, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_min, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_max, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_value, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soeflag_tree, hf_ecat_mailbox_soe_header_reserved, tvb, offset, 2, TRUE);
offset+=2;
if ( !soe.anSoeHeaderControlUnion.v.Error )
@@ -995,29 +993,29 @@ static void dissect_ecat_soe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
{
case ECAT_SOE_OPCODE_RRQ:
case ECAT_SOE_OPCODE_WRS:
- aitem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
break;
case ECAT_SOE_OPCODE_RRS:
case ECAT_SOE_OPCODE_WRQ:
case ECAT_SOE_OPCODE_NFC:
- aitem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_data, tvb, offset, soe_length-offset, TRUE);
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_data, tvb, offset, soe_length-offset, TRUE);
break;
}
}
else
{
- aitem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_frag, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_frag, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_data, tvb, offset, soe_length-offset, TRUE);
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_data, tvb, offset, soe_length-offset, TRUE);
}
}
else
{
- aitem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_error, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_soe_tree, hf_ecat_mailbox_soe_idn, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_soe_error, tvb, offset, 2, TRUE);
}
}
}
@@ -1033,7 +1031,7 @@ static void dissect_ecat_eoe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
proto_tree *ecat_eoe_tree = 0, *ecat_fraghead_tree, *ecat_eoe_init_tree, *ecat_eoe_macfilter_tree,
*ecat_eoe_macfilter_filter_tree, *ecat_eoe_macfilter_filtermask_tree;
tvbuff_t *next_tvb;
- proto_item *aitem = NULL, *aparent = NULL;
+ proto_item *anItem = NULL, *aparent = NULL;
char szText[200];
int nMax = sizeof(szText)-1;
int nCnt;
@@ -1042,10 +1040,10 @@ static void dissect_ecat_eoe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if( tree )
{
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_eoe, tvb, offset, eoe_length, TRUE);
- proto_item_set_text(aitem, "EoE Fragment");
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_eoe, tvb, offset, eoe_length, TRUE);
+ proto_item_set_text(anItem, "EoE Fragment");
- aparent = proto_item_get_parent(aitem);
+ aparent = proto_item_get_parent(anItem);
proto_item_append_text(aparent,":EoE ");
}
@@ -1064,49 +1062,49 @@ static void dissect_ecat_eoe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if( tree )
{
- ecat_eoe_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_eoe);
+ ecat_eoe_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_eoe);
- aitem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_fraghead, tvb, offset, 4, TRUE);
- proto_item_set_text(aitem, "Header");
- ecat_fraghead_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_fraghead);
+ anItem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_fraghead, tvb, offset, 4, TRUE);
+ proto_item_set_text(anItem, "Header");
+ ecat_fraghead_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_fraghead);
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_type, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.Type);
- EoETypeFormater(&eoe, szText, nMax);
- proto_item_set_text(aitem,szText);
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_type, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.Type);
+ EoETypeFormatter(&eoe, szText, nMax);
+ proto_item_set_text(anItem,szText);
switch ( eoe.anEoeHeaderInfoUnion.v.Type )
{
case EOE_TYPE_FRAME_FRAG:
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_fragno, tvb, offset, 4, eoe.anEoeHeaderDataUnion.v.Fragment);
- EoEFragNoFormater(&eoe, szText, nMax);
- proto_item_set_text(aitem,szText);
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_fragno, tvb, offset, 4, eoe.anEoeHeaderDataUnion.v.Fragment);
+ EoEFragNoFormatter(&eoe, szText, nMax);
+ proto_item_set_text(anItem,szText);
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_offset, tvb, offset, 4, 32*eoe.anEoeHeaderDataUnion.v.OffsetBuffer);
- EoEOffsetFormater(&eoe, szText, nMax);
- proto_item_set_text(aitem,szText);
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_offset, tvb, offset, 4, 32*eoe.anEoeHeaderDataUnion.v.OffsetBuffer);
+ EoEOffsetFormatter(&eoe, szText, nMax);
+ proto_item_set_text(anItem,szText);
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_frame, tvb, offset, 4, eoe.anEoeHeaderDataUnion.v.FrameNo);
- EoEFrameFormater(&eoe, szText, nMax);
- proto_item_set_text(aitem,szText);
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_frame, tvb, offset, 4, eoe.anEoeHeaderDataUnion.v.FrameNo);
+ EoEFrameFormatter(&eoe, szText, nMax);
+ proto_item_set_text(anItem,szText);
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_last, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.LastFragment);
- EoELastFormater(&eoe, szText, nMax);
- proto_item_set_text(aitem,szText);
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_last, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.LastFragment);
+ EoELastFormatter(&eoe, szText, nMax);
+ proto_item_set_text(anItem,szText);
if ( eoe.anEoeHeaderInfoUnion.v.TimeStampRequested )
{
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_timestampreq, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.TimeStampRequested);
- proto_item_set_text(aitem, "Time Stamp Requested");
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_timestampreq, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.TimeStampRequested);
+ proto_item_set_text(anItem, "Time Stamp Requested");
}
if ( eoe.anEoeHeaderInfoUnion.v.TimeStampAppended )
{
- aitem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_timestampapp, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.TimeStampAppended);
- proto_item_set_text(aitem, "Time Stamp Appended");
+ anItem = proto_tree_add_uint(ecat_fraghead_tree, hf_ecat_mailbox_eoe_timestampapp, tvb, offset, 4, eoe.anEoeHeaderInfoUnion.v.TimeStampAppended);
+ proto_item_set_text(anItem, "Time Stamp Appended");
}
offset+=ETHERCAT_EOE_HEADER_LEN;
- aitem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_fragment, tvb, offset, eoe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_fragment, tvb, offset, eoe_length-offset, TRUE);
if ( eoe.anEoeHeaderDataUnion.v.Fragment == 0 )
{
@@ -1116,78 +1114,78 @@ static void dissect_ecat_eoe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if ( eoe.anEoeHeaderInfoUnion.v.TimeStampAppended )
{
- aitem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_timestamp, tvb, eoe_length-ETHERCAT_EOE_TIMESTAMP_LEN, ETHERCAT_EOE_TIMESTAMP_LEN, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_timestamp, tvb, eoe_length-ETHERCAT_EOE_TIMESTAMP_LEN, ETHERCAT_EOE_TIMESTAMP_LEN, TRUE);
}
break;
case EOE_TYPE_TIMESTAMP_RES:
- aitem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_timestamp, tvb, offset+ETHERCAT_EOE_HEADER_LEN, ETHERCAT_EOE_TIMESTAMP_LEN, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_tree, hf_ecat_mailbox_eoe_timestamp, tvb, offset+ETHERCAT_EOE_HEADER_LEN, ETHERCAT_EOE_TIMESTAMP_LEN, TRUE);
break;
case EOE_TYPE_INIT_REQ:
offset+=ETHERCAT_EOE_HEADER_LEN;
- aitem = proto_tree_add_item(ecat_fraghead_tree, hf_ecat_mailbox_eoe_init, tvb, offset, MIN(eoe_length-offset,ETHERCAT_EOE_INIT_LEN), TRUE);
+ anItem = proto_tree_add_item(ecat_fraghead_tree, hf_ecat_mailbox_eoe_init, tvb, offset, MIN(eoe_length-offset,ETHERCAT_EOE_INIT_LEN), TRUE);
if( eoe_length-offset >= ETHERCAT_EOE_INIT_LEN )
{
- ecat_eoe_init_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_eoe_init);
-
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_macaddr, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_ipaddr, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_subnetmask, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_defaultgateway, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_dnsserver, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_dnsname, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_append_timestamp, tvb, offset, 4, TRUE);
+ ecat_eoe_init_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_eoe_init);
+
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_macaddr, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_ipaddr, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_subnetmask, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_defaultgateway, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_dnsserver, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_contains_dnsname, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_append_timestamp, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_macaddr, tvb, offset, ETHERNET_ADDRESS_LEN, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_macaddr, tvb, offset, ETHERNET_ADDRESS_LEN, TRUE);
offset+=ETHERNET_ADDRESS_LEN;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_ipaddr, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_ipaddr, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_subnetmask, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_subnetmask, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_defaultgateway, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_defaultgateway, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_dnsserver, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_dnsserver, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_dnsname, tvb, offset, 32, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_init_tree, hf_ecat_mailbox_eoe_init_dnsname, tvb, offset, 32, TRUE);
}
else
- proto_item_append_text(aitem, " - Invalid length!");
+ proto_item_append_text(anItem, " - Invalid length!");
break;
case EOE_TYPE_MACFILTER_REQ:
{
EoeMacFilterOptionsUnion options;
offset+=ETHERCAT_EOE_HEADER_LEN;
- aitem = proto_tree_add_item(ecat_fraghead_tree, hf_ecat_mailbox_eoe_macfilter, tvb, offset, MIN(eoe_length-offset, ETHERCAT_EOE_MACFILTER_LEN), TRUE);
+ anItem = proto_tree_add_item(ecat_fraghead_tree, hf_ecat_mailbox_eoe_macfilter, tvb, offset, MIN(eoe_length-offset, ETHERCAT_EOE_MACFILTER_LEN), TRUE);
if( eoe_length-offset >= ETHERCAT_EOE_MACFILTER_LEN )
{
- ecat_eoe_macfilter_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_eoe_macfilter);
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_macfiltercount, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_maskcount, tvb, offset, 4, TRUE);
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_nobroadcasts, tvb, offset, 4, TRUE);
+ ecat_eoe_macfilter_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_eoe_macfilter);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_macfiltercount, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_maskcount, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_nobroadcasts, tvb, offset, 4, TRUE);
options.Options = tvb_get_letohs(tvb, offset);
offset+=4;
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filter, tvb, offset, 16*ETHERNET_ADDRESS_LEN, TRUE);
- ecat_eoe_macfilter_filter_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_eoe_macfilter_filter);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filter, tvb, offset, 16*ETHERNET_ADDRESS_LEN, TRUE);
+ ecat_eoe_macfilter_filter_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_eoe_macfilter_filter);
for( nCnt=0; nCnt<options.v.MacFilterCount; nCnt++)
- aitem = proto_tree_add_item(ecat_eoe_macfilter_filter_tree, hf_ecat_mailbox_eoe_macfilter_filters[nCnt], tvb, offset+nCnt*ETHERNET_ADDRESS_LEN, ETHERNET_ADDRESS_LEN, TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_filter_tree, hf_ecat_mailbox_eoe_macfilter_filters[nCnt], tvb, offset+nCnt*ETHERNET_ADDRESS_LEN, ETHERNET_ADDRESS_LEN, TRUE);
offset+=16*ETHERNET_ADDRESS_LEN;
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filtermask, tvb, offset, 4*sizeof(guint32), TRUE);
- ecat_eoe_macfilter_filtermask_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_eoe_macfilter_filtermask);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filtermask, tvb, offset, 4*sizeof(guint32), TRUE);
+ ecat_eoe_macfilter_filtermask_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_eoe_macfilter_filtermask);
for( nCnt=0; nCnt<options.v.MacFilterMaskCount; nCnt++)
- aitem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filtermasks[nCnt], tvb, offset+nCnt*sizeof(guint32), sizeof(guint32), TRUE);
+ anItem = proto_tree_add_item(ecat_eoe_macfilter_tree, hf_ecat_mailbox_eoe_macfilter_filtermasks[nCnt], tvb, offset+nCnt*sizeof(guint32), sizeof(guint32), TRUE);
}
else
- proto_item_append_text(aitem, " - Invalid length!");
+ proto_item_append_text(anItem, " - Invalid length!");
}
break;
@@ -1214,7 +1212,7 @@ static void dissect_ecat_foe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
{
proto_tree *ecat_foe_tree,*ecat_foe_efw_tree;
- proto_item *aitem= NULL,*aparent = NULL;
+ proto_item *anItem= NULL,*aparent = NULL;
char szText[200];
int nMax = sizeof(szText)-1;
@@ -1222,16 +1220,16 @@ static void dissect_ecat_foe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
if( tree )
{
- aitem = proto_tree_add_item(tree, hf_ecat_mailbox_foe, tvb, offset, foe_length, TRUE);
- proto_item_set_text(aitem, ":Foe");
+ anItem = proto_tree_add_item(tree, hf_ecat_mailbox_foe, tvb, offset, foe_length, TRUE);
+ proto_item_set_text(anItem, ":Foe");
- aparent = proto_item_get_parent(aitem);
+ aparent = proto_item_get_parent(anItem);
proto_item_append_text(aparent,"FoE ");
}
if( foe_length >= ETHERCAT_FOE_HEADER_LEN )
{
- FoeFormater(tvb, offset, szText, nMax, foe_length);
+ FoeFormatter(tvb, offset, szText, nMax, foe_length);
if (check_col(pinfo->cinfo, COL_INFO))
col_append_str(pinfo->cinfo, COL_INFO, szText);
@@ -1240,64 +1238,64 @@ static void dissect_ecat_foe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
ETHERCAT_FOE_HEADER foe;
init_foe_header(&foe, tvb, offset);
- ecat_foe_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_foe);
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_opmode, tvb, offset++, 1, TRUE);
+ ecat_foe_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_foe);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_opmode, tvb, offset++, 1, TRUE);
offset++; /*Reserved1;*/
switch (foe.OpMode)
{
case ECAT_FOE_OPMODE_RRQ:
case ECAT_FOE_OPMODE_WRQ:
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_filelength, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_filelength, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_filename, tvb, offset, foe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_filename, tvb, offset, foe_length-offset, TRUE);
break;
case ECAT_FOE_OPMODE_DATA:
{
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_packetno, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_packetno, tvb, offset, 2, TRUE);
offset+=4; /*+2 for Reserved2*/
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_data, tvb, offset, foe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_data, tvb, offset, foe_length-offset, TRUE);
if( foe_length-offset >= sizeof(TEFWUPDATE_HEADER) )
{
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_efw, tvb, offset, foe_length-offset, TRUE);
- ecat_foe_efw_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox_foe_efw);
- aitem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_cmd, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_efw, tvb, offset, foe_length-offset, TRUE);
+ ecat_foe_efw_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_foe_efw);
+ anItem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_cmd, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_size, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_size, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_addresslw, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_addresslw, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_addresshw, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_addresshw, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_data, tvb, offset, foe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_efw_tree, hf_ecat_mailbox_foe_efw_data, tvb, offset, foe_length-offset, TRUE);
}
}
break;
case ECAT_FOE_OPMODE_ACK:
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_packetno, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_packetno, tvb, offset, 2, TRUE);
break;
case ECAT_FOE_OPMODE_ERR:
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_errcode, tvb, offset, 4, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_errcode, tvb, offset, 4, TRUE);
offset+=4;
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_errtext, tvb, offset, foe_length-offset, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_errtext, tvb, offset, foe_length-offset, TRUE);
break;
case ECAT_FOE_OPMODE_BUSY:
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_busydone, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_busydone, tvb, offset, 2, TRUE);
offset+=2;
- aitem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_busyentire, tvb, offset, 2, TRUE);
+ anItem = proto_tree_add_item(ecat_foe_tree, hf_ecat_mailbox_foe_busyentire, tvb, offset, 2, TRUE);
break;
}
}
@@ -1311,9 +1309,10 @@ static void dissect_ecat_foe(tvbuff_t *tvb, gint offset, packet_info *pinfo, pro
static void dissect_ecat_mailbox(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_tree *ecat_mailbox_tree=NULL;
+ proto_tree *ecat_mailbox_tree = NULL;
+ proto_tree *ecat_mailbox_header_tree = NULL;
tvbuff_t *next_tvb;
- proto_item *aitem;
+ proto_item *anItem;
gint offset = 0;
char szText[200];
int nMax = sizeof(szText)-1;
@@ -1334,21 +1333,32 @@ static void dissect_ecat_mailbox(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
if( tree )
{
- aitem = proto_tree_add_item(tree, proto_ecat_mailbox, tvb, 0, ETHERCAT_MBOX_HEADER_LEN+hdr.Length, TRUE);
- ecat_mailbox_tree = proto_item_add_subtree(aitem, ett_ecat_mailbox);
+ /* Create the mailbox sub tree */
+ anItem = proto_tree_add_item(tree, proto_ecat_mailbox, tvb, 0, ETHERCAT_MBOX_HEADER_LEN+hdr.Length, TRUE);
+ ecat_mailbox_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox);
+
+ /* Create a mailbox header subtree */
+ anItem = proto_tree_add_text(ecat_mailbox_tree, tvb, offset, ETHERCAT_MBOX_HEADER_LEN, "Header");
+ ecat_mailbox_header_tree = proto_item_add_subtree(anItem, ett_ecat_mailbox_header);
- aitem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxlength, tvb, offset, sizeof(hdr.Length), TRUE);
+ /* Add length information to the mailbox header */
+ anItem = proto_tree_add_item(ecat_mailbox_header_tree, hf_ecat_mailboxlength, tvb, offset, sizeof(hdr.Length), TRUE);
offset+=sizeof(hdr.Length);
- aitem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxaddress, tvb, offset, sizeof(hdr.Address), TRUE);
- offset+=sizeof(hdr.Address)+sizeof(guint8);
+ /* Add address information to the mailbox header */
+ anItem = proto_tree_add_item(ecat_mailbox_header_tree, hf_ecat_mailboxaddress, tvb, offset, sizeof(hdr.Address), TRUE);
+ offset+=sizeof(hdr.Address);
+
+ /* Add priority information to the mailbox header */
+ proto_tree_add_text(ecat_mailbox_header_tree, tvb, offset, 1, "Priority: %d", tvb_get_guint8(tvb, offset) & 0x3);
+ offset+=sizeof(guint8);
- aitem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxtype, tvb, offset, 1, TRUE);
- MailboxTypeFormater(&hdr, szText, nMax);
- proto_item_set_text(aitem,szText);
+ /* Add type information to the mailbox header */
+ MailboxTypeFormatter(&hdr, szText, nMax);
+ proto_tree_add_text(ecat_mailbox_header_tree, tvb, offset, 1, szText);
- aitem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxcounter, tvb, offset, 1,TRUE);
- proto_item_set_text(aitem,"Counter : %d",hdr.aControlUnion.v.Counter);
+ /* Add counter information to the mailbox header */
+ proto_tree_add_text(ecat_mailbox_header_tree, tvb, offset, 1, "Counter : %d",hdr.aControlUnion.v.Counter);
offset++;
}
else
@@ -1378,7 +1388,7 @@ static void dissect_ecat_mailbox(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
break;
default:
- aitem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxdata, tvb, offset, hdr.Length, TRUE);
+ anItem = proto_tree_add_item(ecat_mailbox_tree, hf_ecat_mailboxdata, tvb, offset, hdr.Length, TRUE);
}
if (check_col(pinfo->cinfo, COL_INFO))
@@ -1389,7 +1399,7 @@ static void dissect_ecat_mailbox(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
void proto_register_ecat_mailbox(void)
{
- static const true_false_string flags_set_truth =
+ static const true_false_string flags_set_truth[] =
{
"Set",
"Not set"
@@ -1412,16 +1422,6 @@ void proto_register_ecat_mailbox(void)
FT_UINT16, BASE_HEX, NULL, 0x0,
"", HFILL }
},
- { &hf_ecat_mailboxtype,
- { "Type ", "ecat_mailbox.type",
- FT_UINT8, BASE_HEX, VALS(EcMBoxType), 0x0F,
- "", 0x0F, 0, 0, 0, NULL, NULL }
- },
- { &hf_ecat_mailboxcounter,
- { "Counter ", "ecat_mailbox.counter",
- FT_UINT8, BASE_HEX, NULL, 0x70,
- "", 0x70, 0, 0, 0, NULL, NULL }
- },
{ &hf_ecat_mailbox_eoe,
{ "EoE Fragment", "ecat_mailbox.eoe",
FT_BYTES, BASE_NONE, NULL, 0x0,
@@ -2057,16 +2057,16 @@ void proto_register_ecat_mailbox(void)
&ett_ecat_mailbox_coe_sdoscs,
&ett_ecat_mailbox_foe,
&ett_ecat_mailbox_foe_efw,
- &ett_ecat_mailbox_soeopmode,
&ett_ecat_mailbox_soeflag,
&ett_ecat_mailbox_soe,
- &ett_ecat_mailbox_fraghead
+ &ett_ecat_mailbox_fraghead,
+ &ett_ecat_mailbox_header
};
proto_ecat_mailbox = proto_register_protocol("EtherCAT Mailbox Protocol",
- "ECAT_MAILBOX","ecat_mailbox");
- proto_register_field_array(proto_ecat_mailbox,hf,array_length(hf));
- proto_register_subtree_array(ett,array_length(ett));
+ "ECAT_MAILBOX", "ecat_mailbox");
+ proto_register_field_array(proto_ecat_mailbox, hf,array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
register_dissector("ecat_mailbox", dissect_ecat_mailbox, proto_ecat_mailbox);
}
diff --git a/plugins/ethercat/packet-ethercat-datagram.c b/plugins/ethercat/packet-ethercat-datagram.c
index debd76ddf7..96bec0d1dc 100644
--- a/plugins/ethercat/packet-ethercat-datagram.c
+++ b/plugins/ethercat/packet-ethercat-datagram.c
@@ -46,25 +46,26 @@
#include "packet-ethercat-datagram.h"
#include "packet-ecatmb.h"
-
void proto_reg_handoff_ecat(void);
+static heur_dissector_list_t heur_subdissector_list;
static dissector_handle_t ecat_mailbox_handle;
-/* Define the ethercat proto */
+/* Define the EtherCAT proto */
static int proto_ecat_datagram = -1;
-/* Define the tree for ethercat */
+/* Define the tree for EtherCAT */
static int ett_ecat = -1;
-static int ett_ecat_summary = -1;
-static int ett_ecat_sub;
static int ett_ecat_header = -1;
-static int ett_ecat_fmmu = -1;
static int ett_ecat_syncman = -1;
static int ett_ecat_syncflag = -1;
+static int ett_ecat_fmmu = -1;
static int ett_ecat_fmmu_type = -1;
static int ett_ecat_fmmu_active = -1;
static int ett_ecat_dc = -1;
+static int ett_ecat_length = -1;
+static int ett_ecat_padding = -1;
+static int ett_ecat_datagram_subtree = -1;
static int hf_ecat_sub;
static int hf_ecat_sub_data[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
@@ -128,28 +129,74 @@ static int hf_ecat_dc_diff_cd = -1;
static int hf_ecat_dc_diff_ba = -1;
static int hf_ecat_dc_diff_ca = -1;
+static int hf_ecat_length_len = -1;
+static int hf_ecat_length_r = -1;
+static int hf_ecat_length_c = -1;
+static int hf_ecat_length_m = -1;
+
+static int hf_ecat_padding = -1;
-static const value_string EcCmd[] =
+static const value_string EcCmdShort[] =
{
- { 0, "NOP", },
- { 1, "APRD", },
- { 2, "APWR", },
- { 3, "APRW", },
- { 4, "FPRD", },
- { 5, "FPWR", },
- { 6, "FPRW", },
- { 7, "BRD", },
- { 8, "BWR", },
- { 9, "BRW", },
- { 10, "LRD", },
- { 11, "LWR", },
- { 12, "LRW", },
- { 13, "ARMW", },
- { 14, "FRMW", },
- { 255, "EXT", },
+ { 0, "NOP" },
+ { 1, "APRD" },
+ { 2, "APWR" },
+ { 3, "APRW" },
+ { 4, "FPRD" },
+ { 5, "FPWR" },
+ { 6, "FPRW" },
+ { 7, "BRD" },
+ { 8, "BWR" },
+ { 9, "BRW" },
+ { 10, "LRD" },
+ { 11, "LWR" },
+ { 12, "LRW" },
+ { 13, "ARMW" },
+ { 14, "FRMW" },
+ { 255, "EXT" },
{ 0, NULL }
};
+static const value_string EcCmdLong[] =
+{
+ { 0, "No operation" },
+ { 1, "Auto increment read" },
+ { 2, "Auto increment write" },
+ { 3, "Auto increment read write" },
+ { 4, "Configured address read" },
+ { 5, "Configured address write" },
+ { 6, "Configured address read write" },
+ { 7, "Broadcast read" },
+ { 8, "Broadcast write" },
+ { 9, "Broadcast read write" },
+ { 10, "Logical memory read" },
+ { 11, "Logical memory write" },
+ { 12, "Logical memory read write" },
+ { 13, "Auto increment read multiple write" },
+ { 14, "Configured read multiple write" },
+ { 255, "EXT" },
+ { 0, NULL }
+};
+
+static const value_string ecat_subframe_reserved_vals[] =
+{
+ { 0, "Valid"},
+ { 0, NULL}
+};
+
+static const value_string ecat_subframe_circulating_vals[] =
+{
+ { 0, "Frame is not circulating" },
+ { 1, "Frame has circulated once" },
+ { 0, NULL }
+};
+
+static const value_string ecat_subframe_more_vals[] =
+{
+ { 0, "Last EtherCAT datagram"},
+ { 1, "More EtherCAT datagrams will follow"},
+ { 0, NULL}
+};
static const true_false_string tfs_ecat_fmmu_typeread =
{
@@ -226,9 +273,9 @@ static const true_false_string tfs_ecat_syncman_flag16 =
"SyncMan enabled", "SyncMan disabled",
};
-static const char* convertEcCmdToText(int cmd)
+static const char* convertEcCmdToText(int cmd, const value_string ec_cmd[])
{
- return val_to_str(cmd, EcCmd, "<UNKNOWN: %d>");
+ return val_to_str(cmd, ec_cmd, "<UNKNOWN: %d>");
}
#define ENDOF(p) ((p)+1) /* pointer to end of *p*/
@@ -326,30 +373,30 @@ static void EcSummaryFormater(guint32 datalength, tvbuff_t *tvb, gint offset, ch
{
guint16 len = ecFirst.len&0x07ff;
guint16 cnt = get_wc(&ecFirst, tvb, offset);
- g_snprintf ( szText, nMax, "'%s', Len: %d, Adp 0x%x, Ado 0x%x, Wc %d ",
- convertEcCmdToText(ecFirst.cmd), len, ecFirst.anAddrUnion.a.adp, ecFirst.anAddrUnion.a.ado, cnt );
+ g_snprintf ( szText, nMax, "'%s': Len: %d, Adp 0x%x, Ado 0x%x, Wc %d ",
+ convertEcCmdToText(ecFirst.cmd, EcCmdShort), len, ecFirst.anAddrUnion.a.adp, ecFirst.anAddrUnion.a.ado, cnt );
}
else if ( nSub == 2 )
{
- g_snprintf ( szText, nMax, "%d Cmds, '%s', Len %d, '%s', Len %d ",
- nSub, convertEcCmdToText(nCmds[0]), nLens[0], convertEcCmdToText(nCmds[1]), nLens[1]);
+ g_snprintf ( szText, nMax, "%d Cmds, '%s': len %d, '%s': len %d ",
+ nSub, convertEcCmdToText(nCmds[0], EcCmdShort), nLens[0], convertEcCmdToText(nCmds[1], EcCmdShort), nLens[1]);
}
else if ( nSub == 3 )
{
- g_snprintf ( szText, nMax, "%d Cmds, '%s', Len %d, '%s', Len %d, '%s', Len %d",
- nSub, convertEcCmdToText(nCmds[0]), nLens[0], convertEcCmdToText(nCmds[1]), nLens[1], convertEcCmdToText(nCmds[2]), nLens[2]);
+ g_snprintf ( szText, nMax, "%d Cmds, '%s': len %d, '%s': len %d, '%s': len %d",
+ nSub, convertEcCmdToText(nCmds[0], EcCmdShort), nLens[0], convertEcCmdToText(nCmds[1], EcCmdShort), nLens[1], convertEcCmdToText(nCmds[2], EcCmdShort), nLens[2]);
}
else if ( nSub == 4 )
{
- g_snprintf ( szText, nMax, "%d Cmds, '%s', L %d, '%s', L %d, '%s', L %d, '%s', L %d",
- nSub, convertEcCmdToText(nCmds[0]), nLens[0], convertEcCmdToText(nCmds[1]), nLens[1], convertEcCmdToText(nCmds[2]), nLens[2], convertEcCmdToText(nCmds[3]), nLens[3]);
+ g_snprintf ( szText, nMax, "%d Cmds, '%s': len %d, '%s': len %d, '%s': len %d, '%s': len %d",
+ nSub, convertEcCmdToText(nCmds[0], EcCmdShort), nLens[0], convertEcCmdToText(nCmds[1], EcCmdShort), nLens[1], convertEcCmdToText(nCmds[2], EcCmdShort), nLens[2], convertEcCmdToText(nCmds[3], EcCmdShort), nLens[3]);
}
else
g_snprintf ( szText, nMax, "%d Cmds, SumLen %d, '%s'... ",
- nSub, nLen, convertEcCmdToText(ecFirst.cmd));
+ nSub, nLen, convertEcCmdToText(ecFirst.cmd, EcCmdShort));
}
-static void EcSubFormater(tvbuff_t *tvb, gint offset, char *szText, gint nMax)
+static void EcSubFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax)
{
EcParserHDR ecParser;
guint16 len, cnt;
@@ -372,41 +419,39 @@ static void EcSubFormater(tvbuff_t *tvb, gint offset, char *szText, gint nMax)
case EC_CMD_TYPE_BRW:
case EC_CMD_TYPE_ARMW:
case EC_CMD_TYPE_FRMW:
- g_snprintf ( szText, nMax, "Sub Frame: Cmd: '%s' (%d), Len: %d, Adp 0x%x, Ado 0x%x, Cnt %d",
- convertEcCmdToText(ecParser.cmd), ecParser.cmd, len, ecParser.anAddrUnion.a.adp, ecParser.anAddrUnion.a.ado, cnt);
+ g_snprintf ( szText, nMax, "EtherCAT datagram: Cmd: '%s' (%d), Len: %d, Adp 0x%x, Ado 0x%x, Cnt %d",
+ convertEcCmdToText(ecParser.cmd, EcCmdShort), ecParser.cmd, len, ecParser.anAddrUnion.a.adp, ecParser.anAddrUnion.a.ado, cnt);
break;
case EC_CMD_TYPE_LRD:
case EC_CMD_TYPE_LWR:
case EC_CMD_TYPE_LRW:
- g_snprintf ( szText, nMax, "Sub Frame: Cmd: '%s' (%d), Len: %d, Addr 0x%x, Cnt %d",
- convertEcCmdToText(ecParser.cmd), ecParser.cmd, len, ecParser.anAddrUnion.addr, cnt);
+ g_snprintf ( szText, nMax, "EtherCAT datagram: Cmd: '%s' (%d), Len: %d, Addr 0x%x, Cnt %d",
+ convertEcCmdToText(ecParser.cmd, EcCmdShort), ecParser.cmd, len, ecParser.anAddrUnion.addr, cnt);
break;
case EC_CMD_TYPE_EXT:
- g_snprintf ( szText, nMax, "Sub Frame: Cmd: 'EXT' (%d), Len: %d", ecParser.cmd, len);
+ g_snprintf ( szText, nMax, "EtherCAT datagram: Cmd: 'EXT' (%d), Len: %d", ecParser.cmd, len);
break;
default:
- g_snprintf ( szText, nMax, "Sub Frame: Cmd: 'Unknown' (%d), Len: %d", ecParser.cmd, len);
+ g_snprintf ( szText, nMax, "EtherCAT datagram: Cmd: 'Unknown' (%d), Len: %d", ecParser.cmd, len);
}
}
-static void EcLenFormater(guint16 len, char *szText, gint nMax)
-{
- g_snprintf( szText, nMax, "(0x%x) - %s - %s", len&0x07ff, len&0x4000 ? "Roundtrip" : "No Roundtrip", len&0x8000 ? "More Follows...":"Last Sub Command" );
-}
-
/* Ethercat Datagram */
static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
tvbuff_t *next_tvb;
proto_item *ti, *aitem;
- proto_tree *ecat_tree = NULL;
- gint offset = 0;
+ proto_tree *ecat_datagrams_tree = NULL;
+ guint offset = 0;
char szText[200];
int nMax = sizeof(szText)-1;
guint b;
- guint32 ecLength=0;
+ guint ecLength=0;
guint subCount = 0;
+ const guint datagram_length = tvb_length_remaining(tvb, offset);
+ guint datagram_padding_bytes = 0;
+ EcParserHDR ecHdr;
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "ECAT");
@@ -414,14 +459,26 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
if (check_col(pinfo->cinfo, COL_INFO))
col_clear(pinfo->cinfo, COL_INFO);
- while ( TRUE )
+ /* If the data portion of an EtherCAT datagram is less than 44 bytes, then
+ it must have been padded with an additional n number of bytes to reach a
+ total Ethernet frame length of 64 bytes (Ethernet header + Ethernet Data +
+ FCS). Hence at least 44 bytes data shall always be available in any
+ EtherCAT datagram. */
+ tvb_ensure_bytes_exist(tvb, offset, 44);
+
+ /* Count the length of the individual EtherCAT datagrams (sub datagrams)
+ that are part of this EtherCAT frame. Stop counting when the current
+ sub datagram header tells that there are no more sub datagrams or when
+ there is no more data available in the PDU. */
+ do
{
- EcParserHDR ecHdr;
init_EcParserHDR(&ecHdr, tvb, ecLength);
- ecLength+=get_cmd_len(&ecHdr);
- if ( (ecHdr.len&0x8000) == 0 )
- break;
- }
+ ecLength += get_cmd_len(&ecHdr);
+ } while ((ecLength < datagram_length) &&
+ (ecHdr.len & 0x8000));
+
+ /* Calculate the amount of padding data available in the PDU */
+ datagram_padding_bytes = datagram_length - ecLength;
EcSummaryFormater(ecLength, tvb, offset, szText, nMax);
if (check_col(pinfo->cinfo, COL_INFO))
@@ -429,35 +486,37 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
if( tree )
{
+ /* Create the EtherCAT datagram(s) subtree */
ti = proto_tree_add_item(tree, proto_ecat_datagram, tvb, 0, -1, TRUE);
- ecat_tree = proto_item_add_subtree(ti, ett_ecat);
+ ecat_datagrams_tree = proto_item_add_subtree(ti, ett_ecat);
- proto_item_append_text(ti,": %s",szText);
+ proto_item_append_text(ti,": %s", szText);
}
- while ( TRUE )
+ /* Dissect all sub frames of this EtherCAT PDU */
+ do
{
- proto_tree *ecat_sub_tree = 0, *ecat_header_tree, *ecat_fmmu_tree, *ecat_fmmu_active_tree,
- *ecat_fmmu_type_tree, *ecat_syncman_tree, *ecat_syncflag_tree, *ecat_dc_tree;
+ proto_tree *ecat_datagram_tree = NULL, *ecat_header_tree = NULL, *ecat_fmmu_tree = NULL,
+ *ecat_fmmu_active_tree = NULL, *ecat_fmmu_type_tree = NULL, *ecat_syncman_tree = NULL,
+ *ecat_syncflag_tree = NULL, *ecat_dc_tree = NULL;
gint bMBox = FALSE;
guint32 subsize;
guint32 suboffset;
guint32 len;
+ ETHERCAT_MBOX_HEADER mbox;
- EcParserHDR ecHdr;
suboffset = offset;
init_EcParserHDR(&ecHdr, tvb, suboffset);
subsize = get_cmd_len(&ecHdr);
- len = ecHdr.len&0x07ff;
+ len = ecHdr.len & 0x07ff;
if ( len >= sizeof(ETHERCAT_MBOX_HEADER_LEN) &&
- (ecHdr.cmd==EC_CMD_TYPE_FPWR || ecHdr.cmd==EC_CMD_TYPE_FPRD || ecHdr.cmd==EC_CMD_TYPE_APWR || ecHdr.cmd==EC_CMD_TYPE_APRD) &&
- ecHdr.anAddrUnion.a.ado>=0x1000
+ (ecHdr.cmd==EC_CMD_TYPE_FPWR || ecHdr.cmd==EC_CMD_TYPE_FPRD || ecHdr.cmd==EC_CMD_TYPE_APWR || ecHdr.cmd==EC_CMD_TYPE_APRD) &&
+ ecHdr.anAddrUnion.a.ado>=0x1000
)
{
- ETHERCAT_MBOX_HEADER mbox;
init_mbx_header(&mbox, tvb, suboffset+EcParserHDR_Len);
switch ( mbox.aControlUnion.v.Type )
@@ -477,15 +536,15 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
if( tree )
{
- aitem = proto_tree_add_item(ecat_tree, hf_ecat_sub, tvb, suboffset, subsize, TRUE);
- EcSubFormater(tvb, suboffset, szText, nMax);
- proto_item_set_text(aitem,szText);
-
- ecat_sub_tree = proto_item_add_subtree(aitem, ett_ecat_sub);
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_header, tvb, suboffset, EcParserHDR_Len, TRUE);
- proto_item_set_text(aitem, "Header");
+ /* Create the sub tree for the current datagram */
+ EcSubFormatter(tvb, suboffset, szText, nMax);
+ aitem = proto_tree_add_text(ecat_datagrams_tree, tvb, suboffset, subsize, szText);
+ ecat_datagram_tree = proto_item_add_subtree(aitem, ett_ecat_datagram_subtree);
+ /* Create a subtree placeholder for the Header */
+ aitem = proto_tree_add_text(ecat_datagram_tree, tvb, offset, EcParserHDR_Len, "Header");
ecat_header_tree = proto_item_add_subtree(aitem, ett_ecat_header);
+
aitem = proto_tree_add_item(ecat_header_tree, hf_ecat_cmd, tvb, suboffset, sizeof(ecHdr.cmd), TRUE);
if( subCount < 10 )
aitem = proto_tree_add_item_hidden(ecat_header_tree, hf_ecat_sub_cmd[subCount], tvb, suboffset, sizeof(ecHdr.cmd), TRUE);
@@ -520,11 +579,23 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
suboffset+= sizeof(ecHdr.anAddrUnion.a.ado);
}
- aitem = proto_tree_add_uint(ecat_header_tree, hf_ecat_len, tvb, suboffset, sizeof(ecHdr.len), ecHdr.len&0x07FF);
- EcLenFormater(ecHdr.len, szText, nMax);
- proto_item_append_text(aitem,szText);
+ {
+ proto_tree *length_sub_tree;
+
+ /* Add information about the length field (11 bit length, 3 bits
+ reserved, 1 bit circulating frame and 1 bit more in a sub tree */
+ aitem = proto_tree_add_text(ecat_header_tree, tvb, suboffset, sizeof(ecHdr.len),
+ "Length : %d (0x%x) - %s - %s",
+ len, len, ecHdr.len & 0x4000 ? "Roundtrip" : "No Roundtrip", ecHdr.len & 0x8000 ? "More Follows..." : "Last Sub Command");
+ length_sub_tree = proto_item_add_subtree(aitem, ett_ecat_length);
+
+ proto_tree_add_item(length_sub_tree, hf_ecat_length_len, tvb, suboffset, sizeof(ecHdr.len), TRUE);
+ proto_tree_add_item(length_sub_tree, hf_ecat_length_r, tvb, suboffset, sizeof(ecHdr.len), TRUE);
+ proto_tree_add_item(length_sub_tree, hf_ecat_length_c, tvb, suboffset, sizeof(ecHdr.len), TRUE);
+ proto_tree_add_item(length_sub_tree, hf_ecat_length_m, tvb, suboffset, sizeof(ecHdr.len), TRUE);
- suboffset+= sizeof(ecHdr.len);
+ suboffset+= sizeof(ecHdr.len);
+ }
aitem = proto_tree_add_item(ecat_header_tree, hf_ecat_int, tvb, suboffset, sizeof(ecHdr.intr), TRUE);
suboffset+= sizeof(ecHdr.intr);
@@ -538,11 +609,11 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
{
if( tree )
{
- /* FMMU */
+ /* Fieldbus Memory Management Units (FMMU) */
for ( b=0; b < MIN(16, len/16); b++ )
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_fmmu, tvb, suboffset, 16, TRUE);
- proto_item_set_text(aitem, "FMMU");
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_fmmu, tvb, suboffset, 16, TRUE);
+ proto_item_set_text(aitem, "Fieldbus Memory Management Units (FMMU)");
ecat_fmmu_tree = proto_item_add_subtree(aitem, ett_ecat_fmmu);
@@ -573,9 +644,9 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
if ( len > 0x100 )
{
len -= 0x100;
- for ( b=0; b < MIN(32, len/8); b++ )
+ for (b = 0; b < MIN(32, len / 8); b++)
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_syncman, tvb, suboffset, 8, TRUE);
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_syncman, tvb, suboffset, 8, TRUE);
proto_item_set_text(aitem, "SyncManager");
ecat_syncman_tree = proto_item_add_subtree(aitem, ett_ecat_syncman);
@@ -607,10 +678,10 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
{
if( tree )
{
- /* SyncMan*/
- for ( b=0; b < MIN(32, len/8); b++ )
+ /* SyncManager */
+ for (b = 0; b < MIN(32, len / 8); b++)
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_syncman, tvb, suboffset, 8, TRUE);
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_syncman, tvb, suboffset, 8, TRUE);
proto_item_set_text(aitem, "SyncManager");
ecat_syncman_tree = proto_item_add_subtree(aitem, ett_ecat_syncman);
@@ -644,110 +715,128 @@ static void dissect_ecat_datagram(tvbuff_t *tvb, packet_info *pinfo, proto_tree
guint32 pDC[4];
init_dc_measure(pDC, tvb, suboffset);
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_data, tvb, suboffset, ecHdr.len & 0x07ff, TRUE);
- ecat_dc_tree = proto_item_add_subtree(aitem, ett_ecat_dc);
+ /* Allow sub dissectors to have a chance with this data */
+ if(!dissector_try_heuristic(heur_subdissector_list, tvb, pinfo, ecat_datagram_tree))
+ {
+ /* No sub dissector did recognize this data, dissect it as data only */
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_data, tvb, suboffset, ecHdr.len & 0x07ff, TRUE);
+ ecat_dc_tree = proto_item_add_subtree(aitem, ett_ecat_dc);
+ }
+ else
+ {
+ /* A sub dissector handled the data, allow the rest of the
+ to add data to the correct place in the tree hierarchy. */
+ ecat_dc_tree = ecat_datagram_tree;
+ }
if( subCount < 10 )
- aitem = proto_tree_add_item_hidden(ecat_sub_tree, hf_ecat_sub_data[subCount], tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
+ aitem = proto_tree_add_item_hidden(ecat_datagram_tree, hf_ecat_sub_data[subCount], tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
if ( pDC[3] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_da, tvb, suboffset, 4, pDC[3]-pDC[0]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_da, tvb, suboffset, 4, pDC[3] - pDC[0]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_da[subCount], tvb, suboffset, 4, pDC[3]-pDC[0]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_da[subCount], tvb, suboffset, 4, pDC[3] - pDC[0]);
if ( pDC[1] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_bd, tvb, suboffset, 4, pDC[1]-pDC[3]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_bd, tvb, suboffset, 4, pDC[1] - pDC[3]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_bd[subCount], tvb, suboffset, 4, pDC[1]-pDC[3]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_bd[subCount], tvb, suboffset, 4, pDC[1] - pDC[3]);
}
else if ( pDC[2] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_cd, tvb, suboffset, 4, pDC[2]-pDC[3]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_cd, tvb, suboffset, 4, pDC[2] - pDC[3]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_cd[subCount], tvb, suboffset, 4, pDC[2]-pDC[3]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_cd[subCount], tvb, suboffset, 4, pDC[2] - pDC[3]);
}
}
if ( pDC[1] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_ba, tvb, suboffset, 4, pDC[1]-pDC[0]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_ba, tvb, suboffset, 4, pDC[1] - pDC[0]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_ba[subCount], tvb, suboffset, 4, pDC[1]-pDC[0]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_ba[subCount], tvb, suboffset, 4, pDC[1] - pDC[0]);
if ( pDC[2] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_cb, tvb, suboffset, 4, pDC[2]-pDC[1]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_cb, tvb, suboffset, 4, pDC[2] - pDC[1]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_cb[subCount], tvb, suboffset, 4, pDC[2]-pDC[1]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_cb[subCount], tvb, suboffset, 4, pDC[2] - pDC[1]);
}
}
else if ( pDC[2] != 0 )
{
- proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_ca, tvb, suboffset, 4, pDC[2]-pDC[0]);
+ proto_tree_add_uint(ecat_dc_tree, hf_ecat_dc_diff_ca, tvb, suboffset, 4, pDC[2] - pDC[0]);
if( subCount < 10 )
- proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_ca[subCount], tvb, suboffset, 4, pDC[2]-pDC[0]);
+ proto_tree_add_uint_hidden(ecat_dc_tree, hf_ecat_sub_dc_diff_ca[subCount], tvb, suboffset, 4, pDC[2] - pDC[0]);
}
}
}
else if ( bMBox )
{
- next_tvb = tvb_new_subset(tvb, suboffset, -1, -1);
- call_dissector( ecat_mailbox_handle, next_tvb, pinfo, ecat_sub_tree);
+ const guint MBoxLength = mbox.Length + 6 /* MBOX header length */;
+
+ next_tvb = tvb_new_subset(tvb, suboffset, MBoxLength, MBoxLength);
+ call_dissector(ecat_mailbox_handle, next_tvb, pinfo, ecat_datagram_tree);
if( tree )
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_data, tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
+ const guint startOfData = offset + EcParserHDR_Len + MBoxLength;
+ const guint dataLength = ((ecHdr.len & 0x7ff) - startOfData) + EcParserHDR_Len;
+
+ /* Allow sub dissectors to have a chance with this data */
+ if(!dissector_try_heuristic(heur_subdissector_list, tvb, pinfo, ecat_datagram_tree))
+ {
+ /* No sub dissector did recognize this data, dissect it as data only */
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_data, tvb, startOfData, dataLength, TRUE);
+ }
+
if( subCount < 10 )
- aitem = proto_tree_add_item_hidden(ecat_sub_tree, hf_ecat_sub_data[subCount], tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
+ aitem = proto_tree_add_item_hidden(ecat_datagram_tree, hf_ecat_sub_data[subCount], tvb, startOfData, dataLength, TRUE);
}
}
else
{
if( tree )
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_data, tvb, suboffset, ecHdr.len & 0x07ff, TRUE);
- switch ( len )
+ /* Allow sub dissectors to have a chance with this data */
+ if(!dissector_try_heuristic(heur_subdissector_list, tvb, pinfo, ecat_datagram_tree))
{
- case 1:
- g_snprintf ( szText, nMax, "(0x%x)", tvb_get_guint8(tvb, suboffset));
- proto_item_append_text(aitem, szText);
- break;
- case 2:
- g_snprintf ( szText, nMax, "(0x%x)", tvb_get_letohs(tvb, suboffset));
- proto_item_append_text(aitem, szText);
- break;
- case 4:
- g_snprintf ( szText, nMax, "(0x%x)", tvb_get_letohl(tvb, suboffset));
- proto_item_append_text(aitem, szText);
- break;
+ /* No sub dissector did recognize this data, dissect it as data only */
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_data, tvb, suboffset, ecHdr.len & 0x07ff, TRUE);
}
+
if( subCount < 10 )
- aitem = proto_tree_add_item_hidden(ecat_sub_tree, hf_ecat_sub_data[subCount], tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
+ aitem = proto_tree_add_item_hidden(ecat_datagram_tree, hf_ecat_sub_data[subCount], tvb, offset + EcParserHDR_Len, ecHdr.len & 0x07ff, TRUE);
}
}
if( tree )
{
- aitem = proto_tree_add_item(ecat_sub_tree, hf_ecat_cnt, tvb, offset + EcParserHDR_Len + len , 2, TRUE);
+ aitem = proto_tree_add_item(ecat_datagram_tree, hf_ecat_cnt, tvb, offset + EcParserHDR_Len + len , 2, TRUE);
if( subCount < 10 )
- aitem = proto_tree_add_item_hidden(ecat_sub_tree, hf_ecat_sub_cnt[subCount], tvb, offset + EcParserHDR_Len + len , 2, TRUE);
+ aitem = proto_tree_add_item_hidden(ecat_datagram_tree, hf_ecat_sub_cnt[subCount], tvb, offset + EcParserHDR_Len + len , 2, TRUE);
}
- if ( (ecHdr.len&0x8000) == 0 )
- break;
-
offset+=subsize;
subCount++;
+ } while((offset < datagram_length) &&
+ (ecHdr.len & 0x8000));
+
+ /* Add information that states which portion of the PDU that is pad bytes.
+ These are added just to get an Ethernet frame size of at least 64 bytes,
+ which is required by the protocol specification */
+ if(datagram_padding_bytes > 0)
+ {
+ proto_tree_add_item(tree, hf_ecat_padding, tvb, offset, tvb_length_remaining(tvb, offset), TRUE);
}
}
-
void proto_register_ecat(void)
{
static hf_register_info hf[] =
{
{ &hf_ecat_sub,
- { "Sub Frame", "ecat.sub", FT_BYTES, BASE_NONE, NULL, 0x0,
+ { "EtherCAT Frame", "ecat.sub", FT_BYTES, BASE_NONE, NULL, 0x0,
"", HFILL }
},
{ &hf_ecat_header,
@@ -800,7 +889,7 @@ void proto_register_ecat(void)
},
{ &hf_ecat_cnt,
{ "Working Cnt", "ecat.cnt",
- FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
+ FT_UINT16, BASE_DEC, NULL, 0x0, "The working counter is increased once for each addressed device if at least one byte/bit of the data was successfully read and/or written by that device, it is increased once for every operation made by that device - read/write/read and write", HFILL }
},
{ &hf_ecat_sub_cnt[0],
{ "Working Cnt", "ecat.sub1.cnt",
@@ -844,47 +933,47 @@ void proto_register_ecat(void)
},
{ &hf_ecat_cmd,
{ "Command ", "ecat.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[0],
{ "Command ", "ecat.sub1.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[1],
{ "Command ", "ecat.sub2.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[2],
{ "Command ", "ecat.sub3.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[3],
{ "Command ", "ecat.sub4.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[4],
{ "Command ", "ecat.sub5.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[5],
{ "Command ", "ecat.sub6.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[6],
{ "Command ", "ecat.sub7.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[7],
{ "Command ", "ecat.sub8.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[8],
{ "Command ", "ecat.sub9.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_sub_cmd[9],
{ "Command ", "ecat.sub10.cmd",
- FT_UINT8, BASE_HEX, VALS(EcCmd), 0x0, "", HFILL }
+ FT_UINT8, BASE_HEX, VALS(EcCmdLong), 0x0, "", HFILL }
},
{ &hf_ecat_idx,
{ "Index ", "ecat.idx",
@@ -1530,27 +1619,51 @@ void proto_register_ecat(void)
{ &hf_ecat_sub_dc_diff_ca[9],
{ "DC C-A", "ecat.sub10.dc.dif.ca",
FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
+ },
+ { &hf_ecat_length_len,
+ { "Length", "ecat.subframe.length",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff, "", HFILL}
+ },
+ { &hf_ecat_length_r,
+ { "Reserved", "ecat.subframe.reserved",
+ FT_UINT16, BASE_DEC, VALS(&ecat_subframe_reserved_vals), 0x3800, "", HFILL}
+ },
+ { &hf_ecat_length_c,
+ { "Round trip", "ecat.subframe.circulating",
+ FT_UINT16, BASE_DEC, VALS(&ecat_subframe_circulating_vals), 0x4000, "", HFILL}
+ },
+ { &hf_ecat_length_m,
+ { "Last indicator", "ecat.subframe.more",
+ FT_UINT16, BASE_DEC, VALS(&ecat_subframe_more_vals), 0x8000, "", HFILL}
+ },
+ { &hf_ecat_padding,
+ { "Pad bytes", "ecat.subframe.pad_bytes",
+ FT_BYTES, BASE_DEC, NULL, 0x0, "", HFILL}
}
};
static gint *ett[] =
{
&ett_ecat,
- &ett_ecat_summary,
- &ett_ecat_sub,
&ett_ecat_header,
&ett_ecat_syncman,
&ett_ecat_syncflag,
&ett_ecat_fmmu,
&ett_ecat_fmmu_type,
&ett_ecat_fmmu_active,
- &ett_ecat_dc
+ &ett_ecat_dc,
+ &ett_ecat_length,
+ &ett_ecat_padding,
+ &ett_ecat_datagram_subtree
};
- proto_ecat_datagram = proto_register_protocol("EtherCAT datagram",
- "ECAT","ecat");
- proto_register_field_array(proto_ecat_datagram,hf,array_length(hf));
- proto_register_subtree_array(ett,array_length(ett));
+ proto_ecat_datagram = proto_register_protocol("EtherCAT datagram(s)",
+ "ECAT", "ecat");
+ proto_register_field_array(proto_ecat_datagram, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ /* Sub dissector code */
+ register_heur_dissector_list("ecat.data", &heur_subdissector_list);
}
/* The registration hand-off routing */
@@ -1561,7 +1674,7 @@ void proto_reg_handoff_ecat(void)
/* Register this dissector as a sub dissector to EtherCAT frame based on
ether type. */
ecat_handle = create_dissector_handle(dissect_ecat_datagram, proto_ecat_datagram);
- dissector_add("ecatf.type", 1, ecat_handle);
+ dissector_add("ecatf.type", 1 /* EtherCAT type */, ecat_handle);
ecat_mailbox_handle = find_dissector("ecat_mailbox");
}
diff --git a/plugins/ethercat/packet-ethercat-frame.c b/plugins/ethercat/packet-ethercat-frame.c
index 18e677563c..49c49064f0 100644
--- a/plugins/ethercat/packet-ethercat-frame.c
+++ b/plugins/ethercat/packet-ethercat-frame.c
@@ -57,17 +57,24 @@ static dissector_handle_t ethercat_frame_data_handle;
/* Define the tree for the EtherCAT frame */
static int ett_ethercat_frame = -1;
static int hf_ethercat_frame_length = -1;
+static int hf_ethercat_frame_reserved = -1;
static int hf_ethercat_frame_type = -1;
static const value_string EthercatFrameTypes[] =
{
- { 1, "ECAT", },
+ { 1, "EtherCAT command", },
{ 2, "ADS", },
{ 3, "RAW-IO", },
{ 4, "NV", },
{ 0, NULL }
};
+static const value_string ethercat_frame_reserved_vals[] =
+{
+ { 0, "Valid"},
+ { 1, "Invalid (must be zero for conformance with the protocol specification)"},
+ { 0, NULL}
+};
/* Ethercat Frame */
static void dissect_ethercat_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
@@ -94,16 +101,17 @@ static void dissect_ethercat_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree
ethercat_frame_tree = proto_item_add_subtree(ti, ett_ethercat_frame);
proto_tree_add_item(ethercat_frame_tree, hf_ethercat_frame_length, tvb, offset, EtherCATFrameParserHDR_Len, TRUE);
+ proto_tree_add_item(ethercat_frame_tree, hf_ethercat_frame_reserved, tvb, offset, EtherCATFrameParserHDR_Len, TRUE);
proto_tree_add_item(ethercat_frame_tree, hf_ethercat_frame_type, tvb, offset, EtherCATFrameParserHDR_Len, TRUE);
}
hdr.hdr = tvb_get_letohs(tvb, offset);
offset = EtherCATFrameParserHDR_Len;
- /* The Ethercat frame header has now been processed, allow sub dissectors to
+ /* The EtherCAT frame header has now been processed, allow sub dissectors to
handle the rest of the PDU. */
next_tvb = tvb_new_subset (tvb, offset, -1, -1);
- if (!dissector_try_port (ethercat_frame_dissector_table, hdr.v.protocol,
+ if (!dissector_try_port(ethercat_frame_dissector_table, hdr.v.protocol,
next_tvb, pinfo, tree))
{
if (check_col (pinfo->cinfo, COL_PROTOCOL))
@@ -125,6 +133,13 @@ void proto_register_ethercat_frame(void)
FT_UINT16, BASE_HEX, NULL, 0x07FF,
"", HFILL }
},
+
+ { &hf_ethercat_frame_reserved,
+ { "Reserved", "ecatf.reserved",
+ FT_UINT16, BASE_HEX, VALS(&ethercat_frame_reserved_vals), 0x0800,
+ "", HFILL}
+ },
+
{ &hf_ethercat_frame_type,
{ "Type", "ecatf.type",
FT_UINT16, BASE_HEX, VALS(EthercatFrameTypes), 0xF000,
@@ -137,10 +152,10 @@ void proto_register_ethercat_frame(void)
&ett_ethercat_frame
};
- proto_ethercat_frame = proto_register_protocol("EtherCAT frame",
+ proto_ethercat_frame = proto_register_protocol("EtherCAT frame header",
"ETHERCAT","ethercat");
proto_register_field_array(proto_ethercat_frame,hf,array_length(hf));
- proto_register_subtree_array(ett,array_length(ett));
+ proto_register_subtree_array(ett, array_length(ett));
register_dissector("ecatf", dissect_ethercat_frame, proto_ethercat_frame);
@@ -157,5 +172,6 @@ void proto_reg_handoff_ethercat_frame(void)
ethercat_frame_handle = create_dissector_handle(dissect_ethercat_frame, proto_ethercat_frame);
dissector_add("ethertype", ETHERTYPE_ECATF, ethercat_frame_handle);
dissector_add("udp.port", ETHERTYPE_ECATF, ethercat_frame_handle);
+ dissector_add("tcp.port", ETHERTYPE_ECATF, ethercat_frame_handle);
ethercat_frame_data_handle = find_dissector("data");
}