Wireshark 4.7.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet-ecatmb.h
1/* packet-ecatmb.h
2 *
3 * Copyright (c) 2007 by Beckhoff Automation GmbH
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <[email protected]>
7 * Copyright 1998 Gerald Combs
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11#ifndef _PACKET_ECATMAILBOX_H_
12#define _PACKET_ECATMAILBOX_H_
13
14#include <ws_diag_control.h>
15DIAG_OFF_PEDANTIC
16
17/* Ensure the same data layout for all platforms */
18
19typedef struct TETHERNET_ADDRESS
20{
21 uint8_t b[6];
22} ETHERNET_ADDRESS, *PETHERNET_ADDRESS;
23#define ETHERNET_ADDRESS_LEN ((int) sizeof(ETHERNET_ADDRESS))
24
25/* Mailbox*/
26#define ETHERCAT_MBOX_TYPE_ADS 1 /* AMS/ADS header follows*/
27#define ETHERCAT_MBOX_TYPE_EOE 2 /* ETHERCAT_EOE_HEADER follows*/
28#define ETHERCAT_MBOX_TYPE_COE 3 /* ETHERCAT_COE_HEADER follows*/
29#define ETHERCAT_MBOX_TYPE_FOE 4 /* ETHERCAT_FOE_HEADER follows*/
30#define ETHERCAT_MBOX_TYPE_SOE 5 /* ETHERCAT_SOE_HEADER follows*/
31#define ETHERCAT_MBOX_TYPE_VOE 15 /* ETHERCAT_VOE_HEADER follows*/
32
34{
35 uint16_t Control;
36 struct
37 {
38 uint16_t Channel : 6; /* optional communication channels (default = 0)*/
39 uint16_t Priority : 2; /* optional communication priority (default = 0)*/
40 uint16_t Type : 4; /* TETHERCAT_MBOX_TYPE_xxx*/
41 uint16_t Counter : 3; /* 0 = counter not used (old version)*/
42 uint16_t Unsupported : 1; /* unsupported protocol detected*/
43 } v;
45
47{
48 uint16_t Length; /* following bytes*/
49 uint16_t Address; /* S->M: phys addr of destination; M->S: phys addr of source; 0 = master*/
50 MbxHeaderControlUnion aControlUnion;
52
53#define ETHERCAT_MBOX_HEADER_LEN ((int) sizeof(ETHERCAT_MBOX_HEADER))
54
55/* EoE*/
56#define ETHERNET_FRAMENO_MASK 0x0000000F
57
58#define EOE_TYPE_FRAME_FRAG 0 /* ETHERCAT_EOE_HEADER followed by frame fragment (ETHERCAT_EOE_TIMESTAMP may included) */
59#define EOE_TYPE_TIMESTAMP_RES 1 /* ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_TIMESTAMP */
60#define EOE_TYPE_INIT_REQ 2 /* ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_INIT */
61#define EOE_TYPE_INIT_RES 3 /* ETHERCAT_EOE_HEADER */
62#define EOE_TYPE_MACFILTER_REQ 4 /* ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_MACFILTER */
63#define EOE_TYPE_MACFILTER_RES 5 /* ETHERCAT_EOE_HEADER */
64
65#define EOE_RESULT_NOERROR 0x0000
66#define EOE_RESULT_UNSPECIFIED_ERROR 0x0001
67#define EOE_RESULT_UNSUPPORTED_TYPE 0x0002
68#define EOE_RESULT_NO_IP_SUPPORT 0x0201
69#define EOE_RESULT_NO_MACFILTERMASK_SUPPORT 0x0401
70
71
72/*typedef struct TETHERCAT_EOE_INIT
73{
74 uint32_t ContainsMacAddr :1;
75 uint32_t ContainsIpAddr :1;
76 uint32_t ContainsSubnetMask :1;
77 uint32_t ContainsDefaultGateway :1;
78 uint32_t ContainsDnsServer :1;
79 uint32_t ContainsDnsName :1;
80 uint32_t Reserved :26;
81 ETHERNET_ADDRESS MacAddr;
82 uint32_t IpAddr;
83 uint32_t SubnetMask;
84 uint32_t DefaultGateway;
85 uint32_t DnsServer;
86 char DnsName[32];
87} ETHERCAT_EOE_INIT, *PETHERCAT_EOE_INIT;*/
88#define ETHERCAT_EOE_INIT_LEN 58 /*sizeof(ETHERCAT_EOE_INIT)*/
89
91{
92 struct
93 {
94 uint16_t MacFilterCount :4;
95 uint16_t MacFilterMaskCount :2;
96 uint16_t Reserved1 :1;
97 uint16_t NoBroadcasts :1;
98 uint16_t Reserved2 :8;
99 } v;
100 uint16_t Options;
102
104{
105 EoeMacFilterOptionsUnion anEoeMacFilterOptionsUnion;
106 ETHERNET_ADDRESS MacFilter[16];
107 ETHERNET_ADDRESS MacFilterMask[4];
109#define ETHERCAT_EOE_MACFILTER_LEN ((int) sizeof(ETHERCAT_EOE_MACFILTER))
110
112{
113 uint32_t TimeStamp; /* 32 bit time stamp */
115#define ETHERCAT_EOE_TIMESTAMP_LEN ((int) sizeof(ETHERCAT_EOE_TIMESTAMP))
116
118{
119 struct
120 { /* EOE_TYPE_FRAME_FRAG and EOE_TYPE_TIMESTAMP_RES only */
121 uint16_t Fragment : 6; /* fragment number (EOE_TYPE_FRAME_FRAG only) */
122 uint16_t OffsetBuffer : 6; /* byte offset multiplied by 32 (if Fragment != 0) (EOE_TYPE_FRAME_FRAG only) */
123 /* buffer size multiplied by 32 (if Fragment == 0) (EOE_TYPE_FRAME_FRAG only) */
124 uint16_t FrameNo : 4; /* frame number (EOE_TYPE_FRAME_FRAG and EOE_TYPE_TIMESTAMP_RES only) */
125 } v;
126 uint16_t Result; /* EOE_TYPE_INIT_RES and EOE_TYPE_MACFILTER_RES only */
128
130{
131 struct
132 {
133 uint16_t Type : 4; /* specifies following data */
134 uint16_t PortAssign : 4; /* 0 = unspecified, 1 = port 1 */
135 uint16_t LastFragment : 1; /* true if last fragment (EOE_TYPE_FRAME_FRAG only) */
136 uint16_t TimeStampAppended : 1; /* 32 bit time stamp appended (EOE_TYPE_FRAME_FRAG with LastFragment=1 only) */
137 uint16_t TimeStampRequested : 1; /* time stamp response requested (EOE_TYPE_FRAME_FRAG only) */
138 uint16_t Reserved : 5;
139 } v;
140 uint16_t Info;
142
144{
145 EoeHeaderInfoUnion anEoeHeaderInfoUnion;
146 EoeHeaderDataUnion anEoeHeaderDataUnion;
148#define ETHERCAT_EOE_HEADER_LEN ((int) sizeof(ETHERCAT_EOE_HEADER))
149
150/* CANopen*/
151#define ETHERCAT_COE_TYPE_EMERGENCY 1
152#define ETHERCAT_COE_TYPE_SDOREQ 2
153#define ETHERCAT_COE_TYPE_SDORES 3
154#define ETHERCAT_COE_TYPE_TXPDO 4
155#define ETHERCAT_COE_TYPE_RXPDO 5
156#define ETHERCAT_COE_TYPE_TXPDO_RTR 6 /* Remote transmission request of TXPDO (master requested)*/
157#define ETHERCAT_COE_TYPE_RXPDO_RTR 7 /* Remote transmission request of RXPDO (slave requested) */
158#define ETHERCAT_COE_TYPE_SDOINFO 8
159
161{
162 struct
163 {
164 uint16_t Number : 9; /* e.g. PDO number*/
165 uint16_t Reserved : 3; /* = 0*/
166 uint16_t Type : 4; /* CANopen type*/
167 } v;
168 uint16_t header;
170#define ETHERCAT_COE_HEADER_LEN ((int) sizeof(ETHERCAT_COE_HEADER))
171
172
173typedef union tSdoHeaderUnion
174{
175 struct
176 { /* Initiate Download Request*/
177 uint8_t SizeInd : 1;
178 uint8_t Expedited : 1;
179 uint8_t Size : 2;
180 uint8_t Complete : 1;
181 uint8_t Ccs : 3; /* = 1*/
182 } Idq;
183 struct
184 { /* Initiate Download Response*/
185 uint8_t Reserved : 5;
186 uint8_t Scs : 3; /* = 3*/
187 } Ids;
188 struct
189 { /* Download Segment Request*/
190 uint8_t LastSeg : 1;
191 uint8_t Size : 3;
192 uint8_t Toggle : 1;
193 uint8_t Ccs : 3; /* = 0*/
194 } Dsq;
195 struct
196 { /* Download Segment Response*/
197 uint8_t Reserved : 4;
198 uint8_t Toggle : 1;
199 uint8_t Scs : 3; /* = 1*/
200 } Dss;
201 struct
202 { /* Initiate Upload Request*/
203 uint8_t Reserved : 4;
204 uint8_t Complete : 1;
205 uint8_t Ccs : 3; /* = 2*/
206 } Iuq;
207 struct
208 { /* Initiate Upload Response*/
209 uint8_t SizeInd : 1;
210 uint8_t Expedited : 1;
211 uint8_t Size : 2;
212 uint8_t Complete : 1;
213 uint8_t Scs : 3; /* = 2*/
214 } Ius;
215 struct
216 { /* Upload Segment Request*/
217 uint8_t Reserved : 4;
218 uint8_t Toggle : 1;
219 uint8_t Ccs : 3; /* = 3*/
220 } Usq;
221 struct
222 { /* Upload Segment Response*/
223 uint8_t LastSeg : 1;
224 uint8_t Bytes : 3;
225 uint8_t Toggle : 1;
226 uint8_t Scs : 3; /* = 0*/
227 } Uss;
228 struct
229 { /* Abort Transfer*/
230 uint8_t Reserved : 5;
231 uint8_t Ccs : 3; /* = 4*/
232 } Abt;
233 uint8_t CS;
235
237{
238 SdoHeaderUnion anSdoHeaderUnion;
239
240 uint16_t Index;
241 uint8_t SubIndex;
242 uint32_t Data;
244
245#define ETHERCAT_SDO_HEADER_LEN 8 /* sizeof(ETHERCAT_SDO_HEADER)*/
246
247#define SDO_CCS_DOWNLOAD_SEGMENT 0
248#define SDO_CCS_INITIATE_DOWNLOAD 1
249#define SDO_CCS_INITIATE_UPLOAD 2
250#define SDO_CCS_UPLOAD_SEGMENT 3
251#define SDO_CCS_ABORT_TRANSFER 4
252
253#define SDO_SCS_UPLOAD_SEGMENT 0
254#define SDO_SCS_DOWNLOAD_SEGMENT 1
255#define SDO_SCS_INITIATE_UPLOAD 2
256#define SDO_SCS_INITIATE_DOWNLOAD 3
257
258/* CoE SDO Information */
259#define ECAT_COE_INFO_OPCODE_LIST_Q 1
260#define ECAT_COE_INFO_OPCODE_LIST_S 2
261#define ECAT_COE_INFO_OPCODE_OBJ_Q 3
262#define ECAT_COE_INFO_OPCODE_OBJ_S 4
263#define ECAT_COE_INFO_OPCODE_ENTRY_Q 5
264#define ECAT_COE_INFO_OPCODE_ENTRY_S 6
265#define ECAT_COE_INFO_OPCODE_ERROR_S 7
266
267#define ECAT_COE_INFO_LIST_TYPE_LENGTH 0
268#define ECAT_COE_INFO_LIST_TYPE_ALL 1
269#define ECAT_COE_INFO_LIST_TYPE_PDOMAP 2
270#define ECAT_COE_INFO_LIST_TYPE_BACKUP 3
271
272#define ECAT_COE_INFO_OBJCODE_NULL 0
273#define ECAT_COE_INFO_OBJCODE_DOMAIN 2
274#define ECAT_COE_INFO_OBJCODE_DEFTYPE 5
275#define ECAT_COE_INFO_OBJCODE_DEFSTRUCT 6
276#define ECAT_COE_INFO_OBJCODE_VAR 7
277#define ECAT_COE_INFO_OBJCODE_ARRAY 8
278#define ECAT_COE_INFO_OBJCODE_RECORD 9
279
280#define ECAT_COE_INFO_OBJCAT_OPTIONAL 0
281#define ECAT_COE_INFO_OBJCAT_MANDATORY 1
282
283#define ECAT_COE_INFO_OBJACCESS_RO 0x07
284#define ECAT_COE_INFO_OBJACCESS_RW 0x3f
285
287{
288 uint16_t ListType; /* == SDO_INFO_LIST_TYPE_XXX */
289 struct
290 {
291 uint16_t Index[1];
292 } Res;
294
296{
297 uint16_t Index;
298 struct
299 {
300 uint16_t DataType; /* refer to data type index */
301 uint8_t MaxSubIndex; /* max subIndex */
302 uint8_t ObjCode; /* defined in DS 301 (Table 37)*/
303 char Name[1]; /* rest of mailbox data*/
304 } Res;
306
308{
309 uint16_t Index;
310 uint8_t SubIdx;
311 uint8_t ValueInfo; /* bit0 = ObjAccess, bit1 = ObjCategory, bit2 = PdoMapping, bit3 = UnitType
312 bit4 = DefaultValue, bit5 = MinValue, bit6 = MaxValue*/
313 struct
314 {
315 uint16_t DataType; /* refer to data type index */
316 uint16_t BitLen;
317 uint16_t ObjAccess; /* bit0 = read; bit1 = write; bit2 = const. bit3 = 'PRE-OP'; bit4 = 'SAFE-OP'; bit5 = 'OP'.*/
318 } Res;
320
322{
323 uint32_t ErrorCode;
324 char ErrorText[1]; /* rest of mailbox data */
326
327typedef union tSdoInfoUnion
328{
333 uint8_t Data[1];
335
336typedef union tSdoControlUnion
337{
338 struct
339 {
340 uint8_t OpCode : 7; /* == SDO_INFO_TYPE_XXX */
341 uint8_t InComplete : 1;
342 } v;
343 uint8_t Control;
345
347{
348 SdoControlUnion anSdoControlUnion;
349 uint8_t Reserved; /* == 0 */
350 uint16_t FragmentsLeft;
351 SdoInfoUnion anSdoInfoUnion;
353
354#define ETHERCAT_SDO_INFO_LISTREQ_LEN 6 /*offsetof(ETHERCAT_SDO_INFO_HEADER, anSdoInfoUnion.List.Res)*/
355
356/* FoE (File Access over EtherCAT)*/
357#define ECAT_FOE_OPMODE_RRQ 1
358#define ECAT_FOE_OPMODE_WRQ 2
359#define ECAT_FOE_OPMODE_DATA 3
360#define ECAT_FOE_OPMODE_ACK 4
361#define ECAT_FOE_OPMODE_ERR 5
362#define ECAT_FOE_OPMODE_BUSY 6
363
364#define ECAT_FOE_ERRCODE_NOTDEFINED 0
365#define ECAT_FOE_ERRCODE_NOTFOUND 1
366#define ECAT_FOE_ERRCODE_ACCESS 2
367#define ECAT_FOE_ERRCODE_DISKFULL 3
368#define ECAT_FOE_ERRCODE_ILLEAGAL 4
369#define ECAT_FOE_ERRCODE_PACKENO 5
370#define ECAT_FOE_ERRCODE_EXISTS 6
371#define ECAT_FOE_ERRCODE_NOUSER 7
372#define ECAT_FOE_ERRCODE_BOOTSTRAPONLY 8
373#define ECAT_FOE_ERRCODE_NOTINBOOTSTRAP 9
374
376{
377 uint32_t FileLength; /* (RRQ, WRQ) = 0 if unknown */
378 struct
379 {
380 uint16_t PacketNo; /* (DATA, ACK)*/
381 uint16_t Reserved2; /* (DATA, ACK)*/
382 } v;
383 uint32_t ErrorCode; /* (ERR)*/
384 struct
385 {
386 uint16_t Done; /* (BUSY)*/
387 uint16_t Entire; /* (BUSY)*/
388 } v2;
390
392{
393 uint8_t OpMode; /* = 1 (RRQ), = 2 (WRQ), = 3 (DATA), = 4 (ACK), = 5 (ERR), = 6 (BUSY) */
394 uint8_t Reserved1; /* = 0 */
395
396 FoeHeaderDataUnion aFoeHeaderDataUnion;
397 /* typedef union tMailBoxDataUnion
398 {
399 char Name[] (RRQ, WRQ) rest of mailbox data
400 uint8_t Data[] (DATA) rest of mailbox data (if OpMode = 3)
401 char ErrorText[] (ERR) rest of mailbox data
402 } MailBoxDataUnion;*/
404#define ETHERCAT_FOE_HEADER_LEN 6 /*sizeof(ETHERCAT_FOE_HEADER)*/
405
406typedef struct
407{
408 uint16_t Cmd;
409 uint16_t Size;
410 uint16_t AddressLW;
411 uint16_t AddressHW;
413
414
415/* SoE (SOE over EtherCAT)*/
416#define ECAT_SOE_OPCODE_RRQ 1
417#define ECAT_SOE_OPCODE_RRS 2
418#define ECAT_SOE_OPCODE_WRQ 3
419#define ECAT_SOE_OPCODE_WRS 4
420#define ECAT_SOE_OPCODE_NFC 5
421
422
424{
425 struct
426 {
427 uint8_t OpCode : 3; /* 0 = unused, 1 = readReq, 2 = readRes, 3 = writeReq, 4 = writeRes
428 5 = notification (command changed notification)*/
429 uint8_t InComplete : 1; /* more follows*/
430 uint8_t Error : 1; /* an error word follows */
431 uint8_t DriveNo : 3; /* drive number */
432
433 uint8_t DataState : 1; /* follows or requested */
434 uint8_t Name : 1; /* follows or requested */
435 uint8_t Attribute : 1; /* follows or requested */
436 uint8_t Unit : 1; /* follows or requested */
437 uint8_t Min : 1; /* follows or requested */
438 uint8_t Max : 1; /* follows or requested */
439 uint8_t Value : 1; /* follows or requested */
440 uint8_t Reserved : 1;
441 } v;
442 struct
443 {
444 uint8_t Control;
445 uint8_t Element;
446 } v2;
448
450{
451 uint16_t IDN; /* SOE IDN if (InComplete==0) */
452 uint16_t FragmentsLeft; /* Pending fragments if (InComplete==1) */
454
456{
457 SoeHeaderControlUnion anSoeHeaderControlUnion;
458 SoeHeaderDataUnion anSoeHeaderDataUnion;
459 /* typedef union tMailBoxDataUnion
460 {
461 uint8_t Data[] rest of mailbox data if (Error==0)
462 uint16_t ErrorCode if (Error==1)
463 } MailBoxDataUnion;*/
465#define ETHERCAT_SOE_HEADER_LEN ((int) sizeof(ETHERCAT_SOE_HEADER))
466
468{
469 uint32_t VendorID;
470 uint16_t VendorType;
472#define ETHERCAT_VOE_HEADER_LEN 6 /*sizeof(ETHERCAT_VOE_HEADER)*/
473
474extern void init_mbx_header(PETHERCAT_MBOX_HEADER pMbox, tvbuff_t *tvb, int offset);
475
476DIAG_ON_PEDANTIC
477#endif /* _PACKET_ECATMAILBOX_H_ */
Definition address.h:58
Definition packet-trdp.c:179
Definition packet-ecatmb.h:407
Definition packet-ecatmb.h:144
Definition packet-ecatmb.h:104
Definition packet-ecatmb.h:112
Definition packet-ecatmb.h:392
Definition packet-ecatmb.h:47
Definition packet-ecatmb.h:237
Definition packet-ecatmb.h:308
Definition packet-ecatmb.h:322
Definition packet-ecatmb.h:347
Definition packet-ecatmb.h:287
Definition packet-ecatmb.h:296
Definition packet-ecatmb.h:456
Definition packet-ecatmb.h:468
Definition packet-ecatmb.h:20
Definition tvbuff-int.h:36
Definition packet-ecatmb.h:161
Definition packet-ecatmb.h:118
Definition packet-ecatmb.h:130
Definition packet-ecatmb.h:91
Definition packet-ecatmb.h:376
Definition packet-ecatmb.h:34
Definition packet-ecatmb.h:337
Definition packet-ecatmb.h:174
Definition packet-ecatmb.h:328
Definition packet-ecatmb.h:424
Definition packet-ecatmb.h:450