Wireshark 4.7.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet-pn.h
1/* packet-pn.h
2 * Common functions for other PROFINET protocols like DCP, MRP, ...
3 *
4 * Wireshark - Network traffic analyzer
5 * By Gerald Combs <[email protected]>
6 * Copyright 1999 Gerald Combs
7 *
8 * SPDX-License-Identifier: GPL-2.0-or-later
9 */
10
11/*
12 * Cyclic PNIO RTC1 Data Dissection:
13 *
14 * Added new structures to packet-pn.h to transfer the gained data of
15 * packet-pn-dcp.c and packet-dcerpc-pn-io.c to packet-pn-rtc-one.c for
16 * detailed dissection of cyclic PNIO RTC1 dataframes.
17 *
18 */
19
20#define FRAME_ID_DCP_HELLO 0xfefc
21#define FRAME_ID_DCP_GETORSET 0xfefd
22#define FRAME_ID_DCP_IDENT_REQ 0xfefe
23#define FRAME_ID_DCP_IDENT_RES 0xfeff
24
25
26/* ---- Structures for pnio_rtc1 ---- */
27extern int proto_pn_dcp;
28extern int proto_pn_io_apdu_status;
29extern int proto_pn_io_time_aware_status;
30
31extern bool pnio_ps_selection; /* given by pnio preferences */
32
36typedef struct tagStationInfo {
37 /* general information */
40 uint16_t u16Vendor_id;
41 uint16_t u16Device_id;
43 /* frame structure */
46 uint16_t iocsNr_in;
47 uint16_t iocsNr_out;
49 /* GSD file station information */
50 bool gsdFound;
54 /* IOCS object data */
58 /* IOData object data */
62 /* Different ModuleIdentnumber */
65 /* Flag for the extraction of PNIO Objects without AR */
68
78
82typedef struct tagIocsObject {
83 uint16_t slotNr;
84 uint16_t subSlotNr;
85 uint16_t frameOffset;
87
91typedef struct tagIoDataObject {
92 uint16_t slotNr;
93 uint16_t subSlotNr;
94 uint32_t api;
95 uint32_t moduleIdentNr;
97 uint16_t frameOffset;
98 uint16_t length;
99 uint16_t amountInGSDML;
101 uint16_t f_par_crc1;
102 uint16_t f_src_adr;
103 uint16_t f_dest_adr;
105 uint8_t f_crc_len;
114 /* Status- or Controlbyte data */
115 uint8_t last_sb_cb;
118
122typedef struct tagModuleDiffInfo {
123 uint16_t slotNr;
124 uint32_t modulID;
126
130typedef struct tagARUUIDFrame {
132 uint32_t setupframe;
133 uint32_t releaseframe;
134 uint16_t outputframe;
135 uint16_t inputframe;
137
138extern wmem_list_t *aruuid_frame_setup_list;
145extern void init_pn(int proto);
146
152extern void init_pn_io_rtc1(int proto);
153
159extern void init_pn_rsi(int proto);
160
164extern void pn_rsi_reassemble_init(void);
165
171extern void init_pnio_rtc1_station(stationInfo *station_info);
172
184extern unsigned dissect_pn_uint8(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
185 proto_tree *tree, int hfindex, uint8_t *pdata);
186
199extern unsigned dissect_pn_uint16_ret_item(tvbuff_t *tvb, unsigned offset, packet_info *pinfo _U_,
200 proto_tree *tree, int hfindex, uint16_t *pdata, proto_item ** new_item);
201
213extern unsigned dissect_pn_uint16(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
214 proto_tree *tree, int hfindex, uint16_t *pdata);
215
227extern unsigned dissect_pn_int16(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
228 proto_tree *tree, int hfindex, int16_t *pdata);
229
241extern unsigned dissect_pn_oid(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
242 proto_tree *tree, int hfindex, uint32_t *pdata);
243
255extern unsigned dissect_pn_mac(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
256 proto_tree *tree, int hfindex, uint8_t *pdata);
257
269extern unsigned dissect_pn_ipv4(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
270 proto_tree *tree, int hfindex, uint32_t *pdata);
271
283extern unsigned dissect_pn_uuid(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
284 proto_tree *tree, int hfindex, e_guid_t *uuid);
285
296extern unsigned dissect_pn_undecoded(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
297 proto_tree *tree, uint32_t length);
298
310extern unsigned dissect_pn_user_data(tvbuff_t *tvb, unsigned offset, packet_info *pinfo _U_,
311 proto_tree *tree, uint32_t length, const char *text);
312
326extern unsigned dissect_pn_pa_profile_data(tvbuff_t *tvb, unsigned offset, packet_info *pinfo _U_,
327 proto_tree *tree, uint32_t length, const char *text);
328
339extern unsigned dissect_blocks(tvbuff_t *tvb, unsigned offset,
340 packet_info *pinfo, proto_tree *tree, uint8_t *drep);
341
342#define PDU_TYPE_REQ 0x05
343#define PDU_TYPE_RSP 0x06
344
357extern unsigned dissect_rsi_blocks(tvbuff_t* tvb, unsigned offset, packet_info* pinfo, proto_tree* tree, uint8_t* drep, uint32_t u32FOpnumOffsetOpnum, int type);
358
359#define SUBST_DATA 1
360#define FRAG_DATA 2
361
373extern unsigned dissect_pn_user_data_bytes(tvbuff_t *tvb, unsigned offset, packet_info *pinfo _U_,
374 proto_tree *tree, uint32_t length, int iSelect);
375
386extern unsigned dissect_pn_malformed(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
387 proto_tree *tree, uint32_t length);
388
399extern unsigned dissect_pn_padding(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
400 proto_tree *tree, unsigned length);
401
411extern unsigned dissect_pn_align4(tvbuff_t *tvb, unsigned offset, packet_info *pinfo, proto_tree *tree);
412
423extern unsigned dissect_PNIO_status(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
424 proto_tree *tree, uint8_t *drep);
425
438extern unsigned dissect_PNIO_C_SDU_RTC1(tvbuff_t* tvb, unsigned offset, packet_info* pinfo,
439 proto_tree* tree, uint8_t* drep _U_, uint16_t frameid);
440
453extern unsigned dissect_PNIO_RTC1_with_security(tvbuff_t* tvb, unsigned offset, packet_info* pinfo,
454 proto_tree* tree, uint8_t* drep _U_, uint16_t frameid);
455
467extern unsigned dissect_RTC3_with_security(tvbuff_t* tvb, unsigned offset, packet_info* pinfo,
468 proto_tree* tree, uint8_t* drep _U_, void* data);
469
480extern unsigned dissect_PNIO_RSI(tvbuff_t *tvb, unsigned offset, packet_info *pinfo,
481 proto_tree *tree, uint8_t *drep);
482
493extern unsigned dissect_PNIO_RSI_with_security(tvbuff_t* tvb, unsigned offset, packet_info* pinfo,
494 proto_tree* tree, uint8_t* drep);
495
507extern unsigned dissect_SecurityMetaData_block(tvbuff_t* tvb, unsigned offset,
508 packet_info* pinfo, proto_item* item, proto_tree* tree, uint8_t* drep);
509
518extern unsigned dissect_SecurityChecksum(tvbuff_t* tvb, unsigned offset, proto_tree* tree);
519
520
534extern unsigned dissect_PDRsiInstances_block(tvbuff_t *tvb, unsigned offset,
535 packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint8_t *drep, uint8_t u8BlockVersionHigh, uint8_t u8BlockVersionLow);
536
544extern void pn_append_info(packet_info *pinfo, proto_item *dcp_item, const char *text);
545
552extern void pn_init_append_aruuid_frame_setup_list(e_guid_t aruuid, uint32_t setup);
553
560extern ARUUIDFrame* pn_find_aruuid_frame_setup(packet_info* pinfo);
561
570extern void pn_find_dcp_station_info(stationInfo* station_info, conversation_t* conversation);
571
583extern bool dissect_CSF_SDU_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data);
584
593extern bool pn_is_valid_security_metadata(tvbuff_t *tvb, unsigned security_meta_data_offset, int expected_security_data_length);
Holds a network or link-layer address of any supported type.
Definition address.h:62
Represents a GUID/UUID value; may be larger than GUID_LEN so must not be used to directly overlay pac...
Definition guid-utils.h:21
Represents the metadata and indexing information for a single captured frame.
Definition packet_info.h:43
Definition proto.h:909
Definition wmem_list.c:23
Definition conversation.h:229
Associates an AR UUID with the frame numbers of its setup, release, and cyclic data frames.
Definition packet-pn.h:130
uint16_t inputframe
Definition packet-pn.h:135
uint16_t outputframe
Definition packet-pn.h:134
uint32_t releaseframe
Definition packet-pn.h:133
uint32_t setupframe
Definition packet-pn.h:132
e_guid_t aruuid
Definition packet-pn.h:131
Carries the link-layer addressing context needed to correlate APDU status frames in a redundant PROFI...
Definition packet-pn.h:73
bool isRedundancyActive
Definition packet-pn.h:74
address dl_src
Definition packet-pn.h:76
address dl_dst
Definition packet-pn.h:75
Describes a single IO data object within a cyclic PROFINET frame, including PROFIsafe parameters and ...
Definition packet-pn.h:91
uint32_t fParameterIndexNr
Definition packet-pn.h:100
tvbuff_t * tvb_slot
Definition packet-pn.h:111
uint32_t api
Definition packet-pn.h:94
tvbuff_t * tvb_subslot
Definition packet-pn.h:112
uint16_t frameOffset
Definition packet-pn.h:97
uint16_t slotNr
Definition packet-pn.h:92
uint16_t f_src_adr
Definition packet-pn.h:102
uint16_t f_dest_adr
Definition packet-pn.h:103
bool profisafeSupported
Definition packet-pn.h:108
bool f_crc_seed
Definition packet-pn.h:104
uint16_t length
Definition packet-pn.h:98
uint8_t f_crc_len
Definition packet-pn.h:105
uint16_t f_par_crc1
Definition packet-pn.h:101
char * moduleNameStr
Definition packet-pn.h:110
address srcAddr
Definition packet-pn.h:106
uint8_t lastToggleBit
Definition packet-pn.h:116
uint8_t last_sb_cb
Definition packet-pn.h:115
uint32_t moduleIdentNr
Definition packet-pn.h:95
address dstAddr
Definition packet-pn.h:107
uint16_t amountInGSDML
Definition packet-pn.h:99
bool discardIOXS
Definition packet-pn.h:109
uint32_t subModuleIdentNr
Definition packet-pn.h:96
uint16_t subSlotNr
Definition packet-pn.h:93
Describes a single IOCS (IO Consumer Status) object entry within a cyclic PROFINET frame.
Definition packet-pn.h:82
uint16_t subSlotNr
Definition packet-pn.h:84
uint16_t slotNr
Definition packet-pn.h:83
uint16_t frameOffset
Definition packet-pn.h:85
Records a module whose actual ModuleIdentNumber differs from the value expected by the IO controller.
Definition packet-pn.h:122
uint16_t slotNr
Definition packet-pn.h:123
uint32_t modulID
Definition packet-pn.h:124
Holds all dissection state for a single PROFINET IO station, spanning identity, frame layout,...
Definition packet-pn.h:36
uint16_t u16Vendor_id
Definition packet-pn.h:40
char * nameofstation
Definition packet-pn.h:39
uint16_t ioDataObjectNr_out
Definition packet-pn.h:45
uint16_t iocsNr_in
Definition packet-pn.h:46
bool filled_with_objects
Definition packet-pn.h:66
wmem_list_t * iocs_data_out
Definition packet-pn.h:56
bool gsdPathLength
Definition packet-pn.h:51
wmem_list_t * iocs_data_in
Definition packet-pn.h:55
wmem_list_t * ioobject_data_in
Definition packet-pn.h:59
uint16_t iocsNr_out
Definition packet-pn.h:47
uint16_t ioDataObjectNr_in
Definition packet-pn.h:44
wmem_list_t * diff_module
Definition packet-pn.h:63
char * typeofstation
Definition packet-pn.h:38
uint16_t u16Device_id
Definition packet-pn.h:41
wmem_list_t * ioobject_data_out
Definition packet-pn.h:60
char * gsdLocation
Definition packet-pn.h:52
bool gsdFound
Definition packet-pn.h:50
Core tvbuff (testy virtual buffer) structure representing a region of packet data,...
Definition tvbuff-int.h:95