diff options
author | Bill Meier <wmeier@newsguy.com> | 2012-03-06 22:00:59 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2012-03-06 22:00:59 +0000 |
commit | bd4c0f06917a817a537b524faf2a7d59d73aeee3 (patch) | |
tree | af9b17534688bb10dae8bd34c8ea3234cbaa7684 /epan/dissectors/packet-cipsafety.c | |
parent | 57599011dae2c25331f28f81128dbdf0c1bdf519 (diff) |
Reformat long lines...
svn path=/trunk/; revision=41384
Diffstat (limited to 'epan/dissectors/packet-cipsafety.c')
-rw-r--r-- | epan/dissectors/packet-cipsafety.c | 1485 |
1 files changed, 1088 insertions, 397 deletions
diff --git a/epan/dissectors/packet-cipsafety.c b/epan/dissectors/packet-cipsafety.c index 21408532ba..7348d4ef57 100644 --- a/epan/dissectors/packet-cipsafety.c +++ b/epan/dissectors/packet-cipsafety.c @@ -406,7 +406,8 @@ static const value_string cip_svalidator_type_conn_type_vals[] = { }; void -dissect_unid(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_item *pi, const char* ssn_name, int hf_ssn_timestamp, +dissect_unid(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_item *pi, + const char* ssn_name, int hf_ssn_timestamp, int hf_ssn_date, int hf_ssn_time, int hf_macid, gint ett, gint ett_ssn) { proto_tree *tree, *ssn_tree; @@ -421,7 +422,8 @@ dissect_unid(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_item *pi, proto_tree_add_item(tree, hf_macid, tvb, offset+6, 4, ENC_LITTLE_ENDIAN); } -void dissect_cipsafety_ssn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, int hf_real_datetime, int hf_date, int hf_time) +void dissect_cipsafety_ssn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, + int hf_real_datetime, int hf_date, int hf_time) { guint16 date; @@ -446,20 +448,21 @@ void dissect_cipsafety_ssn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _ * ************************************************/ static void -dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo ) +dissect_cip_s_supervisor_data( proto_tree *item_tree, + tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo ) { - proto_item *pi, *rrsc_item; - proto_tree *rrsc_tree, *cmd_data_tree, *bitmap_tree; - int req_path_size; - int temp_data; - guint8 service, gen_status, add_stat_size; - cip_req_info_t* preq_info; - cip_simple_request_info_t req_data; + proto_item *pi, *rrsc_item; + proto_tree *rrsc_tree, *cmd_data_tree, *bitmap_tree; + int req_path_size; + int temp_data; + guint8 service, gen_status, add_stat_size; + cip_req_info_t* preq_info; + cip_simple_request_info_t req_data; col_set_str(pinfo->cinfo, COL_PROTOCOL, "CIPS Supervisor"); /* Add Service code & Request/Response tree */ - service = tvb_get_guint8( tvb, offset ); + service = tvb_get_guint8( tvb, offset ); rrsc_item = proto_tree_add_text( item_tree, tvb, offset, 1, "Service: " ); rrsc_tree = proto_item_add_subtree( rrsc_item, ett_ssupervisor_rrsc ); @@ -481,10 +484,10 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, } else { - req_data.iClass = (guint32)-1; - req_data.iInstance = (guint32)-1; + req_data.iClass = (guint32)-1; + req_data.iInstance = (guint32)-1; req_data.iAttribute = (guint32)-1; - req_data.iMember = (guint32)-1; + req_data.iMember = (guint32)-1; } if(service & 0x80 ) @@ -498,7 +501,8 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* If there is any command specific data create a sub-tree for it */ if( ( item_length-4-add_stat_size ) != 0 ) { - pi = proto_tree_add_text( item_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific Data" ); + pi = proto_tree_add_text( item_tree, + tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific Data" ); cmd_data_tree = proto_item_add_subtree( pi, ett_ssupervisor_cmd_data ); if( gen_status == CI_GRC_SUCCESS || gen_status == CI_GRC_SERVICE_ERROR ) @@ -506,9 +510,13 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, switch (service & 0x7F) { case SC_SSUPER_VALIDATE_CONFIGURATION: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_sccrc, tvb, offset+4+add_stat_size, 4, ENC_LITTLE_ENDIAN); - dissect_cipsafety_ssn(cmd_data_tree, tvb, pinfo, offset+4+add_stat_size+4, hf_cip_ssupervisor_validate_configuration_scts_timestamp, - hf_cip_ssupervisor_validate_configuration_scts_date, hf_cip_ssupervisor_validate_configuration_scts_time); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_sccrc, + tvb, offset+4+add_stat_size, 4, ENC_LITTLE_ENDIAN); + dissect_cipsafety_ssn(cmd_data_tree, + tvb, pinfo, offset+4+add_stat_size+4, + hf_cip_ssupervisor_validate_configuration_scts_timestamp, + hf_cip_ssupervisor_validate_configuration_scts_date, + hf_cip_ssupervisor_validate_configuration_scts_time); break; } } @@ -516,7 +524,8 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, { if (add_stat_size > 0) { - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_ext_error, tvb, offset+4, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_ext_error, + tvb, offset+4, 2, ENC_LITTLE_ENDIAN); } } else @@ -524,7 +533,8 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* Error responses */ /* Add data */ - proto_tree_add_item(cmd_data_tree, hf_cip_data, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_data, + tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); } } @@ -542,92 +552,149 @@ dissect_cip_s_supervisor_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* If there is any command specific data create a sub-tree for it */ if( (item_length-req_path_size-2) != 0 ) { - pi = proto_tree_add_text( item_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Command Specific Data" ); + pi = proto_tree_add_text( item_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, + "Command Specific Data" ); cmd_data_tree = proto_item_add_subtree( pi, ett_ssupervisor_cmd_data ); /* Check what service code that received */ switch (service) { case SC_SSUPER_RECOVER: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_recover_data, tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_recover_data, + tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); break; case SC_SSUPER_PERFORM_DIAGNOSTICS: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_perform_diag_data, tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_perform_diag_data, + tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); break; case SC_SSUPER_CONFIGURE_REQUEST: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_password, tvb, offset+2+req_path_size, 16, ENC_NA); - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_tunid, tvb, offset+2+req_path_size+16, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size+16, pi, "TUNID SSN", hf_cip_ssupervisor_configure_request_tunid_ssn_timestamp, - hf_cip_ssupervisor_configure_request_tunid_ssn_date, hf_cip_ssupervisor_configure_request_tunid_ssn_time, - hf_cip_ssupervisor_configure_request_tunid_macid, ett_ssupervisor_configure_request_tunid, ett_ssupervisor_configure_request_tunid_ssn); - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_ounid, tvb, offset+2+req_path_size+26, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size+16, pi, "OUNID SSN", hf_cip_ssupervisor_configure_request_ounid_ssn_timestamp, - hf_cip_ssupervisor_configure_request_ounid_ssn_date, hf_cip_ssupervisor_configure_request_ounid_ssn_time, - hf_cip_ssupervisor_configure_request_ounid_macid, ett_ssupervisor_configure_request_ounid, ett_ssupervisor_configure_request_ounid_ssn); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_password, + tvb, offset+2+req_path_size, 16, ENC_NA); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_tunid, + tvb, offset+2+req_path_size+16, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size+16, pi, "TUNID SSN", + hf_cip_ssupervisor_configure_request_tunid_ssn_timestamp, + hf_cip_ssupervisor_configure_request_tunid_ssn_date, + hf_cip_ssupervisor_configure_request_tunid_ssn_time, + hf_cip_ssupervisor_configure_request_tunid_macid, + ett_ssupervisor_configure_request_tunid, + ett_ssupervisor_configure_request_tunid_ssn); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_request_ounid, + tvb, offset+2+req_path_size+26, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size+16, pi, "OUNID SSN", + hf_cip_ssupervisor_configure_request_ounid_ssn_timestamp, + hf_cip_ssupervisor_configure_request_ounid_ssn_date, + hf_cip_ssupervisor_configure_request_ounid_ssn_time, + hf_cip_ssupervisor_configure_request_ounid_macid, + ett_ssupervisor_configure_request_ounid, + ett_ssupervisor_configure_request_ounid_ssn); break; case SC_SSUPER_VALIDATE_CONFIGURATION: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_sccrc, tvb, offset+2+req_path_size, 4, ENC_LITTLE_ENDIAN); - dissect_cipsafety_ssn(cmd_data_tree, tvb, pinfo, offset+2+req_path_size+4, hf_cip_ssupervisor_validate_configuration_scts_timestamp, - hf_cip_ssupervisor_validate_configuration_scts_date, hf_cip_ssupervisor_validate_configuration_scts_time); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_validate_configuration_sccrc, + tvb, offset+2+req_path_size, 4, ENC_LITTLE_ENDIAN); + dissect_cipsafety_ssn(cmd_data_tree, tvb, pinfo, offset+2+req_path_size+4, + hf_cip_ssupervisor_validate_configuration_scts_timestamp, + hf_cip_ssupervisor_validate_configuration_scts_date, + hf_cip_ssupervisor_validate_configuration_scts_time); break; case SC_SSUPER_SET_PASSWORD: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_set_password_current_password, tvb, offset+2+req_path_size, 16, ENC_NA); - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_set_password_new_password, tvb, offset+2+req_path_size+16, 16, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_set_password_current_password, + tvb, offset+2+req_path_size, 16, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_set_password_new_password, + tvb, offset+2+req_path_size+16, 16, ENC_NA); break; case SC_SSUPER_CONFIGURATION_LOCK: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_value, tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_password, tvb, offset+2+req_path_size+1, 16, ENC_NA); - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_tunid, tvb, offset+2+req_path_size+17, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size+17, pi, "TUNID SSN", hf_cip_ssupervisor_configure_lock_tunid_ssn_timestamp, - hf_cip_ssupervisor_configure_lock_tunid_ssn_date, hf_cip_ssupervisor_configure_lock_tunid_ssn_time, - hf_cip_ssupervisor_configure_lock_tunid_macid, ett_ssupervisor_configure_lock_tunid, ett_ssupervisor_configure_lock_tunid_ssn); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_value, + tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_password, + tvb, offset+2+req_path_size+1, 16, ENC_NA); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_configure_lock_tunid, + tvb, offset+2+req_path_size+17, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size+17, pi, "TUNID SSN", + hf_cip_ssupervisor_configure_lock_tunid_ssn_timestamp, + hf_cip_ssupervisor_configure_lock_tunid_ssn_date, + hf_cip_ssupervisor_configure_lock_tunid_ssn_time, + hf_cip_ssupervisor_configure_lock_tunid_macid, + ett_ssupervisor_configure_lock_tunid, + ett_ssupervisor_configure_lock_tunid_ssn); break; case SC_SSUPER_MODE_CHANGE: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_mode_change_value, tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_mode_change_password, tvb, offset+2+req_path_size+1, 16, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_mode_change_value, + tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_mode_change_password, + tvb, offset+2+req_path_size+1, 16, ENC_NA); break; case SC_SSUPER_SAFETY_RESET: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_type, tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_type, + tvb, offset+2+req_path_size+1, 1, ENC_LITTLE_ENDIAN); temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 ); - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password, tvb, offset+2+req_path_size+1, 16, ENC_NA); - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_tunid, tvb, offset+2+req_path_size+17, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size+17, pi, "TUNID SSN", hf_cip_ssupervisor_reset_tunid_tunid_ssn_timestamp, - hf_cip_ssupervisor_reset_tunid_tunid_ssn_date, hf_cip_ssupervisor_reset_tunid_tunid_ssn_time, - hf_cip_ssupervisor_reset_tunid_macid, ett_ssupervisor_reset_tunid, ett_ssupervisor_reset_tunid_ssn); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password, + tvb, offset+2+req_path_size+1, 16, ENC_NA); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_tunid, + tvb, offset+2+req_path_size+17, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size+17, pi, "TUNID SSN", + hf_cip_ssupervisor_reset_tunid_tunid_ssn_timestamp, + hf_cip_ssupervisor_reset_tunid_tunid_ssn_date, + hf_cip_ssupervisor_reset_tunid_tunid_ssn_time, + hf_cip_ssupervisor_reset_tunid_macid, + ett_ssupervisor_reset_tunid, + ett_ssupervisor_reset_tunid_ssn); /* Attribute bitmap only included on Reset Type 2 */ if (temp_data == 2) { - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_attr_bitmap, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_attr_bitmap, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); bitmap_tree = proto_item_add_subtree(pi, ett_cip_ssupervisor_reset_attr_bitmap); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_macid, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_baudrate, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_tunid, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_password, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_cfunid, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_ocpunid, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_reserved, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_extended, tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_macid, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_baudrate, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_tunid, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_password, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_cfunid, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_ocpunid, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_reserved, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bitmap_tree, hf_cip_ssupervisor_reset_attr_bitmap_extended, + tvb, offset+2+req_path_size+27, 1, ENC_LITTLE_ENDIAN); } break; case SC_SSUPER_RESET_PASSWORD: - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password_data_size, tvb, offset+2+req_path_size, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password_data_size, + tvb, offset+2+req_path_size, 1, ENC_LITTLE_ENDIAN); temp_data = tvb_get_guint8(tvb, offset+2+req_path_size); - proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password_data, tvb, offset+2+req_path_size+1, temp_data, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_reset_password_data, + tvb, offset+2+req_path_size+1, temp_data, ENC_NA); break; case SC_SSUPER_PROPOSE_TUNID: - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_propose_tunid_tunid, tvb, offset+2+req_path_size, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size, pi, "TUNID SSN", hf_cip_ssupervisor_propose_tunid_tunid_ssn_timestamp, - hf_cip_ssupervisor_propose_tunid_tunid_ssn_date, hf_cip_ssupervisor_propose_tunid_tunid_ssn_time, - hf_cip_ssupervisor_propose_tunid_tunid_macid, ett_ssupervisor_propose_tunid, ett_ssupervisor_propose_tunid_ssn); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_propose_tunid_tunid, + tvb, offset+2+req_path_size, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size, pi, "TUNID SSN", + hf_cip_ssupervisor_propose_tunid_tunid_ssn_timestamp, + hf_cip_ssupervisor_propose_tunid_tunid_ssn_date, + hf_cip_ssupervisor_propose_tunid_tunid_ssn_time, + hf_cip_ssupervisor_propose_tunid_tunid_macid, + ett_ssupervisor_propose_tunid, + ett_ssupervisor_propose_tunid_ssn); break; case SC_SSUPER_APPLY_TUNID: - pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_apply_tunid_tunid, tvb, offset+2+req_path_size, 10, ENC_NA); - dissect_unid(tvb, pinfo, offset+2+req_path_size, pi, "TUNID SSN", hf_cip_ssupervisor_apply_tunid_tunid_ssn_timestamp, - hf_cip_ssupervisor_apply_tunid_tunid_ssn_date, hf_cip_ssupervisor_apply_tunid_tunid_ssn_time, - hf_cip_ssupervisor_apply_tunid_tunid_macid, ett_ssupervisor_apply_tunid, ett_ssupervisor_apply_tunid_ssn); + pi = proto_tree_add_item(cmd_data_tree, hf_cip_ssupervisor_apply_tunid_tunid, + tvb, offset+2+req_path_size, 10, ENC_NA); + dissect_unid(tvb, pinfo, offset+2+req_path_size, pi, "TUNID SSN", + hf_cip_ssupervisor_apply_tunid_tunid_ssn_timestamp, + hf_cip_ssupervisor_apply_tunid_tunid_ssn_date, + hf_cip_ssupervisor_apply_tunid_tunid_ssn_time, + hf_cip_ssupervisor_apply_tunid_tunid_macid, + ett_ssupervisor_apply_tunid, + ett_ssupervisor_apply_tunid_ssn); break; default: - proto_tree_add_item(cmd_data_tree, hf_cip_data, tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_data, + tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); } } /* End of if command-specific data present */ @@ -676,10 +743,12 @@ int dissect_s_supervisor_exception_detail_alarm(packet_info *pinfo, proto_tree * pi = proto_tree_add_text(tree, tvb, offset, 1, "Common Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_alarm_common); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_alarm_ced_size, hf_cip_ssupervisor_exception_detail_alarm_ced_detail); + hf_cip_ssupervisor_exception_detail_alarm_ced_size, + hf_cip_ssupervisor_exception_detail_alarm_ced_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 13 (Common Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 13 (Common Exception Detail)"); return total_len; } total_size += size; @@ -687,10 +756,12 @@ int dissect_s_supervisor_exception_detail_alarm(packet_info *pinfo, proto_tree * pi = proto_tree_add_text(tree, tvb, offset, 1, "Device Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_alarm_device); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_alarm_ded_size, hf_cip_ssupervisor_exception_detail_alarm_ded_detail); + hf_cip_ssupervisor_exception_detail_alarm_ded_size, + hf_cip_ssupervisor_exception_detail_alarm_ded_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 13 (Device Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 13 (Device Exception Detail)"); return total_len; } total_size += size; @@ -698,10 +769,12 @@ int dissect_s_supervisor_exception_detail_alarm(packet_info *pinfo, proto_tree * pi = proto_tree_add_text(tree, tvb, offset, 1, "Manufacturer Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_alarm_manufacturer); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_alarm_med_size, hf_cip_ssupervisor_exception_detail_alarm_med_detail); + hf_cip_ssupervisor_exception_detail_alarm_med_size, + hf_cip_ssupervisor_exception_detail_alarm_med_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 13 (Manufacturer Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 13 (Manufacturer Exception Detail)"); return total_len; } total_size += size; @@ -709,20 +782,22 @@ int dissect_s_supervisor_exception_detail_alarm(packet_info *pinfo, proto_tree * return total_size; } -int dissect_s_supervisor_exception_detail_warning(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_exception_detail_warning(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { proto_item *pi; proto_tree *item_tree; - int total_size = 0, size; + int total_size = 0, size; pi = proto_tree_add_text(tree, tvb, offset, 1, "Common Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_warning_common); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_warning_ced_size, hf_cip_ssupervisor_exception_detail_warning_ced_detail); + hf_cip_ssupervisor_exception_detail_warning_ced_size, + hf_cip_ssupervisor_exception_detail_warning_ced_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 14 (Common Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 14 (Common Exception Detail)"); return total_len; } total_size += size; @@ -730,10 +805,12 @@ int dissect_s_supervisor_exception_detail_warning(packet_info *pinfo, proto_tree pi = proto_tree_add_text(tree, tvb, offset, 1, "Device Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_warning_device); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_warning_ded_size, hf_cip_ssupervisor_exception_detail_warning_ded_detail); + hf_cip_ssupervisor_exception_detail_warning_ded_size, + hf_cip_ssupervisor_exception_detail_warning_ded_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 14 (Device Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 14 (Device Exception Detail)"); return total_len; } total_size += size; @@ -741,10 +818,12 @@ int dissect_s_supervisor_exception_detail_warning(packet_info *pinfo, proto_tree pi = proto_tree_add_text(tree, tvb, offset, 1, "Manufacturer Exception Detail"); item_tree = proto_item_add_subtree(pi, ett_exception_detail_warning_manufacturer); size = dissect_s_supervisor_exception_detail(item_tree, pi, tvb, offset, - hf_cip_ssupervisor_exception_detail_warning_med_size, hf_cip_ssupervisor_exception_detail_warning_med_detail); + hf_cip_ssupervisor_exception_detail_warning_med_size, + hf_cip_ssupervisor_exception_detail_warning_med_detail); if (size == 0) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 14 (Manufacturer Exception Detail)"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 14 (Manufacturer Exception Detail)"); return total_len; } total_size += size; @@ -752,66 +831,83 @@ int dissect_s_supervisor_exception_detail_warning(packet_info *pinfo, proto_tree return total_size; } -int dissect_s_supervisor_configuration_unid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_configuration_unid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { if (total_len < 10) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 25"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 25"); return total_len; } - dissect_unid(tvb, pinfo, offset, item, "CFUNID SSN", hf_cip_ssupervisor_configuration_unid_ssn_timestamp, - hf_cip_ssupervisor_configuration_unid_ssn_date, hf_cip_ssupervisor_configuration_unid_ssn_time, - hf_cip_ssupervisor_configuration_unid_macid, ett_ssupervisor_configuration_unid, ett_ssupervisor_configuration_unid_ssn); + dissect_unid(tvb, pinfo, offset, item, "CFUNID SSN", + hf_cip_ssupervisor_configuration_unid_ssn_timestamp, + hf_cip_ssupervisor_configuration_unid_ssn_date, + hf_cip_ssupervisor_configuration_unid_ssn_time, + hf_cip_ssupervisor_configuration_unid_macid, + ett_ssupervisor_configuration_unid, + ett_ssupervisor_configuration_unid_ssn); return 10; } -int dissect_s_supervisor_safety_configuration_id(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_safety_configuration_id(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { if (total_len < 10) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 26"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 26"); return total_len; } - dissect_unid(tvb, pinfo, offset, item, "SCID SSN", hf_cip_ssupervisor_safety_configuration_id_ssn_timestamp, - hf_cip_ssupervisor_safety_configuration_id_ssn_date, hf_cip_ssupervisor_safety_configuration_id_ssn_time, - hf_cip_ssupervisor_safety_configuration_id_macid, ett_ssupervisor_safety_configuration_id, ett_ssupervisor_safety_configuration_id_ssn); + dissect_unid(tvb, pinfo, offset, item, "SCID SSN", + hf_cip_ssupervisor_safety_configuration_id_ssn_timestamp, + hf_cip_ssupervisor_safety_configuration_id_ssn_date, + hf_cip_ssupervisor_safety_configuration_id_ssn_time, + hf_cip_ssupervisor_safety_configuration_id_macid, + ett_ssupervisor_safety_configuration_id, + ett_ssupervisor_safety_configuration_id_ssn); return 10; } -int dissect_s_supervisor_target_unid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_target_unid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { if (total_len < 10) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 27"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 27"); return total_len; } - dissect_unid(tvb, pinfo, offset, item, "TUNID SSN", hf_cip_ssupervisor_target_unid_ssn_timestamp, - hf_cip_ssupervisor_target_unid_ssn_date, hf_cip_ssupervisor_target_unid_ssn_time, - hf_cip_ssupervisor_target_unid_macid, ett_ssupervisor_target_unid, ett_ssupervisor_target_unid_ssn); + dissect_unid(tvb, pinfo, offset, item, "TUNID SSN", + hf_cip_ssupervisor_target_unid_ssn_timestamp, + hf_cip_ssupervisor_target_unid_ssn_date, + hf_cip_ssupervisor_target_unid_ssn_time, + hf_cip_ssupervisor_target_unid_macid, + ett_ssupervisor_target_unid, + ett_ssupervisor_target_unid_ssn); return 10; } -int dissect_s_supervisor_output_connection_point_owners(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_output_connection_point_owners(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { - guint16 i, num_entries; + guint16 i, num_entries; proto_item *entry_item, *app_path_item; proto_tree *entry_tree; - int attr_len = 0, app_path_size; + int attr_len = 0, app_path_size; if (total_len < 2) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 28"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 28"); return total_len; } - entry_item = proto_tree_add_item(tree, hf_cip_ssupervisor_cp_owners_num_entries, tvb, offset, 2, ENC_LITTLE_ENDIAN ); + entry_item = proto_tree_add_item(tree, hf_cip_ssupervisor_cp_owners_num_entries, + tvb, offset, 2, ENC_LITTLE_ENDIAN ); num_entries = tvb_get_letohs(tvb, offset); attr_len += 2; @@ -827,22 +923,29 @@ int dissect_s_supervisor_output_connection_point_owners(packet_info *pinfo, prot return total_len; } - dissect_unid(tvb, pinfo, offset+attr_len, entry_item, "OCPUNID SSN", hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_timestamp, - hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_date, hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_time, - hf_cip_ssupervisor_output_cp_owners_ocpunid_macid, ett_ssupervisor_output_cp_owners_ocpunid, ett_ssupervisor_output_cp_owners_ocpunid_ssn); + dissect_unid(tvb, pinfo, offset+attr_len, entry_item, "OCPUNID SSN", + hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_timestamp, + hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_date, + hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_time, + hf_cip_ssupervisor_output_cp_owners_ocpunid_macid, + ett_ssupervisor_output_cp_owners_ocpunid, + ett_ssupervisor_output_cp_owners_ocpunid_ssn); attr_len += 10; - proto_tree_add_item(entry_tree, hf_cip_ssupervisor_cp_owners_app_path_size, tvb, offset+attr_len, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(entry_tree, hf_cip_ssupervisor_cp_owners_app_path_size, + tvb, offset+attr_len, 1, ENC_LITTLE_ENDIAN ); app_path_size = tvb_get_guint8( tvb, offset+attr_len); attr_len += 1; if (total_len < attr_len+app_path_size) { - expert_add_info_format(pinfo, entry_item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 28 (EPATH)"); + expert_add_info_format(pinfo, entry_item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 28 (EPATH)"); return total_len; } - app_path_item = proto_tree_add_text(entry_tree, tvb, offset+attr_len, app_path_size, "Application Resource: "); + app_path_item = proto_tree_add_text(entry_tree, + tvb, offset+attr_len, app_path_size, "Application Resource: "); dissect_epath( tvb, pinfo, app_path_item, offset+attr_len, app_path_size, FALSE, TRUE, NULL, NULL); attr_len += app_path_size; } @@ -851,18 +954,23 @@ int dissect_s_supervisor_output_connection_point_owners(packet_info *pinfo, prot return attr_len; } -int dissect_s_supervisor_proposed_tunid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_supervisor_proposed_tunid(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { if (total_len < 10) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Supervisor Attribute 29"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Supervisor Attribute 29"); return total_len; } - dissect_unid(tvb, pinfo, offset, item, "Proposed TUNID SSN", hf_cip_ssupervisor_proposed_tunid_ssn_timestamp, - hf_cip_ssupervisor_proposed_tunid_ssn_date, hf_cip_ssupervisor_proposed_tunid_ssn_time, - hf_cip_ssupervisor_proposed_tunid_macid, ett_ssupervisor_proposed_tunid, ett_ssupervisor_proposed_tunid_ssn); + dissect_unid(tvb, pinfo, offset, item, "Proposed TUNID SSN", + hf_cip_ssupervisor_proposed_tunid_ssn_timestamp, + hf_cip_ssupervisor_proposed_tunid_ssn_date, + hf_cip_ssupervisor_proposed_tunid_ssn_time, + hf_cip_ssupervisor_proposed_tunid_macid, + ett_ssupervisor_proposed_tunid, + ett_ssupervisor_proposed_tunid_ssn); return 10; } @@ -879,7 +987,8 @@ int dissect_s_validator_type(packet_info *pinfo, proto_tree *tree, proto_item *i if (total_len < 1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 2"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 2"); return total_len; } @@ -890,45 +999,51 @@ int dissect_s_validator_type(packet_info *pinfo, proto_tree *tree, proto_item *i return 1; } -int dissect_s_validator_time_coord_msg_min_mult(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_validator_time_coord_msg_min_mult(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { int i, size; - proto_tree_add_item(tree, hf_cip_svalidator_time_coord_msg_min_mult_size, tvb, offset, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_time_coord_msg_min_mult_size, + tvb, offset, 1, ENC_LITTLE_ENDIAN ); size = tvb_get_guint8( tvb, offset )*2; if (total_len < size+1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 4"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 4"); return total_len; } for (i = 0; i < size; i+=2) { - proto_tree_add_item(tree, hf_cip_svalidator_time_coord_msg_min_mult_item, tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_time_coord_msg_min_mult_item, + tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); } return (size+1); } -int dissect_s_validator_network_time_multiplier(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_validator_network_time_multiplier(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { int i, size; - proto_tree_add_item(tree, hf_cip_svalidator_network_time_multiplier_size, tvb, offset, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_network_time_multiplier_size, + tvb, offset, 1, ENC_LITTLE_ENDIAN ); size = tvb_get_guint8( tvb, offset )*2; if (total_len < size+1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 5"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 5"); return total_len; } for (i = 0; i < size; i+=2) { - proto_tree_add_item(tree, hf_cip_svalidator_network_time_multiplier_item, tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_network_time_multiplier_item, + tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); } return (size+1); @@ -939,88 +1054,98 @@ int dissect_s_validator_timeout_multiplier(packet_info *pinfo, proto_tree *tree, { int i, size; - proto_tree_add_item(tree, hf_cip_svalidator_timeout_multiplier_size, tvb, offset, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_timeout_multiplier_size, + tvb, offset, 1, ENC_LITTLE_ENDIAN ); size = tvb_get_guint8( tvb, offset ); if (total_len < size+1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 6"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 6"); return total_len; } for (i = 0; i < size; i++) { - proto_tree_add_item(tree, hf_cip_svalidator_timeout_multiplier_item, tvb, offset+1+i, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_timeout_multiplier_item, + tvb, offset+1+i, 1, ENC_LITTLE_ENDIAN ); } return (size+1); } -int dissect_s_validator_coordination_conn_inst(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_validator_coordination_conn_inst(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { int i, size; - proto_tree_add_item(tree, hf_cip_svalidator_coordination_conn_inst_size, tvb, offset, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_coordination_conn_inst_size, + tvb, offset, 1, ENC_LITTLE_ENDIAN ); size = tvb_get_guint8( tvb, offset )*2; if (total_len < size+1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 9"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 9"); return total_len; } for (i = 0; i < size; i+=2) { - proto_tree_add_item(tree, hf_cip_svalidator_coordination_conn_inst_item, tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_coordination_conn_inst_item, + tvb, offset+1+i, 2, ENC_LITTLE_ENDIAN ); } return (size+1); } -int dissect_s_validator_app_data_path(packet_info *pinfo, proto_tree *tree _U_, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_validator_app_data_path(packet_info *pinfo, proto_tree *tree _U_, + proto_item *item, tvbuff_t *tvb, int offset, int total_len) { dissect_epath(tvb, pinfo, item, offset, total_len, FALSE, FALSE, NULL, NULL); return total_len; } -int dissect_s_validator_prod_cons_fault_count(packet_info *pinfo, proto_tree *tree, proto_item *item, tvbuff_t *tvb, - int offset, int total_len) +int dissect_s_validator_prod_cons_fault_count(packet_info *pinfo, proto_tree *tree, proto_item *item, + tvbuff_t *tvb, int offset, int total_len) { int i, size; - proto_tree_add_item(tree, hf_cip_svalidator_prod_cons_fault_count_size, tvb, offset, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_prod_cons_fault_count_size, + tvb, offset, 1, ENC_LITTLE_ENDIAN ); size = tvb_get_guint8( tvb, offset ); if (total_len < size+1) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed Safety Validator Attribute 15"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed Safety Validator Attribute 15"); return total_len; } for (i = 0; i < size; i++) { - proto_tree_add_item(tree, hf_cip_svalidator_prod_cons_fault_count_item, tvb, offset+1+i, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(tree, hf_cip_svalidator_prod_cons_fault_count_item, + tvb, offset+1+i, 1, ENC_LITTLE_ENDIAN ); } return (size+1); } static void -dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo ) +dissect_cip_s_validator_data( proto_tree *item_tree, + tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo ) { - proto_item *pi, *rrsc_item; - proto_tree *rrsc_tree, *cmd_data_tree; - int req_path_size, gaa_offset; - guint8 service, gen_status, add_stat_size; - cip_req_info_t* preq_info; - cip_simple_request_info_t req_data; + proto_item *pi, *rrsc_item; + proto_tree *rrsc_tree, *cmd_data_tree; + int req_path_size, gaa_offset; + guint8 service, gen_status, add_stat_size; + cip_req_info_t* preq_info; + cip_simple_request_info_t req_data; col_set_str(pinfo->cinfo, COL_PROTOCOL, "CIPS Supervisor"); /* Add Service code & Request/Response tree */ - service = tvb_get_guint8( tvb, offset ); + service = tvb_get_guint8( tvb, offset ); rrsc_item = proto_tree_add_text( item_tree, tvb, offset, 1, "Service: " ); rrsc_tree = proto_item_add_subtree( rrsc_item, ett_svalidator_rrsc ); @@ -1044,10 +1169,10 @@ dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, } else { - req_data.iClass = (guint32)-1; - req_data.iInstance = (guint32)-1; + req_data.iClass = (guint32)-1; + req_data.iInstance = (guint32)-1; req_data.iAttribute = (guint32)-1; - req_data.iMember = (guint32)-1; + req_data.iMember = (guint32)-1; } if(service & 0x80 ) @@ -1061,7 +1186,8 @@ dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* If there is any command specific data create a sub-tree for it */ if( ( item_length-4-add_stat_size ) != 0 ) { - pi = proto_tree_add_text( item_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific Data" ); + pi = proto_tree_add_text( item_tree, + tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific Data" ); cmd_data_tree = proto_item_add_subtree( pi, ett_ssupervisor_cmd_data ); if( gen_status == CI_GRC_SUCCESS || gen_status == CI_GRC_SERVICE_ERROR ) @@ -1072,33 +1198,53 @@ dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, (req_data.iInstance != 0)) { /* Get Attribute All (instance) response */ - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_state, tvb, offset+4+add_stat_size, 1, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_state, + tvb, offset+4+add_stat_size, 1, ENC_LITTLE_ENDIAN ); gaa_offset = 1; - gaa_offset += dissect_s_validator_type(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, 1); - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_ping_eri, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + gaa_offset += dissect_s_validator_type(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, 1); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_ping_eri, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - gaa_offset += dissect_s_validator_time_coord_msg_min_mult(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, item_length-4-add_stat_size-gaa_offset); - gaa_offset += dissect_s_validator_timeout_multiplier(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, item_length-4-add_stat_size-gaa_offset); - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_max_consumer_num, tvb, offset+4+add_stat_size+gaa_offset, 1, ENC_LITTLE_ENDIAN ); + gaa_offset += dissect_s_validator_time_coord_msg_min_mult(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, + item_length-4-add_stat_size-gaa_offset); + gaa_offset += dissect_s_validator_timeout_multiplier(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, + item_length-4-add_stat_size-gaa_offset); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_max_consumer_num, + tvb, offset+4+add_stat_size+gaa_offset, 1, ENC_LITTLE_ENDIAN ); gaa_offset += 1; - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_data_conn_inst, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_data_conn_inst, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - gaa_offset += dissect_s_validator_coordination_conn_inst(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, item_length-4-add_stat_size-gaa_offset); - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_correction_conn_inst, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + gaa_offset += dissect_s_validator_coordination_conn_inst(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, + item_length-4-add_stat_size-gaa_offset); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_correction_conn_inst, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_cco_binding, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_cco_binding, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_max_data_age, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_max_data_age, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - gaa_offset += dissect_s_validator_app_data_path(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, item_length-4-add_stat_size-gaa_offset); - proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_error_code, tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); + gaa_offset += dissect_s_validator_app_data_path(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, + item_length-4-add_stat_size-gaa_offset); + proto_tree_add_item(cmd_data_tree, hf_cip_svalidator_error_code, + tvb, offset+4+add_stat_size+gaa_offset, 2, ENC_LITTLE_ENDIAN ); gaa_offset += 2; - /*gaa_offset +=*/ dissect_s_validator_prod_cons_fault_count(pinfo, cmd_data_tree, pi, tvb, offset+4+add_stat_size+gaa_offset, item_length-4-add_stat_size-gaa_offset); + /*gaa_offset +=*/ dissect_s_validator_prod_cons_fault_count(pinfo, cmd_data_tree, pi, + tvb, offset+4+add_stat_size+gaa_offset, + item_length-4-add_stat_size-gaa_offset); } else { /* Add data */ - proto_tree_add_item(cmd_data_tree, hf_cip_data, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_data, + tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); } } else @@ -1106,7 +1252,8 @@ dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* Error responses */ /* Add data */ - proto_tree_add_item(cmd_data_tree, hf_cip_data, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_data, + tvb, offset+4+add_stat_size, item_length-4-add_stat_size, ENC_NA); } /* end of if-else( CI_CRC_SUCCESS ) */ } /* End of if command-specific data present */ @@ -1125,9 +1272,11 @@ dissect_cip_s_validator_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, /* If there is any command specific data create a sub-tree for it */ if( (item_length-req_path_size-2) != 0 ) { - pi = proto_tree_add_text( item_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Command Specific Data" ); + pi = proto_tree_add_text( item_tree, + tvb, offset+2+req_path_size, item_length-req_path_size-2, "Command Specific Data" ); cmd_data_tree = proto_item_add_subtree( pi, ett_ssupervisor_cmd_data ); - proto_tree_add_item(cmd_data_tree, hf_cip_data, tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); + proto_tree_add_item(cmd_data_tree, hf_cip_data, + tvb, offset+2+req_path_size, item_length-req_path_size-2, ENC_NA); } } @@ -1155,10 +1304,10 @@ dissect_cip_class_s_validator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre static gboolean dissect_class_svalidator_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - unsigned char service, service_code, ioilen, segment; + unsigned char service, service_code, ioilen, segment; cip_req_info_t* preq_info; - guint32 classid = 0; - int offset = 0; + guint32 classid = 0; + int offset = 0; service = tvb_get_guint8( tvb, offset ); service_code = service & 0x7F; @@ -1227,7 +1376,7 @@ dissect_mode_byte( proto_tree *tree, tvbuff_t *tvb, int offset, packet_info *pin { proto_item *mode_item, *run_idle_item, *tbd_item, *tbd2_item; proto_tree *mode_tree; - guint8 mode_byte; + guint8 mode_byte; mode_byte = tvb_get_guint8(tvb, offset); @@ -1235,12 +1384,12 @@ dissect_mode_byte( proto_tree *tree, tvbuff_t *tvb, int offset, packet_info *pin mode_item = proto_tree_add_item(tree, hf_cipsafety_mode_byte, tvb, offset, 1, ENC_LITTLE_ENDIAN); mode_tree = proto_item_add_subtree( mode_item, ett_cipsafety_mode_byte); - proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_ping_count, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_not_tbd, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd_2_copy, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_not_run_idle, tvb, offset, 1, ENC_LITTLE_ENDIAN); - tbd_item = proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd, tvb, offset, 1, ENC_LITTLE_ENDIAN); - tbd2_item = proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd_2_bit, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_ping_count, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_not_tbd, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd_2_copy, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_not_run_idle, tvb, offset, 1, ENC_LITTLE_ENDIAN); + tbd_item = proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd, tvb, offset, 1, ENC_LITTLE_ENDIAN); + tbd2_item = proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_tbd_2_bit, tvb, offset, 1, ENC_LITTLE_ENDIAN); run_idle_item = proto_tree_add_item(mode_tree, hf_cipsafety_mode_byte_run_idle, tvb, offset, 1, ENC_LITTLE_ENDIAN); /* verify Mode Byte bits */ @@ -1262,23 +1411,20 @@ dissect_ack_byte( proto_tree *tree, tvbuff_t *tvb, int offset, packet_info *pinf { proto_item *ack_item; proto_tree *ack_tree; -/******************** - Placeholder reminder to add ack_byte validation - +#if 0 /***** Placeholder reminder to add ack_byte validation */ guint8 ack_byte; ack_byte = tvb_get_guint8(tvb, offset); -*/ - +#endif /* dissect Ack Byte bits */ ack_item = proto_tree_add_item(tree, hf_cipsafety_ack_byte, tvb, offset, 1, ENC_LITTLE_ENDIAN); ack_tree = proto_item_add_subtree( ack_item, ett_cipsafety_ack_byte); proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_ping_count_reply, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_reserved1, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_ping_response, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_reserved2, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_parity_even, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_reserved1, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_ping_response, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_reserved2, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(ack_tree, hf_cipsafety_ack_byte_parity_even, tvb, offset, 1, ENC_LITTLE_ENDIAN); } static void @@ -1286,22 +1432,20 @@ dissect_mcast_byte( proto_tree *tree, tvbuff_t *tvb, int offset, packet_info *pi { proto_item *mcast_item; proto_tree *mcast_tree; -/******************** - Placeholder reminder to add mcast_byte validation +#if 0 /*** Placeholder reminder to add mcast_byte validation */ guint8 mcast_byte; mcast_byte = tvb_get_guint8(tvb, offset); -*/ - +#endif /* dissect MCast Byte bits */ mcast_item = proto_tree_add_item(tree, hf_cipsafety_mcast_byte, tvb, offset, 1, ENC_LITTLE_ENDIAN); mcast_tree = proto_item_add_subtree( mcast_item, ett_cipsafety_mcast_byte); proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_consumer_num, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_reserved1, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_mai, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_reserved2, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_parity_even, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_reserved1, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_mai, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_reserved2, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(mcast_tree, hf_cipsafety_mcast_byte_parity_even, tvb, offset, 1, ENC_LITTLE_ENDIAN); } static void @@ -1361,17 +1505,17 @@ dissect_cip_safety_data( proto_tree *tree, proto_item *item, tvbuff_t *tvb, int proto_tree_add_item(tree, hf_cipsafety_data, tvb, 0, item_length-base_length, ENC_LITTLE_ENDIAN); dissect_mode_byte(tree, tvb, item_length-base_length, pinfo); - proto_tree_add_item(tree, hf_cipsafety_crc_s1, tvb, item_length-base_length+1, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(tree, hf_cipsafety_crc_s2, tvb, item_length-base_length+2, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_cipsafety_crc_s1, tvb, item_length-base_length+1, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_cipsafety_crc_s2, tvb, item_length-base_length+2, 1, ENC_LITTLE_ENDIAN); proto_tree_add_item(tree, hf_cipsafety_timestamp, tvb, item_length-base_length+3, 2, ENC_LITTLE_ENDIAN); - proto_tree_add_item(tree, hf_cipsafety_crc_s1, tvb, item_length-base_length+5, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_cipsafety_crc_s1, tvb, item_length-base_length+5, 1, ENC_LITTLE_ENDIAN); if (multicast) { dissect_mcast_byte(tree, tvb, item_length-6, pinfo); proto_tree_add_item(tree, hf_cipsafety_time_correction, tvb, item_length-5, 2, ENC_LITTLE_ENDIAN); - proto_tree_add_item(tree, hf_cipsafety_mcast_byte2, tvb, item_length-3, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(tree, hf_cipsafety_crc_s3, tvb, item_length-2, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_cipsafety_mcast_byte2, tvb, item_length-3, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_cipsafety_crc_s3, tvb, item_length-2, 2, ENC_LITTLE_ENDIAN); } } else @@ -1380,7 +1524,8 @@ dissect_cip_safety_data( proto_tree *tree, proto_item *item, tvbuff_t *tvb, int if (item_length%2 == 1) { /* Malformed packet */ - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Malformed CIP Safety I/O packet"); + expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, + "Malformed CIP Safety I/O packet"); return; } @@ -1597,198 +1742,744 @@ proto_register_cipsafety(void) * to use in a filter expression */ static hf_register_info hf[] = { - { &hf_cip_reqrsp, { "Request/Response", "cip.rr", FT_UINT8, BASE_HEX, VALS(cip_sc_rr), 0x80, "Request or Response message", HFILL }}, - { &hf_cip_data, { "Data", "cip.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - - { &hf_cipsafety_data, { "Data", "enip.connection_transport_data", FT_BYTES, BASE_NONE, NULL, 0, "Connection Transport Data", HFILL }}, - { &hf_cipsafety_mode_byte, { "Mode Byte", "cipsafety.mode_byte", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_ping_count, { "Ping Count", "cipsafety.mode_byte.ping_count", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_not_tbd, { "Not TBD Bit", "cipsafety.mode_byte.not_tbd", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_tbd_2_copy, { "TBD 2 Bit Copy", "cipsafety.mode_byte.tbd_2_copy", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_not_run_idle, { "Not Run/Idle", "cipsafety.mode_byte.not_run_idle", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_tbd, { "TBD Bit", "cipsafety.mode_byte.tbd", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_tbd_2_bit, { "TBD 2 Bit", "cipsafety.mode_byte.tbd_2_bit", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }}, - { &hf_cipsafety_mode_byte_run_idle, { "Run/Idle", "cipsafety.mode_byte.run_idle", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }}, - { &hf_cipsafety_crc_s1, { "CRC S1", "cipsafety.crc_s1", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_crc_s2, { "CRC S2", "cipsafety.crc_s2", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_crc_s3, { "CRC S3", "cipsafety.crc_s3", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_timestamp, { "Timestamp", "cipsafety.timestamp", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_ack_byte, { "ACK Byte", "cipsafety.ack_byte", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_ack_byte_ping_count_reply, { "Ping Count Reply", "cipsafety.ack_byte.ping_count_reply", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL }}, - { &hf_cipsafety_ack_byte_reserved1, { "Reserved", "cipsafety.ack_byte.reserved1", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }}, - { &hf_cipsafety_ack_byte_ping_response, { "Ping Response", "cipsafety.ack_byte.ping_response", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, - { &hf_cipsafety_ack_byte_reserved2, { "Reserved", "cipsafety.ack_byte.reserved2", FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL }}, - { &hf_cipsafety_ack_byte_parity_even, { "Parity Even", "cipsafety.ack_byte.parity_even", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }}, - { &hf_cipsafety_ack_byte2, { "ACK Byte 2", "cipsafety.ack_byte2", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_consumer_time_value, { "Consumer Time Value", "cipsafety.consumer_time_value", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte, { "MCAST Byte", "cipsafety.mcast_byte", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte_consumer_num, { "Consumer #", "cipsafety.mcast_byte.consumer_num", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte_reserved1, { "Reserved", "cipsafety.mcast_byte.reserved1", FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte_mai, { "Multicast Active/Idle", "cipsafety.mcast_byte.active_idle", FT_BOOLEAN, 8, TFS(&cip_safety_vals_active_idle), 0x20, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte_reserved2, { "Reserved", "cipsafety.mcast_byte.reserved2", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte_parity_even, { "Parity Even", "cipsafety.mcast_byte.parity_even", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }}, - { &hf_cipsafety_mcast_byte2, { "MCAST Byte 2", "cipsafety.mcast_byte2", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_time_correction, { "Time Correction", "cipsafety.time_correction", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_crc_s5_0, { "CRC S5_0", "cipsafety.crc_s5_0", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_crc_s5_1, { "CRC S5_1", "cipsafety.crc_s5_1", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_crc_s5_2, { "CRC S5_2", "cipsafety.crc_s5_2", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cipsafety_complement_data, { "Complement Data", "cipsafety.complement_data", FT_BYTES, BASE_NONE, NULL, 0, "Connection Transport Data", HFILL }}, - - { &hf_cip_sercosiii_link_snn, { "Data", "cipsafety.sercosiii_link.snn", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_communication_cycle_time, { "Communication Cycle Time", "cipsafety.sercosiii_link.communication_cycle_time", FT_INT32, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_interface_status, { "Communication Cycle Time", "cipsafety.sercosiii_link.interface_status", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_error_count_mstps, { "Error Counter MST-P/S", "cipsafety.sercosiii_link.error_count_mstps", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_error_count_p1, { "Error Count Port 1", "cipsafety.sercosiii_link.error_count_p1", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_error_count_p2, { "Error Count Port 2", "cipsafety.sercosiii_link.error_count_p2", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_sercosiii_link_sercos_address, { "SERCOS Address", "cipsafety.sercosiii_link.sercos_address", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - - { &hf_tcpip_snn_timestamp, { "Safety Network Number (Timestamp)", "cip.tcpip.snn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_tcpip_snn_date, { "Safety Network Number (Manual) Date", "cip.tcpip.snn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_tcpip_snn_time, { "Safety Network Number (Manual) Time", "cip.tcpip.snn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, + { &hf_cip_reqrsp, + { "Request/Response", "cip.rr", + FT_UINT8, BASE_HEX, VALS(cip_sc_rr), 0x80, "Request or Response message", HFILL } + }, + { &hf_cip_data, + { "Data", "cip.data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + + { &hf_cipsafety_data, + { "Data", "enip.connection_transport_data", + FT_BYTES, BASE_NONE, NULL, 0, "Connection Transport Data", HFILL } + }, + { &hf_cipsafety_mode_byte, + { "Mode Byte", "cipsafety.mode_byte", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_ping_count, + { "Ping Count", "cipsafety.mode_byte.ping_count", + FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_not_tbd, + { "Not TBD Bit", "cipsafety.mode_byte.not_tbd", + FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_tbd_2_copy, + { "TBD 2 Bit Copy", "cipsafety.mode_byte.tbd_2_copy", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_not_run_idle, + { "Not Run/Idle", "cipsafety.mode_byte.not_run_idle", + FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_tbd, + { "TBD Bit", "cipsafety.mode_byte.tbd", + FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_tbd_2_bit, + { "TBD 2 Bit", "cipsafety.mode_byte.tbd_2_bit", + FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL } + }, + { &hf_cipsafety_mode_byte_run_idle, + { "Run/Idle", "cipsafety.mode_byte.run_idle", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } + }, + { &hf_cipsafety_crc_s1, + { "CRC S1", "cipsafety.crc_s1", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_crc_s2, + { "CRC S2", "cipsafety.crc_s2", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_crc_s3, + { "CRC S3", "cipsafety.crc_s3", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_timestamp, + { "Timestamp", "cipsafety.timestamp", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte, + { "ACK Byte", "cipsafety.ack_byte", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte_ping_count_reply, + { "Ping Count Reply", "cipsafety.ack_byte.ping_count_reply", + FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte_reserved1, + { "Reserved", "cipsafety.ack_byte.reserved1", + FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte_ping_response, + { "Ping Response", "cipsafety.ack_byte.ping_response", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte_reserved2, + { "Reserved", "cipsafety.ack_byte.reserved2", + FT_UINT8, BASE_HEX, NULL, 0x70, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte_parity_even, + { "Parity Even", "cipsafety.ack_byte.parity_even", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } + }, + { &hf_cipsafety_ack_byte2, + { "ACK Byte 2", "cipsafety.ack_byte2", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_consumer_time_value, + { "Consumer Time Value", "cipsafety.consumer_time_value", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte, + { "MCAST Byte", "cipsafety.mcast_byte", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte_consumer_num, + { "Consumer #", "cipsafety.mcast_byte.consumer_num", + FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte_reserved1, + { "Reserved", "cipsafety.mcast_byte.reserved1", + FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte_mai, + { "Multicast Active/Idle", "cipsafety.mcast_byte.active_idle", + FT_BOOLEAN, 8, TFS(&cip_safety_vals_active_idle), 0x20, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte_reserved2, + { "Reserved", "cipsafety.mcast_byte.reserved2", + FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte_parity_even, + { "Parity Even", "cipsafety.mcast_byte.parity_even", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL } + }, + { &hf_cipsafety_mcast_byte2, + { "MCAST Byte 2", "cipsafety.mcast_byte2", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_time_correction, + { "Time Correction", "cipsafety.time_correction", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_crc_s5_0, + { "CRC S5_0", "cipsafety.crc_s5_0", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_crc_s5_1, + { "CRC S5_1", "cipsafety.crc_s5_1", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_crc_s5_2, + { "CRC S5_2", "cipsafety.crc_s5_2", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cipsafety_complement_data, + { "Complement Data", "cipsafety.complement_data", + FT_BYTES, BASE_NONE, NULL, 0, "Connection Transport Data", HFILL } + }, + + { &hf_cip_sercosiii_link_snn, + { "Data", "cipsafety.sercosiii_link.snn", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_communication_cycle_time, + { "Communication Cycle Time", "cipsafety.sercosiii_link.communication_cycle_time", + FT_INT32, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_interface_status, + { "Communication Cycle Time", "cipsafety.sercosiii_link.interface_status", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_error_count_mstps, + { "Error Counter MST-P/S", "cipsafety.sercosiii_link.error_count_mstps", + FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_error_count_p1, + { "Error Count Port 1", "cipsafety.sercosiii_link.error_count_p1", + FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_error_count_p2, + { "Error Count Port 2", "cipsafety.sercosiii_link.error_count_p2", + FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_sercosiii_link_sercos_address, + { "SERCOS Address", "cipsafety.sercosiii_link.sercos_address", + FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + + { &hf_tcpip_snn_timestamp, + { "Safety Network Number (Timestamp)", "cip.tcpip.snn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_tcpip_snn_date, + { "Safety Network Number (Manual) Date", "cip.tcpip.snn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_tcpip_snn_time, + { "Safety Network Number (Manual) Time", "cip.tcpip.snn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, }; static hf_register_info hf_ssupervisor[] = { - { &hf_cip_ssupervisor_sc, { "Service", "cipsafety.ssupervisor.sc", FT_UINT8, BASE_HEX, VALS(cip_sc_vals_ssupervisor), 0x7F, NULL, HFILL }}, - { &hf_cip_ssupervisor_recover_data, { "Data", "cipsafety.ssupervisor.recover.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_perform_diag_data, { "Data", "cipsafety.ssupervisor.perform_diag.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_password, { "Password", "cipsafety.ssupervisor.configure_request.password", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_tunid, { "Target UNID", "cipsafety.ssupervisor.configure_request.tunid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_tunid_ssn_timestamp, { "TUNID SSN Timestamp", "cipsafety.ssupervisor.configure_request.tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_tunid_ssn_date, { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_request.tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_tunid_ssn_time, { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_request.tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_tunid_macid, { "MAC ID", "cipsafety.ssupervisor.configure_request.tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_ounid, { "Originator UNID", "cipsafety.ssupervisor.configure_request.ounid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_ounid_ssn_timestamp, { "OUNID SSN Timestamp", "cipsafety.ssupervisor.configure_request.ounid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_ounid_ssn_date, { "OUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_request.ounid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_ounid_ssn_time, { "OUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_request.ounid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_request_ounid_macid, { "MAC ID", "cipsafety.ssupervisor.configure_request.ounid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_validate_configuration_sccrc, { "SCCRC", "cipsafety.ssupervisor.validate_configuration.sccrc", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_validate_configuration_scts_timestamp, { "SCTS (Timestamp)", "cipsafety.ssupervisor.validate_configuration.scts.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_validate_configuration_scts_date, { "SCTS (Manual) Date", "cipsafety.ssupervisor.validate_configuration.scts.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_validate_configuration_scts_time, { "SCTS (Manual) Time", "cipsafety.ssupervisor.validate_configuration.scts.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_validate_configuration_ext_error, { "Extended Error", "cipsafety.ssupervisor.validate_configuration.ext_error", FT_UINT16, BASE_DEC, VALS(cip_ssupervisor_validate_configuration_ext_error_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_set_password_current_password, { "Current Password", "cipsafety.ssupervisor.set_password.current_pass", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_set_password_new_password, { "New Password", "cipsafety.ssupervisor.set_password.new_pass", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_value, { "Lock Value", "cipsafety.ssupervisor.configure_lock.lock", FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_lock_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_password, { "Password", "cipsafety.ssupervisor.configure_lock.password", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_tunid, { "Target UNID", "cipsafety.ssupervisor.configure_lock.tunid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_tunid_ssn_timestamp, { "TUNID SSN Timestamp", "cipsafety.ssupervisor.configure_lock.tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_tunid_ssn_date, { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_lock.tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_tunid_ssn_time, { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_lock.tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configure_lock_tunid_macid, { "MAC ID", "cipsafety.ssupervisor.configure_lock.tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_mode_change_value, { "Value", "cipsafety.ssupervisor.mode_change.value", FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_change_mode_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_mode_change_password, { "Password", "cipsafety.ssupervisor.mode_change.password", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_type, { "Reset Type", "cipsafety.ssupervisor.reset.type", FT_UINT8, BASE_DEC, VALS(cip_reset_type_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_password, { "Password", "cipsafety.ssupervisor.reset.password", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_tunid, { "Target UNID", "cipsafety.ssupervisor.reset.tunid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_timestamp, { "TUNID SSN Timestamp", "cipsafety.ssupervisor.reset.tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_date, { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.reset.tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_time, { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.reset.tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_tunid_macid, { "MAC ID", "cipsafety.ssupervisor.reset.tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap, { "Attribute Bit Map", "cipsafety.ssupervisor.reset.attr_bitmap", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_macid, { "Preserve MacID", "cipsafety.ssupervisor.reset.attr_bitmap.macid", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_baudrate, { "Preserve Baud Rate", "cipsafety.ssupervisor.reset.attr_bitmap.baudrate", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_tunid, { "Preserve TUNID", "cipsafety.ssupervisor.reset.attr_bitmap.tunid", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_password, { "Preserve Password", "cipsafety.ssupervisor.reset.attr_bitmap.password", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_cfunid, { "Preserve CFUNID", "cipsafety.ssupervisor.reset.attr_bitmap.cfunid", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_ocpunid, { "Preserve OPCUNID", "cipsafety.ssupervisor.reset.attr_bitmap.ocpunid", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x20, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_reserved, { "Reserved", "cipsafety.ssupervisor.reset.attr_bitmap.reserved", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_attr_bitmap_extended, { "Use Extended Map", "cipsafety.ssupervisor.reset.attr_bitmap.extended", FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x80, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_password_data_size, { "Data Size", "cipsafety.ssupervisor.reset_password.data_size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_reset_password_data, { "Password Data", "cipsafety.ssupervisor.reset_password.password_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_propose_tunid_tunid, { "Target UNID", "cipsafety.ssupervisor.propose_tunid.tunid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_timestamp, { "TUNID SSN Timestamp", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_date, { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_time, { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_propose_tunid_tunid_macid, { "MAC ID", "cipsafety.ssupervisor.propose_tunid.tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_apply_tunid_tunid, { "Target UNID", "cipsafety.ssupervisor.apply_tunid.tunid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_timestamp, { "TUNID SSN Timestamp", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_date, { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_time, { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_apply_tunid_tunid_macid, { "MAC ID", "cipsafety.ssupervisor.apply_tunid.tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_class_subclass, { "Subclass", "cipsafety.ssupervisor.class_subclass", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_num_attr, { "Number of Attributes", "cipsafety.ssupervisor.num_attr", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_attr_list, { "Attributes List Item", "cipsafety.ssupervisor.attr_item", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_manufacture_name, { "Manufacturer Name", "cipsafety.ssupervisor.manufacture_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_manufacture_model_number, { "Manufacturer Model Number", "cipsafety.ssupervisor.manufacture_model_number", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_sw_rev_level, { "Software Revision Level", "cipsafety.ssupervisor.sw_rev_level", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_hw_rev_level, { "Hardware Revision Level", "cipsafety.ssupervisor.hw_rev_level", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_manufacture_serial_number, { "Manufacturer Serial Number", "cipsafety.ssupervisor.manufacture_serial_number", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_device_config, { "Device Configuration", "cipsafety.ssupervisor.device_config", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_device_status, { "Device Status", "cipsafety.ssupervisor.device_status", FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_device_status_type_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_status, { "Exception Status", "cipsafety.ssupervisor.exception_status", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_ced_size, { "Common Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.ced.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_ced_detail, { "Common Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.ced.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_ded_size, { "Device Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.ded.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_ded_detail, { "Device Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.ded.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_med_size, { "Manufacturer Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.med.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_alarm_med_detail, { "Manufacturer Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.med.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_ced_size, { "Common Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.ced.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_ced_detail, { "Common Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.ced.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_ded_size, { "Device Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.ded.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_ded_detail, { "Device Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.ded.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_med_size, { "Manufacturer Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.med.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_exception_detail_warning_med_detail, { "Manufacturer Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.med.detail", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_alarm_enable, { "Exception Detail Alarm", "cipsafety.ssupervisor.alarm_enable", FT_BOOLEAN, BASE_NONE, TFS(&tfs_true_false), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_warning_enable, { "Exception Detail Warning", "cipsafety.ssupervisor.warning_enable", FT_BOOLEAN, BASE_NONE, TFS(&tfs_true_false), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_time, { "Time", "cipsafety.ssupervisor.time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_clock_power_cycle_behavior, { "Clock Power Cycle Behavior", "cipsafety.ssupervisor.clock_power_cycle_behavior", FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_clock_power_cycle_type_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_last_maintenance_date, { "Last Maintenance Date", "cipsafety.ssupervisor.last_maintenance_date", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_next_scheduled_maintenance_date, { "Next Scheduled Maintenance Date", "cipsafety.ssupervisor.next_scheduled_maintenance_date", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_scheduled_maintenance_expiration_timer, { "Scheduled Maintenance Expiration Timer", "cipsafety.ssupervisor.scheduled_maintenance_expiration_timer", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_scheduled_maintenance_expiration_warning_enable, { "Scheduled Maintenance Expiration Warning Enable", "cipsafety.ssupervisor.scheduled_maintenance_expiration_warning", FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_run_hours, { "Run Hours", "cipsafety.ssupervisor.run_hours", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configuration_lock, { "Configuration Lock", "cipsafety.ssupervisor.configuration_lock", FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_lock_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configuration_unid_ssn_timestamp, { "Configuration UNID SSN Timestamp", "cipsafety.ssupervisor.configuration_unid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configuration_unid_ssn_date, { "Configuration UNID SSN (Manual) Date", "cipsafety.ssupervisor.configuration_unid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configuration_unid_ssn_time, { "Configuration UNID SSN (Manual) Time", "cipsafety.ssupervisor.configuration_unid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_configuration_unid_macid, { "Configuration UNID MAC ID", "cipsafety.ssupervisor.configuration_unid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_safety_configuration_id_ssn_timestamp, { "Safety Configuration ID SSN Timestamp", "cipsafety.ssupervisor.safety_configuration_id.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_safety_configuration_id_ssn_date, { "Safety Configuration ID SSN (Manual) Date", "cipsafety.ssupervisor.safety_configuration_id.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_safety_configuration_id_ssn_time, { "Safety Configuration ID SSN (Manual) Time", "cipsafety.ssupervisor.safety_configuration_id.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_safety_configuration_id_macid, { "Safety Configuration ID MAC ID", "cipsafety.ssupervisor.safety_configuration_id.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_target_unid_ssn_timestamp, { "Target UNID SSN Timestamp", "cipsafety.ssupervisor.target_unid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_target_unid_ssn_date, { "Target UNID SSN (Manual) Date", "cipsafety.ssupervisor.target_unid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_target_unid_ssn_time, { "Target UNID SSN (Manual) Time", "cipsafety.ssupervisor.target_unid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_target_unid_macid, { "Target UNID MAC ID", "cipsafety.ssupervisor.target_unid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_cp_owners_num_entries, { "Number of Array Entries", "cipsafety.ssupervisor.cp_owners.num_entries", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_timestamp, { "OCPUNID SSN Timestamp", "cipsafety.ssupervisor.cp_owners.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_date, { "OCPUNID SSN (Manual) Date", "cipsafety.ssupervisor.cp_owners.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_time, { "OCPUNID SSN (Manual) Time", "cipsafety.ssupervisor.cp_owners.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_output_cp_owners_ocpunid_macid, { "OCPUNID MAC ID", "cipsafety.ssupervisor.cp_owners.ocpunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_cp_owners_app_path_size, { "EPATH Size", "cipsafety.ssupervisor.cp_owners.epath_size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_proposed_tunid_ssn_timestamp, { "Proposed TUNID SSN Timestamp", "cipsafety.ssupervisor.proposed_tunid.ssn.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_proposed_tunid_ssn_date, { "Proposed TUNID SSN (Manual) Date", "cipsafety.ssupervisor.proposed_tunid.ssn.date", FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_proposed_tunid_ssn_time, { "Proposed TUNID SSN (Manual) Time", "cipsafety.ssupervisor.proposed_tunid.ssn.time", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_proposed_tunid_macid, { "Proposed TUNID MAC ID", "cipsafety.ssupervisor.proposed_tunid.macid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_ssupervisor_instance_subclass, { "Subclass", "cipsafety.ssupervisor.instance_subclass", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }} + { &hf_cip_ssupervisor_sc, + { "Service", "cipsafety.ssupervisor.sc", + FT_UINT8, BASE_HEX, VALS(cip_sc_vals_ssupervisor), 0x7F, NULL, HFILL } + }, + { &hf_cip_ssupervisor_recover_data, + { "Data", "cipsafety.ssupervisor.recover.data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_perform_diag_data, + { "Data", "cipsafety.ssupervisor.perform_diag.data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_password, + { "Password", "cipsafety.ssupervisor.configure_request.password", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_tunid, + { "Target UNID", "cipsafety.ssupervisor.configure_request.tunid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_tunid_ssn_timestamp, + { "TUNID SSN Timestamp", "cipsafety.ssupervisor.configure_request.tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_tunid_ssn_date, + { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_request.tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_tunid_ssn_time, + { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_request.tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_tunid_macid, + { "MAC ID", "cipsafety.ssupervisor.configure_request.tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_ounid, + { "Originator UNID", "cipsafety.ssupervisor.configure_request.ounid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_ounid_ssn_timestamp, + { "OUNID SSN Timestamp", "cipsafety.ssupervisor.configure_request.ounid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_ounid_ssn_date, + { "OUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_request.ounid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_ounid_ssn_time, + { "OUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_request.ounid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_request_ounid_macid, + { "MAC ID", "cipsafety.ssupervisor.configure_request.ounid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_validate_configuration_sccrc, + { "SCCRC", "cipsafety.ssupervisor.validate_configuration.sccrc", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_validate_configuration_scts_timestamp, + { "SCTS (Timestamp)", "cipsafety.ssupervisor.validate_configuration.scts.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_validate_configuration_scts_date, + { "SCTS (Manual) Date", "cipsafety.ssupervisor.validate_configuration.scts.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_validate_configuration_scts_time, + { "SCTS (Manual) Time", "cipsafety.ssupervisor.validate_configuration.scts.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_validate_configuration_ext_error, + { "Extended Error", "cipsafety.ssupervisor.validate_configuration.ext_error", + FT_UINT16, BASE_DEC, VALS(cip_ssupervisor_validate_configuration_ext_error_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_set_password_current_password, + { "Current Password", "cipsafety.ssupervisor.set_password.current_pass", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_set_password_new_password, + { "New Password", "cipsafety.ssupervisor.set_password.new_pass", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_value, + { "Lock Value", "cipsafety.ssupervisor.configure_lock.lock", + FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_lock_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_password, + { "Password", "cipsafety.ssupervisor.configure_lock.password", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_tunid, + { "Target UNID", "cipsafety.ssupervisor.configure_lock.tunid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_tunid_ssn_timestamp, + { "TUNID SSN Timestamp", "cipsafety.ssupervisor.configure_lock.tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_tunid_ssn_date, + { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.configure_lock.tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_tunid_ssn_time, + { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.configure_lock.tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configure_lock_tunid_macid, + { "MAC ID", "cipsafety.ssupervisor.configure_lock.tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_mode_change_value, + { "Value", "cipsafety.ssupervisor.mode_change.value", + FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_change_mode_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_mode_change_password, + { "Password", "cipsafety.ssupervisor.mode_change.password", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_type, + { "Reset Type", "cipsafety.ssupervisor.reset.type", + FT_UINT8, BASE_DEC, VALS(cip_reset_type_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_password, + { "Password", "cipsafety.ssupervisor.reset.password", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_tunid, + { "Target UNID", "cipsafety.ssupervisor.reset.tunid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_timestamp, + { "TUNID SSN Timestamp", "cipsafety.ssupervisor.reset.tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_date, + { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.reset.tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_tunid_tunid_ssn_time, + { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.reset.tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_tunid_macid, + { "MAC ID", "cipsafety.ssupervisor.reset.tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap, + { "Attribute Bit Map", "cipsafety.ssupervisor.reset.attr_bitmap", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_macid, + { "Preserve MacID", "cipsafety.ssupervisor.reset.attr_bitmap.macid", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_baudrate, + { "Preserve Baud Rate", "cipsafety.ssupervisor.reset.attr_bitmap.baudrate", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_tunid, + { "Preserve TUNID", "cipsafety.ssupervisor.reset.attr_bitmap.tunid", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_password, + { "Preserve Password", "cipsafety.ssupervisor.reset.attr_bitmap.password", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_cfunid, + { "Preserve CFUNID", "cipsafety.ssupervisor.reset.attr_bitmap.cfunid", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_ocpunid, + { "Preserve OPCUNID", "cipsafety.ssupervisor.reset.attr_bitmap.ocpunid", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x20, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_reserved, + { "Reserved", "cipsafety.ssupervisor.reset.attr_bitmap.reserved", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_attr_bitmap_extended, + { "Use Extended Map", "cipsafety.ssupervisor.reset.attr_bitmap.extended", + FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x80, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_password_data_size, + { "Data Size", "cipsafety.ssupervisor.reset_password.data_size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_reset_password_data, + { "Password Data", "cipsafety.ssupervisor.reset_password.password_data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_propose_tunid_tunid, + { "Target UNID", "cipsafety.ssupervisor.propose_tunid.tunid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_timestamp, + { "TUNID SSN Timestamp", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_date, + { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_propose_tunid_tunid_ssn_time, + { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.propose_tunid.tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_propose_tunid_tunid_macid, + { "MAC ID", "cipsafety.ssupervisor.propose_tunid.tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_apply_tunid_tunid, + { "Target UNID", "cipsafety.ssupervisor.apply_tunid.tunid", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_timestamp, + { "TUNID SSN Timestamp", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_date, + { "TUNID SSN (Manual) Date", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_apply_tunid_tunid_ssn_time, + { "TUNID SSN (Manual) Time", "cipsafety.ssupervisor.apply_tunid.tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_apply_tunid_tunid_macid, + { "MAC ID", "cipsafety.ssupervisor.apply_tunid.tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_class_subclass, + { "Subclass", "cipsafety.ssupervisor.class_subclass", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_num_attr, + { "Number of Attributes", "cipsafety.ssupervisor.num_attr", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_attr_list, + { "Attributes List Item", "cipsafety.ssupervisor.attr_item", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_manufacture_name, + { "Manufacturer Name", "cipsafety.ssupervisor.manufacture_name", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_manufacture_model_number, + { "Manufacturer Model Number", "cipsafety.ssupervisor.manufacture_model_number", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_sw_rev_level, + { "Software Revision Level", "cipsafety.ssupervisor.sw_rev_level", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_hw_rev_level, + { "Hardware Revision Level", "cipsafety.ssupervisor.hw_rev_level", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_manufacture_serial_number, + { "Manufacturer Serial Number", "cipsafety.ssupervisor.manufacture_serial_number", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_device_config, + { "Device Configuration", "cipsafety.ssupervisor.device_config", + FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_device_status, + { "Device Status", "cipsafety.ssupervisor.device_status", + FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_device_status_type_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_status, + { "Exception Status", "cipsafety.ssupervisor.exception_status", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_ced_size, + { "Common Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.ced.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_ced_detail, + { "Common Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.ced.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_ded_size, + { "Device Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.ded.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_ded_detail, + { "Device Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.ded.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_med_size, + { "Manufacturer Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_alarm.med.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_alarm_med_detail, + { "Manufacturer Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_alarm.med.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_ced_size, + { "Common Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.ced.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_ced_detail, + { "Common Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.ced.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_ded_size, + { "Device Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.ded.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_ded_detail, + { "Device Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.ded.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_med_size, + { "Manufacturer Exeception Detail Size", "cipsafety.ssupervisor.exception_detail_warning.med.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_exception_detail_warning_med_detail, + { "Manufacturer Exeception Detail Data", "cipsafety.ssupervisor.exception_detail_warning.med.detail", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_alarm_enable, + { "Exception Detail Alarm", "cipsafety.ssupervisor.alarm_enable", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_true_false), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_warning_enable, + { "Exception Detail Warning", "cipsafety.ssupervisor.warning_enable", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_true_false), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_time, + { "Time", "cipsafety.ssupervisor.time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_clock_power_cycle_behavior, + { "Clock Power Cycle Behavior", "cipsafety.ssupervisor.clock_power_cycle_behavior", + FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_clock_power_cycle_type_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_last_maintenance_date, + { "Last Maintenance Date", "cipsafety.ssupervisor.last_maintenance_date", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_next_scheduled_maintenance_date, + { "Next Scheduled Maintenance Date", "cipsafety.ssupervisor.next_scheduled_maintenance_date", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_scheduled_maintenance_expiration_timer, + { "Scheduled Maintenance Expiration Timer", "cipsafety.ssupervisor.scheduled_maintenance_expiration_timer", + FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_scheduled_maintenance_expiration_warning_enable, + { "Scheduled Maintenance Expiration Warning Enable", "cipsafety.ssupervisor.scheduled_maintenance_expiration_warning", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_run_hours, + { "Run Hours", "cipsafety.ssupervisor.run_hours", + FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configuration_lock, + { "Configuration Lock", "cipsafety.ssupervisor.configuration_lock", + FT_UINT8, BASE_DEC, VALS(cip_ssupervisor_lock_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configuration_unid_ssn_timestamp, + { "Configuration UNID SSN Timestamp", "cipsafety.ssupervisor.configuration_unid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configuration_unid_ssn_date, + { "Configuration UNID SSN (Manual) Date", "cipsafety.ssupervisor.configuration_unid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configuration_unid_ssn_time, + { "Configuration UNID SSN (Manual) Time", "cipsafety.ssupervisor.configuration_unid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_configuration_unid_macid, + { "Configuration UNID MAC ID", "cipsafety.ssupervisor.configuration_unid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_safety_configuration_id_ssn_timestamp, + { "Safety Configuration ID SSN Timestamp", "cipsafety.ssupervisor.safety_configuration_id.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_safety_configuration_id_ssn_date, + { "Safety Configuration ID SSN (Manual) Date", "cipsafety.ssupervisor.safety_configuration_id.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_safety_configuration_id_ssn_time, + { "Safety Configuration ID SSN (Manual) Time", "cipsafety.ssupervisor.safety_configuration_id.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_safety_configuration_id_macid, + { "Safety Configuration ID MAC ID", "cipsafety.ssupervisor.safety_configuration_id.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_target_unid_ssn_timestamp, + { "Target UNID SSN Timestamp", "cipsafety.ssupervisor.target_unid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_target_unid_ssn_date, + { "Target UNID SSN (Manual) Date", "cipsafety.ssupervisor.target_unid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_target_unid_ssn_time, + { "Target UNID SSN (Manual) Time", "cipsafety.ssupervisor.target_unid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_target_unid_macid, + { "Target UNID MAC ID", "cipsafety.ssupervisor.target_unid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_cp_owners_num_entries, + { "Number of Array Entries", "cipsafety.ssupervisor.cp_owners.num_entries", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_timestamp, + { "OCPUNID SSN Timestamp", "cipsafety.ssupervisor.cp_owners.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_date, + { "OCPUNID SSN (Manual) Date", "cipsafety.ssupervisor.cp_owners.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_output_cp_owners_ocpunid_ssn_time, + { "OCPUNID SSN (Manual) Time", "cipsafety.ssupervisor.cp_owners.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_output_cp_owners_ocpunid_macid, + { "OCPUNID MAC ID", "cipsafety.ssupervisor.cp_owners.ocpunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_cp_owners_app_path_size, + { "EPATH Size", "cipsafety.ssupervisor.cp_owners.epath_size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_proposed_tunid_ssn_timestamp, + { "Proposed TUNID SSN Timestamp", "cipsafety.ssupervisor.proposed_tunid.ssn.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_proposed_tunid_ssn_date, + { "Proposed TUNID SSN (Manual) Date", "cipsafety.ssupervisor.proposed_tunid.ssn.date", + FT_UINT16, BASE_HEX, VALS(cipsafety_ssn_date_vals), 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_proposed_tunid_ssn_time, + { "Proposed TUNID SSN (Manual) Time", "cipsafety.ssupervisor.proposed_tunid.ssn.time", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_proposed_tunid_macid, + { "Proposed TUNID MAC ID", "cipsafety.ssupervisor.proposed_tunid.macid", + FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_ssupervisor_instance_subclass, + { "Subclass", "cipsafety.ssupervisor.instance_subclass", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + } }; static hf_register_info hf_svalidator[] = { - { &hf_cip_svalidator_sc, { "Service", "cipsafety.svalidator.sc", FT_UINT8, BASE_HEX, VALS(cip_sc_vals_svalidator), 0x7F, NULL, HFILL }}, - - { &hf_cip_svalidator_sconn_fault_count, { "Safety Connection Fault Count", "cipsafety.svalidator.sconn_fault_count", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_state, { "Safety Validator State", "cipsafety.svalidator.state", FT_UINT8, BASE_DEC, VALS(cip_svalidator_state_vals), 0, NULL, HFILL }}, - { &hf_cip_svalidator_type, { "Safety Validator Type", "cipsafety.svalidator.type", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_type_pc, { "Producer/Consumer", "cipsafety.svalidator.type.pc", FT_UINT8, BASE_HEX, VALS(cip_svalidator_type_pc_vals), 0x80, NULL, HFILL }}, - { &hf_cip_svalidator_type_conn_type, { "Safety Connection Type", "cipsafety.svalidator.type.conn_type", FT_UINT8, BASE_DEC, VALS(cip_svalidator_type_conn_type_vals), 0x7F, NULL, HFILL }}, - { &hf_cip_svalidator_ping_eri, { "Ping Interval EPI Multipler", "cipsafety.svalidator.ping_eri", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_time_coord_msg_min_mult_size, { "Time Coord Msg Min Multiplier Size", "cipsafety.svalidator.time_coord_msg_min_mult.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_time_coord_msg_min_mult_item, { "Time Coord Msg Min Multiplier Item", "cipsafety.svalidator.time_coord_msg_min_mult.item", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_network_time_multiplier_size, { "Network Time Expectation Multipler Size", "cipsafety.svalidator.network_time_multiplier.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_network_time_multiplier_item, { "Network Time Expectation Multipler Item", "cipsafety.svalidator.network_time_multiplier.item", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_timeout_multiplier_size, { "Timeout Multiplier Size", "cipsafety.svalidator.timeout_multiplier.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_timeout_multiplier_item, { "Timeout Multiplier Item", "cipsafety.svalidator.timeout_multiplier.item", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_max_consumer_num, { "Max Consumer Number", "cipsafety.svalidator.max_consumer_num", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_data_conn_inst, { "Data Connection Instance", "cipsafety.svalidator.data_conn_inst", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_coordination_conn_inst_size, { "Coordination Connection Instance Size", "cipsafety.svalidator.coordination_conn_inst.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_coordination_conn_inst_item, { "Coordination Connection Instance Item", "cipsafety.svalidator.coordination_conn_inst.item", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_correction_conn_inst, { "Correction Connection Instance", "cipsafety.svalidator.correction_conn_inst", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_cco_binding, { "CCO Binding", "cipsafety.svalidator.cco_binding", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_max_data_age, { "Max Data Age", "cipsafety.svalidator.max_data_age", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_error_code, { "Error Code", "cipsafety.svalidator.error_code", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_prod_cons_fault_count_size, { "Producer/Consumer Counter Size", "cipsafety.svalidator.prod_cons_fault_count.size", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_cip_svalidator_prod_cons_fault_count_item, { "Producer/Consumer Counter Item", "cipsafety.svalidator.prod_cons_fault_count.item", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }} + { &hf_cip_svalidator_sc, + { "Service", "cipsafety.svalidator.sc", + FT_UINT8, BASE_HEX, VALS(cip_sc_vals_svalidator), 0x7F, NULL, HFILL } + }, + + { &hf_cip_svalidator_sconn_fault_count, + { "Safety Connection Fault Count", "cipsafety.svalidator.sconn_fault_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_state, + { "Safety Validator State", "cipsafety.svalidator.state", + FT_UINT8, BASE_DEC, VALS(cip_svalidator_state_vals), 0, NULL, HFILL } + }, + { &hf_cip_svalidator_type, + { "Safety Validator Type", "cipsafety.svalidator.type", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_type_pc, + { "Producer/Consumer", "cipsafety.svalidator.type.pc", + FT_UINT8, BASE_HEX, VALS(cip_svalidator_type_pc_vals), 0x80, NULL, HFILL } + }, + { &hf_cip_svalidator_type_conn_type, + { "Safety Connection Type", "cipsafety.svalidator.type.conn_type", + FT_UINT8, BASE_DEC, VALS(cip_svalidator_type_conn_type_vals), 0x7F, NULL, HFILL } + }, + { &hf_cip_svalidator_ping_eri, + { "Ping Interval EPI Multipler", "cipsafety.svalidator.ping_eri", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_time_coord_msg_min_mult_size, + { "Time Coord Msg Min Multiplier Size", "cipsafety.svalidator.time_coord_msg_min_mult.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_time_coord_msg_min_mult_item, + { "Time Coord Msg Min Multiplier Item", "cipsafety.svalidator.time_coord_msg_min_mult.item", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_network_time_multiplier_size, + { "Network Time Expectation Multipler Size", "cipsafety.svalidator.network_time_multiplier.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_network_time_multiplier_item, + { "Network Time Expectation Multipler Item", "cipsafety.svalidator.network_time_multiplier.item", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_timeout_multiplier_size, + { "Timeout Multiplier Size", "cipsafety.svalidator.timeout_multiplier.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_timeout_multiplier_item, + { "Timeout Multiplier Item", "cipsafety.svalidator.timeout_multiplier.item", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_max_consumer_num, + { "Max Consumer Number", "cipsafety.svalidator.max_consumer_num", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_data_conn_inst, + { "Data Connection Instance", "cipsafety.svalidator.data_conn_inst", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_coordination_conn_inst_size, + { "Coordination Connection Instance Size", "cipsafety.svalidator.coordination_conn_inst.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_coordination_conn_inst_item, + { "Coordination Connection Instance Item", "cipsafety.svalidator.coordination_conn_inst.item", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_correction_conn_inst, + { "Correction Connection Instance", "cipsafety.svalidator.correction_conn_inst", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_cco_binding, + { "CCO Binding", "cipsafety.svalidator.cco_binding", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_max_data_age, + { "Max Data Age", "cipsafety.svalidator.max_data_age", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_error_code, + { "Error Code", "cipsafety.svalidator.error_code", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_prod_cons_fault_count_size, + { "Producer/Consumer Counter Size", "cipsafety.svalidator.prod_cons_fault_count.size", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + }, + { &hf_cip_svalidator_prod_cons_fault_count_item, + { "Producer/Consumer Counter Item", "cipsafety.svalidator.prod_cons_fault_count.item", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL } + } }; static gint *ett[] = { |