diff options
Diffstat (limited to 'plugins/epan/profinet/packet-dcerpc-pn-io.c')
-rw-r--r-- | plugins/epan/profinet/packet-dcerpc-pn-io.c | 5027 |
1 files changed, 3989 insertions, 1038 deletions
diff --git a/plugins/epan/profinet/packet-dcerpc-pn-io.c b/plugins/epan/profinet/packet-dcerpc-pn-io.c index a378a2c0a4..6ce81e760e 100644 --- a/plugins/epan/profinet/packet-dcerpc-pn-io.c +++ b/plugins/epan/profinet/packet-dcerpc-pn-io.c @@ -82,752 +82,890 @@ void proto_reg_handoff_pn_io(void); #define PN_INPUT_CR 1 /* PROFINET Input Connect Request value */ #define PN_INPUT_DATADESCRITPION 1 /* PROFINET Input Data Description value */ - -static int proto_pn_io = -1; -static int proto_pn_io_device = -1; -static int proto_pn_io_controller = -1; -static int proto_pn_io_supervisor = -1; -static int proto_pn_io_parameterserver = -1; -static int proto_pn_io_implicitar = -1; -int proto_pn_io_apdu_status = -1; - -static int hf_pn_io_opnum = -1; -static int hf_pn_io_reserved16 = -1; - -static int hf_pn_io_array = -1; -static int hf_pn_io_args_max = -1; -static int hf_pn_io_args_len = -1; -static int hf_pn_io_array_max_count = -1; -static int hf_pn_io_array_offset = -1; -static int hf_pn_io_array_act_count = -1; - -static int hf_pn_io_ar_type = -1; -static int hf_pn_io_artype_req = -1; -static int hf_pn_io_cminitiator_macadd = -1; -static int hf_pn_io_cminitiator_objectuuid = -1; -static int hf_pn_io_parameter_server_objectuuid = -1; -static int hf_pn_io_ar_data = -1; -static int hf_pn_io_ar_properties = -1; -static int hf_pn_io_ar_properties_state = -1; -static int hf_pn_io_ar_properties_supervisor_takeover_allowed = -1; -static int hf_pn_io_ar_properties_parameterization_server = -1; +#define PA_PROFILE_API 0x9700u +#define PA_PROFILE_DAP_MASK 0xFFFF0000u +#define PA_PROFILE_DAP_IDENT 0x00FD0000u + +#define PA_PROFILE_BLOCK_DAP 0u +#define PA_PROFILE_BLOCK_PB 1u +#define PA_PROFILE_BLOCK_FB 2u +#define PA_PROFILE_BLOCK_TB 3u + +#define PA_PROFILE_TB_PARENT_PRESSURE 1u +#define PA_PROFILE_TB_PARENT_TEMPERATURE 2u +#define PA_PROFILE_TB_PARENT_FLOW 3u +#define PA_PROFILE_TB_PARENT_LEVEL 1u +#define PA_PROFILE_TB_PARENT_ACTUATOR 1u +#define PA_PROFILE_TB_PARENT_DISCRETE_IO 1u +#define PA_PROFILE_TB_PARENT_LIQUID_ANALYZER 1u +#define PA_PROFILE_TB_PARENT_GAS_ANALYZER 1u +#define PA_PROFILE_TB_PARENT_ENUMERATED_IO 1u +#define PA_PROFILE_TB_PARENT_BINARY_IO 1u + + + +static int proto_pn_io; +static int proto_pn_io_device; +static int proto_pn_io_controller; +static int proto_pn_io_supervisor; +static int proto_pn_io_parameterserver; +static int proto_pn_io_implicitar; +int proto_pn_io_apdu_status; +int proto_pn_io_time_aware_status; + +static int hf_pn_io_opnum; +static int hf_pn_io_reserved16; + +static int hf_pn_io_array; +static int hf_pn_io_args_max; +static int hf_pn_io_args_len; +static int hf_pn_io_array_max_count; +static int hf_pn_io_array_offset; +static int hf_pn_io_array_act_count; + +static int hf_pn_io_ar_type; +static int hf_pn_io_artype_req; +static int hf_pn_io_cminitiator_macadd; +static int hf_pn_io_cminitiator_objectuuid; +static int hf_pn_io_parameter_server_objectuuid; +static int hf_pn_io_ar_data; +static int hf_pn_io_ar_properties; +static int hf_pn_io_ar_properties_state; +static int hf_pn_io_ar_properties_supervisor_takeover_allowed; +static int hf_pn_io_ar_properties_parameterization_server; /* removed within 2.3 -static int hf_pn_io_ar_properties_data_rate = -1; +static int hf_pn_io_ar_properties_data_rate; */ -static int hf_pn_io_ar_properties_reserved_1 = -1; -static int hf_pn_io_ar_properties_device_access = -1; -static int hf_pn_io_ar_properties_companion_ar = -1; -static int hf_pn_io_ar_properties_achnowledge_companion_ar = -1; -static int hf_pn_io_ar_properties_reserved = -1; -static int hf_pn_io_ar_properties_combined_object_container_with_legacy_startupmode = -1; -static int hf_pn_io_ar_properties_combined_object_container_with_advanced_startupmode = -1; -static int hf_pn_io_ar_properties_pull_module_alarm_allowed = -1; - -static int hf_pn_RedundancyInfo = -1; -static int hf_pn_RedundancyInfo_reserved = -1; -static int hf_pn_io_number_of_ARDATAInfo = -1; - -static int hf_pn_io_cminitiator_activitytimeoutfactor = -1; -static int hf_pn_io_cminitiator_udprtport = -1; -static int hf_pn_io_station_name_length = -1; -static int hf_pn_io_cminitiator_station_name = -1; -/* static int hf_pn_io_responder_station_name = -1; */ -static int hf_pn_io_arproperties_StartupMode = -1; - -static int hf_pn_io_parameter_server_station_name = -1; - -static int hf_pn_io_cmresponder_macadd = -1; -static int hf_pn_io_cmresponder_udprtport = -1; - -static int hf_pn_io_number_of_iocrs = -1; -static int hf_pn_io_iocr_tree = -1; -static int hf_pn_io_iocr_type = -1; -static int hf_pn_io_iocr_reference = -1; -static int hf_pn_io_iocr_SubframeOffset = -1; -static int hf_pn_io_iocr_SubframeData =-1; -/* static int hf_pn_io_iocr_txports_port = -1; */ -/* static int hf_pn_io_iocr_txports_redundantport = -1; */ -static int hf_pn_io_sr_properties_Reserved_1 = -1; -static int hf_pn_io_sr_properties_Mode = -1; -static int hf_pn_io_sr_properties_Reserved_2 = -1; -static int hf_pn_io_sr_properties_Reserved_3 = -1; -static int hf_pn_io_RedundancyDataHoldFactor = -1; -static int hf_pn_io_sr_properties = -1; -static int hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_0 = -1; -static int hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_1 = -1; - -static int hf_pn_io_arvendor_strucidentifier_if0_low = -1; -static int hf_pn_io_arvendor_strucidentifier_if0_high = -1; -static int hf_pn_io_arvendor_strucidentifier_if0_is8000= -1; -static int hf_pn_io_arvendor_strucidentifier_not0 = -1; - -static int hf_pn_io_lt = -1; -static int hf_pn_io_iocr_properties = -1; -static int hf_pn_io_iocr_properties_rtclass = -1; -static int hf_pn_io_iocr_properties_reserved_1 = -1; -static int hf_pn_io_iocr_properties_media_redundancy = -1; -static int hf_pn_io_iocr_properties_reserved_2 = -1; -static int hf_pn_io_iocr_properties_reserved_3 = -1; -static int hf_pn_io_iocr_properties_fast_forwarding_mac_adr = -1; -static int hf_pn_io_iocr_properties_distributed_subframe_watchdog = -1; -static int hf_pn_io_iocr_properties_full_subframe_structure = -1; - - -static int hf_pn_io_data_length = -1; -static int hf_pn_io_ir_frame_data = -1; -static int hf_pn_io_frame_id = -1; -static int hf_pn_io_send_clock_factor = -1; -static int hf_pn_io_reduction_ratio = -1; -static int hf_pn_io_phase = -1; -static int hf_pn_io_sequence = -1; -static int hf_pn_io_frame_send_offset = -1; -static int hf_pn_io_frame_data_properties = -1; -static int hf_pn_io_frame_data_properties_forwarding_Mode = -1; -static int hf_pn_io_frame_data_properties_FastForwardingMulticastMACAdd = -1; -static int hf_pn_io_frame_data_properties_FragmentMode = -1; -static int hf_pn_io_frame_data_properties_reserved_1 = -1; -static int hf_pn_io_frame_data_properties_reserved_2 = -1; -static int hf_pn_io_watchdog_factor = -1; -static int hf_pn_io_data_hold_factor = -1; -static int hf_pn_io_iocr_tag_header = -1; -static int hf_pn_io_iocr_multicast_mac_add = -1; -static int hf_pn_io_number_of_apis = -1; -static int hf_pn_io_number_of_io_data_objects = -1; -static int hf_pn_io_io_data_object_frame_offset = -1; -static int hf_pn_io_number_of_iocs = -1; -static int hf_pn_io_iocs_frame_offset = -1; - -static int hf_pn_io_SFIOCRProperties = -1; -static int hf_pn_io_DistributedWatchDogFactor = -1; -static int hf_pn_io_RestartFactorForDistributedWD = -1; -static int hf_pn_io_SFIOCRProperties_DFPmode = -1; -static int hf_pn_io_SFIOCRProperties_reserved_1 = -1; -static int hf_pn_io_SFIOCRProperties_reserved_2 = -1; -static int hf_pn_io_SFIOCRProperties_DFPType =-1; -static int hf_pn_io_SFIOCRProperties_DFPRedundantPathLayout = -1; -static int hf_pn_io_SFIOCRProperties_SFCRC16 = -1; - -static int hf_pn_io_subframe_data = -1; -static int hf_pn_io_subframe_data_reserved1 = -1; -static int hf_pn_io_subframe_data_reserved2 = -1; - -static int hf_pn_io_subframe_data_position = -1; -static int hf_pn_io_subframe_reserved1 = -1; -static int hf_pn_io_subframe_data_length = -1; -static int hf_pn_io_subframe_reserved2 = -1; - -static int hf_pn_io_alarmcr_type = -1; -static int hf_pn_io_alarmcr_properties = -1; -static int hf_pn_io_alarmcr_properties_priority = -1; -static int hf_pn_io_alarmcr_properties_transport = -1; -static int hf_pn_io_alarmcr_properties_reserved = -1; - -static int hf_pn_io_rta_timeoutfactor = -1; -static int hf_pn_io_rta_retries = -1; -static int hf_pn_io_localalarmref = -1; -static int hf_pn_io_remotealarmref = -1; -static int hf_pn_io_maxalarmdatalength = -1; -static int hf_pn_io_alarmcr_tagheaderhigh = -1; -static int hf_pn_io_alarmcr_tagheaderlow = -1; - -static int hf_pn_io_IRData_uuid = -1; -static int hf_pn_io_ar_uuid = -1; -static int hf_pn_io_target_ar_uuid = -1; -static int hf_pn_io_ar_discriminator = -1; -static int hf_pn_io_ar_configid = -1; -static int hf_pn_io_ar_arnumber = -1; -static int hf_pn_io_ar_arresource = -1; -static int hf_pn_io_ar_arreserved = -1; -static int hf_pn_io_ar_selector = -1; -static int hf_pn_io_api_tree = -1; -static int hf_pn_io_module_tree = -1; -static int hf_pn_io_submodule_tree = -1; -static int hf_pn_io_io_data_object = -1; +static int hf_pn_io_ar_properties_reserved_1; +static int hf_pn_io_ar_properties_device_access; +static int hf_pn_io_ar_properties_companion_ar; +static int hf_pn_io_ar_properties_achnowledge_companion_ar; +static int hf_pn_io_ar_properties_reserved; +static int hf_pn_io_ar_properties_time_aware_system; +static int hf_pn_io_ar_properties_combined_object_container_with_legacy_startupmode; +static int hf_pn_io_ar_properties_combined_object_container_with_advanced_startupmode; +static int hf_pn_io_ar_properties_pull_module_alarm_allowed; + +static int hf_pn_RedundancyInfo; +static int hf_pn_RedundancyInfo_reserved; +static int hf_pn_io_number_of_ARDATAInfo; + +static int hf_pn_io_cminitiator_activitytimeoutfactor; +static int hf_pn_io_cminitiator_udprtport; +static int hf_pn_io_station_name_length; +static int hf_pn_io_cminitiator_station_name; +/* static int hf_pn_io_responder_station_name; */ +static int hf_pn_io_arproperties_StartupMode; + +static int hf_pn_io_parameter_server_station_name; + +static int hf_pn_io_cmresponder_macadd; +static int hf_pn_io_cmresponder_udprtport; + +static int hf_pn_io_number_of_iocrs; +static int hf_pn_io_iocr_tree; +static int hf_pn_io_iocr_type; +static int hf_pn_io_iocr_reference; +static int hf_pn_io_iocr_SubframeOffset; +static int hf_pn_io_iocr_SubframeData; +/* static int hf_pn_io_iocr_txports_port; */ +/* static int hf_pn_io_iocr_txports_redundantport; */ +static int hf_pn_io_sr_properties_Reserved_1; +static int hf_pn_io_sr_properties_Mode; +static int hf_pn_io_sr_properties_Reserved_2; +static int hf_pn_io_sr_properties_Reserved_3; +static int hf_pn_io_RedundancyDataHoldFactor; +static int hf_pn_io_sr_properties; +static int hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_0; +static int hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_1; + +static int hf_pn_io_arvendor_strucidentifier_if0_low; +static int hf_pn_io_arvendor_strucidentifier_if0_high; +static int hf_pn_io_arvendor_strucidentifier_if0_is8000; +static int hf_pn_io_arvendor_strucidentifier_not0; + +static int hf_pn_io_lt; +static int hf_pn_io_iocr_properties; +static int hf_pn_io_iocr_properties_rtclass; +static int hf_pn_io_iocr_properties_reserved_1; +static int hf_pn_io_iocr_properties_media_redundancy; +static int hf_pn_io_iocr_properties_reserved_2; +static int hf_pn_io_iocr_properties_reserved_3; +static int hf_pn_io_iocr_properties_fast_forwarding_mac_adr; +static int hf_pn_io_iocr_properties_distributed_subframe_watchdog; +static int hf_pn_io_iocr_properties_full_subframe_structure; + + +static int hf_pn_io_data_length; +static int hf_pn_io_ir_frame_data; +static int hf_pn_io_frame_id; +static int hf_pn_io_send_clock_factor; +static int hf_pn_io_reduction_ratio; +static int hf_pn_io_phase; +static int hf_pn_io_sequence; +static int hf_pn_io_frame_send_offset; +static int hf_pn_io_frame_data_properties; +static int hf_pn_io_frame_data_properties_forwarding_Mode; +static int hf_pn_io_frame_data_properties_FastForwardingMulticastMACAdd; +static int hf_pn_io_frame_data_properties_FragmentMode; +static int hf_pn_io_frame_data_properties_reserved_1; +static int hf_pn_io_frame_data_properties_reserved_2; +static int hf_pn_io_watchdog_factor; +static int hf_pn_io_data_hold_factor; +static int hf_pn_io_iocr_tag_header; +static int hf_pn_io_iocr_multicast_mac_add; +static int hf_pn_io_number_of_apis; +static int hf_pn_io_number_of_io_data_objects; +static int hf_pn_io_io_data_object_frame_offset; +static int hf_pn_io_number_of_iocs; +static int hf_pn_io_iocs_frame_offset; + +static int hf_pn_io_SFIOCRProperties; +static int hf_pn_io_DistributedWatchDogFactor; +static int hf_pn_io_RestartFactorForDistributedWD; +static int hf_pn_io_SFIOCRProperties_DFPmode; +static int hf_pn_io_SFIOCRProperties_reserved_1; +static int hf_pn_io_SFIOCRProperties_reserved_2; +static int hf_pn_io_SFIOCRProperties_DFPType; +static int hf_pn_io_SFIOCRProperties_DFPRedundantPathLayout; +static int hf_pn_io_SFIOCRProperties_SFCRC16; + +static int hf_pn_io_subframe_data; +static int hf_pn_io_subframe_data_reserved1; +static int hf_pn_io_subframe_data_reserved2; + +static int hf_pn_io_subframe_data_position; +static int hf_pn_io_subframe_reserved1; +static int hf_pn_io_subframe_data_length; +static int hf_pn_io_subframe_reserved2; + +static int hf_pn_io_alarmcr_type; +static int hf_pn_io_alarmcr_properties; +static int hf_pn_io_alarmcr_properties_priority; +static int hf_pn_io_alarmcr_properties_transport; +static int hf_pn_io_alarmcr_properties_reserved; + +static int hf_pn_io_rta_timeoutfactor; +static int hf_pn_io_rta_retries; +static int hf_pn_io_localalarmref; +static int hf_pn_io_remotealarmref; +static int hf_pn_io_maxalarmdatalength; +static int hf_pn_io_alarmcr_tagheaderhigh; +static int hf_pn_io_alarmcr_tagheaderlow; + +static int hf_pn_io_IRData_uuid; +static int hf_pn_io_ar_uuid; +static int hf_pn_io_target_ar_uuid; +static int hf_pn_io_ar_discriminator; +static int hf_pn_io_ar_configid; +static int hf_pn_io_ar_arnumber; +static int hf_pn_io_ar_arresource; +static int hf_pn_io_ar_arreserved; +static int hf_pn_io_ar_selector; +static int hf_pn_io_api_tree; +static int hf_pn_io_module_tree; +static int hf_pn_io_submodule_tree; +static int hf_pn_io_io_data_object; /* General module information */ -static int hf_pn_io_io_cs = -1; - -static int hf_pn_io_substitutionmode = -1; - -static int hf_pn_io_api = -1; -static int hf_pn_io_slot_nr = -1; -static int hf_pn_io_subslot_nr = -1; -static int hf_pn_io_index = -1; -static int hf_pn_io_seq_number = -1; -static int hf_pn_io_record_data_length = -1; -static int hf_pn_io_add_val1 = -1; -static int hf_pn_io_add_val2 = -1; - -static int hf_pn_io_block = -1; -static int hf_pn_io_block_header = -1; -static int hf_pn_io_block_type = -1; -static int hf_pn_io_block_length = -1; -static int hf_pn_io_block_version_high = -1; -static int hf_pn_io_block_version_low = -1; - -static int hf_pn_io_sessionkey = -1; -static int hf_pn_io_control_command = -1; -static int hf_pn_io_control_command_prmend = -1; -static int hf_pn_io_control_command_applready = -1; -static int hf_pn_io_control_command_release = -1; -static int hf_pn_io_control_command_done = -1; -static int hf_pn_io_control_command_ready_for_companion = -1; -static int hf_pn_io_control_command_ready_for_rt_class3 = -1; -static int hf_pn_io_control_command_prmbegin = -1; -static int hf_pn_io_control_command_reserved_7_15 = -1; -static int hf_pn_io_control_block_properties = -1; -static int hf_pn_io_control_block_properties_applready = -1; -static int hf_pn_io_control_block_properties_applready_bit0 = -1; -static int hf_pn_io_control_block_properties_applready_bit1 = -1; -static int hf_pn_io_control_block_properties_applready_otherbits = -1; - -/* static int hf_pn_io_AlarmSequenceNumber = -1; */ -static int hf_pn_io_control_command_reserved = -1; -static int hf_pn_io_SubmoduleListEntries = -1; - -static int hf_pn_io_alarm_type = -1; -static int hf_pn_io_alarm_specifier = -1; -static int hf_pn_io_alarm_specifier_sequence = -1; -static int hf_pn_io_alarm_specifier_channel = -1; -static int hf_pn_io_alarm_specifier_manufacturer = -1; -static int hf_pn_io_alarm_specifier_submodule = -1; -static int hf_pn_io_alarm_specifier_ardiagnosis = -1; - -static int hf_pn_io_alarm_dst_endpoint = -1; -static int hf_pn_io_alarm_src_endpoint = -1; -static int hf_pn_io_pdu_type = -1; -static int hf_pn_io_pdu_type_type = -1; -static int hf_pn_io_pdu_type_version = -1; -static int hf_pn_io_add_flags = -1; -static int hf_pn_io_window_size = -1; -static int hf_pn_io_tack = -1; -static int hf_pn_io_send_seq_num = -1; -static int hf_pn_io_ack_seq_num = -1; -static int hf_pn_io_var_part_len = -1; - -static int hf_pn_io_number_of_modules = -1; -static int hf_pn_io_module_ident_number = -1; -static int hf_pn_io_module_properties = -1; -static int hf_pn_io_module_state = -1; -static int hf_pn_io_number_of_submodules = -1; -static int hf_pn_io_submodule_ident_number = -1; -static int hf_pn_io_submodule_properties = -1; -static int hf_pn_io_submodule_properties_type = -1; -static int hf_pn_io_submodule_properties_shared_input = -1; -static int hf_pn_io_submodule_properties_reduce_input_submodule_data_length = -1; -static int hf_pn_io_submodule_properties_reduce_output_submodule_data_length = -1; -static int hf_pn_io_submodule_properties_discard_ioxs = -1; -static int hf_pn_io_submodule_properties_reserved = -1; - -static int hf_pn_io_submodule_state = -1; -static int hf_pn_io_submodule_state_format_indicator = -1; -static int hf_pn_io_submodule_state_add_info = -1; -static int hf_pn_io_submodule_state_qualified_info = -1; -static int hf_pn_io_submodule_state_maintenance_required = -1; -static int hf_pn_io_submodule_state_maintenance_demanded = -1; -static int hf_pn_io_submodule_state_diag_info = -1; -static int hf_pn_io_submodule_state_ar_info = -1; -static int hf_pn_io_submodule_state_ident_info = -1; -static int hf_pn_io_submodule_state_detail = -1; - -static int hf_pn_io_data_description_tree = -1; -static int hf_pn_io_data_description = -1; -static int hf_pn_io_submodule_data_length = -1; -static int hf_pn_io_length_iocs = -1; -static int hf_pn_io_length_iops = -1; - -static int hf_pn_io_iocs = -1; -static int hf_pn_io_iops = -1; -static int hf_pn_io_ioxs_extension = -1; -static int hf_pn_io_ioxs_res14 = -1; -static int hf_pn_io_ioxs_instance = -1; -static int hf_pn_io_ioxs_datastate = -1; - -static int hf_pn_io_address_resolution_properties = -1; -static int hf_pn_io_mci_timeout_factor = -1; -static int hf_pn_io_provider_station_name = -1; - -static int hf_pn_io_user_structure_identifier = -1; -static int hf_pn_io_user_structure_identifier_manf = -1; - -static int hf_pn_io_channel_number = -1; -static int hf_pn_io_channel_properties = -1; -static int hf_pn_io_channel_properties_type = -1; -static int hf_pn_io_channel_properties_accumulative = -1; -static int hf_pn_io_channel_properties_maintenance = -1; - - -static int hf_pn_io_NumberOfSubframeBlocks = -1; -static int hf_pn_io_channel_properties_specifier = -1; -static int hf_pn_io_channel_properties_direction = -1; - -static int hf_pn_io_channel_error_type = -1; -static int hf_pn_io_ext_channel_error_type0 = -1; -static int hf_pn_io_ext_channel_error_type0x8000 = -1; -static int hf_pn_io_ext_channel_error_type0x8001 = -1; -static int hf_pn_io_ext_channel_error_type0x8002 = -1; -static int hf_pn_io_ext_channel_error_type0x8003 = -1; -static int hf_pn_io_ext_channel_error_type0x8004 = -1; -static int hf_pn_io_ext_channel_error_type0x8005 = -1; -static int hf_pn_io_ext_channel_error_type0x8007 = -1; -static int hf_pn_io_ext_channel_error_type0x8008 = -1; -static int hf_pn_io_ext_channel_error_type0x800A = -1; -static int hf_pn_io_ext_channel_error_type0x800B = -1; -static int hf_pn_io_ext_channel_error_type0x800C = -1; - -static int hf_pn_io_ext_channel_error_type = -1; - -static int hf_pn_io_ext_channel_add_value = -1; - -static int hf_pn_io_ptcp_subdomain_id = -1; -static int hf_pn_io_ir_data_id = -1; -static int hf_pn_io_max_bridge_delay = -1; -static int hf_pn_io_number_of_ports = -1; -static int hf_pn_io_max_port_tx_delay = -1; -static int hf_pn_io_max_port_rx_delay = -1; - -static int hf_pn_io_max_line_rx_delay = -1; -static int hf_pn_io_yellowtime = -1; -static int hf_pn_io_reserved_interval_begin = -1; -static int hf_pn_io_reserved_interval_end = -1; -static int hf_pn_io_pllwindow = -1; -static int hf_pn_io_sync_send_factor = -1; -static int hf_pn_io_sync_properties = -1; -static int hf_pn_io_sync_frame_address = -1; -static int hf_pn_io_ptcp_timeout_factor = -1; -static int hf_pn_io_ptcp_takeover_timeout_factor = -1; -static int hf_pn_io_ptcp_master_startup_time = -1; -static int hf_pn_io_ptcp_master_priority_1 = -1; -static int hf_pn_io_ptcp_master_priority_2 = -1; -static int hf_pn_io_ptcp_length_subdomain_name = -1; -static int hf_pn_io_ptcp_subdomain_name = -1; - -static int hf_pn_io_MultipleInterfaceMode_NameOfDevice = -1; -static int hf_pn_io_MultipleInterfaceMode_reserved_1 = -1; -static int hf_pn_io_MultipleInterfaceMode_reserved_2 = -1; +static int hf_pn_io_io_cs; + +static int hf_pn_io_substitutionmode; + +static int hf_pn_io_api; +static int hf_pn_io_slot_nr; +static int hf_pn_io_subslot_nr; +static int hf_pn_io_index; +static int hf_pn_io_seq_number; +static int hf_pn_io_record_data_length; +static int hf_pn_io_add_val1; +static int hf_pn_io_add_val2; + +static int hf_pn_io_block; +static int hf_pn_io_block_header; +static int hf_pn_io_block_type; +static int hf_pn_io_block_length; +static int hf_pn_io_block_version_high; +static int hf_pn_io_block_version_low; + +static int hf_pn_io_sessionkey; +static int hf_pn_io_control_alarm_sequence_number; +static int hf_pn_io_control_command; +static int hf_pn_io_control_command_prmend; +static int hf_pn_io_control_command_applready; +static int hf_pn_io_control_command_release; +static int hf_pn_io_control_command_done; +static int hf_pn_io_control_command_ready_for_companion; +static int hf_pn_io_control_command_ready_for_rt_class3; +static int hf_pn_io_control_command_prmbegin; +static int hf_pn_io_control_command_reserved_7_15; +static int hf_pn_io_control_block_properties; +static int hf_pn_io_control_block_properties_applready; +static int hf_pn_io_control_block_properties_applready_bit0; +static int hf_pn_io_control_block_properties_applready_bit1; +static int hf_pn_io_control_block_properties_applready_otherbits; + +/* static int hf_pn_io_AlarmSequenceNumber; */ +static int hf_pn_io_control_command_reserved; +static int hf_pn_io_SubmoduleListEntries; + +static int hf_pn_io_alarm_type; +static int hf_pn_io_alarm_specifier; +static int hf_pn_io_alarm_specifier_sequence; +static int hf_pn_io_alarm_specifier_channel; +static int hf_pn_io_alarm_specifier_manufacturer; +static int hf_pn_io_alarm_specifier_submodule; +static int hf_pn_io_alarm_specifier_ardiagnosis; + +static int hf_pn_io_alarm_dst_endpoint; +static int hf_pn_io_alarm_src_endpoint; +static int hf_pn_io_pdu_type; +static int hf_pn_io_pdu_type_type; +static int hf_pn_io_pdu_type_version; +static int hf_pn_io_add_flags; +static int hf_pn_io_window_size; +static int hf_pn_io_tack; +static int hf_pn_io_send_seq_num; +static int hf_pn_io_ack_seq_num; +static int hf_pn_io_var_part_len; + +static int hf_pn_io_number_of_modules; +static int hf_pn_io_module_ident_number; +static int hf_pn_io_module_properties; +static int hf_pn_io_module_state; +static int hf_pn_io_number_of_submodules; +static int hf_pn_io_submodule_ident_number; +static int hf_pn_io_submodule_properties; +static int hf_pn_io_submodule_properties_type; +static int hf_pn_io_submodule_properties_shared_input; +static int hf_pn_io_submodule_properties_reduce_input_submodule_data_length; +static int hf_pn_io_submodule_properties_reduce_output_submodule_data_length; +static int hf_pn_io_submodule_properties_discard_ioxs; +static int hf_pn_io_submodule_properties_reserved; + +static int hf_pn_io_submodule_state; +static int hf_pn_io_submodule_state_format_indicator; +static int hf_pn_io_submodule_state_add_info; +static int hf_pn_io_submodule_state_advice; +static int hf_pn_io_submodule_state_maintenance_required; +static int hf_pn_io_submodule_state_maintenance_demanded; +static int hf_pn_io_submodule_state_fault; +static int hf_pn_io_submodule_state_ar_info; +static int hf_pn_io_submodule_state_ident_info; +static int hf_pn_io_submodule_state_detail; + +static int hf_pn_io_data_description_tree; +static int hf_pn_io_data_description; +static int hf_pn_io_submodule_data_length; +static int hf_pn_io_length_iocs; +static int hf_pn_io_length_iops; + +static int hf_pn_io_iocs; +static int hf_pn_io_iops; +static int hf_pn_io_ioxs_extension; +static int hf_pn_io_ioxs_res14; +static int hf_pn_io_ioxs_instance; +static int hf_pn_io_ioxs_datastate; + +static int hf_pn_io_address_resolution_properties; +static int hf_pn_io_mci_timeout_factor; +static int hf_pn_io_provider_station_name; + +static int hf_pn_io_user_structure_identifier; +static int hf_pn_io_user_structure_identifier_manf; + +static int hf_pn_io_channel_number; +static int hf_pn_io_channel_properties; +static int hf_pn_io_channel_properties_type; +static int hf_pn_io_channel_properties_accumulative; +static int hf_pn_io_channel_properties_maintenance; + + +static int hf_pn_io_NumberOfSubframeBlocks; +static int hf_pn_io_channel_properties_specifier; +static int hf_pn_io_channel_properties_direction; + +static int hf_pn_io_channel_error_type; +static int hf_pn_io_ext_channel_error_type0; +static int hf_pn_io_ext_channel_error_type0x8000; +static int hf_pn_io_ext_channel_error_type0x8001; +static int hf_pn_io_ext_channel_error_type0x8002; +static int hf_pn_io_ext_channel_error_type0x8003; +static int hf_pn_io_ext_channel_error_type0x8004; +static int hf_pn_io_ext_channel_error_type0x8005; +static int hf_pn_io_ext_channel_error_type0x8007; +static int hf_pn_io_ext_channel_error_type0x8008; +static int hf_pn_io_ext_channel_error_type0x800A; +static int hf_pn_io_ext_channel_error_type0x800B; +static int hf_pn_io_ext_channel_error_type0x800C; +static int hf_pn_io_ext_channel_error_type0x8010; + +static int hf_pn_io_ext_channel_error_type; + +static int hf_pn_io_ext_channel_add_value; +static int hf_pn_io_qualified_channel_qualifier; + +static int hf_pn_io_ptcp_subdomain_id; +static int hf_pn_io_ir_data_id; +static int hf_pn_io_max_bridge_delay; +static int hf_pn_io_number_of_ports; +static int hf_pn_io_max_port_tx_delay; +static int hf_pn_io_max_port_rx_delay; + +static int hf_pn_io_max_line_rx_delay; +static int hf_pn_io_yellowtime; +static int hf_pn_io_reserved_interval_begin; +static int hf_pn_io_reserved_interval_end; +static int hf_pn_io_pllwindow; +static int hf_pn_io_sync_send_factor; +static int hf_pn_io_sync_properties; +static int hf_pn_io_sync_frame_address; +static int hf_pn_io_ptcp_timeout_factor; +static int hf_pn_io_ptcp_takeover_timeout_factor; +static int hf_pn_io_ptcp_master_startup_time; +static int hf_pn_io_ptcp_master_priority_1; +static int hf_pn_io_ptcp_master_priority_2; +static int hf_pn_io_ptcp_length_subdomain_name; +static int hf_pn_io_ptcp_subdomain_name; + +static int hf_pn_io_MultipleInterfaceMode_NameOfDevice; +static int hf_pn_io_MultipleInterfaceMode_reserved_1; +static int hf_pn_io_MultipleInterfaceMode_reserved_2; /* added Portstatistics */ -static int hf_pn_io_pdportstatistic_counter_status = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifInOctets = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifOutOctets = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifInDiscards = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifOutDiscards = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifInErrors = -1; -static int hf_pn_io_pdportstatistic_counter_status_ifOutErrors = -1; -static int hf_pn_io_pdportstatistic_counter_status_reserved = -1; -static int hf_pn_io_pdportstatistic_ifInOctets = -1; -static int hf_pn_io_pdportstatistic_ifOutOctets = -1; -static int hf_pn_io_pdportstatistic_ifInDiscards = -1; -static int hf_pn_io_pdportstatistic_ifOutDiscards = -1; -static int hf_pn_io_pdportstatistic_ifInErrors = -1; -static int hf_pn_io_pdportstatistic_ifOutErrors = -1; +static int hf_pn_io_pdportstatistic_counter_status; +static int hf_pn_io_pdportstatistic_counter_status_ifInOctets; +static int hf_pn_io_pdportstatistic_counter_status_ifOutOctets; +static int hf_pn_io_pdportstatistic_counter_status_ifInDiscards; +static int hf_pn_io_pdportstatistic_counter_status_ifOutDiscards; +static int hf_pn_io_pdportstatistic_counter_status_ifInErrors; +static int hf_pn_io_pdportstatistic_counter_status_ifOutErrors; +static int hf_pn_io_pdportstatistic_counter_status_reserved; +static int hf_pn_io_pdportstatistic_ifInOctets; +static int hf_pn_io_pdportstatistic_ifOutOctets; +static int hf_pn_io_pdportstatistic_ifInDiscards; +static int hf_pn_io_pdportstatistic_ifOutDiscards; +static int hf_pn_io_pdportstatistic_ifInErrors; +static int hf_pn_io_pdportstatistic_ifOutErrors; /* end of port statistics */ -static int hf_pn_io_domain_boundary = -1; -static int hf_pn_io_domain_boundary_ingress = -1; -static int hf_pn_io_domain_boundary_egress = -1; -static int hf_pn_io_multicast_boundary = -1; -static int hf_pn_io_adjust_properties = -1; -static int hf_pn_io_PreambleLength = -1; -static int hf_pn_io_mau_type = -1; -static int hf_pn_io_mau_type_mode = -1; -static int hf_pn_io_port_state = -1; -static int hf_pn_io_link_state_port = -1; -static int hf_pn_io_link_state_link = -1; -static int hf_pn_io_line_delay = -1; -static int hf_pn_io_line_delay_value = -1; -static int hf_pn_io_cable_delay_value = -1; -static int hf_pn_io_line_delay_format_indicator = -1; -static int hf_pn_io_number_of_peers = -1; -static int hf_pn_io_length_peer_port_id = -1; -static int hf_pn_io_peer_port_id = -1; -static int hf_pn_io_length_peer_chassis_id = -1; -static int hf_pn_io_peer_chassis_id = -1; -static int hf_pn_io_length_own_port_id = -1; -static int hf_pn_io_own_port_id = -1; -static int hf_pn_io_peer_macadd = -1; -static int hf_pn_io_media_type = -1; -static int hf_pn_io_macadd = -1; -static int hf_pn_io_length_own_chassis_id = -1; -static int hf_pn_io_own_chassis_id = -1; - -static int hf_pn_io_ethertype = -1; -static int hf_pn_io_rx_port = -1; -static int hf_pn_io_frame_details = -1; -static int hf_pn_io_frame_details_sync_frame = -1; -static int hf_pn_io_frame_details_meaning_frame_send_offset = -1; -static int hf_pn_io_frame_details_reserved = -1; -static int hf_pn_io_nr_of_tx_port_groups = -1; -static int hf_pn_io_TxPortGroupProperties = -1; -static int hf_pn_io_TxPortGroupProperties_bit0 = -1; -static int hf_pn_io_TxPortGroupProperties_bit1 = -1; -static int hf_pn_io_TxPortGroupProperties_bit2 = -1; -static int hf_pn_io_TxPortGroupProperties_bit3 = -1; -static int hf_pn_io_TxPortGroupProperties_bit4 = -1; -static int hf_pn_io_TxPortGroupProperties_bit5 = -1; -static int hf_pn_io_TxPortGroupProperties_bit6 = -1; -static int hf_pn_io_TxPortGroupProperties_bit7 = -1; - -static int hf_pn_io_start_of_red_frame_id = -1; -static int hf_pn_io_end_of_red_frame_id = -1; -static int hf_pn_io_ir_begin_end_port = -1; -static int hf_pn_io_number_of_assignments = -1; -static int hf_pn_io_number_of_phases = -1; -static int hf_pn_io_red_orange_period_begin_tx = -1; -static int hf_pn_io_orange_period_begin_tx = -1; -static int hf_pn_io_green_period_begin_tx = -1; -static int hf_pn_io_red_orange_period_begin_rx = -1; -static int hf_pn_io_orange_period_begin_rx = -1; -static int hf_pn_io_green_period_begin_rx = -1; -/* static int hf_pn_io_tx_phase_assignment = -1; */ -static int hf_pn_ir_tx_phase_assignment = -1; -static int hf_pn_ir_rx_phase_assignment = -1; -static int hf_pn_io_tx_phase_assignment_begin_value = -1; -static int hf_pn_io_tx_phase_assignment_orange_begin = -1; -static int hf_pn_io_tx_phase_assignment_end_reserved = -1; -static int hf_pn_io_tx_phase_assignment_reserved = -1; -/* static int hf_pn_io_rx_phase_assignment = -1; */ - -static int hf_pn_io_slot = -1; -static int hf_pn_io_subslot = -1; -static int hf_pn_io_number_of_slots = -1; -static int hf_pn_io_number_of_subslots = -1; - -/* static int hf_pn_io_maintenance_required_drop_budget = -1; */ -/* static int hf_pn_io_maintenance_demanded_drop_budget = -1; */ -/* static int hf_pn_io_error_drop_budget = -1; */ - -static int hf_pn_io_maintenance_required_power_budget = -1; -static int hf_pn_io_maintenance_demanded_power_budget = -1; -static int hf_pn_io_error_power_budget = -1; - -static int hf_pn_io_fiber_optic_type = -1; -static int hf_pn_io_fiber_optic_cable_type = -1; - -static int hf_pn_io_controller_appl_cycle_factor = -1; -static int hf_pn_io_time_data_cycle = -1; -static int hf_pn_io_time_io_input = -1; -static int hf_pn_io_time_io_output = -1; -static int hf_pn_io_time_io_input_valid = -1; -static int hf_pn_io_time_io_output_valid = -1; - -static int hf_pn_io_maintenance_status = -1; -static int hf_pn_io_maintenance_status_required = -1; -static int hf_pn_io_maintenance_status_demanded = -1; - -static int hf_pn_io_vendor_id_high = -1; -static int hf_pn_io_vendor_id_low = -1; -static int hf_pn_io_vendor_block_type = -1; -static int hf_pn_io_order_id = -1; -static int hf_pn_io_im_serial_number = -1; -static int hf_pn_io_im_hardware_revision = -1; -static int hf_pn_io_im_revision_prefix = -1; -static int hf_pn_io_im_sw_revision_functional_enhancement = -1; -static int hf_pn_io_im_revision_bugfix = -1; -static int hf_pn_io_im_sw_revision_internal_change = -1; -static int hf_pn_io_im_revision_counter = -1; -static int hf_pn_io_im_profile_id = -1; -static int hf_pn_io_im_profile_specific_type = -1; -static int hf_pn_io_im_version_major = -1; -static int hf_pn_io_im_version_minor = -1; -static int hf_pn_io_im_supported = -1; -static int hf_pn_io_im_numberofentries = -1; -static int hf_pn_io_im_annotation = -1; -static int hf_pn_io_im_order_id = -1; - -static int hf_pn_io_number_of_ars = -1; - -static int hf_pn_io_cycle_counter = -1; -static int hf_pn_io_data_status = -1; -static int hf_pn_io_data_status_res67 = -1; -static int hf_pn_io_data_status_ok = -1; -static int hf_pn_io_data_status_operate = -1; -static int hf_pn_io_data_status_res3 = -1; -static int hf_pn_io_data_status_valid = -1; -static int hf_pn_io_data_status_res1 = -1; -static int hf_pn_io_data_status_primary = -1; -static int hf_pn_io_transfer_status = -1; - -static int hf_pn_io_actual_local_time_stamp = -1; -static int hf_pn_io_number_of_log_entries = -1; -static int hf_pn_io_local_time_stamp = -1; -static int hf_pn_io_entry_detail = -1; - -static int hf_pn_io_ip_address = -1; -static int hf_pn_io_subnetmask = -1; -static int hf_pn_io_standard_gateway = -1; - -static int hf_pn_io_mrp_domain_uuid = -1; -static int hf_pn_io_mrp_role = -1; -static int hf_pn_io_mrp_length_domain_name = -1; -static int hf_pn_io_mrp_domain_name = -1; -static int hf_pn_io_mrp_instances = -1; -static int hf_pn_io_mrp_instance = -1; - -static int hf_pn_io_mrp_prio = -1; -static int hf_pn_io_mrp_topchgt = -1; -static int hf_pn_io_mrp_topnrmax = -1; -static int hf_pn_io_mrp_tstshortt = -1; -static int hf_pn_io_mrp_tstdefaultt = -1; -static int hf_pn_io_mrp_tstnrmax = -1; -static int hf_pn_io_mrp_check = -1; -static int hf_pn_io_mrp_check_mrm = -1; -static int hf_pn_io_mrp_check_mrpdomain = -1; -static int hf_pn_io_mrp_check_reserved_1 = -1; -static int hf_pn_io_mrp_check_reserved_2 = -1; - -static int hf_pn_io_mrp_rtmode = -1; -static int hf_pn_io_mrp_rtmode_rtclass12 = -1; -static int hf_pn_io_mrp_rtmode_rtclass3 = -1; -static int hf_pn_io_mrp_rtmode_reserved1 = -1; -static int hf_pn_io_mrp_rtmode_reserved2 = -1; - -static int hf_pn_io_mrp_lnkdownt = -1; -static int hf_pn_io_mrp_lnkupt = -1; -static int hf_pn_io_mrp_lnknrmax = -1; -static int hf_pn_io_mrp_version = -1; - -static int hf_pn_io_substitute_active_flag = -1; -static int hf_pn_io_length_data = -1; - -static int hf_pn_io_mrp_ring_state = -1; -static int hf_pn_io_mrp_rt_state = -1; - -static int hf_pn_io_im_tag_function = -1; -static int hf_pn_io_im_tag_location = -1; -static int hf_pn_io_im_date = -1; -static int hf_pn_io_im_descriptor = -1; - -static int hf_pn_io_fs_hello_mode = -1; -static int hf_pn_io_fs_hello_interval = -1; -static int hf_pn_io_fs_hello_retry = -1; -static int hf_pn_io_fs_hello_delay = -1; - -static int hf_pn_io_fs_parameter_mode = -1; -static int hf_pn_io_fs_parameter_uuid = -1; - - -static int hf_pn_io_check_sync_mode = -1; -static int hf_pn_io_check_sync_mode_reserved = -1; -static int hf_pn_io_check_sync_mode_sync_master = -1; -static int hf_pn_io_check_sync_mode_cable_delay = -1; +static int hf_pn_io_domain_boundary; +static int hf_pn_io_domain_boundary_ingress; +static int hf_pn_io_domain_boundary_egress; +static int hf_pn_io_multicast_boundary; +static int hf_pn_io_adjust_properties; +static int hf_pn_io_PreambleLength; +static int hf_pn_io_mau_type; +static int hf_pn_io_mau_type_mode; +static int hf_pn_io_port_state; +static int hf_pn_io_link_state_port; +static int hf_pn_io_link_state_link; +static int hf_pn_io_line_delay; +static int hf_pn_io_line_delay_value; +static int hf_pn_io_cable_delay_value; +static int hf_pn_io_line_delay_format_indicator; +static int hf_pn_io_number_of_peers; +static int hf_pn_io_length_peer_port_id; +static int hf_pn_io_peer_port_id; +static int hf_pn_io_length_peer_chassis_id; +static int hf_pn_io_peer_chassis_id; +static int hf_pn_io_neighbor; +static int hf_pn_io_length_peer_port_name; +static int hf_pn_io_peer_port_name; +static int hf_pn_io_length_peer_station_name; +static int hf_pn_io_peer_station_name; +static int hf_pn_io_length_own_port_id; +static int hf_pn_io_own_port_id; +static int hf_pn_io_peer_macadd; +static int hf_pn_io_media_type; +static int hf_pn_io_macadd; +static int hf_pn_io_length_own_chassis_id; +static int hf_pn_io_own_chassis_id; +static int hf_pn_io_rtclass3_port_status; + +static int hf_pn_io_ethertype; +static int hf_pn_io_rx_port; +static int hf_pn_io_frame_details; +static int hf_pn_io_frame_details_sync_frame; +static int hf_pn_io_frame_details_meaning_frame_send_offset; +static int hf_pn_io_frame_details_reserved; +static int hf_pn_io_nr_of_tx_port_groups; +static int hf_pn_io_TxPortGroupProperties; +static int hf_pn_io_TxPortGroupProperties_bit0; +static int hf_pn_io_TxPortGroupProperties_bit1; +static int hf_pn_io_TxPortGroupProperties_bit2; +static int hf_pn_io_TxPortGroupProperties_bit3; +static int hf_pn_io_TxPortGroupProperties_bit4; +static int hf_pn_io_TxPortGroupProperties_bit5; +static int hf_pn_io_TxPortGroupProperties_bit6; +static int hf_pn_io_TxPortGroupProperties_bit7; + +static int hf_pn_io_start_of_red_frame_id; +static int hf_pn_io_end_of_red_frame_id; +static int hf_pn_io_ir_begin_end_port; +static int hf_pn_io_number_of_assignments; +static int hf_pn_io_number_of_phases; +static int hf_pn_io_red_orange_period_begin_tx; +static int hf_pn_io_orange_period_begin_tx; +static int hf_pn_io_green_period_begin_tx; +static int hf_pn_io_red_orange_period_begin_rx; +static int hf_pn_io_orange_period_begin_rx; +static int hf_pn_io_green_period_begin_rx; +/* static int hf_pn_io_tx_phase_assignment; */ +static int hf_pn_ir_tx_phase_assignment; +static int hf_pn_ir_rx_phase_assignment; +static int hf_pn_io_tx_phase_assignment_begin_value; +static int hf_pn_io_tx_phase_assignment_orange_begin; +static int hf_pn_io_tx_phase_assignment_end_reserved; +static int hf_pn_io_tx_phase_assignment_reserved; +/* static int hf_pn_io_rx_phase_assignment; */ + +static int hf_pn_io_slot; +static int hf_pn_io_subslot; +static int hf_pn_io_number_of_slots; +static int hf_pn_io_number_of_subslots; + +/* static int hf_pn_io_maintenance_required_drop_budget; */ +/* static int hf_pn_io_maintenance_demanded_drop_budget; */ +/* static int hf_pn_io_error_drop_budget; */ + +static int hf_pn_io_tsn_number_of_queues; +static int hf_pn_io_tsn_max_supported_record_size; +static int hf_pn_io_tsn_transfer_time_tx; +static int hf_pn_io_tsn_transfer_time_rx; +static int hf_pn_io_tsn_port_capabilities_time_aware; +static int hf_pn_io_tsn_port_capabilities_preemption; +static int hf_pn_io_tsn_port_capabilities_queue_masking; +static int hf_pn_io_tsn_port_capabilities_reserved; +static int hf_pn_io_tsn_forwarding_group; +static int hf_pn_io_tsn_forwarding_group_ingress; +static int hf_pn_io_tsn_forwarding_group_egress; +static int hf_pn_io_tsn_stream_class; +static int hf_pn_io_tsn_dependent_forwarding_delay; +static int hf_pn_io_tsn_independent_forwarding_delay; +static int hf_pn_io_tsn_forwarding_delay_block_number_of_entries; +static int hf_pn_io_tsn_expected_neighbor_block_number_of_entries; +static int hf_pn_io_tsn_port_id_block_number_of_entries; + +static int hf_pn_io_tsn_nme_parameter_uuid; +static int hf_pn_io_tsn_domain_vid_config; +static int hf_pn_io_tsn_domain_vid_config_stream_high_vid; +static int hf_pn_io_tsn_domain_vid_config_stream_high_red_vid; +static int hf_pn_io_tsn_domain_vid_config_stream_low_vid; +static int hf_pn_io_tsn_domain_vid_config_stream_low_red_vid; +static int hf_pn_io_tsn_domain_vid_config_non_stream_vid; +static int hf_pn_io_tsn_domain_vid_config_non_stream_vid_B; +static int hf_pn_io_tsn_domain_vid_config_non_stream_vid_C; +static int hf_pn_io_tsn_domain_vid_config_non_stream_vid_D; +static int hf_pn_io_tsn_domain_vid_config_reserved; +static int hf_pn_io_number_of_tsn_time_data_block_entries; +static int hf_pn_io_number_of_tsn_domain_queue_rate_limiter_entries; +static int hf_pn_io_number_of_tsn_domain_port_ingress_rate_limiter_entries; +static int hf_pn_io_number_of_tsn_domain_port_config_entries; + +static int hf_pn_io_tsn_domain_port_config; +static int hf_pn_io_tsn_domain_port_config_preemption_enabled; +static int hf_pn_io_tsn_domain_port_config_boundary_port_config; +static int hf_pn_io_tsn_domain_port_config_reserved; + +static int hf_pn_io_tsn_domain_port_ingress_rate_limiter; +static int hf_pn_io_tsn_domain_port_ingress_rate_limiter_cir; +static int hf_pn_io_tsn_domain_port_ingress_rate_limiter_cbs; +static int hf_pn_io_tsn_domain_port_ingress_rate_limiter_envelope; +static int hf_pn_io_tsn_domain_port_ingress_rate_limiter_rank; + +static int hf_pn_io_tsn_domain_queue_rate_limiter; +static int hf_pn_io_tsn_domain_queue_rate_limiter_cir; +static int hf_pn_io_tsn_domain_queue_rate_limiter_cbs; +static int hf_pn_io_tsn_domain_queue_rate_limiter_envelope; +static int hf_pn_io_tsn_domain_queue_rate_limiter_rank; +static int hf_pn_io_tsn_domain_queue_rate_limiter_queue_id; +static int hf_pn_io_tsn_domain_queue_rate_limiter_reserved; + +static int hf_pn_io_number_of_tsn_domain_queue_config_entries; +static int hf_pn_io_tsn_domain_queue_config; +static int hf_pn_io_tsn_domain_queue_config_queue_id; +static int hf_pn_io_tsn_domain_queue_config_tci_pcp; +static int hf_pn_io_tsn_domain_queue_config_shaper; +static int hf_pn_io_tsn_domain_queue_config_preemption_mode; +static int hf_pn_io_tsn_domain_queue_config_unmask_time_offset; +static int hf_pn_io_tsn_domain_queue_config_mask_time_offset; + +static int hf_pn_io_network_deadline; +static int hf_pn_io_time_domain_number; +static int hf_pn_io_time_pll_window; +static int hf_pn_io_message_interval_factor; +static int hf_pn_io_message_timeout_factor; +static int hf_pn_io_time_sync_properties; +static int hf_pn_io_time_sync_properties_role; +static int hf_pn_io_time_sync_properties_reserved; +static int hf_pn_io_time_domain_uuid; +static int hf_pn_io_time_domain_name_length; +static int hf_pn_io_time_domain_name; +static int hf_pn_io_tsn_nme_name_uuid; +static int hf_pn_io_tsn_nme_name_length; +static int hf_pn_io_tsn_nme_name; +static int hf_pn_io_tsn_domain_uuid; +static int hf_pn_io_tsn_domain_name_length; +static int hf_pn_io_tsn_domain_name; + +static int hf_pn_io_tsn_fdb_command; +static int hf_pn_io_tsn_dst_add; + +static int hf_pn_io_number_of_tsn_domain_sync_tree_entries; +static int hf_pn_io_tsn_domain_sync_port_role; +static int hf_pn_io_tsn_domain_port_id; + +static int hf_pn_io_maintenance_required_power_budget; +static int hf_pn_io_maintenance_demanded_power_budget; +static int hf_pn_io_error_power_budget; + +static int hf_pn_io_fiber_optic_type; +static int hf_pn_io_fiber_optic_cable_type; + +static int hf_pn_io_controller_appl_cycle_factor; +static int hf_pn_io_time_data_cycle; +static int hf_pn_io_time_io_input; +static int hf_pn_io_time_io_output; +static int hf_pn_io_time_io_input_valid; +static int hf_pn_io_time_io_output_valid; + +static int hf_pn_io_maintenance_status; +static int hf_pn_io_maintenance_status_required; +static int hf_pn_io_maintenance_status_demanded; + +static int hf_pn_io_vendor_id_high; +static int hf_pn_io_vendor_id_low; +static int hf_pn_io_vendor_block_type; +static int hf_pn_io_order_id; +static int hf_pn_io_im_serial_number; +static int hf_pn_io_im_hardware_revision; +static int hf_pn_io_im_revision_prefix; +static int hf_pn_io_im_sw_revision_functional_enhancement; +static int hf_pn_io_im_revision_bugfix; +static int hf_pn_io_im_sw_revision_internal_change; +static int hf_pn_io_im_revision_counter; +static int hf_pn_io_im_profile_id; +static int hf_pn_io_im_profile_specific_type; +static int hf_pn_io_im_version_major; +static int hf_pn_io_im_version_minor; +static int hf_pn_io_im_supported; +static int hf_pn_io_im_numberofentries; +static int hf_pn_io_im_annotation; +static int hf_pn_io_im_order_id; + +static int hf_pn_io_number_of_ars; + +static int hf_pn_io_cycle_counter; +static int hf_pn_io_data_status; +static int hf_pn_io_data_status_res67; +static int hf_pn_io_data_status_ok; +static int hf_pn_io_data_status_operate; +static int hf_pn_io_data_status_res3; +static int hf_pn_io_data_status_valid; +static int hf_pn_io_data_status_res1; +static int hf_pn_io_data_status_primary; +static int hf_pn_io_transfer_status; + +static int hf_pn_io_actual_local_time_stamp; +static int hf_pn_io_number_of_log_entries; +static int hf_pn_io_local_time_stamp; +static int hf_pn_io_entry_detail; + +static int hf_pn_io_ip_address; +static int hf_pn_io_subnetmask; +static int hf_pn_io_standard_gateway; + +static int hf_pn_io_mrp_domain_uuid; +static int hf_pn_io_mrp_role; +static int hf_pn_io_mrp_length_domain_name; +static int hf_pn_io_mrp_domain_name; +static int hf_pn_io_mrp_instances; +static int hf_pn_io_mrp_instance; + +static int hf_pn_io_mrp_prio; +static int hf_pn_io_mrp_topchgt; +static int hf_pn_io_mrp_topnrmax; +static int hf_pn_io_mrp_tstshortt; +static int hf_pn_io_mrp_tstdefaultt; +static int hf_pn_io_mrp_tstnrmax; +static int hf_pn_io_mrp_check; +static int hf_pn_io_mrp_check_mrm; +static int hf_pn_io_mrp_check_mrpdomain; +static int hf_pn_io_mrp_check_reserved_1; +static int hf_pn_io_mrp_check_reserved_2; + +static int hf_pn_io_mrp_rtmode; +static int hf_pn_io_mrp_rtmode_rtclass12; +static int hf_pn_io_mrp_rtmode_rtclass3; +static int hf_pn_io_mrp_rtmode_reserved1; +static int hf_pn_io_mrp_rtmode_reserved2; + +static int hf_pn_io_mrp_lnkdownt; +static int hf_pn_io_mrp_lnkupt; +static int hf_pn_io_mrp_lnknrmax; +static int hf_pn_io_mrp_version; + +static int hf_pn_io_substitute_active_flag; +static int hf_pn_io_length_data; + +static int hf_pn_io_mrp_ring_state; +static int hf_pn_io_mrp_rt_state; + +static int hf_pn_io_im_tag_function; +static int hf_pn_io_im_tag_location; +static int hf_pn_io_im_date; +static int hf_pn_io_im_descriptor; + +static int hf_pn_io_fs_hello_mode; +static int hf_pn_io_fs_hello_interval; +static int hf_pn_io_fs_hello_retry; +static int hf_pn_io_fs_hello_delay; + +static int hf_pn_io_fs_parameter_mode; +static int hf_pn_io_fs_parameter_uuid; + + +static int hf_pn_io_check_sync_mode; +static int hf_pn_io_check_sync_mode_reserved; +static int hf_pn_io_check_sync_mode_sync_master; +static int hf_pn_io_check_sync_mode_cable_delay; /* PROFIsafe fParameters */ -static int hf_pn_io_ps_f_prm_flag1 = -1; -static int hf_pn_io_ps_f_prm_flag1_chck_seq = -1; -static int hf_pn_io_ps_f_prm_flag1_chck_ipar = -1; -static int hf_pn_io_ps_f_prm_flag1_sil = -1; -static int hf_pn_io_ps_f_prm_flag1_crc_len = -1; -static int hf_pn_io_ps_f_prm_flag1_crc_seed = -1; -static int hf_pn_io_ps_f_prm_flag1_reserved = -1; -static int hf_pn_io_ps_f_prm_flag2 = -1; -static int hf_pn_io_ps_f_wd_time = -1; -static int hf_pn_io_ps_f_ipar_crc = -1; -static int hf_pn_io_ps_f_par_crc = -1; -static int hf_pn_io_ps_f_src_adr = -1; -static int hf_pn_io_ps_f_dest_adr = -1; -static int hf_pn_io_ps_f_prm_flag2_reserved = -1; -static int hf_pn_io_ps_f_prm_flag2_f_block_id = -1; -static int hf_pn_io_ps_f_prm_flag2_f_par_version = -1; - -static int hf_pn_io_profidrive_request_reference = -1; -static int hf_pn_io_profidrive_request_id = -1; -static int hf_pn_io_profidrive_do_id = -1; -static int hf_pn_io_profidrive_no_of_parameters = -1; -static int hf_pn_io_profidrive_response_id = -1; -static int hf_pn_io_profidrive_param_attribute = -1; -static int hf_pn_io_profidrive_param_no_of_elems = -1; -static int hf_pn_io_profidrive_param_number = -1; -static int hf_pn_io_profidrive_param_subindex = -1; -static int hf_pn_io_profidrive_param_format = -1; -static int hf_pn_io_profidrive_param_no_of_values = -1; -static int hf_pn_io_profidrive_param_value_byte = -1; -static int hf_pn_io_profidrive_param_value_word = -1; -static int hf_pn_io_profidrive_param_value_dword = -1; -static int hf_pn_io_profidrive_param_value_float = -1; -static int hf_pn_io_profidrive_param_value_string = -1; -static int hf_pn_io_profidrive_param_value_error = -1; -static int hf_pn_io_profidrive_param_value_error_sub = -1; +static int hf_pn_io_ps_f_prm_flag1; +static int hf_pn_io_ps_f_prm_flag1_chck_seq; +static int hf_pn_io_ps_f_prm_flag1_chck_ipar; +static int hf_pn_io_ps_f_prm_flag1_sil; +static int hf_pn_io_ps_f_prm_flag1_crc_len; +static int hf_pn_io_ps_f_prm_flag1_crc_seed; +static int hf_pn_io_ps_f_prm_flag1_reserved; +static int hf_pn_io_ps_f_prm_flag2; +static int hf_pn_io_ps_f_wd_time; +static int hf_pn_io_ps_f_ipar_crc; +static int hf_pn_io_ps_f_par_crc; +static int hf_pn_io_ps_f_src_adr; +static int hf_pn_io_ps_f_dest_adr; +static int hf_pn_io_ps_f_prm_flag2_reserved; +static int hf_pn_io_ps_f_prm_flag2_f_block_id; +static int hf_pn_io_ps_f_prm_flag2_f_par_version; + +static int hf_pn_io_profidrive_request_reference; +static int hf_pn_io_profidrive_request_id; +static int hf_pn_io_profidrive_do_id; +static int hf_pn_io_profidrive_no_of_parameters; +static int hf_pn_io_profidrive_response_id; +static int hf_pn_io_profidrive_param_attribute; +static int hf_pn_io_profidrive_param_no_of_elems; +static int hf_pn_io_profidrive_param_number; +static int hf_pn_io_profidrive_param_subindex; +static int hf_pn_io_profidrive_param_format; +static int hf_pn_io_profidrive_param_no_of_values; +static int hf_pn_io_profidrive_param_value_byte; +static int hf_pn_io_profidrive_param_value_word; +static int hf_pn_io_profidrive_param_value_dword; +static int hf_pn_io_profidrive_param_value_float; +static int hf_pn_io_profidrive_param_value_string; +static int hf_pn_io_profidrive_param_value_error; +static int hf_pn_io_profidrive_param_value_error_sub; /* Sequence of Events - Reporting System Alarm/Event Information */ -static int hf_pn_io_rs_alarm_info_reserved_0_7 = -1; -static int hf_pn_io_rs_alarm_info_reserved_8_15 = -1; -static int hf_pn_io_rs_alarm_info = -1; -static int hf_pn_io_rs_event_info = -1; -static int hf_pn_io_rs_event_block = -1; -static int hf_pn_io_rs_adjust_block = -1; -static int hf_pn_io_rs_event_data_extension = -1; -static int hf_pn_io_number_of_rs_event_info = -1; -static int hf_pn_io_rs_block_type = -1; -static int hf_pn_io_rs_block_length = -1; -static int hf_pn_io_rs_specifier = -1; -static int hf_pn_io_rs_specifier_sequence = -1; -static int hf_pn_io_rs_specifier_reserved = -1; -static int hf_pn_io_rs_specifier_specifier = -1; -static int hf_pn_io_rs_time_stamp = -1; -static int hf_pn_io_rs_time_stamp_status = -1; -static int hf_pn_io_rs_time_stamp_value = -1; -static int hf_pn_io_rs_minus_error = -1; -static int hf_pn_io_rs_plus_error = -1; -static int hf_pn_io_rs_extension_block_type = -1; -static int hf_pn_io_rs_extension_block_length = -1; -static int hf_pn_io_rs_reason_code = -1; -static int hf_pn_io_rs_reason_code_reason = -1; -static int hf_pn_io_rs_reason_code_detail = -1; -static int hf_pn_io_rs_domain_identification = -1; -static int hf_pn_io_rs_master_identification = -1; -static int hf_pn_io_soe_digital_input_current_value = -1; -static int hf_pn_io_soe_digital_input_current_value_value = -1; -static int hf_pn_io_soe_digital_input_current_value_reserved = -1; -static int hf_pn_io_am_device_identification = -1; -static int hf_pn_io_am_device_identification_device_sub_id = -1; -static int hf_pn_io_am_device_identification_device_id = -1; -static int hf_pn_io_am_device_identification_vendor_id = -1; -static int hf_pn_io_am_device_identification_organization = -1; -static int hf_pn_io_rs_adjust_info = -1; -static int hf_pn_io_soe_max_scan_delay = -1; -static int hf_pn_io_soe_adjust_specifier = -1; -static int hf_pn_io_soe_adjust_specifier_reserved = -1; -static int hf_pn_io_soe_adjust_specifier_incident = -1; -static int hf_pn_io_rs_properties = -1; -static int hf_pn_io_rs_properties_alarm_transport = -1; -static int hf_pn_io_rs_properties_reserved1 = -1; -static int hf_pn_io_rs_properties_reserved2 = -1; - -static int hf_pn_io_asset_management_info = -1; -static int hf_pn_io_number_of_asset_management_info = -1; -static int hf_pn_io_im_uniqueidentifier = -1; -static int hf_pn_io_am_location_structure = -1; -static int hf_pn_io_am_location_level_0 = -1; -static int hf_pn_io_am_location_level_1 = -1; -static int hf_pn_io_am_location_level_2 = -1; -static int hf_pn_io_am_location_level_3 = -1; -static int hf_pn_io_am_location_level_4 = -1; -static int hf_pn_io_am_location_level_5 = -1; -static int hf_pn_io_am_location_level_6 = -1; -static int hf_pn_io_am_location_level_7 = -1; -static int hf_pn_io_am_location_level_8 = -1; -static int hf_pn_io_am_location_level_9 = -1; -static int hf_pn_io_am_location_level_10 = -1; -static int hf_pn_io_am_location_level_11 = -1; -static int hf_pn_io_am_location = -1; -static int hf_pn_io_am_location_reserved1 = -1; -static int hf_pn_io_am_location_reserved2 = -1; -static int hf_pn_io_am_location_reserved3 = -1; -static int hf_pn_io_am_location_reserved4 = -1; -static int hf_pn_io_am_location_beginslotnum = -1; -static int hf_pn_io_am_location_beginsubslotnum = -1; -static int hf_pn_io_am_location_endslotnum = -1; -static int hf_pn_io_am_location_endsubslotnum = -1; -static int hf_pn_io_am_software_revision = -1; -static int hf_pn_io_am_hardware_revision = -1; -static int hf_pn_io_am_type_identification = -1; -static int hf_pn_io_am_reserved = -1; - -static int hf_pn_io_dcp_boundary_value = -1; -static int hf_pn_io_dcp_boundary_value_bit0 = -1; -static int hf_pn_io_dcp_boundary_value_bit1 = -1; -static int hf_pn_io_dcp_boundary_value_otherbits = -1; - -static int hf_pn_io_peer_to_peer_boundary_value = -1; -static int hf_pn_io_peer_to_peer_boundary_value_bit0 = -1; -static int hf_pn_io_peer_to_peer_boundary_value_bit1 = -1; -static int hf_pn_io_peer_to_peer_boundary_value_bit2 = -1; -static int hf_pn_io_peer_to_peer_boundary_value_otherbits = -1; - -static int hf_pn_io_mau_type_extension = -1; - -static int hf_pn_io_pe_operational_mode = -1; - -/* static int hf_pn_io_packedframe_SFCRC = -1; */ -static gint ett_pn_io = -1; -static gint ett_pn_io_block = -1; -static gint ett_pn_io_block_header = -1; -static gint ett_pn_io_rtc = -1; -static gint ett_pn_io_rta = -1; -static gint ett_pn_io_pdu_type = -1; -static gint ett_pn_io_add_flags = -1; -static gint ett_pn_io_control_command = -1; -static gint ett_pn_io_ioxs = -1; -static gint ett_pn_io_api = -1; -static gint ett_pn_io_data_description = -1; -static gint ett_pn_io_module = -1; -static gint ett_pn_io_submodule = -1; -static gint ett_pn_io_io_data_object = -1; -static gint ett_pn_io_io_cs = -1; -static gint ett_pn_io_ar_properties = -1; -static gint ett_pn_io_iocr_properties = -1; -static gint ett_pn_io_submodule_properties = -1; -static gint ett_pn_io_alarmcr_properties = -1; -static gint ett_pn_io_submodule_state = -1; -static gint ett_pn_io_channel_properties = -1; -static gint ett_pn_io_slot = -1; -static gint ett_pn_io_subslot = -1; -static gint ett_pn_io_maintenance_status = -1; -static gint ett_pn_io_data_status = -1; -static gint ett_pn_io_iocr = -1; -static gint ett_pn_io_mrp_rtmode = -1; -static gint ett_pn_io_control_block_properties = -1; -static gint ett_pn_io_check_sync_mode = -1; -static gint ett_pn_io_ir_frame_data = -1; -static gint ett_pn_FrameDataProperties = -1; -static gint ett_pn_io_ar_info = -1; -static gint ett_pn_io_ar_data = -1; -static gint ett_pn_io_ir_begin_end_port = -1; -static gint ett_pn_io_ir_tx_phase = -1; -static gint ett_pn_io_ir_rx_phase = -1; -static gint ett_pn_io_subframe_data =-1; -static gint ett_pn_io_SFIOCRProperties = -1; -static gint ett_pn_io_frame_defails = -1; -static gint ett_pn_io_profisafe_f_parameter = -1; -static gint ett_pn_io_profisafe_f_parameter_prm_flag1 = -1; -static gint ett_pn_io_profisafe_f_parameter_prm_flag2 = -1; -static gint ett_pn_io_profidrive_parameter_request = -1; -static gint ett_pn_io_profidrive_parameter_response = -1; -static gint ett_pn_io_profidrive_parameter_address = -1; -static gint ett_pn_io_profidrive_parameter_value = -1; -static gint ett_pn_io_rs_alarm_info = -1; -static gint ett_pn_io_rs_event_info = -1; -static gint ett_pn_io_rs_event_block = -1; -static gint ett_pn_io_rs_adjust_block = -1; -static gint ett_pn_io_rs_event_data_extension = -1; -static gint ett_pn_io_rs_specifier = -1; -static gint ett_pn_io_rs_time_stamp = -1; -static gint ett_pn_io_am_device_identification = -1; -static gint ett_pn_io_rs_reason_code = -1; -static gint ett_pn_io_soe_digital_input_current_value = -1; -static gint ett_pn_io_rs_adjust_info = -1; -static gint ett_pn_io_soe_adjust_specifier = -1; -static gint ett_pn_io_sr_properties = -1; -static gint ett_pn_io_line_delay = -1; -static gint ett_pn_io_counter_status = -1; - -static gint ett_pn_io_GroupProperties = -1; - -static gint ett_pn_io_asset_management_info = -1; -static gint ett_pn_io_asset_management_block = -1; -static gint ett_pn_io_am_location = -1; - -static gint ett_pn_io_dcp_boundary = -1; -static gint ett_pn_io_peer_to_peer_boundary = -1; - -static gint ett_pn_io_mau_type_extension = -1; - -static gint ett_pn_io_pe_operational_mode = -1; +static int hf_pn_io_rs_alarm_info_reserved_0_7; +static int hf_pn_io_rs_alarm_info_reserved_8_15; +static int hf_pn_io_rs_alarm_info; +static int hf_pn_io_rs_event_info; +static int hf_pn_io_rs_event_block; +static int hf_pn_io_rs_adjust_block; +static int hf_pn_io_rs_event_data_extension; +static int hf_pn_io_number_of_rs_event_info; +static int hf_pn_io_rs_block_type; +static int hf_pn_io_rs_block_length; +static int hf_pn_io_rs_specifier; +static int hf_pn_io_rs_specifier_sequence; +static int hf_pn_io_rs_specifier_reserved; +static int hf_pn_io_rs_specifier_specifier; +static int hf_pn_io_rs_time_stamp; +static int hf_pn_io_rs_time_stamp_status; +static int hf_pn_io_rs_time_stamp_value; +static int hf_pn_io_rs_minus_error; +static int hf_pn_io_rs_plus_error; +static int hf_pn_io_rs_extension_block_type; +static int hf_pn_io_rs_extension_block_length; +static int hf_pn_io_rs_reason_code; +static int hf_pn_io_rs_reason_code_reason; +static int hf_pn_io_rs_reason_code_detail; +static int hf_pn_io_rs_domain_identification; +static int hf_pn_io_rs_master_identification; +static int hf_pn_io_soe_digital_input_current_value; +static int hf_pn_io_soe_digital_input_current_value_value; +static int hf_pn_io_soe_digital_input_current_value_reserved; +static int hf_pn_io_am_device_identification; +static int hf_pn_io_am_device_identification_device_sub_id; +static int hf_pn_io_am_device_identification_device_id; +static int hf_pn_io_am_device_identification_vendor_id; +static int hf_pn_io_am_device_identification_organization; +static int hf_pn_io_rs_adjust_info; +static int hf_pn_io_soe_max_scan_delay; +static int hf_pn_io_soe_adjust_specifier; +static int hf_pn_io_soe_adjust_specifier_reserved; +static int hf_pn_io_soe_adjust_specifier_incident; +static int hf_pn_io_rs_properties; +static int hf_pn_io_rs_properties_alarm_transport; +static int hf_pn_io_rs_properties_reserved1; +static int hf_pn_io_rs_properties_reserved2; + +static int hf_pn_io_asset_management_info; +static int hf_pn_io_number_of_asset_management_info; +static int hf_pn_io_im_uniqueidentifier; +static int hf_pn_io_am_location_structure; +static int hf_pn_io_am_location_level_0; +static int hf_pn_io_am_location_level_1; +static int hf_pn_io_am_location_level_2; +static int hf_pn_io_am_location_level_3; +static int hf_pn_io_am_location_level_4; +static int hf_pn_io_am_location_level_5; +static int hf_pn_io_am_location_level_6; +static int hf_pn_io_am_location_level_7; +static int hf_pn_io_am_location_level_8; +static int hf_pn_io_am_location_level_9; +static int hf_pn_io_am_location_level_10; +static int hf_pn_io_am_location_level_11; +static int hf_pn_io_am_location; +static int hf_pn_io_am_location_reserved1; +static int hf_pn_io_am_location_reserved2; +static int hf_pn_io_am_location_reserved3; +static int hf_pn_io_am_location_reserved4; +static int hf_pn_io_am_location_beginslotnum; +static int hf_pn_io_am_location_beginsubslotnum; +static int hf_pn_io_am_location_endslotnum; +static int hf_pn_io_am_location_endsubslotnum; +static int hf_pn_io_am_software_revision; +static int hf_pn_io_am_hardware_revision; +static int hf_pn_io_am_type_identification; +static int hf_pn_io_am_reserved; + +static int hf_pn_io_dcp_boundary_value; +static int hf_pn_io_dcp_boundary_value_bit0; +static int hf_pn_io_dcp_boundary_value_bit1; +static int hf_pn_io_dcp_boundary_value_otherbits; + +static int hf_pn_io_peer_to_peer_boundary_value; +static int hf_pn_io_peer_to_peer_boundary_value_bit0; +static int hf_pn_io_peer_to_peer_boundary_value_bit1; +static int hf_pn_io_peer_to_peer_boundary_value_bit2; +static int hf_pn_io_peer_to_peer_boundary_value_otherbits; + +static int hf_pn_io_mau_type_extension; + +static int hf_pn_io_pe_operational_mode; + +static int hf_pn_io_snmp_community_name_length; +static int hf_pn_io_snmp_community_name; +static int hf_pn_io_snmp_read_community_name; +static int hf_pn_io_snmp_write_community_name; + +static int hf_pn_io_snmp_control; + +/* static int hf_pn_io_packedframe_SFCRC; */ +static gint ett_pn_io; +static gint ett_pn_io_block; +static gint ett_pn_io_block_header; +static gint ett_pn_io_rtc; +static gint ett_pn_io_rta; +static gint ett_pn_io_pdu_type; +static gint ett_pn_io_add_flags; +static gint ett_pn_io_control_command; +static gint ett_pn_io_ioxs; +static gint ett_pn_io_api; +static gint ett_pn_io_data_description; +static gint ett_pn_io_module; +static gint ett_pn_io_submodule; +static gint ett_pn_io_io_data_object; +static gint ett_pn_io_io_cs; +static gint ett_pn_io_ar_properties; +static gint ett_pn_io_iocr_properties; +static gint ett_pn_io_submodule_properties; +static gint ett_pn_io_alarmcr_properties; +static gint ett_pn_io_submodule_state; +static gint ett_pn_io_channel_properties; +static gint ett_pn_io_slot; +static gint ett_pn_io_subslot; +static gint ett_pn_io_maintenance_status; +static gint ett_pn_io_data_status; +static gint ett_pn_io_iocr; +static gint ett_pn_io_mrp_rtmode; +static gint ett_pn_io_control_block_properties; +static gint ett_pn_io_check_sync_mode; +static gint ett_pn_io_ir_frame_data; +static gint ett_pn_FrameDataProperties; +static gint ett_pn_io_ar_info; +static gint ett_pn_io_ar_data; +static gint ett_pn_io_ir_begin_end_port; +static gint ett_pn_io_ir_tx_phase; +static gint ett_pn_io_ir_rx_phase; +static gint ett_pn_io_subframe_data; +static gint ett_pn_io_SFIOCRProperties; +static gint ett_pn_io_frame_defails; +static gint ett_pn_io_profisafe_f_parameter; +static gint ett_pn_io_profisafe_f_parameter_prm_flag1; +static gint ett_pn_io_profisafe_f_parameter_prm_flag2; +static gint ett_pn_io_profidrive_parameter_request; +static gint ett_pn_io_profidrive_parameter_response; +static gint ett_pn_io_profidrive_parameter_address; +static gint ett_pn_io_profidrive_parameter_value; +static gint ett_pn_io_rs_alarm_info; +static gint ett_pn_io_rs_event_info; +static gint ett_pn_io_rs_event_block; +static gint ett_pn_io_rs_adjust_block; +static gint ett_pn_io_rs_event_data_extension; +static gint ett_pn_io_rs_specifier; +static gint ett_pn_io_rs_time_stamp; +static gint ett_pn_io_am_device_identification; +static gint ett_pn_io_rs_reason_code; +static gint ett_pn_io_soe_digital_input_current_value; +static gint ett_pn_io_rs_adjust_info; +static gint ett_pn_io_soe_adjust_specifier; +static gint ett_pn_io_sr_properties; +static gint ett_pn_io_line_delay; +static gint ett_pn_io_counter_status; +static gint ett_pn_io_neighbor; + +static gint ett_pn_io_GroupProperties; + +static gint ett_pn_io_asset_management_info; +static gint ett_pn_io_asset_management_block; +static gint ett_pn_io_am_location; + +static gint ett_pn_io_dcp_boundary; +static gint ett_pn_io_peer_to_peer_boundary; + +static gint ett_pn_io_mau_type_extension; + +static gint ett_pn_io_pe_operational_mode; + +static gint ett_pn_io_tsn_domain_port_config; +static gint ett_pn_io_tsn_domain_port_ingress_rate_limiter; +static gint ett_pn_io_tsn_domain_queue_rate_limiter; +static gint ett_pn_io_tsn_domain_vid_config; +static gint ett_pn_io_tsn_domain_queue_config; +static gint ett_pn_io_time_sync_properties; +static gint ett_pn_io_tsn_domain_port_id; + +static gint ett_pn_io_snmp_command_name; + #define PD_SUB_FRAME_BLOCK_FIOCR_PROPERTIES_LENGTH 4 #define PD_SUB_FRAME_BLOCK_FRAME_ID_LENGTH 2 #define PD_SUB_FRAME_BLOCK_SUB_FRAME_DATA_LENGTH 4 -static expert_field ei_pn_io_block_version = EI_INIT; -static expert_field ei_pn_io_block_length = EI_INIT; -static expert_field ei_pn_io_unsupported = EI_INIT; -static expert_field ei_pn_io_localalarmref = EI_INIT; -static expert_field ei_pn_io_mrp_instances = EI_INIT; -static expert_field ei_pn_io_ar_info_not_found = EI_INIT; -static expert_field ei_pn_io_iocr_type = EI_INIT; -static expert_field ei_pn_io_frame_id = EI_INIT; -static expert_field ei_pn_io_nr_of_tx_port_groups = EI_INIT; -static expert_field ei_pn_io_max_recursion_depth_reached = EI_INIT; +static expert_field ei_pn_io_block_version; +static expert_field ei_pn_io_block_length; +static expert_field ei_pn_io_unsupported; +static expert_field ei_pn_io_localalarmref; +static expert_field ei_pn_io_mrp_instances; +static expert_field ei_pn_io_ar_info_not_found; +static expert_field ei_pn_io_iocr_type; +static expert_field ei_pn_io_frame_id; +static expert_field ei_pn_io_nr_of_tx_port_groups; +static expert_field ei_pn_io_max_recursion_depth_reached; static e_guid_t uuid_pn_io_device = { 0xDEA00001, 0x6C97, 0x11D1, { 0x82, 0x71, 0x00, 0xA0, 0x24, 0x42, 0xDF, 0x7D } }; static guint16 ver_pn_io_device = 1; @@ -854,6 +992,7 @@ gboolean pnio_ps_selection = TRUE; static const char *pnio_ps_networkpath = ""; wmem_list_t *aruuid_frame_setup_list = NULL; +static wmem_map_t *pnio_time_aware_frame_map = NULL; /* Allow heuristic dissection */ @@ -862,7 +1001,9 @@ static heur_dissector_list_t heur_pn_subdissector_list; static const value_string pn_io_block_type[] = { { 0x0000, "Reserved" }, { 0x0001, "Alarm Notification High"}, + { 0x8001, "Alarm Ack High"}, { 0x0002, "Alarm Notification Low"}, + { 0x8002, "Alarm Ack Low"}, { 0x0008, "IODWriteReqHeader"}, { 0x8008, "IODWriteResHeader"}, { 0x0009, "IODReadReqHeader"}, @@ -917,8 +1058,9 @@ static const value_string pn_io_block_type[] = { { 0x0105, "PrmServerBlockReq"}, { 0x8105, "PrmServerBlockRes"}, { 0x0106, "MCRBlockReq"}, - { 0x8106, "ARServerBlock"}, + { 0x8106, "ARServerBlockRes"}, { 0x0107, "SubFrameBlock"}, + { 0x8107, "ARRPCBlockRes"}, { 0x0108, "ARVendorBlockReq"}, { 0x8108, "ARVendorBlockRes"}, { 0x0109, "IRInfoBlock"}, @@ -927,12 +1069,12 @@ static const value_string pn_io_block_type[] = { { 0x010C, "RSInfoBlock"}, { 0x0110, "IODControlReq Prm End.req"}, { 0x8110, "IODControlRes Prm End.rsp"}, - { 0x0111, "IODControlReq Prm End.req"}, - { 0x8111, "IODControlRes Prm End.rsp"}, + { 0x0111, "IODControlReq Plug Prm End.req"}, + { 0x8111, "IODControlRes Plug Prm End.rsp"}, { 0x0112, "IOXBlockReq Application Ready.req"}, { 0x8112, "IOXBlockRes Application Ready.rsp"}, - { 0x0113, "IOXBlockReq Application Ready.req"}, - { 0x8113, "IOXBlockRes Application Ready.rsp"}, + { 0x0113, "IOXBlockReq Plug Application Ready.req"}, + { 0x8113, "IOXBlockRes Plug Application Ready.rsp"}, { 0x0114, "IODReleaseReq"}, { 0x8114, "IODReleaseRes"}, { 0x0115, "ARRPCServerBlockReq"}, @@ -941,9 +1083,9 @@ static const value_string pn_io_block_type[] = { { 0x8116, "IOXControlRes Ready for Companion.rsp"}, { 0x0117, "IOXControlReq Ready for RT_CLASS_3.req"}, { 0x8117, "IOXControlRes Ready for RT_CLASS_3.rsp"}, - { 0x0118, "ControlBlockPrmBegin"}, + { 0x0118, "PrmBeginReq"}, + { 0x8118, "PrmBeginRes"}, { 0x0119, "SubmoduleListBlock"}, - { 0x8118, "ControlBlockPrmBeginRes"}, { 0x0200, "PDPortDataCheck"}, { 0x0201, "PDevData"}, @@ -988,29 +1130,63 @@ static const value_string pn_io_block_type[] = { { 0x0229, "AdjustMAUType-Extension"}, { 0x022A, "PDIRSubframeData"}, { 0x022B, "SubframeBlock"}, + { 0x022C, "PDPortDataRealExtended"}, + { 0x022D, "PDTimeData"}, + { 0x022E, "PDPortSFPDataCheck"}, { 0x0230, "PDNCDataCheck"}, { 0x0231, "MrpInstanceDataAdjust"}, { 0x0232, "MrpInstanceDataReal"}, { 0x0233, "MrpInstanceDataCheck"}, - { 0x0241, "PDRsiInstances"}, + { 0x0234, "PDPortMrpIcDataAdjust"}, + { 0x0235, "PDPortMrpIcDataCheck"}, + { 0x0236, "PDPortMrpIcDataReal"}, { 0x0240, "PDInterfaceDataReal"}, + { 0x0241, "PDRsiInstances"}, { 0x0250, "PDInterfaceAdjust"}, { 0x0251, "PDPortStatistic"}, + { 0x0260, "OwnPort"}, + { 0x0261, "Neighbors"}, + { 0x0270, "TSNNetworkControlDataReal"}, + { 0x0271, "TSNNetworkControlDataAdjust"}, + { 0x0272, "TSNDomainPortConfigBlock"}, + { 0x0273, "TSNDomainQueueConfigBlock"}, + { 0x0274, "TSNTimeDataBlock"}, + { 0x0275, "TSNStreamPathData"}, + { 0x0276, "TSNSyncTreeData"}, + { 0x0277, "TSNUploadNetworkAttributes"}, + { 0x0278, "ForwardingDelayBlock"}, + { 0x0279, "TSNExpectedNetworkAttributes"}, + { 0x027A, "TSNStreamPathDataReal"}, + { 0x027B, "TSNDomainPortIngressRateLimiterBlock"}, + { 0x027C, "TSNDomainQueueRateLimiterBlock"}, + { 0x027D, "TSNPortIDBlock"}, + { 0x027E, "TSNExpectedNeighborBlock" }, + { 0x0300, "CIMSNMPAdjust"}, { 0x0400, "MultipleBlockHeader"}, { 0x0401, "COContainerContent"}, { 0x0500, "RecordDataReadQuery"}, - { 0x0600, "FSHello"}, + { 0x0501, "TSNAddStreamReq"}, + { 0x0502, "TSNAddStreamRsp"}, + { 0x0503, "TSNRemoveStreamReq"}, + { 0x0504, "TSNRemoveStreamRsp"}, + { 0x0505, "TSNRenewStreamReq"}, + { 0x0506, "TSNRenewStreamRsp"}, + { 0x0600, "FSHelloBlock"}, { 0x0601, "FSParameterBlock"}, + { 0x0602, "FastStartUpBlock"}, { 0x0608, "PDInterfaceFSUDataAdjust"}, { 0x0609, "ARFSUDataAdjust"}, { 0x0700, "AutoConfiguration"}, { 0x0701, "AutoConfiguration Communication"}, { 0x0702, "AutoConfiguration Configuration"}, + { 0x0703, "AutoConfiguration Isochronous"}, { 0x0810, "PE_EntityFilterData"}, { 0x0811, "PE_EntityStatusData"}, { 0x0900, "RS_AdjustObserver" }, { 0x0901, "RS_GetEvent" }, { 0x0902, "RS_AckEvent" }, + { 0x0A00, "Upload BLOB Query" }, + { 0x0A01, "Upload BLOB" }, { 0xB050, "Ext-PLL Control / RTC+RTA SyncID 0 (EDD)" }, { 0xB051, "Ext-PLL Control / RTA SyncID 1 (GSY)" }, @@ -1219,6 +1395,13 @@ static const value_string pn_io_arproperties_acknowldege_companion_ar[] = { { 0, NULL } }; +/* Bit 28 */ +static const value_string pn_io_arproperties_time_aware_system[] = { + { 0x00000000, "NonTimeAware" }, + { 0x00000001, "TimeAware" }, + { 0, NULL } +}; + /* bit 29 for legacy startup mode*/ static const value_string pn_io_arproperties_combined_object_container_with_legacy_startupmode[] = { { 0x00000000, "CombinedObjectContainer not used" }, @@ -1349,9 +1532,9 @@ static const value_string pn_io_submodule_state_add_info[] = { { 0, NULL } }; -static const value_string pn_io_submodule_state_qualified_info[] = { - { 0x0000, "No QualifiedInfo available" }, - { 0x0001, "QualifiedInfo available" }, +static const value_string pn_io_submodule_state_advice[] = { + { 0x0000, "No Advice available" }, + { 0x0001, "Advice available" }, { 0, NULL } }; @@ -1367,9 +1550,9 @@ static const value_string pn_io_submodule_state_maintenance_demanded[] = { { 0, NULL } }; -static const value_string pn_io_submodule_state_diag_info[] = { - { 0x0000, "No DiagnosisData available" }, - { 0x0001, "DiagnosisData available" }, +static const value_string pn_io_submodule_state_fault[] = { + { 0x0000, "No Fault available" }, + { 0x0001, "Fault available" }, { 0, NULL } }; @@ -1433,68 +1616,65 @@ static const value_string pn_io_index[] = { { 0x8013, "Maintenance demanded in all codings for one subslot" }, /*0x8014 - 0x801D reserved */ { 0x801E, "SubstituteValues for one subslot" }, - /*0x801F - 0x8027 reserved */ + /*0x801F reserved */ + { 0x8020, "PDIRSubframeData for one subslot" }, + /*0x8021 - 0x8026 reserved */ + { 0x8027, "PDPortDataRealExtended for one subslot" }, { 0x8028, "RecordInputDataObjectElement for one subslot" }, { 0x8029, "RecordOutputDataObjectElement for one subslot" }, { 0x802A, "PDPortDataReal for one subslot" }, { 0x802B, "PDPortDataCheck for one subslot" }, { 0x802C, "PDIRData for one subslot" }, - { 0x802D, "Expected PDSyncData for one subslot with SyncID value 0" }, + { 0x802D, "PDSyncData for one subslot with SyncID value 0" }, /*0x802E reserved */ { 0x802F, "PDPortDataAdjust for one subslot" }, { 0x8030, "IsochronousModeData for one subslot" }, - { 0x8031, "Expected PDSyncData for one subslot with SyncID value 1" }, - { 0x8032, "Expected PDSyncData for one subslot with SyncID value 2" }, - { 0x8033, "Expected PDSyncData for one subslot with SyncID value 3" }, - { 0x8034, "Expected PDSyncData for one subslot with SyncID value 4" }, - { 0x8035, "Expected PDSyncData for one subslot with SyncID value 5" }, - { 0x8036, "Expected PDSyncData for one subslot with SyncID value 6" }, - { 0x8037, "Expected PDSyncData for one subslot with SyncID value 7" }, - { 0x8038, "Expected PDSyncData for one subslot with SyncID value 8" }, - { 0x8039, "Expected PDSyncData for one subslot with SyncID value 9" }, - { 0x803A, "Expected PDSyncData for one subslot with SyncID value 10" }, - { 0x803B, "Expected PDSyncData for one subslot with SyncID value 11" }, - { 0x803C, "Expected PDSyncData for one subslot with SyncID value 12" }, - { 0x803D, "Expected PDSyncData for one subslot with SyncID value 13" }, - { 0x803E, "Expected PDSyncData for one subslot with SyncID value 14" }, - { 0x803F, "Expected PDSyncData for one subslot with SyncID value 15" }, - { 0x8040, "Expected PDSyncData for one subslot with SyncID value 16" }, - { 0x8041, "Expected PDSyncData for one subslot with SyncID value 17" }, - { 0x8042, "Expected PDSyncData for one subslot with SyncID value 18" }, - { 0x8043, "Expected PDSyncData for one subslot with SyncID value 19" }, - { 0x8044, "Expected PDSyncData for one subslot with SyncID value 20" }, - { 0x8045, "Expected PDSyncData for one subslot with SyncID value 21" }, - { 0x8046, "Expected PDSyncData for one subslot with SyncID value 22" }, - { 0x8047, "Expected PDSyncData for one subslot with SyncID value 23" }, - { 0x8048, "Expected PDSyncData for one subslot with SyncID value 24" }, - { 0x8049, "Expected PDSyncData for one subslot with SyncID value 25" }, - { 0x804A, "Expected PDSyncData for one subslot with SyncID value 26" }, - { 0x804B, "Expected PDSyncData for one subslot with SyncID value 27" }, - { 0x804C, "Expected PDSyncData for one subslot with SyncID value 28" }, - { 0x804D, "Expected PDSyncData for one subslot with SyncID value 29" }, - { 0x804E, "Expected PDSyncData for one subslot with SyncID value 30" }, - { 0x804F, "Expected PDSyncData for one subslot with SyncID value 31" }, + { 0x8031, "PDTimeData for one subslot" }, + /*0x8032 - 0x804F reserved */ { 0x8050, "PDInterfaceMrpDataReal for one subslot" }, { 0x8051, "PDInterfaceMrpDataCheck for one subslot" }, { 0x8052, "PDInterfaceMrpDataAdjust for one subslot" }, { 0x8053, "PDPortMrpDataAdjust for one subslot" }, { 0x8054, "PDPortMrpDataReal for one subslot" }, - /*0x8055 - 0x805F reserved */ + { 0x8055, "PDPortMrpIcDataAdjust for one subslot" }, + { 0x8056, "PDPortMrpIcDataCheck for one subslot" }, + { 0x8057, "PDPortMrpIcDataReal for one subslot" }, + /*0x8058 - 0x805F reserved */ { 0x8060, "PDPortFODataReal for one subslot" }, { 0x8061, "PDPortFODataCheck for one subslot" }, { 0x8062, "PDPortFODataAdjust for one subslot" }, - /*0x8063 - 0x806F reserved */ + { 0x8063, "PDPortSFPDataCheck for one subslot" }, + /*0x8064 - 0x806F reserved */ { 0x8070, "PDNCDataCheck for one subslot" }, { 0x8071, "PDInterfaceAdjust for one subslot" }, { 0x8072, "PDPortStatistic for one subslot" }, /*0x8071 - 0x807F reserved */ { 0x8080, "PDInterfaceDataReal" }, /*0x8081 - 0x808F reserved */ - { 0x8090, "Expected PDInterfaceFSUDataAdjust" }, - /*0x8091 - 0xAFEF reserved except 0x80B0, 0x80AF and 0x80CF*/ + { 0x8090, "PDInterfaceFSUDataAdjust" }, + /*0x8091 - 0x809F reserved */ + { 0x80A0, "Profiles covering energy saving - Record_0" }, + /*0x80A1 - 0x80AE reserved */ { 0x80AF, "PE_EntityStatusData for one subslot" }, { 0x80B0, "CombinedObjectContainer" }, + /*0x80B1 - 0x80CE reserved */ { 0x80CF, "RS_AdjustObserver" }, + { 0x80D0, "Profiles covering condition monitoring - Record_0" }, + /*0x80D1 - 0x80DF reserved */ + { 0x80F0, "TSNNetworkControlDataReal" }, + { 0x80F1, "TSNStreamPathData" }, + { 0x80F2, "TSNSyncTreeData" }, + { 0x80F3, "TSNUploadNetworkAttributes" }, + { 0x80F4, "TSNExpectedNetworkAttributes" }, + { 0x80F5, "TSNNetworkControlDataAdjust" }, + { 0x80F6, "TSNStreamPathDataReal for stream class High" }, + { 0x80F7, "TSNStreamPathDataReal for stream class High Redundant" }, + { 0x80F8, "TSNStreamPathDataReal for stream class Low" }, + { 0x80F9, "TSNStreamPathDataReal for stream class Low Redundant" }, + /*0x80FA - 0x80FF reserved for CIM data */ + /*0x8100 - 0x81FF reserved */ + { 0x8200, "CIMSNMPAdjust" }, + /*0x8201 - 0xAFEF reserved */ { 0xAFF0, "I&M0" }, { 0xAFF1, "I&M1" }, { 0xAFF2, "I&M2" }, @@ -1605,7 +1785,8 @@ static const value_string pn_io_index[] = { { 0xE031, "PE_EntityStatusData for one AR" }, /*0xE032 - 0xE03F reserved */ { 0xE040, "MultipleWrite" }, - /*0xE041 - 0xE04F reserved */ + { 0xE041, "ApplicationReadyBlock" }, + /*0xE042 - 0xE04F reserved */ { 0xE050, "ARFSUDataAdjust data for one AR" }, /*0xE051 - 0xE05F reserved */ { 0xE060, "RS_GetEvent (using RecordDataRead service)" }, @@ -1643,11 +1824,24 @@ static const value_string pn_io_index[] = { { 0xF842, "PDExpectedData" }, /*0xF843 - 0xF84F reserved */ { 0xF850, "AutoConfiguration" }, + { 0xF860, "GSD upload using UploadBLOBQuery and UploadBLOB" }, { 0xF870, "PE_EntityFilterData" }, { 0xF871, "PE_EntityStatusData" }, - { 0xF880, "AssetManagementData" }, - /*0xF851 - 0xFBFF reserved except 0xF880*/ + { 0xF880, "AssetManagementData - contains all or first chunk of complete assets" }, + { 0xF881, "AssetManagementData - second chunk" }, + { 0xF882, "AssetManagementData - third chunk" }, + { 0xF883, "AssetManagementData - fourth chunk" }, + { 0xF884, "AssetManagementData - fifth chunk" }, + { 0xF885, "AssetManagementData - sixth chunk" }, + { 0xF886, "AssetManagementData - seventh chunk" }, + { 0xF887, "AssetManagementData - eighth chunk" }, + { 0xF888, "AssetManagementData - ninth chunk" }, + { 0xF889, "AssetManagementData - tenth chunk" }, + { 0xF8F0, "Stream Add using TSNAddStreamReq and TSNAddStreamRsp" }, { 0xF8F1, "PDRsiInstances" }, + { 0xF8F2, "Stream Remove using TSNRemoveStreamReq and TSNRemoveStreamRsp" }, + { 0xF8F3, "Stream Renew using TSNRenewStreamReq and TSNRenewStreamRsp" }, + { 0xFBFF, "Trigger index for RPC connection monitoring" }, /*0xFC00 - 0xFFFF reserved for profiles */ { 0, NULL } }; @@ -1660,12 +1854,15 @@ static const value_string pn_io_user_structure_identifier[] = { { 0x8003, "QualifiedChannelDiagnosis" }, /*0x8004 - 0x80FF reserved */ { 0x8100, "Maintenance" }, - /*0x8101 - 0x8FFF reserved except 8300, 8301, 8302, 8303 */ - { 0x8300, "Sequence of events RS_LowWatermark" }, - { 0x8301, "Sequence of events RS_Timeout" }, - { 0x8302, "Sequence of events RS_Overflow" }, - { 0x8303, "Sequence of events RS_Event" }, + /*0x8101 - 0x8FFF reserved except 8200, 8201, 8300, 8301, 8302, 8303, 8310, 8320 */ + { 0x8200, "Upload&Retrieval" }, + { 0x8201, "iParameter" }, + { 0x8300, "Reporting system RS_LowWatermark" }, + { 0x8301, "Reporting system RS_Timeout" }, + { 0x8302, "Reporting system RS_Overflow" }, + { 0x8303, "Reporting system RS_Event" }, { 0x8310, "PE_EnergySavingStatus" }, + { 0x8320, "Channel related Process Alarm reasons" }, /*0x9000 - 0x9FFF reserved for profiles */ /*0xA000 - 0xFFFF reserved */ { 0, NULL } @@ -1678,28 +1875,47 @@ static const value_string pn_io_channel_error_type[] = { { 0x0003, "Overvoltage" }, { 0x0004, "Overload" }, { 0x0005, "Overtemperature" }, - { 0x0006, "line break" }, - { 0x0007, "upper limit value exceeded" }, - { 0x0008, "lower limit value exceeded" }, + { 0x0006, "Wire break" }, + { 0x0007, "Upper limit value exceeded" }, + { 0x0008, "Lower limit value exceeded" }, { 0x0009, "Error" }, - /*0x000A - 0x000F reserved */ - { 0x0010, "parameterization fault" }, - { 0x0011, "power supply fault" }, - { 0x0012, "fuse blown / open" }, + { 0x000A, "Simulation active" }, + /*0x000B - 0x000E reserved */ + { 0x000F, "Parameter missing" }, + { 0x0010, "Parameterization fault" }, + { 0x0011, "Power supply fault" }, + { 0x0012, "Fuse blown / open" }, { 0x0013, "Manufacturer specific" }, - { 0x0014, "ground fault" }, - { 0x0015, "reference point lost" }, - { 0x0016, "process event lost / sampling error" }, - { 0x0017, "threshold warning" }, - { 0x0018, "output disabled" }, - { 0x0019, "safety event" }, - { 0x001A, "external fault" }, + { 0x0014, "Ground fault" }, + { 0x0015, "Reference point lost" }, + { 0x0016, "Process event lost / sampling error" }, + { 0x0017, "Threshold warning" }, + { 0x0018, "Output disabled" }, + { 0x0019, "FunctionalSafety event" }, + { 0x001A, "External fault" }, /*0x001B - 0x001F manufacturer specific */ + { 0x001F, "Temporary fault" }, /*0x0020 - 0x00FF reserved for common profiles */ + { 0x0040, "Mismatch of safety destination address" }, + { 0x0041, "Safety destination address not valid" }, + { 0x0042, "Safety source address not valid" }, + { 0x0043, "Safety watchdog time value is 0ms" }, + { 0x0044, "Parameter F_SIL exceeds SIL of specific application" }, + { 0x0045, "Parameter F_CRC_Length does not match generated values" }, + { 0x0046, "Version of F-Parameter set incorrect" }, + { 0x0047, "Data inconsistent in received F-Parameter block (CRC1 error)" }, + { 0x0048, "Device specific or unspecific diagnosis information, see manual" }, + { 0x0049, "Save iParameter watchdog time exceeded" }, + { 0x004A, "Restore iParameter watchdog time exceeded" }, + { 0x004B, "Inconsistent iParameters (iParCRC error)" }, + { 0x004C, "F_Block_ID not supported" }, + { 0x004D, "Transmission error: data inconsistent (CRC2 error)" }, + { 0x004E, "Transmission error: timeout" }, + { 0x004F, "Acknowledge needed to enable the channel(s)" }, /*0x0100 - 0x7FFF manufacturer specific */ { 0x8000, "Data transmission impossible" }, { 0x8001, "Remote mismatch" }, - { 0x8002, "Media redundancy mismatch" }, + { 0x8002, "Media redundancy mismatch - Ring" }, { 0x8003, "Sync mismatch" }, { 0x8004, "IsochronousMode mismatch" }, { 0x8005, "Multicast CR mismatch" }, @@ -1711,9 +1927,373 @@ static const value_string pn_io_channel_error_type[] = { { 0x800A, "Dynamic frame packing function mismatch" }, { 0x800B, "Media redundancy with planned duplication mismatch"}, { 0x800C, "System redundancy mismatch"}, + { 0x800D, "Multiple interface mismatch"}, + { 0x8010, "Power failure over Single Pair Ethernet"}, /* ends */ /*0x800D - 0x8FFF reserved */ /*0x9000 - 0x9FFF reserved for profile */ + /*0x9000 - 0x902F NE107 common (PA Profile 4.02) */ + { 0x9000, "Sensor element exciter faulty" }, + { 0x9001, "Error in evaluation electronics" }, + { 0x9002, "Error in internal energy supply" }, + { 0x9003, "Error in sensor element" }, + { 0x9004, "Error in actuator element" }, + { 0x9005, "Faulty installation e.g. dead space" }, + { 0x9006, "Parameter setting error" }, + { 0x9008, "Overloading" }, + { 0x9009, "Wrong polarity of aux power" }, + { 0x900A, "Maximum line length exceeded" }, + { 0x900B, "Corrosion/abrasion by medium" }, + { 0x900C, "Fouling on sensor element" }, + { 0x900D, "Auxil medium missing or insufficient" }, + { 0x900E, "Wear reserve used up (operation)" }, + { 0x900F, "Wear reserve used up (wear)" }, + { 0x9010, "Error in peripherals" }, + { 0x9011, "Electromag interference too high" }, + { 0x9012, "Temperature of medium too high" }, + { 0x9013, "Ambient temperature too high" }, + { 0x9014, "Vibration/Impact load too high" }, + { 0x9015, "Auxiliary power range off-spec" }, + { 0x9016, "Auxiliary medium missing" }, + { 0x9017, "Excessive temperature shock" }, + { 0x9018, "Deviation from measurement" }, + { 0x9019, "Humidity in electronics area" }, + { 0x901A, "Medium in electronics area" }, + { 0x901B, "Mechanical damage" }, + { 0x901C, "Communication error" }, + { 0x901D, "Foreign material in electro area" }, + /*0x9030 - 0x906F NE107 contact thermometer (PA Profile 4.02) */ + { 0x9030, "Immersion depth too limited" }, + { 0x9031, "Unequate medium around sensor" }, + { 0x9032, "Temp distrib not representative" }, + { 0x9033, "Inadequate thermal contact" }, + { 0x9034, "Sensor close to heat source/sink" }, + { 0x9035, "External temperature influence" }, + { 0x9036, "Insufficient thermocoupling" }, + { 0x9037, "Thermocoupling too high" }, + { 0x9038, "Friction heat by flowing gases" }, + { 0x9039, "Thermalcapac of sensor too high" }, + { 0x903A, "Deposits" }, + { 0x903B, "Systemrelated resonant vibration" }, + { 0x903C, "Resonantvibrat excited by flow" }, + { 0x903D, "Leakage" }, + { 0x903E, "Abrasion" }, + { 0x903F, "Corrosion" }, + { 0x9040, "Flow approach speed too high" }, + { 0x9041, "Insulation to ground too low" }, + { 0x9042, "Insulation betw. lines too low" }, + { 0x9043, "Parasitic thermal elements" }, + { 0x9044, "Parasitic galvanic elements" }, + { 0x9045, "Short circuit" }, + { 0x9046, "Shorted coil and break" }, + { 0x9047, "Line/contact resistance too high" }, + { 0x9048, "Compression spring failure" }, + { 0x9049, "Drift of sensor charact curve" }, + { 0x904A, "Insuff contact of meas insert" }, + { 0x904B, "Meas insert mechanical seized" }, + { 0x904C, "Measuring insert in thermowell" }, + { 0x904D, "Measuring insert too short" }, + { 0x904E, "Resistance wire abrasion" }, + { 0x904F, "Mechanic stress character curve" }, + { 0x9050, "Thermal stress character curve" }, + { 0x9051, "Intrinsic heating too severe" }, + { 0x9052, "EMI on measuring circuit" }, + { 0x9053, "Faulty linearisation" }, + { 0x9054, "Incorrect sensor position" }, + { 0x9055, "Faulty comparative point temp" }, + { 0x9056, "Faulty compar of line resistance" }, + { 0x9057, "Unsymmet supply line resistance" }, + { 0x9058, "Wrong material of compens line" }, + { 0x9059, "Damage to supply lines" }, + { 0x905A, "Capacitive feedback" }, + { 0x905B, "Potential transfer" }, + { 0x905C, "Potential differences exceeded" }, + { 0x905D, "Impermiss mix of wire systems" }, + { 0x905E, "Reverse polarity of lines" }, + { 0x905F, "Reverse polarity of lines" }, + /*0x9070 - 0x90A7 NE107 pressure (PA Profile 4.02) */ + { 0x9070, "Pressure peaks outside range" }, + { 0x9071, "Deposits on the seal diaphragm" }, + { 0x9072, "Characteristic curve change" }, + { 0x9073, "Inc. measuring err. (turn down)" }, + { 0x9074, "Wear on the seal diaphragm" }, + { 0x9075, "Process seal at flush diaphragm" }, + { 0x9076, "Offset error due to inst. pos." }, + { 0x9077, "Seal diaphragm deformation" }, + { 0x9078, "Hydrogen penetration" }, + { 0x9079, "Mean value deviation" }, + { 0x907A, "Pressure sensor system leakage" }, + { 0x907B, "Hydrostatic offset" }, + { 0x907C, "Gas seepage from pressure sensor" }, + { 0x907D, "Add. measuring err. due to temp." }, + { 0x907E, "Delta T in capillary tubing" }, + { 0x907F, "Increase in compensation times" }, + { 0x9080, "Oleic acid leak" }, + { 0x9081, "Pulse lines blocked" }, + { 0x9082, "Gas inclusion in liquid medium" }, + { 0x9083, "Delta T in pulse lines" }, + { 0x9084, "Liquid inclusion in gas" }, + { 0x9088, "Sedimentation on sensor" }, + { 0x9089, "Change of density" }, + { 0x908A, "Wrong height / wrong adjustment" }, + { 0x908B, "Clogged membrane" }, + { 0x908C, "Error with pulse line" }, + { 0x908D, "Internal tank pressure influence" }, + { 0x908E, "Influence of temperature" }, + { 0x908F, "Hydrogen diffusion" }, + { 0x9090, "Absence of bubble gas" }, + { 0x9091, "Air-bubble feed line blocked" }, + { 0x9092, "Wear and tear of diaphragm" }, + { 0x9093, "Gas seepage" }, + { 0x9094, "Pressure rise at rel. of bubbles" }, + { 0x9095, "Pressure sensor overload" }, + { 0x9096, "Flow rate of bubble gas too high" }, + /*0x90F8 - 0x910F NE107 coriolis (PA Profile 4.02) */ + { 0x90F8, "Gas bubbles in the liquid" }, + { 0x90F9, "Fouling, clogging" }, + { 0x90FA, "Erosion, corrosion" }, + { 0x90FB, "Faulty mounting" }, + { 0x90FC, "Asymmetry of measuring tubes" }, + { 0x90FD, "External vibrations" }, + { 0x90FE, "Pulsating flow" }, + { 0x90FF, "Incomplete filling" }, + /*0x9110 - 0x9127 NE107 EMF (PA Profile 4.02) */ + { 0x9110, "Gas bubbles in the liquid" }, + { 0x9111, "Corrosion of electrodes" }, + { 0x9112, "Electrical conductivity too low" }, + { 0x9113, "Liner damage" }, + { 0x9114, "Electrode fouling" }, + { 0x9115, "External magnetic fields" }, + { 0x9116, "Electrode short circuit" }, + { 0x9117, "Incomplete filling" }, + /*0x9128 - 0x913F NE107 thermal mass (PA Profile 4.02) */ + /* empty */ + /*0x9140 - 0x915F NE107 ultrasonic (PA Profile 4.02) */ + { 0x9140, "Particle inclusions Check process" }, + { 0x9141, "Gas bubbles in the liquid" }, + { 0x9142, "Body fouling" }, + { 0x9143, "External ultrasonic waves" }, + { 0x9144, "Sensor fouling" }, + { 0x9145, "Erosion" }, + { 0x9146, "Faulty mounting (clamp on)" }, + { 0x9147, "Pulsating flow" }, + { 0x9148, "Sound conductivity" }, + { 0x9149, "Signal lost due to overrange" }, + { 0x914A, "Flow profile disturbance" }, + { 0x914B, "Incomplete filling" }, + /*0x9160 - 0x9177 NE107 variable area (PA Profile 4.02) */ + { 0x9160, "Blocked float" }, + { 0x9161, "Fouling" }, + { 0x9162, "Erosion, corrosion" }, + { 0x9163, "Gas bubbles in the liquid" }, + { 0x9164, "Pulsating flow" }, + { 0x9165, "External magnetic fields" }, + /*0x9178 - 0x9197 NE107 vortex (PA Profile 4.02) */ + { 0x9178, "Gas bubbles in the liquid" }, + { 0x9179, "External vibrations" }, + { 0x917A, "Pulsating flow" }, + { 0x917B, "Two phase flow" }, + { 0x917C, "Cavitation in device" }, + { 0x917D, "Out of linear range" }, + { 0x917E, "Sensor fouling" }, + { 0x917F, "Solid particles" }, + { 0x9180, "Flow profile disturbance" }, + { 0x9181, "Incomplete filling" }, + { 0x9182, "Bluff body fouling" }, + /*0x9198 - 0x91B7 NE107 buoyancy (PA Profile 4.02) */ + { 0x9198, "Gas density change above liquid" }, + { 0x9199, "Vibration/strokes from outside" }, + { 0x919A, "Displacer partly inside compartm" }, + { 0x919B, "Displacer too heavy/too light" }, + { 0x919C, "Density change or displac config" }, + { 0x919D, "Sticking of torque or spring" }, + { 0x919E, "Displacer swinging freedomly" }, + { 0x919F, "Displac mounting faulty" }, + { 0x91A0, "Displacer blocked or bended" }, + { 0x91A1, "Displacer too light, corrosion" }, + { 0x91A2, "Displacer leakage" }, + { 0x91A3, "Force sensor broken" }, + /*0x91B8 - 0x91FF NE107 radar (PA Profile 4.02) */ + { 0x91B8, "Change of running time, encrust?" }, + { 0x91B9, "False echoes, encrustation?" }, + { 0x91BA, "Wrong/no indication, foam" }, + { 0x91BB, "Poor reflection" }, + { 0x91BC, "Problems with tank wall" }, + { 0x91BD, "Surge tube or vent blocked" }, + { 0x91BE, "Nozzle too long/high" }, + { 0x91BF, "No metallic reflecting surface" }, + { 0x91C0, "Blocking distance underrun" }, + { 0x91C1, "Mechanical overloading of probe" }, + { 0x91C2, "Probe lost or torn off" }, + { 0x91C3, "Overload by external power" }, + { 0x91C4, "Product or moisture in coupler" }, + { 0x91C5, "Change of microwave speed" }, + { 0x91C6, "Corr,abras, coating detachment" }, + { 0x91C7, "Probe in filling flow" }, + { 0x91D8, "No clear interface Emulsion?" }, + { 0x91D9, "Wrong indication param setting" }, + { 0x91DA, "Diff dielecon too small" }, + { 0x91DB, "More than one interface" }, + { 0x91DC, "First phase thickness too small" }, + { 0x91E0, "Attenuation due to deposits" }, + { 0x91E1, "False echoes due to deposits" }, + { 0x91E2, "Corrosion surge tube (inside)" }, + { 0x91E3, "Impurity in wave coupler area" }, + { 0x91E4, "Antenna immersed in product" }, + { 0x91E5, "Wrong signal due to foam" }, + { 0x91E6, "Strong signal attenuation" }, + { 0x91E7, "Shift of radar signal speed" }, + { 0x91E8, "Reflection" }, + { 0x91E9, "False interpretation of the echo" }, + { 0x91EA, "Bad polarization of the signal" }, + { 0x91EB, "Surge tube or vent blocked" }, + { 0x91EC, "Nozzle too long for antenna" }, + { 0x91ED, "Wall clearance, not vertical" }, + { 0x91EE, "Corrosion on antenna" }, + { 0x91EF, "Attenuation due to fog or dust" }, + { 0x91F0, "Antenna signal blocked" }, + { 0x91F1, "Blocking distance under-run" }, + { 0x91F2, "Echo too strong (overmodulation)" }, + /*0x9208 - 0x9257 NE107 electro (PA Profile 4.02) */ + { 0x9208, "Faulty torque monitoring" }, + { 0x9209, "Worn gear/spindle" }, + { 0x920A, "Drive torque off-spec" }, + { 0x920B, "Device temperature too high" }, + { 0x920C, "Faulty limit position monitoring" }, + { 0x920D, "Motor overload" }, + { 0x920E, "Oil quality off-spec" }, + { 0x920F, "Oil loss" }, + { 0x9210, "Blocked drive" }, + { 0x9211, "Off-spec seat/plug leakage" }, + { 0x9212, "Off-spec spindle/shaft seal leak" }, + { 0x9213, "Alteration and wear on spindle" }, + { 0x9214, "Altered friction" }, + { 0x9215, "Wear in the valve" }, + { 0x9216, "Blocked valve" }, + { 0x9217, "Change in valve move performance" }, + { 0x9218, "Changed breakaway moment" }, + { 0x9219, "Spindle deformation" }, + { 0x921A, "Plug torn off" }, + { 0x921B, "Off-spec valve temperature" }, + { 0x921C, "Off-spec characteristic line" }, + { 0x921E, "Incorrect position sensing" }, + { 0x921F, "Input signal off-spec" }, + { 0x9220, "Vibration off-spec" }, + { 0x9221, "Temp in positioner too high/low" }, + { 0x9222, "Moisture in positioner" }, + { 0x9223, "Additional IO module defect" }, + { 0x9224, "Signal without end position" }, + { 0x9225, "No signal in end position" }, + { 0x9226, "Control loop oscillation" }, + { 0x9227, "Hysteresis" }, + { 0x9228, "Changed friction" }, + { 0x9229, "Backlash between drive and valve" }, + { 0x922A, "Persistent deviation of control" }, + { 0x922B, "Inadmissible dynamic stress" }, + { 0x922C, "Faulty mounting" }, + { 0x922D, "Faulty mount positioner to motor" }, + { 0x922E, "Leak in piping" }, + { 0x922F, "Insufficient drive power" }, + { 0x9231, "Operator error during operation" }, + { 0x9232, "Inadmissible static stress" }, + { 0x9233, "Recording of pers. control dev." }, + { 0x9234, "Parameter plausibility check" }, + { 0x9235, "Status report on operating mode" }, + { 0x9236, "Histogram for valve positions" }, + { 0x9237, "Zero point and endpoint shift" }, + { 0x9238, "Running time monitoring" }, + { 0x9239, "Evaluation of internal signals" }, + { 0x923A, "Operating hours counter" }, + { 0x923B, "Pressure-displacement diagram" }, + { 0x923C, "Total valve travel" }, + { 0x923D, "Step response diagnostics" }, + { 0x923E, "Internal temperature monitoring" }, + { 0x923F, "Counter for direction changes" }, + { 0x9240, "Operating archive" }, + { 0x9241, "Report archive" }, + { 0x9242, "Status reports on access control" }, + { 0x9243, "Cavitation / flashing" }, + { 0x9244, "Partial stroke test" }, + { 0x9245, "P dif measurement across valve" }, + { 0x9246, "Noise level measurement" }, + /*0x9258 - 0x92A7 NE107 electro pneumatic (PA Profile 4.02) */ + { 0x9258, "Minor drive leakage" }, + { 0x9259, "High friction" }, + { 0x925A, "Feed air pressure off-spec" }, + { 0x925B, "Vent blockage" }, + { 0x925C, "Diaphragm damage" }, + { 0x925D, "Broken spring" }, + { 0x925E, "Moist air in spring chamber" }, + { 0x925F, "Blocked drive" }, + { 0x9260, "Drive leakage too big" }, + { 0x9261, "Off-spec seat/plug leakage" }, + { 0x9262, "Off-spec spindle/shaft seal leak" }, + { 0x9263, "Alteration and wear on spindle" }, + { 0x9264, "Altered friction" }, + { 0x9265, "Wear in the valve" }, + { 0x9266, "Blocked valve" }, + { 0x9267, "Change in valve move performance" }, + { 0x9268, "Changed breakaway moment" }, + { 0x9269, "Spindle deformation" }, + { 0x926A, "Plug torn off" }, + { 0x926B, "Off-spec valve temperature" }, + { 0x926C, "Off-spec characteristic line" }, + { 0x926D, "Fault in the pneumatic unit" }, + { 0x926E, "Incorrect position sensing" }, + { 0x926F, "Input signal off-spec" }, + { 0x9270, "Vibration off-spec" }, + { 0x9271, "Temp in positioner too high/low" }, + { 0x9272, "Moisture in positioner" }, + { 0x9273, "Additional IO module defect" }, + { 0x9274, "Signal without end position" }, + { 0x9275, "No signal in end position" }, + { 0x9276, "Control loop oscillation" }, + { 0x9277, "Hysteresis" }, + { 0x9278, "Changed friction" }, + { 0x9279, "Backlash between drive and valve" }, + { 0x927A, "Persistent deviation of control" }, + { 0x927B, "Inadmissible dynamic stress" }, + { 0x927C, "Faulty mounting" }, + { 0x927D, "Faulty mount positioner to drive" }, + { 0x927E, "Leak in piping" }, + { 0x927F, "Insufficient drive power" }, + { 0x9280, "Quality of feed air off-spec" }, + { 0x9281, "Operator error during operation" }, + { 0x9282, "Inadmissible static stress" }, + { 0x9283, "Recording of pers. control dev." }, + { 0x9284, "Parameter plausibility check" }, + { 0x9285, "Status report on operating mode" }, + { 0x9286, "Histogram for valve positions" }, + { 0x9287, "Zero point and endpoint shift" }, + { 0x9288, "Running time monitoring" }, + { 0x9289, "Evaluation of internal signals" }, + { 0x928A, "Operating hours counter" }, + { 0x928B, "Pressure-displacement diagram" }, + { 0x928C, "Total valve travel" }, + { 0x928D, "Step response diagnostics" }, + { 0x928E, "Internal temperature monitoring" }, + { 0x928F, "Counter for direction changes" }, + { 0x9290, "Operating archive" }, + { 0x9291, "Report archive" }, + { 0x9292, "Status reports on access control" }, + { 0x9293, "Cavitation / flashing" }, + { 0x9294, "Partial stroke test" }, + { 0x9295, "P dif measurement across valve" }, + { 0x9296, "Noise level measurement" }, + /*0x92A8 - 0x92BF NE107 sol valve (PA Profile 4.02) */ + { 0x92A8, "Failure to reach safe position" }, + { 0x92A9, "Failure to reach operat position" }, + { 0x92AA, "High temperature in coil" }, + { 0x92AB, "Moisture, humidity" }, + { 0x92AC, "Signal outside of endposition" }, + { 0x92AD, "No signal at endposition" }, + /*0x92C0 - 0x92DF Physical block (PA Profile 4.02) */ + { 0x92CD, "Maintenance" }, + { 0x92D0, "Maintenance alarm" }, + { 0x92D1, "Maintenance demanded" }, + { 0x92D2, "Function check" }, + { 0x92D3, "Out of spec." }, + { 0x92D4, "Update event" }, /*0xA000 - 0xFFFF reserved */ { 0, NULL } }; @@ -1747,8 +2327,8 @@ static const value_string pn_io_ext_channel_error_type0x8000[] = { static const value_string pn_io_ext_channel_error_type0x8001[] = { /* 0x0000 Reserved */ /* 0x0001 - 0x7FFF Manufacturer specific */ - { 0x8000, "Peer Chassis ID mismatch"}, - { 0x8001, "Peer Port ID mismatch"}, + { 0x8000, "Peer name of station mismatch"}, + { 0x8001, "Peer name of port mismatch"}, { 0x8002, "Peer RT_CLASS_3 mismatch a"}, { 0x8003, "Peer MAUType mismatch"}, { 0x8004, "Peer MRP domain mismatch"}, @@ -1758,7 +2338,8 @@ static const value_string pn_io_ext_channel_error_type0x8001[] = { { 0x8008, "Peer PTCP mismatch b"}, { 0x8009, "Peer Preamble Length mismatch"}, { 0x800A, "Peer Fragmentation mismatch"}, - /* 0x800B - 0x8FFF Reserved */ + { 0x800B, "Peer MRP Interconnection domain mismatch"}, + /* 0x800C - 0x8FFF Reserved */ /* 0x9000 - 0x9FFF Reserved for profiles */ /* 0xA000 - 0xFFFF Reserved */ { 0, NULL } @@ -1867,7 +2448,16 @@ static const value_string pn_io_ext_channel_error_type0x8007[] = { /* 0x0000 Reserved */ /* 0x0001 - 0x7FFF Manufacturer specific */ { 0x8000, "Power Budget"}, - /* 0x8001 - 0x8FFF Reserved */ + { 0x8001, "SFP - Temperature threshold violation (High)"}, + { 0x8002, "SFP - TX Bias threshold violation (High)"}, + { 0x8003, "SFP - TX Bias threshold violation (Low)"}, + { 0x8004, "SFP - TX Power threshold violation (High)"}, + { 0x8005, "SFP - TX Power threshold violation (Low)"}, + { 0x8006, "SFP - RX Power threshold violation (High)"}, + { 0x8007, "SFP - RX Power threshold violation (Low)"}, + { 0x8008, "SFP - TX Fault State indication"}, + { 0x8009, "SFP - RX Loss State indication"}, + /* 0x800A - 0x8FFF Reserved */ /* 0x9000 - 0x9FFF Reserved for profiles */ /* 0xA000 - 0xFFFF Reserved */ { 0, NULL } @@ -1922,6 +2512,56 @@ static const value_string pn_io_ext_channel_error_type0x800C[] = { { 0, NULL } }; + /* ExtChannelErrorType for ChannelErrorType "Power failure over Single Pair Ethernet" 0x8010 */ +static const value_string pn_io_ext_channel_error_type0x8010[] = { + /* 0x0000 Reserved */ + /* 0x0001 - 0x7FFF Manufacturer specific */ + { 0x8000, "SPE power supply - Short circuit"}, + { 0x8001, "SPE power supply - Open circuit"}, + { 0x8002, "SPE power supply - Voltage level"}, + { 0x8003, "SPE power supply - Current level"}, + /* 0x8004 - 0x8FFF Reserved */ + /* 0x9000 - 0x9FFF Reserved for profiles */ + /* 0xA000 - 0xFFFF Reserved */ + { 0, NULL } +}; + +/* QualifiedChannelQualifier */ +static const value_string pn_io_qualified_channel_qualifier[] = { + {0x00000001, "Reserved"}, + {0x00000002, "Reserved"}, + {0x00000004, "Reserved"}, + {0x00000008, "Qualifier_3 (Advice)"}, + {0x00000010, "Qualifier_4 (Advice, PA: UpdateEvent)"}, + {0x00000020, "Qualifier_5 (Advice, PA: OutOfSpecification)"}, + {0x00000040, "Qualifier_6 (Advice)"}, + {0x00000080, "Qualifier_7 (MaintenanceRequired)"}, + {0x00000100, "Qualifier_8 (MaintenanceRequired)"}, + {0x00000200, "Qualifier_9 (MaintenanceRequired)"}, + {0x00000400, "Qualifier_10 (MaintenanceRequired)"}, + {0x00000800, "Qualifier_11 (MaintenanceRequired)"}, + {0x00001000, "Qualifier_12 (MaintenanceRequired, PA: MaintenanceRequired)"}, + {0x00002000, "Qualifier_13 (MaintenanceRequired)"}, + {0x00004000, "Qualifier_14 (MaintenanceRequired)"}, + {0x00008000, "Qualifier_15 (MaintenanceRequired)"}, + {0x00010000, "Qualifier_16 (MaintenanceRequired)"}, + {0x00020000, "Qualifier_17 (MaintenanceDemanded)"}, + {0x00040000, "Qualifier_18 (MaintenanceDemanded)"}, + {0x00080000, "Qualifier_19 (MaintenanceDemanded)"}, + {0x00100000, "Qualifier_20 (MaintenanceDemanded)"}, + {0x00200000, "Qualifier_21 (MaintenanceDemanded)"}, + {0x00400000, "Qualifier_22 (MaintenanceDemanded, PA: MaintenanceDemanded)"}, + {0x00800000, "Qualifier_23 (MaintenanceDemanded)"}, + {0x01000000, "Qualifier_24 (MaintenanceDemanded, PA: FunctionCheck)"}, + {0x02000000, "Qualifier_25 (MaintenanceDemanded)"}, + {0x04000000, "Qualifier_26 (MaintenanceDemanded)"}, + {0x08000000, "Qualifier_27 (Fault)"}, + {0x10000000, "Qualifier_28 (Fault)"}, + {0x20000000, "Qualifier_29 (Fault)"}, + {0x40000000, "Qualifier_30 (Fault, PA: Fault)"}, + {0x80000000, "Qualifier_31 (Fault)"}, + {0, NULL}}; + static const value_string pn_io_channel_properties_type[] = { { 0x0000, "submodule or unspecified" }, { 0x0001, "1 Bit" }, @@ -2003,7 +2643,9 @@ static const value_string pn_io_mau_type[] = { { 0x002E, "100BASELX10" }, /*0x002F - 0x0035 reserved */ { 0x0036, "100BASEPXFD" }, - /*0x0037 - 0xFFFF reserved */ + /*0x0037 - 0x008C reserved */ + { 0x008D, "10BASET1L" }, + /*0x008E - 0xFFFF reserved */ { 0, NULL } }; @@ -2057,7 +2699,9 @@ static const range_string pn_io_mau_type_extension[] = { { 0x0000, 0x0000, "No SubMAUType" }, { 0x0001, 0x00FF, "Reserved" }, { 0x0100, 0x0100, "POF" }, - { 0x0101, 0xFFEF, "Reserved for SubMAUType" }, + { 0x0101, 0x01FF, "Reserved for SubMAUType" }, + { 0x0200, 0x0200, "APL" }, + { 0x0201, 0xFFEF, "Reserved for SubMAUType" }, { 0xFFF0, 0xFFFF, "Reserved" }, { 0, 0, NULL } }; @@ -2120,7 +2764,6 @@ static const value_string pn_io_media_type[] = { { 0, NULL } }; - static const value_string pn_io_fiber_optic_type[] = { { 0x0000, "No fiber type adjusted" }, { 0x0001, "9 um single mode fiber" }, @@ -2446,7 +3089,7 @@ static const value_string pn_io_profidrive_format_vals[] = { { 0, NULL } }; -static const value_string pn_io_profidrive_parameter_resp_errors[] = +static const value_string pn_io_profidrive_parameter_resp_errors[] = { {0x0, "Disallowed parameter number" }, {0x1, "The parameter value cannot be changed" }, @@ -2615,6 +3258,481 @@ static const value_string pn_io_pdportstatistic_counter_status_reserved[] = { { 0, NULL } }; +static const value_string pn_io_tsn_domain_vid_config_vals[] = { + { 0x00, "Reserved" }, + { 0x64, "NonStreamVID-Default" }, + { 0x65, "StreamHighVID-Default" }, + { 0x66, "StreamHighRedVID-Default" }, + { 0x67, "StreamLowVID-Default" }, + { 0x68, "StreamLowRedVID-Default" }, + { 0x69, "NonStreamVIDB-Default" }, + { 0x6A, "NonStreamVIDC-Default" }, + { 0x6B, "NonStreamVIDD-Default" }, + { 0, NULL } +}; + +static const value_string pn_io_tsn_domain_port_config_preemption_enabled_vals[] = { + { 0x00, "Preemption support is disabled for this port" }, + { 0x01, "Preemption support is enabled for this port" }, + { 0, NULL } +}; + +static const value_string pn_io_tsn_domain_port_config_boundary_port_config_vals[] = { + { 0x00, "No boundary port" }, + { 0x01, "Boundary port with Remapping1" }, + { 0x02, "Boundary port with Remapping2" }, + { 0, NULL } +}; + +static const range_string pn_io_tsn_domain_port_ingress_rate_limiter_cir[] = { + { 0x0000, 0x0000, "No Boundary Port" }, + { 0x0001, 0xFFFF, "Committed information rate in 0,1 Mbit/s"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_port_ingress_rate_limiter_cbs[] = { + { 0x0000, 0x0000, "No Boundary Port" }, + { 0x0001, 0xFFFF, "Committed burst size in octets"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_port_ingress_rate_limiter_envelope[] = { + { 0x0000, 0x0000, "No Boundary Port" }, + { 0x0001, 0x0001, "Best effort envelope"}, + { 0x0002, 0x0002, "RT_CLASS_X, RTA_CLASS_X envelope"}, + { 0x0003, 0xFFFF, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_port_ingress_rate_limiter_rank[] = { + { 0x0000, 0x0000, "No Boundary Port" }, + { 0x0001, 0x0001, "CF1"}, + { 0x0002, 0x0002, "CF2"}, + { 0x0003, 0x0003, "CF3"}, + { 0x0004, 0x0004, "CF4"}, + { 0x0005, 0x0005, "CF5"}, + { 0x0006, 0xFFFF, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_cir[] = { + { 0x0000, 0x0000, "Used in case of no rate limiter" }, + { 0x0001, 0xFFFF, "Committed information rate in 0,1 Mbit/s"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_cbs[] = { + { 0x0000, 0x0000, "Used in case of no rate limiter" }, + { 0x0001, 0xFFFF, "Committed burst size in octets"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_envelope[] = { + { 0x00, 0x00, "Used in case of no rate limiter" }, + { 0x01, 0x01, "Best effort envelope"}, + { 0x02, 0xFF, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_rank[] = { + { 0x00, 0x00, "Used in case of no boundary port" }, + { 0x01, 0x01, "CF1"}, + { 0x02, 0x02, "CF2"}, + { 0x03, 0x03, "CF3"}, + { 0x04, 0x04, "CF4"}, + { 0x05, 0x05, "CF5"}, + { 0x06, 0xFF, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_queue_id[] = { + { 0x00, 0x07, "Identifier of the queue" }, + { 0x08, 0xFF, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_rate_limiter_reserved[] = { + { 0x00, 0xFF, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string pn_io_network_domain[] = { + { 0x00000000, 0x00000000, "No Deadline" }, + { 0x00000001, 0xFFFFFFFF, "The Deadline in Microseconds"}, + { 0, 0, NULL } +}; + +static const value_string pn_io_time_domain_number_vals[] = { + { 0x0000, "Global Time" }, + { 0x0001, "Global Time Redundant" }, + { 0x0020, "Working Clock" }, + { 0x0021, "Working Clock Redundant" }, + { 0, NULL } +}; + +static const value_string pn_io_time_pll_window_vals[] = { + { 0x00000000, "Disabled" }, + { 0x000003E8, "Default" }, + { 0x00002710, "Default" }, + { 0x000186A0, "Default" }, + { 0x000F4240, "Default" }, + { 0x00989680, "Default" }, + { 0, NULL } +}; + +static const value_string pn_io_message_interval_factor_vals[] = { + { 0x0000, "Reserved" }, + { 0x03E8, "Default" }, + { 0x0FA0, "Default" }, + { 0, NULL } +}; + +static const range_string pn_io_message_timeout_factor[] = { + { 0x0000, 0x0000, "Disabled" }, + { 0x0001, 0x0002, "Optional" }, + { 0x0003, 0x0005, "Mandatory" }, + { 0x0006, 0x0006, "Default, mandatory" }, + { 0x0007, 0x000F, "Mandatory" }, + { 0x0010, 0x01FF, "Optional" }, + { 0x0200, 0xFFFF, "Reserved" }, + { 0, 0, NULL } +}; + +static const value_string pn_io_time_sync_properties_vals[] = { + { 0x00, "Reserved" }, + { 0x01, "External Sync" }, + { 0x02, "Internal Sync" }, + { 0x03, "Reserved" }, + { 0, NULL } +}; + +static const range_string pn_io_tsn_domain_queue_config_shaper[] = { + { 0x00, 0x00, "Reserved" }, + { 0x01, 0x01, "Strict Priority" }, + { 0x02, 0xFF, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_domain_sync_port_role_vals[] = { + { 0x00,0x00, "The port is not part of the sync tree for this sync domain" }, + { 0x01,0x01, "Sync egress port for this sync domain" }, + { 0x02,0x02, "Sync ingress port for this sync domain" }, + { 0x02,0XFF, "Reserved" }, + { 0, 0, NULL } +}; + +static const value_string pn_io_tsn_fdb_command[] = { + { 0x01, "AddStreamEntry" }, + { 0x02, "RemoveStreamEntry" }, + { 0x03, "RemoveAllStreamEntries" }, + /* all others reserved */ + { 0, NULL } +}; + +static const range_string pn_io_tsn_transfer_time_tx_vals[] = { + { 0x00000000, 0x00000000, "Reserved" }, + { 0x00000001, 0x05F5E100, "Egress transfer time for the local interface of an endstation" }, + { 0x05F5E101, 0xFFFFFFFF, "Reserved" }, + { 0, 0, NULL } + +}; + +static const range_string pn_io_tsn_transfer_time_rx_vals[] = { + + { 0x00000000, 0x00000000, "Reserved" }, + { 0x00000001, 0x05F5E100, "Ingress transfer time for the local interface of an endstation" }, + { 0x05F5E101, 0xFFFFFFFF, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_max_supported_record_size_vals[] = { + { 0x00000000,0x00000FE3, "Reserved" }, + { 0x00000FE4,0x0000FFFF, "Describes the maximum supported size of RecordDataWrite." }, + {0x00010000,0xFFFFFFFF,"Reserved"}, + { 0, 0, NULL } +}; +static const range_string pn_io_tsn_forwarding_group_vals[] = { + { 0x00,0x00, "Reserved" }, + { 0x01,0xFF, "Identifier of logical port grouping. Identifies ports with equal forwarding delay values." }, + { 0, 0, NULL } +}; + +static const value_string pn_io_tsn_stream_class_vals[] = { + + /*other reserved */ + { 0x01, "High" }, + { 0x02, "High Redundant" }, + { 0x03, "Low" }, + { 0x04, "Low Redundant" }, + { 0, NULL } +}; + +static const range_string pn_io_tsn_independent_forwarding_delay_vals[] = { + + { 0x00000000, 0x00000000, "Reserved" }, + { 0x00000001, 0x000F4240, "Independent bridge delay value used for calculation" }, + { 0, 0, NULL } +}; + +static const range_string pn_io_tsn_dependent_forwarding_delay_vals[] = { + + { 0x00000000, 0x00000000, "Reserved" }, + { 0x00000001, 0x000C3500, "Octet size dependent bridge delay value used for calculation" }, + { 0, 0, NULL } +}; + +static const value_string pn_io_tsn_number_of_queues_vals[] = { + + { 0x06, "The bridge supports six transmit queues at the port" }, + { 0x08, "The bridge supports eight transmit queues at the port" }, + { 0, NULL } +}; + +static const value_string pn_io_tsn_port_capabilities_time_aware_vals[] = { + { 0x00, "This port is not usable within a Time Aware System"}, + { 0x01, "This port is usable within a Time Aware System" }, + { 0, NULL } +}; +static const value_string pn_io_tsn_port_capabilities_preemption_vals[] = { + { 0x00, "Preemption is not supported at this port" }, + { 0x01, "Preemption is supported at this port"}, + { 0, NULL } +}; + +static const value_string pn_io_tsn_port_capabilities_queue_masking_vals[] = { + { 0x00, "Queue Masking is not supported at this port"}, + { 0x01, "Queue Masking is supported at this port" }, + { 0, NULL } +}; + +/* Format of submodule ident number as per PA Profile 4.02 specification: + [VariantOfSubmodule, Block_object, Parent_Class, Class] */ +static const value_string pn_io_pa_profile_block_object_vals[] = { + { 0, "DAP" }, + { 1, "PB" }, + { 2, "FB" }, + { 3, "TB" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_dap_submodule_vals[] = { + { 1, "DAP" }, + { 2, "Device Management" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_physical_block_parent_class_vals[] = { + { 1, "Transmitter" }, + { 2, "Actuator" }, + { 3, "Discrete I/O" }, + { 4, "Controller" }, + { 5, "Analyzer" }, + { 6, "Lab Device" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_function_block_class_vals[] = { + { 1, "Input" }, + { 2, "Output" }, + { 3, "Further Input" }, + { 4, "Further Output" }, + { 128, "Manuf. specific Input" }, + { 129, "Manuf. specific Output" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_function_block_parent_class_vals[] = { + {0, "Analog Temperature" }, + {1, "Analog Temperature Difference"}, + {2, "Analog Average Temperature"}, + {3, "Analog Electronics Temperature"}, + {4, "Analog Transmitter Temperature"}, + {5, "Analog Sensor Temperature"}, + {6, "Analog Frame Temperature"}, + {7, "Analog Auxiliary Temperature"}, + {8, "Analog Energy Supply Temperature"}, + {9, "Analog Energy Return Temperature"}, + {20, "Analog Pressure"}, + {21, "Analog Absolute Pressure"}, + {22, "Analog Gauge Pressure"}, + {23, "Analog Differential Pressure"}, + {30, "Analog Level"}, + {31, "Analog Distance"}, + {32, "Analog Interface Level"}, + {33, "Analog Interface Distance"}, + {40, "Analog Volume"}, + {41, "Analog Ullage"}, + {42, "Analog Interface Volume"}, + {43, "Analog Standard Volume"}, + {44, "Analog Fraction Substance 1 Volume"}, + {45, "Analog Fraction Substance 2 Volume"}, + {46, "Analog Fraction Substance 1 Std Volume"}, + {47, "Analog Fraction Substance 2 Std Volume"}, + {50, "Analog Mass"}, + {51, "Analog Net Mass"}, + {52, "Analog Fraction Substance 1 Mass"}, + {53, "Analog Fraction Substance 2 Mass"}, + {60, "Analog Volume Flow"}, + {61, "Analog Standard Volume Flow"}, + {62, "Analog Fraction Substance 1 Volume Flow"}, + {63, "Analog Fraction Substance 2 Volume Flow"}, + {70, "Analog Mass Flow"}, + {71, "Analog Fraction Substance 1 Mass Flow"}, + {72, "Analog Fraction Substance 2 Mass Flow"}, + {80, "Analog Density"}, + {81, "Analog Standard Density"}, + {82, "Analog Analog Api Gravity"}, + {83, "Analog Standard Api Gravity"}, + {84, "Analog Specific Gravity"}, + {85, "Analog Standard Specific Gravity"}, + {90, "Analog Flow Velocity"}, + {91, "Analog Sound Velocity"}, + {92, "Analog Rate Of Change"}, + {100, "Analog Kinematic Viscosity"}, + {101, "Analog Dynamic Viscosity"}, + {110, "Analog Energy"}, + {111, "Analog Power"}, + {120, "Analog Vortex Frequency"}, + {130, "Analog Concentration"}, + {131, "Analog Energy Efficiency Rating"}, + {132, "Analog Coefficient Of Performance"}, + {133, "Analog Fraction Substance 1%"}, + {134, "Analog Fraction Substance 2%"}, + {140, "Analog pH"}, + {141, "Analog Conductivity"}, + {142, "Analog Resistivity"}, + {143, "Analog Gas Concentration"}, + {149, "Flexible AI"}, + {150, "Totalizer"}, + {160, "Actuator"}, + {170, "Discrete"}, + {180, "Enumerated"}, + {190, "Binary(8 Bit)"}, + {191, "Binary(16 Bit)"}, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_parent_class_vals[] = { + { 1, "Pressure" }, + { 2, "Temperature" }, + { 3, "Flow" }, + { 4, "Level" }, + { 5, "Actuator" }, + { 6, "Discrete I/O" }, + { 7, "Liquid analyzer" }, + { 8, "Gas analyzer" }, + { 10, "Enumerated I/O" }, + { 11, "Binary I/O" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_pressure_class_vals[] = { + { 1, "Pressure" }, + { 2, "Pressure + level" }, + { 3, "Pressure + flow" }, + { 4, "Pressure + level + flow" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_temperature_class_vals[] = { + { 1, "Thermocouple (TC)" }, + { 2, "Resistance thermometer (RTD)" }, + { 3, "Pyrometer" }, + { 16, "TC + DC U (DC Voltage)" }, + { 17, "RTD + R (R-Resistance)" }, + { 18, "TC+RTD+r+DC U" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_flow_class_vals[] = { + { 1, "Electromagnetic" }, + { 2, "Vortex" }, + { 3, "Coriolis" }, + { 4, "Thermal mass" }, + { 5, "Ultrasonic" }, + { 6, "Variable area" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_level_class_vals[] = { + { 1, "Hydrostatic" }, + { 2, "Ultrasonic" }, + { 3, "Radiometric" }, + { 4, "Capacitance" }, + { 5, "Displacer" }, + { 6, "Float" }, + { 7, "Radar" }, + { 8, "Buoyancy" }, + { 9, "Air bubble system" }, + { 10, "Gravimetric" }, + { 11, "Optical" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_actuator_class_vals[] = { + { 1, "Electric" }, + { 2, "Electro-pneumatic" }, + { 3, "Electro-hydraulic" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_discrete_io_class_vals[] = { + { 1, "Input" }, + { 2, "Output" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_liquid_analyzer_class_vals[] = { + { 1, "pH" }, + { 2, "Conductivity" }, + { 3, "Oxygen" }, + { 4, "Chlorine" }, + { 5, "Resistivity" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_gas_analyzer_class_vals[] = { + { 1, "Standard" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_enumerated_io_class_vals[] = { + { 1, "Input" }, + { 2, "Output" }, + { 0, NULL } +}; + +static const value_string pn_io_pa_profile_transducer_block_binary_io_class_vals[] = { + { 2, "8 Bit output" }, + { 3, "8 Bit input" }, + { 4, "16 Bit output" }, + { 5, "16 Bit input" }, + { 0, NULL } +}; + +static const value_string* pn_io_pa_profile_transducer_block_class_vals[] = { + NULL, + pn_io_pa_profile_transducer_block_pressure_class_vals, + pn_io_pa_profile_transducer_block_temperature_class_vals, + pn_io_pa_profile_transducer_block_flow_class_vals, + pn_io_pa_profile_transducer_block_level_class_vals, + pn_io_pa_profile_transducer_block_actuator_class_vals, + pn_io_pa_profile_transducer_block_discrete_io_class_vals, + pn_io_pa_profile_transducer_block_liquid_analyzer_class_vals, + pn_io_pa_profile_transducer_block_gas_analyzer_class_vals, + NULL, + pn_io_pa_profile_transducer_block_enumerated_io_class_vals, + pn_io_pa_profile_transducer_block_binary_io_class_vals +}; + +static const value_string pn_io_snmp_control[] = { + { 0x00, "Disable SNMP" }, + { 0x01, "Enable SNMP read only" }, + { 0x02, "Enable SNMP read/write" }, + { 0x03, "Reserved" }, + { 0, NULL } +}; + static int dissect_profidrive_value(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, guint8 format_val) @@ -2654,7 +3772,7 @@ dissect_profidrive_value(tvbuff_t *tvb, gint offset, packet_info *pinfo, { gint sLen; sLen = (gint)tvb_strnlen( tvb, offset, -1); - proto_tree_add_item(tree, hf_pn_io_profidrive_param_value_string, tvb, offset, sLen, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_profidrive_param_value_string, tvb, offset, sLen, ENC_ASCII); offset = (offset + sLen); break; } @@ -3061,11 +4179,11 @@ dissect_RS_IdentificationInfo(tvbuff_t *tvb, int offset, hf_pn_io_am_device_identification_organization, &u64AM_DeviceIdentificationOrganization); /* IM_Tag_Function [32] */ - proto_tree_add_item(tree, hf_pn_io_im_tag_function, tvb, offset, 32, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_tag_function, tvb, offset, 32, ENC_ASCII); offset += 32; /* IM_Tag_Location [22] */ - proto_tree_add_item(tree, hf_pn_io_im_tag_location, tvb, offset, 22, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_tag_location, tvb, offset, 22, ENC_ASCII); offset += 22; return offset; @@ -3292,106 +4410,139 @@ dissect_RS_EventInfo(tvbuff_t *tvb, int offset, } static int -dissect_AlarmUserStructure(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, proto_item *item, guint8 *drep, - guint16 *body_length, guint16 u16UserStructureIdentifier) +dissect_Diagnosis(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, + proto_tree *tree, proto_item *item, guint8 *drep, guint16 u16UserStructureIdentifier) { guint16 u16ChannelNumber; guint16 u16ChannelErrorType; guint16 u16ExtChannelErrorType; guint32 u32ExtChannelAddValue; + guint32 u32QualifiedChannelQualifier; + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_channel_number, &u16ChannelNumber); + + offset = dissect_ChannelProperties(tvb, offset, pinfo, tree, item, drep); + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_channel_error_type, &u16ChannelErrorType); + + if (u16UserStructureIdentifier == 0x8000) /* ChannelDiagnosisData */ + { + return offset; + } + + if (u16ChannelErrorType < 0x7fff) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8000) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8000, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8001) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8001, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8002) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8002, &u16ExtChannelErrorType); + } + else if ((u16ChannelErrorType == 0x8003)||(u16ChannelErrorType == 0x8009)) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8003, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8004) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8004, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8005) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8005, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8007) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8007, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8008) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8008, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x800A) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x800A, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x800B) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x800B, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x800C) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x800C, &u16ExtChannelErrorType); + } + else if (u16ChannelErrorType == 0x8010) + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type0x8010, &u16ExtChannelErrorType); + } + else + { + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_error_type, &u16ExtChannelErrorType); + } + + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_ext_channel_add_value, &u32ExtChannelAddValue); + + if (u16UserStructureIdentifier == 0x8002) /* ExtChannelDiagnosisData */ + { + return offset; + } + + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_qualified_channel_qualifier, &u32QualifiedChannelQualifier); + + /* QualifiedChannelDiagnosisData */ + return offset; +} + +static int +dissect_AlarmUserStructure(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, proto_item *item, guint8 *drep, + guint16 *body_length, guint16 u16UserStructureIdentifier) +{ guint16 u16Index = 0; guint32 u32RecDataLen; pnio_ar_t *ar = NULL; - switch (u16UserStructureIdentifier) { case(0x8000): /* ChannelDiagnosisData */ - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_channel_number, &u16ChannelNumber); - offset = dissect_ChannelProperties(tvb, offset, pinfo, tree, item, drep); - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_channel_error_type, &u16ChannelErrorType); + offset = dissect_Diagnosis(tvb, offset, pinfo, tree, item, drep, + u16UserStructureIdentifier); *body_length -= 6; break; case(0x8002): /* ExtChannelDiagnosisData */ - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_channel_number, &u16ChannelNumber); - - offset = dissect_ChannelProperties(tvb, offset, pinfo, tree, item, drep); - - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_channel_error_type, &u16ChannelErrorType); - - if (u16ChannelErrorType < 0x7fff) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8000) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8000, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8001) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8001, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8002) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8002, &u16ExtChannelErrorType); - } - else if ((u16ChannelErrorType == 0x8003)||(u16ChannelErrorType == 0x8009)) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8003, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8004) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8004, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8005) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8005, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8007) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8007, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x8008) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x8008, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x800A) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x800A, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x800B) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x800B, &u16ExtChannelErrorType); - } - else if (u16ChannelErrorType == 0x800C) - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type0x800C, &u16ExtChannelErrorType); - } - else - { - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_error_type, &u16ExtChannelErrorType); - } - offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, - hf_pn_io_ext_channel_add_value, &u32ExtChannelAddValue); + offset = dissect_Diagnosis(tvb, offset, pinfo, tree, item, drep, + u16UserStructureIdentifier); *body_length -= 12; break; + case (0x8003): /* QualifiedChannelDiagnosisData */ + offset = dissect_Diagnosis(tvb, offset, pinfo, tree, item, drep, + u16UserStructureIdentifier); + *body_length -= 16; + break; case(0x8100): /* MaintenanceItem */ offset = dissect_block(tvb, offset, pinfo, tree, drep, &u16Index, &u32RecDataLen, &ar); *body_length -= 12; @@ -3412,8 +4563,7 @@ dissect_AlarmUserStructure(tvbuff_t *tvb, int offset, break; /* XXX - dissect remaining user structures of [AlarmItem] */ case(0x8001): /* DiagnosisData */ - case(0x8003): /* QualifiedChannelDiagnosisData */ - default: + default: if (u16UserStructureIdentifier >= 0x8000) { offset = dissect_pn_undecoded(tvb, offset, pinfo, tree, *body_length); } else { @@ -3505,11 +4655,11 @@ dissect_IandM0_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_vendor_id_low, &u8VendorIDLow); /* c8[20] OrderID */ - proto_tree_add_item (tree, hf_pn_io_order_id, tvb, offset, 20, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_order_id, tvb, offset, 20, ENC_ASCII); offset += 20; /* c8[16] IM_Serial_Number */ - proto_tree_add_item (tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII); offset += 16; /* x16 IM_Hardware_Revision */ @@ -3564,11 +4714,11 @@ dissect_IandM1_block(tvbuff_t *tvb, int offset, } /* IM_Tag_Function [32] */ - proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_tag_function, tvb, offset, 32, ENC_ASCII|ENC_NA, pinfo->pool, &pTagFunction); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_tag_function, tvb, offset, 32, ENC_ASCII, pinfo->pool, &pTagFunction); offset += 32; /* IM_Tag_Location [22] */ - proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_tag_location, tvb, offset, 22, ENC_ASCII|ENC_NA, pinfo->pool, &pTagLocation); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_tag_location, tvb, offset, 22, ENC_ASCII, pinfo->pool, &pTagLocation); offset += 22; proto_item_append_text(item, ": TagFunction:\"%s\", TagLocation:\"%s\"", pTagFunction, pTagLocation); @@ -3590,7 +4740,7 @@ dissect_IandM2_block(tvbuff_t *tvb, int offset, } /* IM_Date [16] */ - proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_date, tvb, offset, 16, ENC_ASCII|ENC_NA, pinfo->pool, &pDate); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_date, tvb, offset, 16, ENC_ASCII, pinfo->pool, &pDate); offset += 16; proto_item_append_text(item, ": Date:\"%s\"", pDate); @@ -3612,7 +4762,7 @@ dissect_IandM3_block(tvbuff_t *tvb, int offset, } /* IM_Descriptor [54] */ - proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_descriptor, tvb, offset, 54, ENC_ASCII|ENC_NA, pinfo->pool, &pDescriptor); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_im_descriptor, tvb, offset, 54, ENC_ASCII, pinfo->pool, &pDescriptor); offset += 54; proto_item_append_text(item, ": Descriptor:\"%s\"", pDescriptor); @@ -3750,11 +4900,11 @@ dissect_IandM5Data_block(tvbuff_t *tvb, int offset, guint8 u8IMSWRevisionInternalChange; /* c8[64] IM Annotation */ - proto_tree_add_item(tree, hf_pn_io_im_annotation, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_annotation, tvb, offset, 64, ENC_ASCII); offset += 64; /* c8[64] IM Order ID */ - proto_tree_add_item(tree, hf_pn_io_im_order_id, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_order_id, tvb, offset, 64, ENC_ASCII); offset += 64; /* x8 VendorIDHigh */ @@ -3765,7 +4915,7 @@ dissect_IandM5Data_block(tvbuff_t *tvb, int offset, hf_pn_io_vendor_id_low, &u8VendorIDLow); /* c8[16] IM Serial Number */ - proto_tree_add_item(tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII); offset += 16; /* x16 IM_Hardware_Revision */ @@ -3999,23 +5149,23 @@ guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) offset = dissect_AM_Location(tvb, offset, pinfo, tree, drep); /* IM_Annotation */ - proto_tree_add_item(tree, hf_pn_io_im_annotation, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_annotation, tvb, offset, 64, ENC_ASCII); offset += 64; /* IM_OrderID */ - proto_tree_add_item(tree, hf_pn_io_im_order_id, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_order_id, tvb, offset, 64, ENC_ASCII); offset += 64; /* AM_SoftwareRevision */ - proto_tree_add_item(tree, hf_pn_io_am_software_revision, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_am_software_revision, tvb, offset, 64, ENC_ASCII); offset += 64; /* AM_HardwareRevision */ - proto_tree_add_item(tree, hf_pn_io_am_hardware_revision, tvb, offset, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_am_hardware_revision, tvb, offset, 64, ENC_ASCII); offset += 64; /* IM_Serial_Number */ - proto_tree_add_item(tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_pn_io_im_serial_number, tvb, offset, 16, ENC_ASCII); offset += 16; /* IM_Software_Revision */ @@ -4689,9 +5839,9 @@ dissect_IODReadResHeader_block(tvbuff_t *tvb, int offset, } -/* dissect the control/connect block */ +/* dissect the control/connect and control/connect block */ static int -dissect_ControlConnect_block(tvbuff_t *tvb, int offset, +dissect_ControlPlugOrConnect_block(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, proto_item *item, guint8 *drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow, pnio_ar_t **ar, guint16 blocktype) { @@ -4720,8 +5870,15 @@ dissect_ControlConnect_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_sessionkey, &u16SessionKey); - offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, - hf_pn_io_reserved16, NULL); + if (((blocktype & 0x7FFF) == 0x0111) || ((blocktype & 0x7FFF) == 0x0113)) { + /* control/plug */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_control_alarm_sequence_number, NULL); + } else { + /* control/connect */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_reserved16, NULL); + } sub_item = proto_tree_add_item(tree, hf_pn_io_control_command, tvb, offset, 2, ENC_BIG_ENDIAN); sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_control_command); @@ -5082,11 +6239,15 @@ dissect_PDPortDataReal_block(tvbuff_t *tvb, int offset, guint16 u16SubslotNr; guint8 u8LengthOwnPortID; char *pOwnPortID; + proto_item *sub_item; + proto_tree *sub_tree; guint8 u8NumberOfPeers; guint8 u8I; guint8 u8LengthPeerPortID; guint8 u8LengthPeerChassisID; guint8 mac[6]; + char *pPeerChassisId; + char *pPeerPortId; guint16 u16MAUType; guint32 u32DomainBoundary; guint32 u32MulticastBoundary; @@ -5114,7 +6275,7 @@ dissect_PDPortDataReal_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_length_own_port_id, &u8LengthOwnPortID); /* OwnPortID */ - proto_tree_add_item_ret_display_string (tree, hf_pn_io_own_port_id, tvb, offset, u8LengthOwnPortID, ENC_ASCII|ENC_NA, pinfo->pool, &pOwnPortID); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_own_port_id, tvb, offset, u8LengthOwnPortID, ENC_ASCII, pinfo->pool, &pOwnPortID); offset += u8LengthOwnPortID; /* NumberOfPeers */ @@ -5125,31 +6286,40 @@ dissect_PDPortDataReal_block(tvbuff_t *tvb, int offset, u8I = u8NumberOfPeers; while (u8I--) { + sub_item = proto_tree_add_item(tree, hf_pn_io_neighbor, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_neighbor); + /* LengthPeerPortID */ - offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_length_peer_port_id, &u8LengthPeerPortID); /* PeerPortID */ - proto_tree_add_item (tree, hf_pn_io_peer_port_id, tvb, offset, u8LengthPeerPortID, ENC_ASCII|ENC_NA); + proto_tree_add_item_ret_display_string (sub_tree, hf_pn_io_peer_port_id, tvb, offset, u8LengthPeerPortID, + ENC_ASCII, pinfo->pool, &pPeerPortId); + offset += u8LengthPeerPortID; /* LengthPeerChassisID */ - offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_length_peer_chassis_id, &u8LengthPeerChassisID); /* PeerChassisID */ - proto_tree_add_item (tree, hf_pn_io_peer_chassis_id, tvb, offset, u8LengthPeerChassisID, ENC_ASCII|ENC_NA); + proto_tree_add_item_ret_display_string (sub_tree, hf_pn_io_peer_chassis_id, tvb, offset, u8LengthPeerChassisID, + ENC_ASCII, pinfo->pool, &pPeerChassisId); + offset += u8LengthPeerChassisID; /* Padding */ - offset = dissect_pn_align4(tvb, offset, pinfo, tree); + offset = dissect_pn_align4(tvb, offset, pinfo, sub_tree); /* LineDelay */ - offset = dissect_Line_Delay(tvb, offset, pinfo, tree, drep, &u32LineDelayValue); + offset = dissect_Line_Delay(tvb, offset, pinfo, sub_tree, drep, &u32LineDelayValue); /* PeerMACAddress */ - offset = dissect_pn_mac(tvb, offset, pinfo, tree, + offset = dissect_pn_mac(tvb, offset, pinfo, sub_tree, hf_pn_io_peer_macadd, mac); /* Padding */ - offset = dissect_pn_align4(tvb, offset, pinfo, tree); + offset = dissect_pn_align4(tvb, offset, pinfo, sub_tree); + + proto_item_append_text(sub_item, ": %s (%s)", pPeerChassisId, pPeerPortId); } /* MAUType */ @@ -5187,6 +6357,43 @@ dissect_PDPortDataReal_block(tvbuff_t *tvb, int offset, } +/* dissect the PDPortDataRealExtended blocks */ +static int +dissect_PDPortDataRealExtended_block(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, + proto_item *item, guint8 *drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow, guint16 u16BodyLength) +{ + guint16 u16SlotNr; + guint16 u16SubslotNr; + guint16 u16Index = 0; + guint32 u32RecDataLen; + pnio_ar_t *ar = NULL; + int endoffset = offset + u16BodyLength; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_slot_nr, &u16SlotNr); + /* Subslotnumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_subslot_nr, &u16SubslotNr); + + proto_item_append_text(item, ": Slot:0x%x/0x%x", u16SlotNr, u16SubslotNr); + + while (endoffset > offset) { + offset = dissect_block(tvb, offset, pinfo, tree, drep, &u16Index, &u32RecDataLen, &ar); + u16Index++; + } + + return offset; +} + static int dissect_PDInterfaceMrpDataAdjust_block(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint8 *drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow, guint16 u16BodyLength) @@ -5240,7 +6447,7 @@ dissect_PDInterfaceMrpDataAdjust_block(tvbuff_t *tvb, int offset, with the labels being counted strings; does that mean that this is just an ASCII string to be interpreted as a Punycode Unicode domain name? */ - proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII); offset += u8LengthDomainName; /* Padding */ @@ -5311,7 +6518,7 @@ dissect_PDInterfaceMrpDataReal_block(tvbuff_t *tvb, int offset, hf_pn_io_mrp_length_domain_name, &u8LengthDomainName); /* MRP_DomainName */ /* XXX - see comment earlier about MRP_DomainName */ - proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII); offset += u8LengthDomainName; if (u8BlockVersionLow == 0) { @@ -5885,14 +7092,14 @@ dissect_CheckPeers_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_length_peer_port_id, &u8LengthPeerPortID); /* PeerPortID */ - proto_tree_add_item (tree, hf_pn_io_peer_port_id, tvb, offset, u8LengthPeerPortID, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_peer_port_id, tvb, offset, u8LengthPeerPortID, ENC_ASCII); offset += u8LengthPeerPortID; /* LengthPeerChassisID */ offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_length_peer_chassis_id, &u8LengthPeerChassisID); /* PeerChassisID */ - proto_tree_add_item (tree, hf_pn_io_peer_chassis_id, tvb, offset, u8LengthPeerChassisID, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_peer_chassis_id, tvb, offset, u8LengthPeerChassisID, ENC_ASCII); offset += u8LengthPeerChassisID; } @@ -6265,7 +7472,7 @@ dissect_MrpInstanceDataAdjust_block(tvbuff_t *tvb, int offset, hf_pn_io_mrp_length_domain_name, &u8LengthDomainName); /* MRP_DomainName */ /* XXX - see comment earlier about MRP_DomainName */ - proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII); offset += u8LengthDomainName; /* Padding */ offset = dissect_pn_align4(tvb, offset, pinfo, tree); @@ -6312,7 +7519,7 @@ dissect_MrpInstanceDataReal_block(tvbuff_t *tvb, int offset, hf_pn_io_mrp_length_domain_name, &u8LengthDomainName); /* MRP_DomainName */ /* XXX - see comment earlier about MRP_DomainName */ - proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_mrp_domain_name, tvb, offset, u8LengthDomainName, ENC_ASCII); offset += u8LengthDomainName; /* Padding */ offset = dissect_pn_align4(tvb, offset, pinfo, tree); @@ -6386,6 +7593,814 @@ dissect_PDInterfaceAdjust_block(tvbuff_t *tvb, int offset, return offset; } +/* TSNNetworkControlDataReal */ +static int +dissect_TSNNetworkControlDataReal_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + proto_item* sub_item; + proto_tree* sub_tree; + + e_guid_t nme_parameter_uuid; + guint32 u32NetworkDeadline; + guint16 u16SendClockFactor; + guint16 u16NumberofEntries; + guint16 u16TSNNMENameLength; + guint16 u16TSNDomainNameLength; + e_guid_t tsn_nme_name_uuid; + e_guid_t tsn_domain_uuid; + + int bit_offset; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + /* Padding */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 2); + + /* NMEParameterUUID*/ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_tsn_nme_parameter_uuid, &nme_parameter_uuid); + + /* TSNDomainVIDConfig*/ + sub_item = proto_tree_add_item(tree, hf_pn_io_tsn_domain_vid_config, tvb, offset, 16, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_tsn_domain_vid_config); + bit_offset = offset << 3; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_reserved, tvb, bit_offset, 32, ENC_BIG_ENDIAN); + bit_offset += 32; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_D, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_C, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_B, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_low_red_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_low_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_high_red_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_high_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + + offset += 16; + + /* TSNDomainPortConfigBlock */ + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + + /* Network Deadline */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, hf_pn_io_network_deadline, &u32NetworkDeadline); + + /* SendClockFactor 16 */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_send_clock_factor, &u16SendClockFactor); + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_number_of_tsn_time_data_block_entries, &u16NumberofEntries); + + /* TSNTimeDataBlock */ + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + } + + /* TSNNMENameUUID */ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_tsn_nme_name_uuid, &tsn_nme_name_uuid); + + /* TSNNMENameLength */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_nme_name_length, &u16TSNNMENameLength); + + /* TSNNMEName */ + proto_tree_add_item(tree, hf_pn_io_tsn_nme_name, tvb, offset, u16TSNNMENameLength, ENC_ASCII | ENC_NA); + offset += u16TSNNMENameLength; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* TSNDomainUUID */ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_tsn_domain_uuid, &tsn_domain_uuid); + + /* TSNDomainNameLength */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_domain_name_length, &u16TSNDomainNameLength); + + /* TSNDomainName */ + proto_tree_add_item(tree, hf_pn_io_tsn_domain_name, tvb, offset, u16TSNDomainNameLength, ENC_ASCII | ENC_NA); + offset += u16TSNDomainNameLength; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + return offset; + +} + +/* TSNNetworkControlDataAdjust */ +static int +dissect_TSNNetworkControlDataAdjust_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + proto_item* sub_item; + proto_tree* sub_tree; + + e_guid_t nme_parameter_uuid; + guint32 u32NetworkDeadline; + guint16 u16SendClockFactor; + guint16 u16NumberofEntries; + guint16 u16TSNNMENameLength; + e_guid_t tsn_nme_name_uuid; + + int bit_offset; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + /* Padding */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 2); + + /* NMEParameterUUID*/ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_tsn_nme_parameter_uuid, &nme_parameter_uuid); + + /* TSNDomainVIDConfig*/ + sub_item = proto_tree_add_item(tree, hf_pn_io_tsn_domain_vid_config, tvb, offset, 16, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_tsn_domain_vid_config); + + bit_offset = offset << 3; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_reserved, tvb, bit_offset, 32, ENC_BIG_ENDIAN); + bit_offset += 32; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_D, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_C, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid_B, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_non_stream_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_low_red_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_low_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_high_red_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + bit_offset += 12; + + proto_tree_add_bits_item(sub_tree, hf_pn_io_tsn_domain_vid_config_stream_high_vid, tvb, bit_offset, 12, ENC_BIG_ENDIAN); + + offset += 16; + + /* TSNDomainPortConfigBlock */ + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + + /* Network Deadline */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, hf_pn_io_network_deadline, &u32NetworkDeadline); + + /* SendClockFactor 16 */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_send_clock_factor, &u16SendClockFactor); + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_number_of_tsn_time_data_block_entries, &u16NumberofEntries); + + /* TSNTimeDataBlock */ + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + } + + /* TSNNMENameUUID */ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_tsn_nme_name_uuid, &tsn_nme_name_uuid); + + /* TSNNMENameLength */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_nme_name_length, &u16TSNNMENameLength); + + /* TSNNMEName */ + proto_tree_add_item(tree, hf_pn_io_tsn_nme_name, tvb, offset, u16TSNNMENameLength, ENC_ASCII | ENC_NA); + offset += u16TSNNMENameLength; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + return offset; +} + +/* TSNStreamPathData */ +static int +dissect_TSNStreamPathDataReal_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow, gboolean real) +{ + guint8 u8FDBCommand; + guint16 u16NumberofEntries; + guint8 dstAdd[6]; + guint16 u16StreamClass; + guint16 u16SlotNumber; + guint16 u16SubSlotNumber; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 1); + + if (!real) { + /* FDBCommand */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_fdb_command, &u8FDBCommand); + } + else { + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 1); + } + + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 2); + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_sync_tree_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + /* DestinationAddress */ + offset = dissect_pn_mac(tvb, offset, pinfo, tree, hf_pn_io_tsn_dst_add, dstAdd); + + /* StreamClass */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_stream_class, &u16StreamClass); + + /* IngressPort */ + /* TSNDomainPortID */ + /*SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_slot_nr, &u16SlotNumber); + /* SubSlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_subslot_nr, &u16SubSlotNumber); + + /* EgressPort */ + /* TSNDomainPortID */ + /*SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_slot_nr, &u16SlotNumber); + /* SubSlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_subslot_nr, &u16SubSlotNumber); + } + return offset; +} + +/* TSNSyncTreeData */ +static int +dissect_TSNSyncTreeData_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16NumberofEntries; + guint16 u16SlotNr; + guint16 u16SubslotNr; + guint16 u16TimeDomainNumber; + guint8 u8SyncPortRole; + proto_item* sub_item; + proto_tree* sub_tree; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_sync_tree_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + /* TSNDomainPortID */ + sub_item = proto_tree_add_item(tree, hf_pn_io_tsn_domain_port_id, tvb, offset, 4, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_tsn_domain_port_id); + /* SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_slot_nr, &u16SlotNr); + /*--*/ + /* Subslotnumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_subslot_nr, &u16SubslotNr); + /* TimeDomainNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_time_domain_number, &u16TimeDomainNumber); + /* SyncPortRole */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_domain_sync_port_role, &u8SyncPortRole); + + /* Padding */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 1); + } + return offset; +} + +/* TSNDomainPortConfigBlock */ +static int +dissect_TSNDomainPortConfig_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16NumberofEntries; + guint16 u16SlotNr; + guint16 u16SubslotNr; + proto_item* sub_item_port_config; + proto_tree* sub_tree_port_config; + guint8 u8TSNDomainPortConfig; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_port_config_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + /* SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_slot_nr, &u16SlotNr); + /* Subslotnumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_subslot_nr, &u16SubslotNr); + + /* TSNDomainPortConfig */ + sub_item_port_config = proto_tree_add_item(tree, hf_pn_io_tsn_domain_port_config, tvb, offset, 1, ENC_NA); + sub_tree_port_config = proto_item_add_subtree(sub_item_port_config, ett_pn_io_tsn_domain_port_config); + + dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree_port_config, drep, + hf_pn_io_tsn_domain_port_config_reserved, &u8TSNDomainPortConfig); + dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree_port_config, drep, + hf_pn_io_tsn_domain_port_config_boundary_port_config, &u8TSNDomainPortConfig); + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree_port_config, drep, + hf_pn_io_tsn_domain_port_config_preemption_enabled, &u8TSNDomainPortConfig); + + /* Padding */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 3); + + /* TSNDomainPortIngressRateLimiter */ + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + + /* TSNDomainQueueConfigBlock */ + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + + /* TSNDomainQueueRateLimiterBlock */ + offset = dissect_a_block(tvb, offset, pinfo, /*sub_*/tree, drep); + } + return offset; +} + +/* TSNDomainQueueConfigBlock */ +static int +dissect_TSNDomainQueueConfig_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16NumberofEntries; + proto_item* sub_item; + proto_tree* sub_tree; + guint64 u64TSNDomainQueueConfig; + dcerpc_info di; /* fake dcerpc_info struct */ + dcerpc_call_value dcv; /* fake dcerpc_call_value struct */ + di.call_data = &dcv; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_queue_config_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + sub_item = proto_tree_add_item(tree, hf_pn_io_tsn_domain_queue_config, tvb, offset, 8, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_tsn_domain_queue_config); + + /* TSNDomainQueueConfig */ + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_mask_time_offset, &u64TSNDomainQueueConfig); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_unmask_time_offset, &u64TSNDomainQueueConfig); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_preemption_mode, &u64TSNDomainQueueConfig); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_shaper, &u64TSNDomainQueueConfig); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_tci_pcp, &u64TSNDomainQueueConfig); + offset = dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_config_queue_id, &u64TSNDomainQueueConfig); + } + return offset; +} + +/* TSNTimeDataBlock */ +static int +dissect_TSNTimeData_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16TimeDomainNumber; + guint32 u32TimePLLWindow; + guint32 u32MessageIntervalFactor; + guint16 u16MessageTimeoutFactor; + guint16 u16TimeSyncProperties; + guint8 u8TimeDomainNameLength; + e_guid_t time_domain_uuid; + proto_item* sub_item; + proto_tree* sub_tree; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + /* TimeDomainNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_time_domain_number, &u16TimeDomainNumber); + + /* TimePLLWindow */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, hf_pn_io_time_pll_window, &u32TimePLLWindow); + + /* MessageIntervalFactor */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, hf_pn_io_message_interval_factor, &u32MessageIntervalFactor); + + /* MessageTimeoutFactor */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_message_timeout_factor, &u16MessageTimeoutFactor); + + /* TimeSyncProperties */ + sub_item = proto_tree_add_item(tree, hf_pn_io_time_sync_properties, tvb, offset, 2, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_time_sync_properties); + + dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_time_sync_properties_reserved, &u16TimeSyncProperties); + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_time_sync_properties_role, &u16TimeSyncProperties); + + /* TimeDomainUUID */ + offset = dissect_pn_uuid(tvb, offset, pinfo, tree, hf_pn_io_time_domain_uuid, &time_domain_uuid); + + /* TimeDomainNameLength */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_time_domain_name_length, &u8TimeDomainNameLength); + + /* TimeDomainName */ + proto_tree_add_item(tree, hf_pn_io_time_domain_name, tvb, offset, u8TimeDomainNameLength, ENC_ASCII | ENC_NA); + offset += u8TimeDomainNameLength; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + return offset; +} + +/* TSNUploadNetworkAttributesBlock */ +static int +dissect_TSNUploadNetworkAttributes_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint32 u32TransferTimeTX; + guint32 u32TransferTimeRX; + guint32 u32MaxSupportedRecordSize; + + if (u8BlockVersionHigh != 1 || (u8BlockVersionLow != 0 && u8BlockVersionLow != 1)) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + /* Align to the next 32 bit twice */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 2); + + /* TSNPortIDBlock */ + offset = dissect_a_block(tvb, offset, pinfo, tree, drep); + + /*MaxSupportedRecordSize*/ + offset= dissect_dcerpc_uint32(tvb,offset,pinfo,tree,drep,hf_pn_io_tsn_max_supported_record_size,&u32MaxSupportedRecordSize); + + /* TransferTimeTX */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_transfer_time_tx, &u32TransferTimeTX); + + /* TransferTimeRX */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_transfer_time_rx, &u32TransferTimeRX); + + /* TSNForwardingDelayBlock */ + offset = dissect_a_block(tvb, offset, pinfo, tree, drep); + + return offset; +} + +/* TSNExpectedNeighborBlock */ +static int +dissect_TSNExpectedNeighbor_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint8 u8NumberOfPeers; + guint8 u8I; + guint8 u8LengthPeerPortName; + guint8 u8LengthPeerStationName; + guint16 u16NumberOfEntries; + guint16 u16SlotNr; + guint16 u16SubslotNr; + guint32 u32LineDelayValue; + + if (u8BlockVersionHigh != 1 || (u8BlockVersionLow != 0 && u8BlockVersionLow != 1)) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_expected_neighbor_block_number_of_entries, &u16NumberOfEntries); + + while (u16NumberOfEntries > 0) + { + u16NumberOfEntries--; + + /*TSNDomainPortID*/ + /* SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_slot_nr, &u16SlotNr); + /*--*/ + /* Subslotnumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_subslot_nr, &u16SubslotNr); + + /* Padding */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 3); + + /* NumberOfPeers */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_peers, &u8NumberOfPeers); + + u8I = u8NumberOfPeers; + while (u8I--) { + /* LengthPeerPortName */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_length_peer_port_name, &u8LengthPeerPortName); + + /* PeerPortName */ + proto_tree_add_item(tree, hf_pn_io_peer_port_name, tvb, offset, u8LengthPeerPortName, ENC_ASCII | ENC_NA); + offset += u8LengthPeerPortName; + + /* LengthPeerStationName */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_length_peer_station_name, &u8LengthPeerStationName); + + /* PeerStationName */ + proto_tree_add_item(tree, hf_pn_io_peer_station_name, tvb, offset, u8LengthPeerStationName, ENC_ASCII | ENC_NA); + offset += u8LengthPeerStationName; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* LineDelay */ + offset = dissect_Line_Delay(tvb, offset, pinfo, tree, drep, &u32LineDelayValue); + } + } + return offset; +} + +/* TSNExpectedNetworkAttributesBlock */ +static int +dissect_TSNExpectedNetworkAttributes_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + if (u8BlockVersionHigh != 1 || (u8BlockVersionLow != 0 && u8BlockVersionLow != 1)) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + /* Align to the next 32 bit twice */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 2); + + /* TSNPortIDBlock */ + offset = dissect_a_block(tvb, offset, pinfo, tree, drep); + + /* TSNForwardingDelayBlock */ + offset = dissect_a_block(tvb, offset, pinfo, tree, drep); + + /* TSNExpectedNeighborBlock */ + offset = dissect_a_block(tvb, offset, pinfo, tree, drep); + + return offset; +} + +/* TSNDomainPortIngressRateLimiterBlock */ +static int +dissect_TSNDomainPortIngressRateLimiter_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16NumberofEntries; + proto_item* sub_item_port_ingress; + proto_tree* sub_tree_port_ingress; + guint64 u64TSNDomainPortIngressRateLimiter; + dcerpc_info di; /* fake dcerpc_info struct */ + dcerpc_call_value dcv; /* fake dcerpc_call_value struct */ + di.call_data = &dcv; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_port_ingress_rate_limiter_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + /* TSNDomainPortIngressRateLimiter */ + sub_item_port_ingress = proto_tree_add_item(tree, hf_pn_io_tsn_domain_port_ingress_rate_limiter, tvb, offset, 8, ENC_NA); + sub_tree_port_ingress = proto_item_add_subtree(sub_item_port_ingress, ett_pn_io_tsn_domain_port_ingress_rate_limiter); + + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree_port_ingress, &di, drep, + hf_pn_io_tsn_domain_port_ingress_rate_limiter_cir, &u64TSNDomainPortIngressRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree_port_ingress, &di, drep, + hf_pn_io_tsn_domain_port_ingress_rate_limiter_cbs, &u64TSNDomainPortIngressRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree_port_ingress, &di, drep, + hf_pn_io_tsn_domain_port_ingress_rate_limiter_envelope, &u64TSNDomainPortIngressRateLimiter); + offset = dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree_port_ingress, &di, drep, + hf_pn_io_tsn_domain_port_ingress_rate_limiter_rank, &u64TSNDomainPortIngressRateLimiter); + } + return offset; +} + +/* TSNDomainQueueRateLimiterBlock */ +static int +dissect_TSNDomainQueueRateLimiter_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint16 u16NumberofEntries; + proto_item* sub_item; + proto_tree* sub_tree; + guint64 u64TSNDomainQueueRateLimiter; + dcerpc_info di; /* fake dcerpc_info struct */ + dcerpc_call_value dcv; /* fake dcerpc_call_value struct */ + di.call_data = &dcv; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_tsn_domain_queue_rate_limiter_entries, &u16NumberofEntries); + + while (u16NumberofEntries > 0) { + u16NumberofEntries--; + + /* TSNDomainQueueRateLimiter */ + sub_item = proto_tree_add_item(tree, hf_pn_io_tsn_domain_queue_rate_limiter, tvb, offset, 8, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_tsn_domain_queue_rate_limiter); + + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_cir, &u64TSNDomainQueueRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_cbs, &u64TSNDomainQueueRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_envelope, &u64TSNDomainQueueRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_rank, &u64TSNDomainQueueRateLimiter); + dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_queue_id, &u64TSNDomainQueueRateLimiter); + offset = dissect_dcerpc_uint64(tvb, offset, pinfo, sub_tree, &di, drep, + hf_pn_io_tsn_domain_queue_rate_limiter_reserved, &u64TSNDomainQueueRateLimiter); + } + return offset; +} + +/* TSNPortIDBlock */ +static int +dissect_TSNPortID_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint8 u8NumberOfQueues; + guint8 u8ForwardingGroup; + guint8 u8TSNPortCapabilities; + guint16 u16NumberOfEntries; + guint16 u16SlotNr; + guint16 u16SubslotNr; + guint16 u16MAUType; + guint16 u16MAUTypeExtension; + + if (u8BlockVersionHigh != 1 || (u8BlockVersionLow != 0 && u8BlockVersionLow != 1)) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_port_id_block_number_of_entries, &u16NumberOfEntries); + + while (u16NumberOfEntries > 0) + { + u16NumberOfEntries--; + + /*TSNDomainPortID*/ + /* SlotNumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_slot_nr, &u16SlotNr); + /*--*/ + /* Subslotnumber */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_subslot_nr, &u16SubslotNr); + + /*MAUType*/ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_mau_type, &u16MAUType); + + /*MAUTypeExtension*/ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_mau_type_extension, &u16MAUTypeExtension); + + /* NumberOfQueues */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_number_of_queues, &u8NumberOfQueues); + + /* TSNPortCapabilities */ + /* bit 0 */ + dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_port_capabilities_time_aware, &u8TSNPortCapabilities); + + /* bit 1 */ + dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_port_capabilities_preemption, &u8TSNPortCapabilities); + + /* bit 2 */ + dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_port_capabilities_queue_masking, &u8TSNPortCapabilities); + + /* bit 3-7 */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_port_capabilities_reserved, &u8TSNPortCapabilities); + + /* ForwardingGroup */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_forwarding_group, &u8ForwardingGroup); + + /* Align to the next 32 bit */ + offset = dissect_pn_padding(tvb, offset, pinfo, tree, 1); + + } + return offset; +} + +/* TSNForwardingDelayBlock */ +static int +dissect_TSNForwardingDelay_block(tvbuff_t* tvb, int offset, + packet_info* pinfo, proto_tree* tree, proto_item* item _U_, guint8* drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint8 u8ForwardingGroupIngress; + guint8 u8ForwardingGroupEgress; + guint16 u16NumberOfEntries; + guint16 u16StreamClass; + guint32 u32DependentForwardingDelay; + guint32 u32IndependentForwardingDelay; + + if (u8BlockVersionHigh != 1 || (u8BlockVersionLow != 0 && u8BlockVersionLow != 1)) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_tsn_forwarding_delay_block_number_of_entries, &u16NumberOfEntries); + + while (u16NumberOfEntries > 0) + { + u16NumberOfEntries--; + + /*ForwardingGroupIngress*/ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_forwarding_group_ingress, &u8ForwardingGroupIngress); + + /*ForwardingGroupEgress*/ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_forwarding_group_egress, &u8ForwardingGroupEgress); + + /* StreamClass */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_stream_class, &u16StreamClass); + + /* DependentForwardingDelay */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_dependent_forwarding_delay, &u32DependentForwardingDelay); + + /* IndependentForwardingDelay */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_tsn_independent_forwarding_delay, &u32IndependentForwardingDelay); + } + return offset; +} + /* PDPortStatistic for one subslot */ static int dissect_PDPortStatistic_block(tvbuff_t *tvb, int offset, @@ -6452,6 +8467,157 @@ dissect_PDPortStatistic_block(tvbuff_t *tvb, int offset, return offset; } +/* OwnPort */ +static int +dissect_OwnPort_block(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint8 *drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + guint8 u8LengthOwnPortID; + char *pOwnPortID; + guint16 u16MAUType; + guint16 u16MAUTypeExtension; + guint32 u32MulticastBoundary; + guint8 u8LinkStatePort; + guint8 u8LinkStateLink; + guint32 u32MediaType; + guint32 u32LineDelayValue; + guint16 u16PortStatus; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* LengthOwnPortID */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_length_own_port_id, &u8LengthOwnPortID); + /* OwnPortName */ + proto_tree_add_item_ret_display_string (tree, hf_pn_io_own_port_id, tvb, offset, u8LengthOwnPortID, ENC_ASCII, pinfo->pool, &pOwnPortID); + offset += u8LengthOwnPortID; + + /* Padding */ + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* LineDelay */ + offset = dissect_Line_Delay(tvb, offset, pinfo, tree, drep, &u32LineDelayValue); + + /* MediaType */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_media_type, &u32MediaType); + + /* MulticastBoundary */ + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_pn_io_multicast_boundary, &u32MulticastBoundary); + + /* MAUType */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_mau_type, &u16MAUType); + + /* MAUTypeExtension */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_mau_type_extension, &u16MAUTypeExtension); + + /* LinkState.Port */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_link_state_port, &u8LinkStatePort); + /* LinkState.Link */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_link_state_link, &u8LinkStateLink); + + /* RTClass3_PortStatus */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, + hf_pn_io_rtclass3_port_status, &u16PortStatus); + + proto_item_append_text(item, ": OwnPortID:%s, LinkState.Port:%s LinkState.Link:%s MediaType:%s MAUType:%s", + pOwnPortID, + val_to_str(u8LinkStatePort, pn_io_link_state_port, "0x%x"), + val_to_str(u8LinkStateLink, pn_io_link_state_link, "0x%x"), + val_to_str(u32MediaType, pn_io_media_type, "0x%x"), + val_to_str(u16MAUType, pn_io_mau_type, "0x%x")); + + return offset; +} + + +/* Neighbors */ +static int +dissect_Neighbors_block(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint8 *drep, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow) +{ + proto_item *sub_item; + proto_tree *sub_tree; + guint8 u8NumberOfPeers; + guint8 u8I; + guint8 mac[6]; + char *pPeerStationName; + char *pPeerPortName; + guint8 u8LengthPeerPortName; + guint8 u8LengthPeerStationName; + guint16 u16MAUType; + guint16 u16MAUTypeExtension; + guint32 u32LineDelayValue; + + if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + /* NumberOfPeers */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, + hf_pn_io_number_of_peers, &u8NumberOfPeers); + + offset = dissect_pn_align4(tvb, offset, pinfo, tree); + + u8I = u8NumberOfPeers; + while (u8I--) { + sub_item = proto_tree_add_item(tree, hf_pn_io_neighbor, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_neighbor); + + /* LineDelay */ + offset = dissect_Line_Delay(tvb, offset, pinfo, sub_tree, drep, &u32LineDelayValue); + + /* MAUType */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_mau_type, &u16MAUType); + + /* MAUTypeExtension */ + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_mau_type_extension, &u16MAUTypeExtension); + + /* PeerMACAddress */ + offset = dissect_pn_mac(tvb, offset, pinfo, sub_tree, + hf_pn_io_peer_macadd, mac); + + /* LengthPeerPortName */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_length_peer_port_name, &u8LengthPeerPortName); + /* PeerPortName */ + proto_tree_add_item_ret_display_string (sub_tree, hf_pn_io_peer_port_name, tvb, offset, u8LengthPeerPortName, + ENC_ASCII, pinfo->pool, &pPeerPortName); + offset += u8LengthPeerPortName; + + /* LengthPeerStationName */ + offset = dissect_dcerpc_uint8(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_length_peer_station_name, &u8LengthPeerStationName); + /* PeerStationName */ + proto_tree_add_item_ret_display_string (sub_tree, hf_pn_io_peer_station_name, tvb, offset, u8LengthPeerStationName, + ENC_ASCII, pinfo->pool, &pPeerStationName); + offset += u8LengthPeerStationName; + + offset = dissect_pn_align4(tvb, offset, pinfo, sub_tree); + + proto_item_append_text(sub_item, ": %s (%s)", pPeerStationName, pPeerPortName); + } + + return offset; +} + /* dissect the PDInterfaceDataReal block */ static int @@ -6473,7 +8639,7 @@ dissect_PDInterfaceDataReal_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint8(tvb, offset, pinfo, tree, drep, hf_pn_io_length_own_chassis_id, &u8LengthOwnChassisID); /* OwnChassisID */ - proto_tree_add_item (tree, hf_pn_io_own_chassis_id, tvb, offset, u8LengthOwnChassisID, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_own_chassis_id, tvb, offset, u8LengthOwnChassisID, ENC_ASCII); offset += u8LengthOwnChassisID; /* Padding */ @@ -6618,7 +8784,7 @@ dissect_PDSyncData_block(tvbuff_t *tvb, int offset, hf_pn_io_ptcp_length_subdomain_name, &u8LengthSubdomainName); /* PTCPSubdomainName */ /* XXX - another Punycode string */ - proto_tree_add_item (tree, hf_pn_io_ptcp_subdomain_name, tvb, offset, u8LengthSubdomainName, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_ptcp_subdomain_name, tvb, offset, u8LengthSubdomainName, ENC_ASCII); offset += u8LengthSubdomainName; /* Padding */ @@ -7127,6 +9293,7 @@ dissect_ARProperties(tvbuff_t *tvb, int offset, proto_tree *sub_tree; guint32 u32ARProperties; guint8 startupMode; + guint8 isTimeAware; sub_item = proto_tree_add_item(tree, hf_pn_io_ar_properties, tvb, offset, 4, ENC_BIG_ENDIAN); sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_ar_properties); @@ -7148,6 +9315,13 @@ dissect_ARProperties(tvbuff_t *tvb, int offset, hf_pn_io_ar_properties_combined_object_container_with_legacy_startupmode, &u32ARProperties); } dissect_dcerpc_uint32(tvb, offset, pinfo, sub_tree, drep, + hf_pn_io_ar_properties_time_aware_system, &u32ARProperties); + + isTimeAware = (guint8)((u32ARProperties >> 28) & 0x01); + + wmem_map_insert(pnio_time_aware_frame_map, GUINT_TO_POINTER(pinfo->num), GUINT_TO_POINTER(isTimeAware)); + + dissect_dcerpc_uint32(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_ar_properties_reserved, &u32ARProperties); dissect_dcerpc_uint32(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_ar_properties_achnowledge_companion_ar, &u32ARProperties); @@ -7171,7 +9345,6 @@ dissect_ARProperties(tvbuff_t *tvb, int offset, return offset; } - /* dissect the IOCRProperties */ static int dissect_IOCRProperties(tvbuff_t *tvb, int offset, @@ -7267,7 +9440,7 @@ dissect_ARData_block(tvbuff_t *tvb, int offset, hf_pn_io_cminitiator_objectuuid, &uuid); offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, hf_pn_io_station_name_length, &u16NameLength); - proto_tree_add_item (ar_tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA); + proto_tree_add_item (ar_tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII); offset += u16NameLength; offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, @@ -7350,7 +9523,7 @@ dissect_ARData_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, hf_pn_io_station_name_length, &u16NameLength); /* ParameterServerStationName */ - proto_tree_add_item (ar_tree, hf_pn_io_parameter_server_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA); + proto_tree_add_item (ar_tree, hf_pn_io_parameter_server_station_name, tvb, offset, u16NameLength, ENC_ASCII); offset += u16NameLength; /* NumberOfAPIs */ offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, @@ -7397,7 +9570,7 @@ dissect_ARData_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, hf_pn_io_cmresponder_udprtport, &u16UDPRTPort); /* CMInitiatorStationName*/ offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, hf_pn_io_station_name_length, &u16NameLength); - proto_tree_add_item (ar_tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA); + proto_tree_add_item (ar_tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII); offset += u16NameLength; /** align padding! **/ offset = dissect_pn_align4(tvb, offset, pinfo, ar_tree); @@ -7406,7 +9579,7 @@ dissect_ARData_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, ar_tree, drep, hf_pn_io_station_name_length, &u16NameLength); if (u16NameLength != 0) { /* ParameterServerStationName */ - proto_tree_add_item (ar_tree, hf_pn_io_parameter_server_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA); + proto_tree_add_item (ar_tree, hf_pn_io_parameter_server_station_name, tvb, offset, u16NameLength, ENC_ASCII); offset += u16NameLength; } else @@ -8031,12 +10204,12 @@ dissect_ARBlockReq_block(tvbuff_t *tvb, int offset, /* When ARType==IOCARSR, then find or create conversation for this frame */ if (!PINFO_FD_VISITED(pinfo)) { /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_UDP, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_UDP, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as current packet is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_UDP, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_UDP, 0, 0, 0); } /* Try to get apdu status switch information from the conversation */ @@ -8087,7 +10260,7 @@ dissect_ARBlockReq_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_station_name_length, &u16NameLength); - proto_tree_add_item_ret_display_string (tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA, pinfo->pool, &pStationName); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII, pinfo->pool, &pStationName); offset += u16NameLength; proto_item_append_text(item, ": %s, Session:%u, MAC:%02x:%02x:%02x:%02x:%02x:%02x, Port:0x%x, Station:%s", @@ -8191,11 +10364,13 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, guint8 mac[6]; guint16 u16NumberOfAPIs; guint32 u32Api; - guint16 u16NumberOfIODataObjects; + guint16 u16NumberOfIODataObjectsInAPI; + guint16 u16NumberOfIODataObjectsInCR = 0U; guint16 u16SlotNr; guint16 u16SubslotNr; guint16 u16IODataObjectFrameOffset; - guint16 u16NumberOfIOCS; + guint16 u16NumberOfIOCSInAPI; + guint16 u16NumberOfIOCSInCR = 0U; guint16 u16IOCSFrameOffset; proto_item *api_item; proto_tree *api_tree; @@ -8206,6 +10381,7 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, guint32 u32SubStart; conversation_t *conversation; + conversation_t *conversation_time_aware; stationInfo *station_info = NULL; iocsObject *iocs_object; iocsObject *cmp_iocs_object; @@ -8230,7 +10406,7 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_lt, &u16LT); - offset = dissect_IOCRProperties(tvb, offset, pinfo, tree, drep); + offset = dissect_IOCRProperties(tvb, offset, pinfo, tree, drep); offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_data_length, &u16DataLength); @@ -8255,6 +10431,25 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, offset = dissect_pn_mac(tvb, offset, pinfo, tree, hf_pn_io_iocr_multicast_mac_add, mac); + if (wmem_map_contains(pnio_time_aware_frame_map, GUINT_TO_POINTER(pinfo->num))) + { + address cyclic_mac_addr; + address iocr_mac_addr; + + set_address(&cyclic_mac_addr, AT_ETHER, 6, mac); + + iocr_mac_addr = (u16IOCRType == PN_INPUT_CR) ? pinfo->dl_dst : pinfo->dl_src; + + /* Get current conversation endpoints using MAC addresses */ + conversation_time_aware = find_conversation(pinfo->num, &cyclic_mac_addr, &iocr_mac_addr, CONVERSATION_NONE, 0, 0, 0); + + if (conversation_time_aware == NULL) { + conversation_time_aware = conversation_new(pinfo->num, &iocr_mac_addr, &cyclic_mac_addr, CONVERSATION_NONE, 0, 0, 0); + } + + conversation_add_proto_data(conversation_time_aware, proto_pn_io_time_aware_status, wmem_map_lookup(pnio_time_aware_frame_map, GUINT_TO_POINTER(pinfo->num))); + } + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_number_of_apis, &u16NumberOfAPIs); @@ -8273,18 +10468,18 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, hf_pn_io_api, &u32Api); /* NumberOfIODataObjects */ offset = dissect_dcerpc_uint16(tvb, offset, pinfo, api_tree, drep, - hf_pn_io_number_of_io_data_objects, &u16NumberOfIODataObjects); + hf_pn_io_number_of_io_data_objects, &u16NumberOfIODataObjectsInAPI); /* Set global Variant for Number of IO Data Objects */ - /* Notice: Handle Input & Output seperate!!! */ + /* Notice: Handle Input & Output separate!!! */ if (!PINFO_FD_VISITED(pinfo)) { /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as Connect Request is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -8302,12 +10497,12 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, init_pnio_rtc1_station(station_info); conversation_add_proto_data(conversation, current_aruuid, station_info); } - station_info->ioDataObjectNr += u16NumberOfIODataObjects; + u16NumberOfIODataObjectsInCR += u16NumberOfIODataObjectsInAPI; pn_find_dcp_station_info(station_info, conversation); } - u16Tmp = u16NumberOfIODataObjects; + u16Tmp = u16NumberOfIODataObjectsInAPI; while (u16Tmp--) { sub_item = proto_tree_add_item(api_tree, hf_pn_io_io_data_object, tvb, offset, 0, ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_io_data_object); @@ -8367,16 +10562,14 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, /* NumberOfIOCS */ offset = dissect_dcerpc_uint16(tvb, offset, pinfo, api_tree, drep, - hf_pn_io_number_of_iocs, &u16NumberOfIOCS); + hf_pn_io_number_of_iocs, &u16NumberOfIOCSInAPI); /* Set global Vairant for NumberOfIOCS */ if (!PINFO_FD_VISITED(pinfo)) { - if (station_info != NULL) { - station_info->iocsNr = u16NumberOfIOCS; - } + u16NumberOfIOCSInCR += u16NumberOfIOCSInAPI; } - u16Tmp = u16NumberOfIOCS; + u16Tmp = u16NumberOfIOCSInAPI; while (u16Tmp--) { sub_item = proto_tree_add_item(api_tree, hf_pn_io_io_cs, tvb, offset, 0, ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_io_cs); @@ -8427,11 +10620,24 @@ dissect_IOCRBlockReq_block(tvbuff_t *tvb, int offset, } proto_item_append_text(api_item, ": 0x%x, NumberOfIODataObjects: %u NumberOfIOCS: %u", - u32Api, u16NumberOfIODataObjects, u16NumberOfIOCS); + u32Api, u16NumberOfIODataObjectsInAPI, u16NumberOfIOCSInAPI); proto_item_set_len(api_item, offset - u32ApiStart); } + /* Update global object count */ + if (!PINFO_FD_VISITED(pinfo)) { + if (station_info != NULL) { + if (u16IOCRType == PN_INPUT_CR) { + station_info->iocsNr_in = u16NumberOfIOCSInCR; + station_info->ioDataObjectNr_in = u16NumberOfIODataObjectsInCR; + } else { + station_info->iocsNr_out = u16NumberOfIOCSInCR; + station_info->ioDataObjectNr_out = u16NumberOfIODataObjectsInCR; + } + } + } + if (ar != NULL) { switch (u16IOCRType) { case(1): /* Input CR */ @@ -8586,7 +10792,7 @@ dissect_ARServerBlock(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_station_name_length, &u16NameLength); - proto_tree_add_item (tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA); + proto_tree_add_item (tree, hf_pn_io_cminitiator_station_name, tvb, offset, u16NameLength, ENC_ASCII); offset += u16NameLength; /* Padding to next 4 byte alignment in this block */ u16padding = u16BodyLength - (2 + u16NameLength); @@ -8692,7 +10898,7 @@ dissect_MCRBlockReq_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, hf_pn_io_station_name_length, &u16NameLength); - proto_tree_add_item_ret_display_string (tree, hf_pn_io_provider_station_name, tvb, offset, u16NameLength, ENC_ASCII|ENC_NA, pinfo->pool, &pStationName); + proto_tree_add_item_ret_display_string (tree, hf_pn_io_provider_station_name, tvb, offset, u16NameLength, ENC_ASCII, pinfo->pool, &pStationName); offset += u16NameLength; proto_item_append_text(item, ", CRRef:%u, Properties:0x%x, TFactor:%u, Station:%s", @@ -9078,12 +11284,12 @@ dissect_DataDescription(tvbuff_t *tvb, int offset, /* Save new data for IO Data Objects */ if (!PINFO_FD_VISITED(pinfo)) { /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as current packet is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -9110,6 +11316,7 @@ dissect_DataDescription(tvbuff_t *tvb, int offset, io_data_object = (ioDataObject*)wmem_list_frame_data(frame); if (io_data_object->slotNr == tmp_io_data_object->slotNr && io_data_object->subSlotNr == tmp_io_data_object->subSlotNr) { /* Write additional data from dissect_ExpectedSubmoduleBlockReq_block() to corresponding io_data_object */ + io_data_object->api = tmp_io_data_object->api; io_data_object->moduleIdentNr = tmp_io_data_object->moduleIdentNr; io_data_object->subModuleIdentNr = tmp_io_data_object->subModuleIdentNr; io_data_object->length = u16SubmoduleDataLength; @@ -9130,6 +11337,108 @@ dissect_DataDescription(tvbuff_t *tvb, int offset, } +static int +resolve_pa_profile_submodule_name(ioDataObject *io_data_object) +{ + const uint32_t u32SubmoduleIdentNumber = io_data_object->subModuleIdentNr; + /* split components of submodule ident number */ + const uint8_t variant = (u32SubmoduleIdentNumber >> 24u) & 0xFFu; + const uint8_t block_object = (u32SubmoduleIdentNumber >> 16u) & 0xFFu; + const uint8_t parent_class = (u32SubmoduleIdentNumber >> 8u) & 0xFFu; + const uint8_t class = (u32SubmoduleIdentNumber) & 0xFFu; + + const gchar* parent_class_name = NULL; + const gchar* class_name = NULL; + + const gchar* block_object_name = try_val_to_str(block_object, pn_io_pa_profile_block_object_vals); + + if (block_object_name != NULL) + { + switch (block_object) + { + case PA_PROFILE_BLOCK_DAP: + if (parent_class == 0u) + { + class_name = try_val_to_str(class, pn_io_pa_profile_dap_submodule_vals); + if (class_name != NULL) + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - %s", block_object_name, class_name); + } + } + else + { + /* we have an interface or a port */ + if (class == 0u) + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "Interface %d", parent_class); + } + else + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "Port %d Interface %d", class, parent_class); + } + } + break; + + case PA_PROFILE_BLOCK_PB: + parent_class_name = try_val_to_str(parent_class, pn_io_pa_profile_physical_block_parent_class_vals); + if (parent_class_name != NULL) + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - %s", block_object_name, parent_class_name); + } + else + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - Unknown", block_object_name); + } + break; + + case PA_PROFILE_BLOCK_FB: + class_name = try_val_to_str(class, pn_io_pa_profile_function_block_class_vals); + if (class <= 2u) + { + parent_class_name = try_val_to_str(parent_class, pn_io_pa_profile_function_block_parent_class_vals); + } + else + { + parent_class_name = (class <= 4u) ? "Analog" : ""; + } + + if ((parent_class_name != NULL) && (class_name != NULL)) + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - %s %s", block_object_name, parent_class_name, class_name); + } + else + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - Unknown", block_object_name); + } + break; + + case PA_PROFILE_BLOCK_TB: + parent_class_name = try_val_to_str(parent_class, pn_io_pa_profile_transducer_block_parent_class_vals); + if (parent_class_name != NULL) + { + class_name = try_val_to_str(class, pn_io_pa_profile_transducer_block_class_vals[parent_class]); + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - %s (%s)", block_object_name, parent_class_name, class_name); + } + else + { + (void)snprintf(io_data_object->moduleNameStr, MAX_NAMELENGTH, "%s - Unknown", block_object_name); + } + break; + } + + if (variant != 0u) + { + g_strlcat (io_data_object->moduleNameStr, " (VARIANT)", MAX_NAMELENGTH); + } + + return 1; + } + else + { + return 0; + } +} + /* dissect the ExpectedSubmoduleBlockReq */ static int dissect_ExpectedSubmoduleBlockReq_block(tvbuff_t *tvb, int offset, @@ -9224,12 +11533,12 @@ dissect_ExpectedSubmoduleBlockReq_block(tvbuff_t *tvb, int offset, /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as current packet is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -9383,12 +11692,29 @@ dissect_ExpectedSubmoduleBlockReq_block(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, hf_pn_io_submodule_properties_type, &u16SubmoduleProperties); + io_data_object->api = u32Api; io_data_object->slotNr = u16SlotNr; io_data_object->subSlotNr = u16SubslotNr; io_data_object->moduleIdentNr = u32ModuleIdentNumber; io_data_object->subModuleIdentNr = u32SubmoduleIdentNumber; io_data_object->discardIOXS = u16SubmoduleProperties & 0x0020; + /* Before searching the GSD, check if we have a PA Profile 4.02 submodule. If yes + then the submodule's name is defined in the specification and can be resolved + without the GSD. + We still read the GSD afterwards, in case the user wants to override the specification's + names with a GSD. + Most PA Profile submodules are located in API 0x9700, but the DAP and the interfaces/ports + are located in API 0 per PROFINET specification, so we need to filter also on the DAP module + ident number. + */ + if ((io_data_object->api == PA_PROFILE_API) || + ((io_data_object->moduleIdentNr & PA_PROFILE_DAP_MASK) == PA_PROFILE_DAP_IDENT)) + { + resolve_pa_profile_submodule_name(io_data_object); + } + + /* Search the moduleID and subModuleID, find if PROFIsafe and also search for F-Par. Indexnumber * --------------------------------------------------------------------------------------------- * Speical case: Module has several ModuleIdentNr. in one GSD-file @@ -9628,9 +11954,9 @@ dissect_ModuleDiffBlock_block(tvbuff_t *tvb, int offset, if (!PINFO_FD_VISITED(pinfo)) { /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { - conversation = conversation_new(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -9686,13 +12012,13 @@ dissect_ModuleDiffBlock_block(tvbuff_t *tvb, int offset, dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, hf_pn_io_submodule_state_ar_info, &u16SubmoduleState); dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, - hf_pn_io_submodule_state_diag_info, &u16SubmoduleState); + hf_pn_io_submodule_state_fault, &u16SubmoduleState); dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, hf_pn_io_submodule_state_maintenance_demanded, &u16SubmoduleState); dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, hf_pn_io_submodule_state_maintenance_required, &u16SubmoduleState); dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, - hf_pn_io_submodule_state_qualified_info, &u16SubmoduleState); + hf_pn_io_submodule_state_advice, &u16SubmoduleState); offset = dissect_dcerpc_uint16(tvb, offset, pinfo, submodule_tree, drep, hf_pn_io_submodule_state_add_info, &u16SubmoduleState); } else { @@ -9769,6 +12095,60 @@ dissect_IsochronousModeData_block(tvbuff_t *tvb, int offset, return offset+1; } +static int +dissect_CommunityName_block(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, const guint8 *drep _U_, int hfindex) +{ + guint8 u8CommunityNameLength; + proto_item* sub_item; + proto_item* sub_tree; + + /* CommunityNameLength */ + u8CommunityNameLength = tvb_get_guint8(tvb, offset); + sub_item = proto_tree_add_item(tree, hfindex, tvb, offset, u8CommunityNameLength + 1, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_pn_io_snmp_command_name); + + proto_tree_add_item(sub_tree, hf_pn_io_snmp_community_name_length, tvb, offset, 1, DREP_ENC_INTEGER(drep)); + offset += 1; + + /* community Name */ + proto_tree_add_item(sub_tree, hf_pn_io_snmp_community_name, tvb, offset, u8CommunityNameLength, ENC_ASCII | ENC_NA); + + proto_item_append_text(sub_item, ": %s", + tvb_get_string_enc(pinfo->pool, tvb, offset, u8CommunityNameLength, ENC_ASCII|ENC_NA)); + + offset += u8CommunityNameLength; + return offset; +} + +/* dissect the CIMSNMPAdjust block */ +static int +dissect_CIMSNMPAdjust_block(tvbuff_t *tvb, int offset, + packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint8 *drep _U_, guint8 u8BlockVersionHigh, guint8 u8BlockVersionLow, + guint16 u16BodyLength) +{ + guint16 u16StartsAtOffset = offset; + guint16 u16padding; + + if (u8BlockVersionHigh!=1 || u8BlockVersionLow!=0) { + expert_add_info_format(pinfo, item, &ei_pn_io_block_version, + "Block version %u.%u not implemented yet!", u8BlockVersionHigh, u8BlockVersionLow); + return offset; + } + + /* SNMPControl */ + proto_tree_add_item(tree, hf_pn_io_snmp_control, tvb, offset, 2, DREP_ENC_INTEGER(drep)); + offset += 2; + + offset = dissect_CommunityName_block(tvb, offset, pinfo, tree, drep, hf_pn_io_snmp_read_community_name); + offset = dissect_CommunityName_block(tvb, offset, pinfo, tree, drep, hf_pn_io_snmp_write_community_name); + + u16padding = u16BodyLength - (offset - u16StartsAtOffset); + if (u16padding > 0) + offset = dissect_pn_padding(tvb, offset, pinfo, tree, u16padding); + + return offset; +} /* dissect the MultipleBlockHeader block */ static int @@ -10100,7 +12480,7 @@ dissect_block(tvbuff_t *tvb, int offset, val_to_str(u16BlockType, pn_io_block_type, "Unknown (0x%04x)")); col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", - val_to_str(u16BlockType, pn_io_block_type, "Unknown")); + val_to_str_const(u16BlockType, pn_io_block_type, "Unknown")); /* block length is without type and length fields, but with version field */ /* as it's already dissected, remove it */ @@ -10241,7 +12621,7 @@ dissect_block(tvbuff_t *tvb, int offset, case(0x0114): case(0x0116): case(0x0117): - dissect_ControlConnect_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, ar, u16BlockType); + dissect_ControlPlugOrConnect_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, ar, u16BlockType); break; case(0x0118): @@ -10383,6 +12763,9 @@ dissect_block(tvbuff_t *tvb, int offset, case(0x022B): dissect_PDSubFrameBlock_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, u16BodyLength); break; + case(0x022C): + dissect_PDPortDataRealExtended_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, u16BodyLength); + break; case(0x0230): dissect_PDPortFODataCheck_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); @@ -10396,7 +12779,6 @@ dissect_block(tvbuff_t *tvb, int offset, case(0x0233): dissect_MrpInstanceDataCheck_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, u16BodyLength); break; - case(0x0240): dissect_PDInterfaceDataReal_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); break; @@ -10409,6 +12791,60 @@ dissect_block(tvbuff_t *tvb, int offset, case(0x0251): dissect_PDPortStatistic_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); break; + case(0x0260): + dissect_OwnPort_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0261): + dissect_Neighbors_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0270): + dissect_TSNNetworkControlDataReal_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0271): + dissect_TSNNetworkControlDataAdjust_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0272): + dissect_TSNDomainPortConfig_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0273): + dissect_TSNDomainQueueConfig_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0274): + dissect_TSNTimeData_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0275): + dissect_TSNStreamPathDataReal_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, FALSE); + break; + case(0x0276): + dissect_TSNSyncTreeData_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0277): + dissect_TSNUploadNetworkAttributes_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0278): + dissect_TSNForwardingDelay_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0279): + dissect_TSNExpectedNetworkAttributes_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x027A): + dissect_TSNStreamPathDataReal_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, TRUE); + break; + case(0x027B): + dissect_TSNDomainPortIngressRateLimiter_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x027C): + dissect_TSNDomainQueueRateLimiter_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x027D): + dissect_TSNPortID_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x027E): + dissect_TSNExpectedNeighbor_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow); + break; + case(0x0300): + dissect_CIMSNMPAdjust_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, u16BodyLength); + break; case(0x0400): dissect_MultipleBlockHeader_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, u16BodyLength); break; @@ -10487,7 +12923,7 @@ dissect_block(tvbuff_t *tvb, int offset, case(0x8116): case(0x8117): case(0x8118): - dissect_ControlConnect_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, ar, u16BlockType); + dissect_ControlPlugOrConnect_block(tvb, offset, pinfo, sub_tree, sub_item, drep, u8BlockVersionHigh, u8BlockVersionLow, ar, u16BlockType); break; default: dissect_pn_undecoded(tvb, offset, pinfo, sub_tree, u16BodyLength); @@ -10683,7 +13119,7 @@ dissect_ProfiDriveParameterRequest(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_no_of_parameters, &no_of_parameters); proto_item_append_text(profidrive_item, "ReqRef:0x%02x, ReqId:%s, DO:%u, NoOfParameters:%u", - request_reference, val_to_str(request_id, pn_io_profidrive_request_id_vals, "Unknown"), + request_reference, val_to_str_const(request_id, pn_io_profidrive_request_id_vals, "Unknown"), do_id, no_of_parameters); col_add_fstr(pinfo->cinfo, COL_INFO, "PROFIDrive Write Request, ReqRef:0x%02x, %s DO:%u", @@ -10716,7 +13152,7 @@ dissect_ProfiDriveParameterRequest(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_param_subindex, &idx); proto_item_append_text(sub_item, "Attr:%s, Elems:%u, Parameter:%u, Index:%u", - val_to_str(attribute, pn_io_profidrive_attribute_vals, "Unknown"), no_of_elems, + val_to_str_const(attribute, pn_io_profidrive_attribute_vals, "Unknown"), no_of_elems, parameter, idx); if (no_of_elems>1) { @@ -10745,7 +13181,7 @@ dissect_ProfiDriveParameterRequest(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_param_no_of_values, &no_of_vals); proto_item_append_text(sub_item, "Format:%s, NoOfVals:%u", - val_to_str(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); + val_to_str_const(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); while (no_of_vals--) { @@ -10768,7 +13204,7 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, guint8 addr_idx; proto_item *profidrive_item; proto_tree *profidrive_tree; - + profidrive_item = proto_tree_add_item(tree, hf_pn_io_block, tvb, offset, 0, ENC_NA); profidrive_tree = proto_item_add_subtree(profidrive_item, ett_pn_io_profidrive_parameter_response); proto_item_set_text(profidrive_item, "PROFIDrive Parameter Response: "); @@ -10781,11 +13217,11 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, offset = dissect_dcerpc_uint8(tvb, offset, pinfo, profidrive_tree, drep, hf_pn_io_profidrive_no_of_parameters, &no_of_parameters); proto_item_append_text(profidrive_item, "ReqRef:0x%02x, RspId:%s, DO:%u, NoOfParameters:%u", - request_reference, val_to_str(response_id, pn_io_profidrive_response_id_vals, "Unknown"), + request_reference, val_to_str_const(response_id, pn_io_profidrive_response_id_vals, "Unknown"), do_id, no_of_parameters); col_add_fstr(pinfo->cinfo, COL_INFO, "PROFIDrive Read Response, ReqRef:0x%02x, RspId:%s", request_reference, - val_to_str(response_id, pn_io_profidrive_response_id_vals, "Unknown response")); + val_to_str_const(response_id, pn_io_profidrive_response_id_vals, "Unknown response")); /* in case of parameter response value list */ if (response_id == 0x01) { for(addr_idx=0; addr_idx<no_of_parameters; addr_idx++) { @@ -10804,7 +13240,7 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_param_no_of_values, &no_of_vals); proto_item_append_text(sub_item, "Format:%s, NoOfVals:%u", - val_to_str(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); + val_to_str_const(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); while (no_of_vals--) { @@ -10816,7 +13252,7 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, if(response_id == 0x02){ // change parameter response ok, no data } - + if(response_id == 0x81){ for(addr_idx=0; addr_idx<no_of_parameters; addr_idx++) { guint8 format; @@ -10835,12 +13271,12 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_param_no_of_values, &no_of_vals); proto_item_append_text(sub_item, "Format:%s, NoOfVals:%u", - val_to_str(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); + val_to_str_const(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); if(format == 0x44){ - + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, - hf_pn_io_profidrive_param_value_error, &value16); + hf_pn_io_profidrive_param_value_error, &value16); if(value16 == 0x23){ addr_idx = no_of_parameters; @@ -10871,7 +13307,7 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, } } } - + if(response_id == 0x82){ for(addr_idx=0; addr_idx<no_of_parameters; addr_idx++) { @@ -10891,17 +13327,17 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, hf_pn_io_profidrive_param_no_of_values, &no_of_vals); proto_item_append_text(sub_item, "Format:%s, NoOfVals:%u", - val_to_str(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); + val_to_str_const(format, pn_io_profidrive_format_vals, "Unknown"), no_of_vals); if(format == 0x44){ - + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, - hf_pn_io_profidrive_param_value_error, &value16); + hf_pn_io_profidrive_param_value_error, &value16); if(value16 == 0x23){ addr_idx = no_of_parameters; } - + while (--no_of_vals) { switch(value16) @@ -10913,7 +13349,7 @@ dissect_ProfiDriveParameterResponse(tvbuff_t *tvb, int offset, case 0x7: case 0x14: case 0x20: - + offset = dissect_dcerpc_uint16(tvb, offset, pinfo, sub_tree, drep, hf_pn_io_profidrive_param_value_error_sub, &value16); break; @@ -10964,6 +13400,8 @@ dissect_RecordDataRead(tvbuff_t *tvb, int offset, case(0x8012): /* Maintenance required in all codings for one subslot */ case(0x8013): /* Maintenance demanded in all codings for one subslot */ case(0x801e): /* SubstituteValues for one subslot */ + case(0x8020): /* PDIRSubframeData for one subslot */ + case(0x8027): /* PDPortDataRealExtended for one subslot */ case(0x8028): /* RecordInputDataObjectElement for one subslot */ case(0x8029): /* RecordOutputDataObjectElement for one subslot */ case(0x8050): /* PDInterfaceMrpDataReal for one subslot */ @@ -10971,9 +13409,15 @@ dissect_RecordDataRead(tvbuff_t *tvb, int offset, case(0x8052): /* PDInterfaceMrpDataAdjust for one subslot */ case(0x8053): /* PDPortMrpDataAdjust for one subslot */ case(0x8054): /* PDPortMrpDataReal for one subslot */ + case(0x80F0): /* TSNNetworkControlDataReal */ + case(0x80F2): /* TSNSyncTreeData */ + case(0x80F3): /* TSNUploadNetworkAttributes */ + case(0x80F4): /* TSNExpectedNetworkAttributes */ + case(0x80F5): /* TSNNetworkControlDataAdjust */ case(0x8060): /* PDPortFODataReal for one subslot */ case(0x8061): /* PDPortFODataCheck for one subslot */ case(0x8062): /* PDPortFODataAdjust for one subslot */ + case(0x8063): /* PDPortSFPDataCheck for one subslot */ case(0x8070): /* PDNCDataCheck for one subslot */ case(0x8071): /* PDPortStatistic for one subslot */ case(0x8080): /* PDInterfaceDataReal */ @@ -10981,6 +13425,8 @@ dissect_RecordDataRead(tvbuff_t *tvb, int offset, case(0x80AF): /* PE_EntityStatusData for one subslot */ case(0x80CF): /* RS_AdjustObserver */ + case(0x8200): /* CIMSNMPAdjust */ + case(0xaff0): /* I&M0 */ case(0xaff1): /* I&M1 */ case(0xaff2): /* I&M2 */ @@ -11062,7 +13508,7 @@ dissect_RecordDataRead(tvbuff_t *tvb, int offset, case(0x802e): /* Expected PDSyncData for one subslot with SyncID value 0 for PTCPoverRTC */ case(0x802f): /* PDPortDataAdjust */ case(0x8030): /* IsochronousModeData for one subslot */ - case(0x8031): /* Expected PDSyncData for one subslot with SyncID value 1 */ + case(0x8031): /* PDTimeData for one subslot */ case(0x8032): case(0x8033): case(0x8034): @@ -11093,7 +13539,10 @@ dissect_RecordDataRead(tvbuff_t *tvb, int offset, case(0x804d): case(0x804e): case(0x804f): /* Expected PDSyncData for one subslot with SyncID value 31 */ - case(0x8072): /* PDPortStatistic for one subslot */ + case(0x8055): /* PDPortMrpIcDataAdjust for one subslot */ + case(0x8056): /* PDPortMrpIcDataCheck for one subslot */ + case(0x8057): /* PDPortMrpIcDataReal for one subslot */ + case(0x8072): /* PDPortStatistic for one subslot */ case(0xc000): /* ExpectedIdentificationData for one slot */ case(0xc001): /* RealIdentificationData for one slot */ case(0xc00a): /* Diagnosis in channel coding for one slot */ @@ -11264,12 +13713,12 @@ dissect_ProfiSafeParameterRequest(tvbuff_t *tvb, int offset, if (!PINFO_FD_VISITED(pinfo)) { /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as current packet is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -11344,12 +13793,12 @@ dissect_RecordDataWrite(tvbuff_t *tvb, int offset, /* PROFISafe */ /* Get current conversation endpoints using MAC addresses */ - conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, ENDPOINT_NONE, 0, 0, 0); + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); if (conversation == NULL) { /* Create new conversation, if no "Ident OK" frame as been dissected yet! * Need to switch dl_src & dl_dst, as current packet is sent by controller and not by device. * All conversations are based on Device MAC as addr1 */ - conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, ENDPOINT_NONE, 0, 0, 0); + conversation = conversation_new(pinfo->num, &pinfo->dl_dst, &pinfo->dl_src, CONVERSATION_NONE, 0, 0, 0); } current_aruuid_frame = pn_find_aruuid_frame_setup(pinfo); @@ -11428,16 +13877,23 @@ dissect_RecordDataWrite(tvbuff_t *tvb, int offset, case(0x802e): /* Expected PDSyncData for one subslot with SyncID value 0 for PTCPoverRTC */ case(0x802f): /* PDPortDataAdjust for one subslot */ case(0x8030): /* IsochronousModeData for one subslot */ + case(0x8031): /* PDTimeData for one subslot */ case(0x8051): /* PDInterfaceMrpDataCheck for one subslot */ case(0x8052): /* PDInterfaceMrpDataAdjust for one subslot */ case(0x8053): /* PDPortMrpDataAdjust for one subslot */ + case(0x8055): /* PDPortMrpIcDataAdjust for one subslot */ + case(0x8056): /* PDPortMrpIcDataCheck for one subslot */ case(0x8061): /* PDPortFODataCheck for one subslot */ case(0x8062): /* PDPortFODataAdjust for one subslot */ + case(0x8063): /* PDPortSFPDataCheck for one subslot */ case(0x8070): /* PDNCDataCheck for one subslot */ case(0x8071): /* PDInterfaceAdjust */ case(0x8090): /* PDInterfaceFSUDataAdjust */ case(0x80B0): /* CombinedObjectContainer*/ case(0x80CF): /* RS_AdjustObserver */ + case(0x8200): /* CIMSNMPAdjust */ + case(0xaff1): /* I&M1 */ + case(0xaff2): /* I&M2 */ case(0xaff3): /* I&M3 */ case(0xe050): /* FastStartUp data for one AR */ case(0xe061): /* RS_AckEvent (using RecordDataWrite service) */ @@ -11738,7 +14194,7 @@ dissect_PNIO_RTA(tvbuff_t *tvb, int offset, hf_pn_io_pdu_type_version, &u8PDUVersion); u8PDUVersion >>= 4; proto_item_append_text(sub_item, ", Type: %s, Version: %u", - val_to_str(u8PDUType, pn_io_pdu_type, "Unknown"), + val_to_str_const(u8PDUType, pn_io_pdu_type, "Unknown"), u8PDUVersion); /* additional flags */ @@ -11797,6 +14253,8 @@ dissect_PNIO_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, /* the sub tvb will NOT contain the frame_id here! */ guint16 u16FrameID = GPOINTER_TO_UINT(data); heur_dtbl_entry_t *hdtbl_entry; + conversation_t* conversation; + guint8 isTimeAware = FALSE; /* * In case the packet is a protocol encoded in the basic PNIO transport stream, @@ -11806,10 +14264,27 @@ dissect_PNIO_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, if (dissector_try_heuristic(heur_pn_subdissector_list, tvb, pinfo, tree, &hdtbl_entry, NULL)) return TRUE; + /* TimeAwareness Information needed for dissecting RTC3 - RTSteam frames */ + conversation = find_conversation(pinfo->num, &pinfo->dl_src, &pinfo->dl_dst, CONVERSATION_NONE, 0, 0, 0); + + if (conversation != NULL) { + isTimeAware = GPOINTER_TO_UINT(conversation_get_proto_data(conversation, proto_pn_io_time_aware_status)); + } + /* is this a (none DFP) PNIO class 3 data packet? */ /* frame id must be in valid range (cyclic Real-Time, class=3) */ - if ((u16FrameID >= 0x0100 && u16FrameID <= 0x06FF) || /* RTC3 non redundant */ - (u16FrameID >= 0x700 && u16FrameID <= 0x0fff)) { /* RTC3 redundant */ + if (((u16FrameID >= 0x0100 && u16FrameID <= 0x06FF) || /* RTC3 non redundant */ + (u16FrameID >= 0x0700 && u16FrameID <= 0x0fff)) && /* RTC3 redundant */ + !isTimeAware) { + dissect_CSF_SDU_heur(tvb, pinfo, tree, data); + return TRUE; + } + + /* is this a PNIO class stream data packet? */ + /* frame id must be in valid range (cyclic Real-Time, class=Stream) */ + if (((u16FrameID >= 0x1000 && u16FrameID <= 0x2FFF) || + (u16FrameID >= 0x3800 && u16FrameID <= 0x3FFF)) && + isTimeAware) { dissect_CSF_SDU_heur(tvb, pinfo, tree, data); return TRUE; } @@ -11817,7 +14292,7 @@ dissect_PNIO_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, /* The following range is reserved for following developments */ /* frame id must be in valid range (Reserved) and * first byte (CBA version field) has to be != 0x11 */ - if (u16FrameID >= 0x1000 && u16FrameID <= 0x7fff) { + if (u16FrameID >= 0x4000 && u16FrameID <= 0x7fff) { dissect_PNIO_C_SDU(tvb, 0, pinfo, tree, drep); return TRUE; } @@ -11867,7 +14342,7 @@ dissect_PNIO_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, static gboolean -pn_io_ar_conv_valid(packet_info *pinfo) +pn_io_ar_conv_valid(packet_info *pinfo, void *user_data _U_) { void* profinet_type = p_get_proto_data(pinfo->pool, pinfo, proto_pn_io, 0); @@ -11875,7 +14350,7 @@ pn_io_ar_conv_valid(packet_info *pinfo) } static gchar * -pn_io_ar_conv_filter(packet_info *pinfo) +pn_io_ar_conv_filter(packet_info *pinfo, void *user_data _U_) { pnio_ar_t *ar = (pnio_ar_t *)p_get_proto_data(wmem_file_scope(), pinfo, proto_pn_io, 0); void* profinet_type = p_get_proto_data(pinfo->pool, pinfo, proto_pn_io, 0); @@ -11889,7 +14364,7 @@ pn_io_ar_conv_filter(packet_info *pinfo) set_address(&controllermac_addr, AT_ETHER, 6, ar->controllermac); set_address(&devicemac_addr, AT_ETHER, 6, ar->devicemac); - buf = g_strdup_printf( + buf = ws_strdup_printf( "pn_io.ar_uuid == %s || " /* ARUUID */ "(pn_io.alarm_src_endpoint == 0x%x && eth.src == %s) || " /* Alarm CR (contr -> dev) */ "(pn_io.alarm_src_endpoint == 0x%x && eth.src == %s)", /* Alarm CR (dev -> contr) */ @@ -11900,7 +14375,7 @@ pn_io_ar_conv_filter(packet_info *pinfo) } static gchar * -pn_io_ar_conv_data_filter(packet_info *pinfo) +pn_io_ar_conv_data_filter(packet_info *pinfo, void *user_data _U_) { pnio_ar_t *ar = (pnio_ar_t *)p_get_proto_data(wmem_file_scope(), pinfo, proto_pn_io, 0); void* profinet_type = p_get_proto_data(pinfo->pool, pinfo, proto_pn_io, 0); @@ -11919,7 +14394,7 @@ pn_io_ar_conv_data_filter(packet_info *pinfo) guid_str = guid_to_str(pinfo->pool, (const e_guid_t*) &ar->aruuid); if (ar->arType == 0x0010) /* IOCARSingle using RT_CLASS_3 */ { - buf = g_strdup_printf( + buf = ws_strdup_printf( "pn_io.ar_uuid == %s || " /* ARUUID */ "(pn_rt.frame_id == 0x%x) || (pn_rt.frame_id == 0x%x) || " "(pn_io.alarm_src_endpoint == 0x%x && eth.src == %s) || " /* Alarm CR (contr -> dev) */ @@ -11931,7 +14406,7 @@ pn_io_ar_conv_data_filter(packet_info *pinfo) } else { - buf = g_strdup_printf( + buf = ws_strdup_printf( "pn_io.ar_uuid == %s || " /* ARUUID */ "(pn_rt.frame_id == 0x%x && eth.src == %s && eth.dst == %s) || " /* Input CR && dev MAC -> contr MAC */ "(pn_rt.frame_id == 0x%x && eth.src == %s && eth.dst == %s) || " /* Output CR && contr MAC -> dev MAC */ @@ -11970,6 +14445,7 @@ pnio_cleanup(void) { static void pnio_setup(void) { aruuid_frame_setup_list = wmem_list_new(wmem_file_scope()); + pnio_time_aware_frame_map = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); } @@ -12079,7 +14555,12 @@ proto_register_pn_io (void) }, { &hf_pn_io_ar_properties_reserved, { "Reserved", "pn_io.ar_properties.reserved", - FT_UINT32, BASE_HEX, NULL, 0x1FFFF000, + FT_UINT32, BASE_HEX, NULL, 0x0FFFF000, + NULL, HFILL } + }, + { &hf_pn_io_ar_properties_time_aware_system, + { "TimeAwareSystem", "pn_io.ar_properties.time_aware_system", + FT_UINT32, BASE_HEX, VALS(pn_io_arproperties_time_aware_system), 0x10000000, NULL, HFILL } }, { &hf_pn_io_ar_properties_combined_object_container_with_legacy_startupmode, @@ -12109,7 +14590,7 @@ proto_register_pn_io (void) }, { &hf_pn_RedundancyInfo_reserved, { "RedundancyInfo.reserved", "pn_io.srl_data.redundancyInfoReserved", - FT_UINT16, BASE_HEX, NULL, 0xFFFFFFFC, + FT_UINT16, BASE_HEX, NULL, 0xFFFC, NULL, HFILL } }, { &hf_pn_io_number_of_ARDATAInfo, @@ -12195,12 +14676,12 @@ proto_register_pn_io (void) }, { &hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_0, { "InputValidOnBackupAR", "pn_io.sr_properties.InputValidOnBackupAR", - FT_BOOLEAN, 32, TFS(&tfs_pn_io_sr_properties_BackupAR_with_SRProperties_Mode_0), 0x01, + FT_BOOLEAN, 32, TFS(&tfs_pn_io_sr_properties_BackupAR_with_SRProperties_Mode_0), 0x00000001, NULL, HFILL } }, { &hf_pn_io_sr_properties_InputValidOnBackupAR_with_SRProperties_Mode_1, { "InputValidOnBackupAR", "pn_io.sr_properties.InputValidOnBackupAR", - FT_BOOLEAN, 32, TFS(&tfs_pn_io_sr_properties_BackupAR_with_SRProperties_Mode_1), 0x01, + FT_BOOLEAN, 32, TFS(&tfs_pn_io_sr_properties_BackupAR_with_SRProperties_Mode_1), 0x00000001, NULL, HFILL } }, { &hf_pn_io_sr_properties_Reserved_1, @@ -12275,7 +14756,7 @@ proto_register_pn_io (void) }, { &hf_pn_io_iocr_properties_reserved_3, { "Reserved3", "pn_io.iocr_properties.reserved3", - FT_UINT32, BASE_HEX, NULL, 0xF000000, + FT_UINT32, BASE_HEX, NULL, 0x0F000000, NULL, HFILL } }, { &hf_pn_io_iocr_properties_fast_forwarding_mac_adr, @@ -12300,17 +14781,17 @@ proto_register_pn_io (void) }, { &hf_pn_io_DistributedWatchDogFactor, { "SFIOCRProperties.DistributedWatchDogFactor", "pn_io.SFIOCRProperties.DistributedWatchDogFactor", - FT_UINT32, BASE_HEX, NULL, 0x0FF, + FT_UINT32, BASE_HEX, NULL, 0x000000FF, NULL, HFILL } }, { &hf_pn_io_RestartFactorForDistributedWD, { "SFIOCRProperties.RestartFactorForDistributedWD", "pn_io.SFIOCRProperties.RestartFactorForDistributedWD", - FT_UINT32, BASE_HEX, NULL, 0xff00, + FT_UINT32, BASE_HEX, NULL, 0x0000ff00, NULL, HFILL } }, { &hf_pn_io_SFIOCRProperties_DFPmode, { "SFIOCRProperties.DFPmode", "pn_io.SFIOCRProperties.DFPmode", - FT_UINT32, BASE_HEX, NULL, 0xFF0000, + FT_UINT32, BASE_HEX, NULL, 0x00FF0000, NULL, HFILL } }, { &hf_pn_io_SFIOCRProperties_reserved_1, @@ -12658,6 +15139,11 @@ proto_register_pn_io (void) FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, + { &hf_pn_io_control_alarm_sequence_number, + { "AlarmSequenceNumber", "pn_io.control_alarm_sequence_number", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, { &hf_pn_io_control_command, { "ControlCommand", "pn_io.control_command", FT_UINT16, BASE_HEX, NULL, 0x0, @@ -12705,7 +15191,7 @@ proto_register_pn_io (void) }, { &hf_pn_io_control_command_reserved_7_15, { "ControlBlockProperties.reserved", "pn_io.control_properties_reserved_7_15", - FT_UINT16, BASE_HEX, NULL, 0x0FF80, + FT_UINT16, BASE_HEX, NULL, 0xFF80, NULL, HFILL } }, { &hf_pn_io_control_block_properties, @@ -12915,9 +15401,9 @@ proto_register_pn_io (void) FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_add_info), 0x0007, NULL, HFILL } }, - { &hf_pn_io_submodule_state_qualified_info, - { "QualifiedInfo", "pn_io.submodule_state.qualified_info", - FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_qualified_info), 0x0008, + { &hf_pn_io_submodule_state_advice, + { "Advice", "pn_io.submodule_state.advice", + FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_advice), 0x0008, NULL, HFILL } }, { &hf_pn_io_submodule_state_maintenance_required, @@ -12930,9 +15416,9 @@ proto_register_pn_io (void) FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_maintenance_demanded), 0x0020, NULL, HFILL } }, - { &hf_pn_io_submodule_state_diag_info, - { "DiagInfo", "pn_io.submodule_state.diag_info", - FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_diag_info), 0x0040, + { &hf_pn_io_submodule_state_fault, + { "Fault", "pn_io.submodule_state.fault", + FT_UINT16, BASE_HEX, VALS(pn_io_submodule_state_fault), 0x0040, NULL, HFILL } }, { &hf_pn_io_submodule_state_ar_info, @@ -13045,7 +15531,7 @@ proto_register_pn_io (void) NULL, HFILL } }, { &hf_pn_io_subframe_reserved2, - { "Reserved1", "pn_io.subframe_data.reserved2", + { "Reserved2", "pn_io.subframe_data.reserved2", FT_UINT32, BASE_HEX, NULL, 0xFFFF0000, NULL, HFILL } }, @@ -13070,7 +15556,7 @@ proto_register_pn_io (void) NULL, HFILL } }, { &hf_pn_io_subframe_data_reserved2, - { "Reserved1", "pn_io.subframe_data.reserved_2", + { "Reserved2", "pn_io.subframe_data.reserved_2", FT_UINT32, BASE_HEX, NULL, 0xFFFF0000, NULL, HFILL } }, @@ -13181,6 +15667,11 @@ proto_register_pn_io (void) FT_UINT16, BASE_HEX, VALS(pn_io_ext_channel_error_type0x800C), 0x0, NULL, HFILL } }, + { &hf_pn_io_ext_channel_error_type0x8010, + { "ExtChannelErrorType", "pn_io.ext_channel_error_type8010", + FT_UINT16, BASE_HEX, VALS(pn_io_ext_channel_error_type0x8010), 0x0, + NULL, HFILL } + }, { &hf_pn_io_ext_channel_error_type, { "ExtChannelErrorType", "pn_io.ext_channel_error_type", FT_UINT16, BASE_HEX, NULL, 0x0, @@ -13191,6 +15682,11 @@ proto_register_pn_io (void) FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, + { &hf_pn_io_qualified_channel_qualifier, + { "QualifiedChannelQualifier", "pn_io.qualified_channel_qualifier", + FT_UINT32, BASE_HEX, VALS(pn_io_qualified_channel_qualifier), 0x0, + NULL, HFILL } + }, { &hf_pn_io_ptcp_subdomain_id, { "PTCPSubdomainID", "pn_io.ptcp_subdomain_id", FT_GUID, BASE_NONE, NULL, 0x0, @@ -13412,6 +15908,396 @@ proto_register_pn_io (void) FT_UINT16, BASE_DEC_HEX, VALS(pn_io_preamble_length), 0x0, NULL, HFILL } }, + { &hf_pn_io_tsn_max_supported_record_size, + { "MaxSupportedRecordSize", "pn_io.tsn_upload_network_attributes.max_supported_record_size", + FT_UINT32, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_max_supported_record_size_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_transfer_time_tx, + { "TransferTimeTX", "pn_io.tsn_upload_network_attributes.transfer_time_tx", + FT_UINT32, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_transfer_time_tx_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_transfer_time_rx, + { "TransferTimeRX", "pn_io.tsn_upload_network_attributes.transfer_time_rx", + FT_UINT32, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_transfer_time_rx_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_number_of_queues, + { "NumberOfQueues", "pn_io.tsn_port_id_block.number_of_queues", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_number_of_queues_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_forwarding_delay_block_number_of_entries, + { "TSNForwardingDelayBlockNumberOfEntries", "pn_io.tsn_forward_delaying_block.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_port_id_block_number_of_entries, + { "TSNPortIDBlockNumberOfEntries", "pn_io.tsn_port_id_block.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_expected_neighbor_block_number_of_entries, + { "TSNExpectedNeighborBlockNumberOfEntries", "pn_io.tsn_expected_neighbor_block.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_port_capabilities_time_aware, + { "TSNPortCapabilities.TimeAware", "pn_io.tsn_port_capabilities.time_aware", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_port_capabilities_time_aware_vals), 0x01, + NULL, HFILL } + }, + { &hf_pn_io_tsn_port_capabilities_preemption, + { "TSNPortCapabilities.Preemption", "pn_io.tsn_port_capabilities.preemption", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_port_capabilities_preemption_vals), 0x02, + NULL, HFILL } + }, + { &hf_pn_io_tsn_port_capabilities_queue_masking, + { "TSNPortCapabilities.QueueMasking", "pn_io.tsn_port_capabilities.queue_masking", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_port_capabilities_queue_masking_vals), 0x04, + NULL, HFILL } + }, + { &hf_pn_io_tsn_port_capabilities_reserved, + { "TSNPortCapabilities.Reserved", "pn_io.tsn_port_capabilities_reserved", + FT_UINT8, BASE_HEX, NULL, 0xF8, + NULL, HFILL } + }, + { &hf_pn_io_tsn_forwarding_group, + { "ForwardingGroup", "pn_io.tsn_port_id_block.forwarding_group", + FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_forwarding_group_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_forwarding_group_ingress, + { "ForwardingGroupIngress", "pn_io.tsn_port_id_block.forwarding_group_ingress", + FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_forwarding_group_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_forwarding_group_egress, + { "ForwardingGroupEgress", "pn_io.tsn_port_id_block.forwarding_group_egress", + FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_forwarding_group_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_stream_class, + { "StreamClass", "pn_io.tsn_forwarding_delay_entry.stream_class", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_stream_class_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_dependent_forwarding_delay, + { "DependentForwardDelay", "pn_io.tsn_forwarding_delay_entry.dependent_forwarding_delay", + FT_UINT32, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_dependent_forwarding_delay_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_independent_forwarding_delay, + { "IndependentForwardDelay", "pn_io.tsn_forwarding_delay_entry.independent_forwarding_delay", + FT_UINT32, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_independent_forwarding_delay_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_nme_parameter_uuid, + { "NMEParameterUUID", "pn_io.tsn_nme_parameter_uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config, + { "TSNDomainVIDConfig", "pn_io.tsn_domain_vid_config", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_stream_high_vid, + { "TSNDomainVIDConfig.StreamHighVID", "pn_io.tsn_domain_vid_config.stream_high_vid", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_stream_high_red_vid, + { "TSNDomainVIDConfig.StreamHighRedVID", "pn_io.tsn_domain_vid_config.stream_high_red_vid", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_stream_low_vid, + { "TSNDomainVIDConfig.StreamLowVID", "pn_io.tsn_domain_vid_config.stream_low_vid", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_stream_low_red_vid, + { "TSNDomainVIDConfig.StreamLowRedVID", "pn_io.tsn_domain_vid_config.stream_low_red_vid", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_non_stream_vid, + { "TSNDomainVIDConfig.NonStreamVID", "pn_io.tsn_domain_vid_config.non_stream_vid", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_non_stream_vid_B, + { "TSNDomainVIDConfig.NonStreamVIDB", "pn_io.tsn_domain_vid_config.non_stream_vid_B", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_non_stream_vid_C, + { "TSNDomainVIDConfig.NonStreamVIDC", "pn_io.tsn_domain_vid_config.non_stream_vid_C", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_non_stream_vid_D, + { "TSNDomainVIDConfig.NonStreamVIDD", "pn_io.tsn_domain_vid_config.non_stream_vid_D", + FT_UINT16, BASE_HEX, VALS(pn_io_tsn_domain_vid_config_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_vid_config_reserved, + { "TSNDomainVIDConfig.Reserved", "pn_io.tsn_domain_vid_config.reserved", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_domain_port_config_entries, + { "TSNDomainPortConfig.NumberOfEntries", "pn_io.tsn_domain_port_config.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_time_data_block_entries, + { "TSNTimeDataBlock.NumberOfEntries", "pn_io.tsn_time_data_block.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_domain_queue_rate_limiter_entries, + { "TSNDomainQueueRateLimiter.NumberOfEntries", "pn_io.tsn_domain_queue_rate_limiter.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_domain_port_ingress_rate_limiter_entries, + { "TSNDomainPortIngressRateLimiter.NumberOfEntries", "pn_io.tsn_domain_port_ingress_limiter.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_config, + { "TSNDomainPortConfig", "pn_io.tsn_domain_port_config", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_config_preemption_enabled, + { "TSNDomainPortConfig.PreemptionEnabled", "pn_io.tsn_domain_port_config.preemption_enabled", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_domain_port_config_preemption_enabled_vals), 0x01, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_config_boundary_port_config, + { "TSNDomainPortConfig.BoundaryPortConfig", "pn_io.tsn_domain_port_config.boundary_port_config", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_domain_port_config_boundary_port_config_vals), 0x0E, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_config_reserved, + { "TSNDomainPortConfig.Reserved", "pn_io.tsn_domain_port_config.reserved", + FT_UINT8, BASE_HEX, NULL, 0xF0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_ingress_rate_limiter, + { "TSNDomainPortIngressRateLimiter", "pn_io.tsn_domain_port_ingress_rate_limiter", + FT_UINT64, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_ingress_rate_limiter_cir, + { "TSNDomainPortIngressRateLimiter.Cir", "pn_io.tsn_domain_port_ingress_rate_limiter.cir", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_port_ingress_rate_limiter_cir), 0x000000000000FFFF, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_ingress_rate_limiter_cbs, + { "TSNDomainPortIngressRateLimiter.Cbs", "pn_io.tsn_domain_port_ingress_rate_limiter.cbs", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_port_ingress_rate_limiter_cbs), 0x00000000FFFF0000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_ingress_rate_limiter_envelope, + { "TSNDomainPortIngressRateLimiter.Envelope", "pn_io.tsn_domain_port_ingress_rate_limiter.envelope", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_port_ingress_rate_limiter_envelope), 0x0000FFFF00000000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_ingress_rate_limiter_rank, + { "TSNDomainPortIngressRateLimiter.Rank", "pn_io.tsn_domain_port_ingress_rate_limiter.rank", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_port_ingress_rate_limiter_rank), 0xFFFF000000000000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter, + { "TSNDomainQueueRateLimiter", "pn_io.tsn_domain_port_queue_rate_limiter", + FT_UINT64, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_cir, + { "TSNDomainQueueRateLimiter.Cir", "pn_io.tsn_domain_port_queue_rate_limiter.cir", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_cir), 0x000000000000FFFF, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_cbs, + { "TSNDomainQueueRateLimiter.Cbs", "pn_io.tsn_domain_port_queue_rate_limiter.cbs", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_cbs), 0x00000000FFFF0000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_envelope, + { "TSNDomainQueueRateLimiter.Envelope", "pn_io.tsn_domain_port_queue_rate_limiter.envelope", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_envelope), 0x000000FF00000000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_rank, + { "TSNDomainQueueRateLimiter.Rank", "pn_io.tsn_domain_port_queue_rate_limiter.rank", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_rank), 0x0000FF0000000000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_queue_id, + { "TSNDomainQueueRateLimiter.QueueID", "pn_io.tsn_domain_port_queue_rate_limiter.queue_id", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_queue_id), 0x00FF000000000000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_rate_limiter_reserved, + { "TSNDomainQueueRateLimiter.Reserved", "pn_io.tsn_domain_port_queue_rate_limiter.reserved", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_rate_limiter_reserved), 0xFF00000000000000, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_domain_queue_config_entries, + { "TSNDomainQueueConfig.NumberOfEntries", "pn_io.tsn_domain_queue_config.number_of_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config, + { "TSNDomainQueueConfig", "pn_io.tsn_domain_queue_config", + FT_UINT64, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_queue_id, + { "TSNDomainQueueConfig.QueueID", "pn_io.tsn_domain_queue_config.queue_id", + FT_UINT64, BASE_HEX, NULL, 0xF, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_tci_pcp, + { "TSNDomainQueueConfig.TciPcp", "pn_io.tsn_domain_queue_config.tci_pcp", + FT_UINT64, BASE_HEX, NULL, 0x70, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_shaper, + { "TSNDomainQueueConfig.Shaper", "pn_io.tsn_domain_queue_config.shaper", + FT_UINT64, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_queue_config_shaper), 0x3F80, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_preemption_mode, + { "TSNDomainQueueConfig.PreemptionMode", "pn_io.tsn_domain_queue_config.preemption_mode", + FT_UINT64, BASE_HEX, NULL, 0xC000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_unmask_time_offset, + { "TSNDomainQueueConfig.UnmaskTimeOffset", "pn_io.tsn_domain_queue_config.unmask_time_offset", + FT_UINT64, BASE_HEX, NULL, 0xFFFFFF0000, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_queue_config_mask_time_offset, + { "TSNDomainQueueConfig.MaskTimeOffset", "pn_io.tsn_domain_queue_config.mask_time_offset", + FT_UINT64, BASE_HEX, NULL, 0xFFFFFF0000000000, + NULL, HFILL } + }, + { &hf_pn_io_network_deadline, + { "NetworkDeadline", "pn_io.network_deadline", + FT_UINT32, BASE_DEC | BASE_RANGE_STRING, RVALS(pn_io_network_domain), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_domain_number, + { "TimeDomainNumber", "pn_io.time_domain_number", + FT_UINT16, BASE_HEX , VALS(pn_io_time_domain_number_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_pll_window, + { "TimePLLWindow", "pn_io.time_pll_window", + FT_UINT32, BASE_DEC , VALS(pn_io_time_pll_window_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_message_interval_factor, + { "MessageIntervalFactor", "pn_io.message_interval_factor", + FT_UINT32, BASE_DEC , VALS(pn_io_message_interval_factor_vals), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_message_timeout_factor, + { "MessageTimeoutFactor", "pn_io.message_timeout_factor", + FT_UINT16, BASE_DEC | BASE_RANGE_STRING, RVALS(pn_io_message_timeout_factor), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_sync_properties, + { "TimeSyncProperties", "pn_io.time_sync_properties", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_sync_properties_role, + { "TimeSyncProperties.Role", "pn_io.time_sync_properties.role", + FT_UINT16, BASE_HEX, VALS(pn_io_time_sync_properties_vals), 0x3, + NULL, HFILL } + }, + { &hf_pn_io_time_sync_properties_reserved, + { "TimeSyncProperties.Reserved", "pn_io.time_sync_properties.reserved", + FT_UINT16, BASE_HEX, NULL, 0xFFFC, + NULL, HFILL } + }, + { &hf_pn_io_time_domain_uuid, + { "TimeDomainUUID", "pn_io.time_domain_uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_domain_name_length, + { "TimeDomainNameLength", "pn_io.time_domain_name_length", + FT_UINT8, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_time_domain_name, + { "TimeDomainName", "pn_io.time_domain_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_nme_name_uuid, + { "TSNNMENameUUID", "pn_io.tsn_nme_name_uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_nme_name_length, + { "TSNNMENameLength", "pn_io.tsn_nme_name_length", + FT_UINT16, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_nme_name, + { "TSNNMEName", "pn_io.tsn_nme_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_uuid, + { "TSNDomainUUID", "pn_io.tsn_domain_uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_name_length, + { "TSNDomainNameLength", "pn_io.tsn_domain_name_length", + FT_UINT16, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_name, + { "TSNDomainName", "pn_io.tsn_domain_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_fdb_command, + { "FDBCommand", "pn_io.tsn_fdb_command", + FT_UINT8, BASE_HEX, VALS(pn_io_tsn_fdb_command), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_dst_add, + { "DestinationAddress", "pn_io.tsn_dst_add", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_number_of_tsn_domain_sync_tree_entries, + { "NumberOfEntries", "pn_io.tsn_domain_sync_tree_entries", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_port_id, + { "TSNDomainPortID", "pn_io.tsn_domain_port_id", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_tsn_domain_sync_port_role, + { "SyncPortRole", "pn_io.tsn_domain_sync_port_rule", + FT_UINT8,BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_tsn_domain_sync_port_role_vals), 0x0, + NULL, HFILL } + }, { &hf_pn_io_mau_type, { "MAUType", "pn_io.mau_type", FT_UINT16, BASE_HEX, VALS(pn_io_mau_type), 0x0, @@ -13527,6 +16413,31 @@ proto_register_pn_io (void) FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, + { &hf_pn_io_neighbor, + { "Neighbor", "pn_io.neighbor", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_length_peer_port_name, + { "LengthPeerPortName", "pn_io.length_peer_port_name", + FT_UINT8, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_peer_port_name, + { "PeerPortName", "pn_io.peer_port_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_length_peer_station_name, + { "LengthPeerStationName", "pn_io.length_peer_station_name", + FT_UINT8, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_peer_station_name, + { "PeerStationName", "pn_io.peer_station_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, { &hf_pn_io_length_own_chassis_id, { "LengthOwnChassisID", "pn_io.length_own_chassis_id", FT_UINT8, BASE_DEC, NULL, 0x0, @@ -13537,6 +16448,11 @@ proto_register_pn_io (void) FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, + { &hf_pn_io_rtclass3_port_status, + { "RTClass3_PortStatus", "pn_io.rtclass3_port_status", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, { &hf_pn_io_length_own_port_id, { "LengthOwnPortID", "pn_io.length_own_port_id", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, @@ -13706,12 +16622,12 @@ proto_register_pn_io (void) }, { &hf_pn_io_tx_phase_assignment_begin_value, { "AssignedValueForReservedBegin", "pn_io.tx_phase_assignment_begin_value", - FT_UINT16, BASE_DEC, NULL, 0x0F, + FT_UINT16, BASE_DEC, NULL, 0x000F, NULL, HFILL } }, { &hf_pn_io_tx_phase_assignment_orange_begin, { "AssignedValueForOrangeBegin", "pn_io.tx_phase_assignment_orange_begin", - FT_UINT16, BASE_DEC, NULL, 0x0F0, + FT_UINT16, BASE_DEC, NULL, 0x00F0, NULL, HFILL } }, { &hf_pn_io_tx_phase_assignment_end_reserved, @@ -13721,7 +16637,7 @@ proto_register_pn_io (void) }, { &hf_pn_io_tx_phase_assignment_reserved, { "Reserved should be 0", "pn_io.tx_phase_assignment_reserved", - FT_UINT16, BASE_DEC, NULL, 0x0F000, + FT_UINT16, BASE_DEC, NULL, 0xF000, NULL, HFILL } }, { &hf_pn_ir_rx_phase_assignment, @@ -14084,12 +17000,12 @@ proto_register_pn_io (void) }, { &hf_pn_io_mrp_check_reserved_1, { "MRP_Check.reserved_1", "pn_io.mrp_check_reserved_1", - FT_UINT32, BASE_HEX, NULL, 0x0FFFFFC, + FT_UINT32, BASE_HEX, NULL, 0xFFFFFC, NULL, HFILL } }, { &hf_pn_io_mrp_check_reserved_2, { "MRP_Check.reserved_2", "pn_io.mrp_check_reserved_2", - FT_UINT32, BASE_HEX, NULL, 0x0FF000000, + FT_UINT32, BASE_HEX, NULL, 0xFF000000, NULL, HFILL } }, { &hf_pn_io_mrp_rtmode, @@ -14401,12 +17317,12 @@ proto_register_pn_io (void) }, { &hf_pn_io_rs_alarm_info_reserved_8_15, { "RSAlarmInfo.Reserved2", "pn_io.rs_alarm_info_reserved_8_15", - FT_UINT16, BASE_HEX, NULL, 0x0FF00, + FT_UINT16, BASE_HEX, NULL, 0xFF00, NULL, HFILL } }, { &hf_pn_io_rs_alarm_info_reserved_0_7, { "RSAlarmInfo.Reserved1", "pn_io.rs_alarm_info_reserved_0_7", - FT_UINT16, BASE_HEX, NULL, 0x000FF, + FT_UINT16, BASE_HEX, NULL, 0x00FF, NULL, HFILL } }, { &hf_pn_io_rs_alarm_info, @@ -14769,6 +17685,31 @@ proto_register_pn_io (void) FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(pn_io_pe_operational_mode), 0x0, NULL, HFILL } }, + { &hf_pn_io_snmp_control, + { "SNMPControl", "pn_io.snmp_control", + FT_UINT16, BASE_HEX, VALS(pn_io_snmp_control), 0x0, + NULL, HFILL } + }, + { &hf_pn_io_snmp_community_name_length, + { "CommunityNameLength", "pn_io.snmp_community_name_length", + FT_UINT8, BASE_DEC_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_snmp_community_name, + { "CommunityName", "pn_io.snmp_community_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_snmp_read_community_name, + { "SNMP read only community name", "pn_io.snmp_read_community_name", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_pn_io_snmp_write_community_name, + { "SNMP read write community name", "pn_io.snmp_write_community_name", + FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, }; static gint *ett[] = { @@ -14840,7 +17781,16 @@ proto_register_pn_io (void) &ett_pn_io_dcp_boundary, &ett_pn_io_peer_to_peer_boundary, &ett_pn_io_mau_type_extension, - &ett_pn_io_pe_operational_mode + &ett_pn_io_pe_operational_mode, + &ett_pn_io_neighbor, + &ett_pn_io_tsn_domain_vid_config, + &ett_pn_io_tsn_domain_port_config, + &ett_pn_io_tsn_domain_queue_config, + &ett_pn_io_tsn_domain_port_ingress_rate_limiter, + &ett_pn_io_tsn_domain_queue_rate_limiter, + &ett_pn_io_time_sync_properties, + &ett_pn_io_tsn_domain_port_id, + &ett_pn_io_snmp_command_name }; static ei_register_info ei[] = { @@ -14871,6 +17821,7 @@ proto_register_pn_io (void) proto_pn_io_parameterserver = proto_register_protocol_in_name_only("PROFINET IO (Parameter Server)", "PNIO (Parameter Server Interface)", "pn_io_parameterserver", proto_pn_io, FT_PROTOCOL); proto_pn_io_implicitar = proto_register_protocol_in_name_only("PROFINET IO (Implicit Ar)", "PNIO (Implicit Ar)", "pn_io_implicitar", proto_pn_io, FT_PROTOCOL); proto_pn_io_apdu_status = proto_register_protocol_in_name_only("PROFINET IO (Apdu Status)", "PNIO (Apdu Status)", "pn_io_apdu_status", proto_pn_io, FT_PROTOCOL); + proto_pn_io_time_aware_status = proto_register_protocol_in_name_only("PROFINET IO (Time Aware Status)", "PNIO (Time Aware Status)", "pn_io_time_aware_status", proto_pn_io, FT_PROTOCOL); proto_register_field_array (proto_pn_io, hf, array_length (hf)); proto_register_subtree_array (ett, array_length (ett)); @@ -14884,13 +17835,13 @@ proto_register_pn_io (void) "Whether the PNIO dissector is allowed to use detailed PROFIsafe dissection of cyclic data frames", &pnio_ps_selection); prefs_register_directory_preference(pnio_module, "pnio_ps_networkpath", - "Configuration GSD-File Networkpath", /* Title */ - "Select your Networkpath to your GSD-Files.", /* Descreption */ - &pnio_ps_networkpath); /* Variable to save the GSD-File networkpath */ + "Folder containing GSD files", /* Title */ + "Place GSD files in this folder.", /* Descreption */ + &pnio_ps_networkpath); /* Variable in which to save the GSD file folder path */ /* subdissector code */ register_dissector("pn_io", dissect_PNIO_heur, proto_pn_io); - heur_pn_subdissector_list = register_heur_dissector_list("pn_io", proto_pn_io); + heur_pn_subdissector_list = register_heur_dissector_list_with_description("pn_io", "PROFINET IO payload", proto_pn_io); /* Initialise RTC1 dissection */ init_pn_io_rtc1(proto_pn_io); @@ -14904,8 +17855,8 @@ proto_register_pn_io (void) /* Cleanup functions of PNIO protocol */ register_cleanup_routine(pnio_cleanup); - register_conversation_filter("pn_io", "PN-IO AR", pn_io_ar_conv_valid, pn_io_ar_conv_filter); - register_conversation_filter("pn_io", "PN-IO AR (with data)", pn_io_ar_conv_valid, pn_io_ar_conv_data_filter); + register_conversation_filter("pn_io", "PN-IO AR", pn_io_ar_conv_valid, pn_io_ar_conv_filter, NULL); + register_conversation_filter("pn_io", "PN-IO AR (with data)", pn_io_ar_conv_valid, pn_io_ar_conv_data_filter, NULL); } |