static int hf_pn_io_alarmcr_tagheaderlow = -1;
static int hf_pn_io_ar_uuid = -1;
+static int hf_pn_io_target_ar_uuid = -1;
static int hf_pn_io_api_tree = -1;
static int hf_pn_io_module_tree = -1;
static int hf_pn_io_submodule_tree = -1;
{ 0x0006, "Update" },
{ 0x0007, "Redundancy" },
{ 0x0008, "Controlled by supervisor" },
- { 0x0009, "Released by supervisor" },
+ { 0x0009, "Released" },
{ 0x000A, "Plug wrong submodule" },
{ 0x000B, "Return of submodule" },
/* 0x000C - 0x001F reserved */
/* dissect the read/write header */
static int
dissect_ReadWrite_header(tvbuff_t *tvb, int offset,
- packet_info *pinfo, proto_tree *tree, guint8 *drep, guint16 *u16Index)
+ packet_info *pinfo, proto_tree *tree, guint8 *drep, guint16 *u16Index, e_uuid_t *aruuid)
{
- e_uuid_t uuid;
guint32 u32Api;
guint16 u16SlotNr;
guint16 u16SubslotNr;
hf_pn_io_seq_number, &u16SeqNr);
offset = dissect_dcerpc_uuid_t(tvb, offset, pinfo, tree, drep,
- hf_pn_io_ar_uuid, &uuid);
+ hf_pn_io_ar_uuid, aruuid);
offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep,
hf_pn_io_api, &u32Api);
dissect_ReadWrite_rqst_block(tvbuff_t *tvb, int offset,
packet_info *pinfo, proto_tree *tree, guint8 *drep, guint16 *u16Index, guint32 *u32RecDataLen)
{
+ e_uuid_t aruuid;
+ e_uuid_t null_uuid;
- offset = dissect_ReadWrite_header(tvb, offset, pinfo, tree, drep, u16Index);
+ offset = dissect_ReadWrite_header(tvb, offset, pinfo, tree, drep, u16Index, &aruuid);
offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep,
hf_pn_io_record_data_length, u32RecDataLen);
- /* XXX: don't know how to handle the optional TargetARUUID */
+
+ memset(&null_uuid, 0, sizeof(e_uuid_t));
+ if(memcmp(&aruuid, &null_uuid, sizeof (e_uuid_t)) == 0) {
+ offset = dissect_dcerpc_uuid_t(tvb, offset, pinfo, tree, drep,
+ hf_pn_io_target_ar_uuid, &aruuid);
+ }
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, ", %u bytes",
dissect_ReadWrite_resp_block(tvbuff_t *tvb, int offset,
packet_info *pinfo, proto_tree *tree, guint8 *drep, guint16 *u16Index)
{
+ e_uuid_t aruuid;
guint32 u32RecDataLen;
guint16 u16AddVal1;
guint16 u16AddVal2;
- offset = dissect_ReadWrite_header(tvb, offset, pinfo, tree, drep, u16Index);
+ offset = dissect_ReadWrite_header(tvb, offset, pinfo, tree, drep, u16Index, &aruuid);
offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep,
hf_pn_io_record_data_length, &u32RecDataLen);
{ 2, "Read", dissect_IPNIO_Read_rqst, dissect_IPNIO_Read_resp },
{ 3, "Write", dissect_IPNIO_Write_rqst, dissect_IPNIO_Write_resp },
{ 4, "Control", dissect_IPNIO_Control_rqst, dissect_IPNIO_Control_resp },
+{ 5, "Read Implicit", dissect_IPNIO_Read_rqst, dissect_IPNIO_Read_resp },
{ 0, NULL, NULL, NULL }
};
{ &hf_pn_io_ar_uuid,
{ "ARUUID", "pn_io.ar_uuid", FT_STRING, BASE_DEC, NULL, 0x0, "", HFILL }},
+ { &hf_pn_io_target_ar_uuid,
+ { "TargetARUUID", "pn_io.target_ar_uuid", FT_STRING, BASE_DEC, NULL, 0x0, "", HFILL }},
{ &hf_pn_io_api,
{ "API", "pn_io.api", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
{ &hf_pn_io_slot_nr,