wireshark/epan/dissectors/packet-ff.c

15312 lines
491 KiB
C

/* packet-ff.c
* Routines for FF-HSE packet disassembly
*
* FF-588-1.3: HSE Field Device Access Agent
* 6. Field Device Access Agent Interface
*
* (c) Copyright 2008, Yukiyo Akisada <Yukiyo.Akisada@jp.yokogawa.com>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
/*
* /etc/services
* ---------------------------------------------------------------------
* ff-annunc 1089/tcp # FF Annunciation
* ff-annunc 1089/udp # FF Annunciation
* ff-fms 1090/tcp # FF Fieldbus Message Specification
* ff-fms 1090/udp # FF Fieldbus Message Specification
* ff-sm 1091/tcp # FF System Management
* ff-sm 1091/udp # FF System Management
* ff-lr-port 3622/tcp # FF LAN Redundancy Port
* ff-lr-port 3622/udp # FF LAN Redundancy Port
* ---------------------------------------------------------------------
*/
#include "config.h"
#include <epan/packet.h>
#include "packet-ff.h"
#include "packet-tcp.h"
#define FDA_MSG_HDR_LENGTH 12
void proto_register_ff(void);
void proto_reg_handoff_ff(void);
static int proto_ff = -1;
static gint ett_ff = -1;
static gboolean ff_desegment = TRUE; /* desegmentation of FF over TCP */
static dissector_handle_t ff_udp_handle;
static dissector_handle_t ff_tcp_handle;
/*
* 6.3. Message Header
*/
static int hf_ff_fda_msg_hdr = -1;
static int hf_ff_fda_msg_hdr_ver = -1;
static int hf_ff_fda_msg_hdr_fda_addr = -1;
static int hf_ff_fda_msg_hdr_len = -1;
static int hf_ff_unknown_data = -1;
static int hf_ff_data = -1;
static int hf_ff_reserved24 = -1;
static int hf_ff_unknown_service = -1;
static gint ett_ff_fda_msg_hdr = -1;
static gint ett_ff_fda_msg_hdr_proto_and_type = -1;
static gint ett_ff_fda_msg_hdr_opts = -1;
static gint ett_ff_fda_msg_hdr_srv = -1;
/*
* 6.4. Message Trailer
*/
static int hf_ff_fda_msg_trailer = -1;
static int hf_ff_fda_msg_trailer_msg_num = -1;
static int hf_ff_fda_msg_trailer_invoke_id = -1;
static int hf_ff_fda_msg_trailer_time_stamp = -1;
static int hf_ff_fda_msg_trailer_extended_control_field = -1;
static gint ett_ff_fda_msg_trailer = -1;
/*
* 6.5.1 FDA Session Management Services
*/
static int hf_ff_fda = -1;
static int hf_ff_hdr_srv = -1;
static int hf_ff_hdr_srv_confirm_flag = -1;
static int hf_ff_hdr_srv_service_id = -1;
static int hf_ff_hdr_srv_fda_service_id_confirm = -1;
static int hf_ff_hdr_srv_fda_service_id_unconfirm = -1;
static int hf_ff_hdr_srv_sm_service_id_confirm = -1;
static int hf_ff_hdr_srv_sm_service_id_unconfirm = -1;
static int hf_ff_hdr_srv_fms_service_id_confirm = -1;
static int hf_ff_hdr_srv_fms_service_id_unconfirm = -1;
static int hf_ff_hdr_srv_lan_service_id_confirm = -1;
static int hf_ff_hdr_srv_lan_service_id_unconfirm = -1;
static int hf_ff_hdr_proto_id = -1;
static int hf_ff_hdr_confirm_msg_type = -1;
static int hf_ff_hdr_proto_confirm = -1;
static int hf_ff_hdr_opts_msg_num = -1;
static int hf_ff_hdr_opts_invoke_id = -1;
static int hf_ff_hdr_opts_timestamp = -1;
static int hf_ff_hdr_opts_reserved = -1;
static int hf_ff_hdr_opts_ext_ctrl = -1;
static int hf_ff_hdr_opts_pad = -1;
static int hf_ff_hdr_opts = -1;
/*
* 6.5.1.1. FDA Open Session (Confirmed Service Id = 1)
*/
static int hf_ff_fda_open_sess = -1;
static int hf_ff_fda_open_sess_req = -1;
static int hf_ff_fda_open_sess_req_sess_idx = -1;
static int hf_ff_fda_open_sess_req_max_buf_siz = -1;
static int hf_ff_fda_open_sess_req_max_msg_len = -1;
static int hf_ff_fda_open_sess_req_reserved = -1;
static int hf_ff_fda_open_sess_req_nma_conf_use = -1;
static int hf_ff_fda_open_sess_req_inactivity_close_time = -1;
static int hf_ff_fda_open_sess_req_transmit_delay_time = -1;
static int hf_ff_fda_open_sess_req_pd_tag = -1;
static int hf_ff_fda_open_sess_rsp = -1;
static int hf_ff_fda_open_sess_rsp_sess_idx = -1;
static int hf_ff_fda_open_sess_rsp_max_buf_siz = -1;
static int hf_ff_fda_open_sess_rsp_max_msg_len = -1;
static int hf_ff_fda_open_sess_rsp_reserved = -1;
static int hf_ff_fda_open_sess_rsp_nma_conf_use = -1;
static int hf_ff_fda_open_sess_rsp_inactivity_close_time = -1;
static int hf_ff_fda_open_sess_rsp_transmit_delay_time = -1;
static int hf_ff_fda_open_sess_rsp_pd_tag = -1;
static int hf_ff_fda_open_sess_err = -1;
static int hf_ff_fda_open_sess_err_err_class = -1;
static int hf_ff_fda_open_sess_err_err_code = -1;
static int hf_ff_fda_open_sess_err_additional_code = -1;
static int hf_ff_fda_open_sess_err_additional_desc = -1;
static gint ett_ff_fda_open_sess_req = -1;
static gint ett_ff_fda_open_sess_rsp = -1;
static gint ett_ff_fda_open_sess_err = -1;
/*
* 6.5.1.2. FDA Idle (Confirmed Service Id = 3)
*/
static int hf_ff_fda_idle = -1;
static int hf_ff_fda_idle_req = -1;
static int hf_ff_fda_idle_rsp = -1;
static int hf_ff_fda_idle_err = -1;
static int hf_ff_fda_idle_err_err_class = -1;
static int hf_ff_fda_idle_err_err_code = -1;
static int hf_ff_fda_idle_err_additional_code = -1;
static int hf_ff_fda_idle_err_additional_desc = -1;
static gint ett_ff_fda_idle_req = -1;
static gint ett_ff_fda_idle_rsp = -1;
static gint ett_ff_fda_idle_err = -1;
/*
* 6.5.2. SM Services
*/
static int hf_ff_sm = -1;
/*
* 6.5.2.1. SM Find Tag Query (Unconfirmed Service Id = 1)
*/
static int hf_ff_sm_find_tag_query = -1;
static int hf_ff_sm_find_tag_query_req = -1;
static int hf_ff_sm_find_tag_query_req_query_type = -1;
static int hf_ff_sm_find_tag_query_req_idx = -1;
static int hf_ff_sm_find_tag_query_req_tag = -1;
static int hf_ff_sm_find_tag_query_req_vfd_tag = -1;
static gint ett_ff_sm_find_tag_query_req = -1;
/*
* 6.5.2.2. SM Find Tag Reply (Unconfirmed Service Id = 2)
*/
static int hf_ff_sm_find_tag_reply = -1;
static int hf_ff_sm_find_tag_reply_req = -1;
static int hf_ff_sm_find_tag_reply_req_query_type = -1;
static int hf_ff_sm_find_tag_reply_req_h1_node_addr = -1;
static int hf_ff_sm_find_tag_reply_req_fda_addr_link_id = -1;
static int hf_ff_sm_find_tag_reply_req_vfd_ref = -1;
static int hf_ff_sm_find_tag_reply_req_od_idx = -1;
static int hf_ff_sm_find_tag_reply_req_ip_addr = -1;
static int hf_ff_sm_find_tag_reply_req_od_ver = -1;
static int hf_ff_sm_find_tag_reply_req_dev_id = -1;
static int hf_ff_sm_find_tag_reply_req_pd_tag = -1;
static int hf_ff_sm_find_tag_reply_req_reserved = -1;
static int hf_ff_sm_find_tag_reply_req_num_of_fda_addr_selectors = -1;
static int hf_ff_sm_find_tag_reply_req_fda_addr_selector = -1;
static int hf_ff_sm_find_tag_reply_dup_reserved = -1;
static int hf_ff_sm_find_tag_reply_dup_pd_tag = -1;
static int hf_ff_sm_find_tag_reply_dup_device = -1;
static int hf_ff_sm_find_tag_reply_dup = -1;
static gint ett_ff_sm_find_tag_reply_req = -1;
static gint ett_ff_sm_find_tag_reply_req_dup_detection_state = -1;
static gint ett_ff_sm_find_tag_reply_req_list_of_fda_addr_selectors = -1;
/*
* 6.5.2.3. SM Identify (Confirmed Service Id = 3)
*/
static int hf_ff_sm_id = -1;
static int hf_ff_sm_id_req = -1;
static int hf_ff_sm_id_rsp = -1;
static int hf_ff_sm_id_rsp_dev_idx = -1;
static int hf_ff_sm_id_rsp_max_dev_idx = -1;
static int hf_ff_sm_id_rsp_operational_ip_addr = -1;
static int hf_ff_sm_id_rsp_dev_id = -1;
static int hf_ff_sm_id_rsp_pd_tag = -1;
static int hf_ff_sm_id_rsp_hse_repeat_time = -1;
static int hf_ff_sm_id_rsp_lr_port = -1;
static int hf_ff_sm_id_rsp_reserved = -1;
static int hf_ff_sm_id_rsp_annunc_ver_num = -1;
static int hf_ff_sm_id_rsp_hse_dev_ver_num = -1;
static int hf_ff_sm_id_rsp_num_of_entries = -1;
static int hf_ff_sm_id_rsp_h1_live_list_h1_link_id = -1;
static int hf_ff_sm_id_rsp_h1_live_list_reserved = -1;
static int hf_ff_sm_id_rsp_h1_live_list_ver_num = -1;
static int hf_ff_sm_id_rsp_h1_node_addr_ver_num_h1_node_addr = -1;
static int hf_ff_sm_id_rsp_h1_node_addr_ver_num_ver_num = -1;
static int hf_ff_sm_id_rsp_smk_state_name = -1;
static int hf_ff_sm_id_rsp_smk_state_sync = -1;
static int hf_ff_sm_id_rsp_smk_state = -1;
static int hf_ff_sm_id_rsp_dev_type_link = -1;
static int hf_ff_sm_id_rsp_dev_type_iogateway = -1;
static int hf_ff_sm_id_rsp_dev_type_hse = -1;
static int hf_ff_sm_id_rsp_dev_type_h1 = -1;
static int hf_ff_sm_id_rsp_dev_type_reserved = -1;
static int hf_ff_sm_id_rsp_dev_type_redundant_caps = -1;
static int hf_ff_sm_id_rsp_dev_type = -1;
static int hf_ff_sm_id_rsp_dev_redundancy_state_reserved = -1;
static int hf_ff_sm_id_rsp_dev_redundancy_state_role = -1;
static int hf_ff_sm_id_rsp_dev_redundancy_state_type = -1;
static int hf_ff_sm_id_rsp_dev_redundancy_state = -1;
static int hf_ff_sm_id_rsp_dup_detection_state_reserved = -1;
static int hf_ff_sm_id_rsp_dup_detection_state_pd_tag = -1;
static int hf_ff_sm_id_rsp_dup_detection_state_device = -1;
static int hf_ff_sm_id_rsp_dup_detection_state = -1;
static int hf_ff_sm_id_err = -1;
static int hf_ff_sm_id_err_err_class = -1;
static int hf_ff_sm_id_err_err_code = -1;
static int hf_ff_sm_id_err_additional_code = -1;
static int hf_ff_sm_id_err_additional_desc = -1;
static gint ett_ff_sm_id_req = -1;
static gint ett_ff_sm_id_rsp = -1;
static gint ett_ff_sm_id_rsp_smk_state = -1;
static gint ett_ff_sm_id_rsp_dev_type = -1;
static gint ett_ff_sm_id_rsp_dev_redundancy_state = -1;
static gint ett_ff_sm_id_rsp_dup_detection_state = -1;
static gint ett_ff_sm_id_rsp_entries_h1_live_list = -1;
static gint ett_ff_sm_id_rsp_h1_live_list = -1;
static gint ett_ff_sm_id_rsp_entries_node_addr = -1;
static gint ett_ff_sm_id_rsp_h1_node_addr = -1;
static gint ett_ff_sm_id_err = -1;
/*
* 6.5.2.4. SM Clear Address (Confirmed Service Id = 12)
*/
static int hf_ff_sm_clear_addr = -1;
static int hf_ff_sm_clear_addr_req = -1;
static int hf_ff_sm_clear_addr_req_dev_id = -1;
static int hf_ff_sm_clear_addr_req_pd_tag = -1;
static int hf_ff_sm_clear_addr_req_interface_to_clear = -1;
static int hf_ff_sm_clear_addr_rsp = -1;
static int hf_ff_sm_clear_addr_err = -1;
static int hf_ff_sm_clear_addr_err_err_class = -1;
static int hf_ff_sm_clear_addr_err_err_code = -1;
static int hf_ff_sm_clear_addr_err_additional_code = -1;
static int hf_ff_sm_clear_addr_err_additional_desc = -1;
static gint ett_ff_sm_clear_addr_req = -1;
static gint ett_ff_sm_clear_addr_rsp = -1;
static gint ett_ff_sm_clear_addr_err = -1;
/*
* 6.5.2.5. SM Set Assignment Info (Confirmed Service Id = 14)
*/
static int hf_ff_sm_set_assign_info = -1;
static int hf_ff_sm_set_assign_info_req_dev_redundancy_state_reserved = -1;
static int hf_ff_sm_set_assign_info_req_dev_redundancy_state_role = -1;
static int hf_ff_sm_set_assign_info_req_dev_redundancy_state_type = -1;
static int hf_ff_sm_set_assign_info_req_dev_redundancy_state = -1;
static int hf_ff_sm_set_assign_info_req_clear_dup_detection_state_reserved = -1;
static int hf_ff_sm_set_assign_info_req_clear_dup_detection_state_pd_tag = -1;
static int hf_ff_sm_set_assign_info_req_clear_dup_detection_state_device_index = -1;
static int hf_ff_sm_set_assign_info_req_clear_dup_detection_state = -1;
static int hf_ff_sm_set_assign_info_req = -1;
static int hf_ff_sm_set_assign_info_req_dev_id = -1;
static int hf_ff_sm_set_assign_info_req_pd_tag = -1;
static int hf_ff_sm_set_assign_info_req_h1_new_addr = -1;
static int hf_ff_sm_set_assign_info_req_lr_port = -1;
static int hf_ff_sm_set_assign_info_req_hse_repeat_time = -1;
static int hf_ff_sm_set_assign_info_req_dev_idx = -1;
static int hf_ff_sm_set_assign_info_req_max_dev_idx = -1;
static int hf_ff_sm_set_assign_info_req_operational_ip_addr = -1;
static int hf_ff_sm_set_assign_info_rsp = -1;
static int hf_ff_sm_set_assign_info_rsp_reserved = -1;
static int hf_ff_sm_set_assign_info_rsp_max_dev_idx = -1;
static int hf_ff_sm_set_assign_info_rsp_hse_repeat_time = -1;
static int hf_ff_sm_set_assign_info_err = -1;
static int hf_ff_sm_set_assign_info_err_err_class = -1;
static int hf_ff_sm_set_assign_info_err_err_code = -1;
static int hf_ff_sm_set_assign_info_err_additional_code = -1;
static int hf_ff_sm_set_assign_info_err_additional_desc = -1;
static gint ett_ff_sm_set_assign_info_req = -1;
static gint ett_ff_sm_set_assign_info_req_dev_redundancy_state = -1;
static gint ett_ff_sm_set_assign_info_req_clear_dup_detection_state = -1;
static gint ett_ff_sm_set_assign_info_rsp = -1;
static gint ett_ff_sm_set_assign_info_err = -1;
/*
* 6.5.2.6. SM Clear Assignment Info (Confirmed Service Id = 15)
*/
static int hf_ff_sm_clear_assign_info = -1;
static int hf_ff_sm_clear_assign_info_req = -1;
static int hf_ff_sm_clear_assign_info_req_dev_id = -1;
static int hf_ff_sm_clear_assign_info_req_pd_tag = -1;
static int hf_ff_sm_clear_assign_info_rsp = -1;
static int hf_ff_sm_clear_assign_info_err = -1;
static int hf_ff_sm_clear_assign_info_err_err_class = -1;
static int hf_ff_sm_clear_assign_info_err_err_code = -1;
static int hf_ff_sm_clear_assign_info_err_additional_code = -1;
static int hf_ff_sm_clear_assign_info_err_additional_desc = -1;
static gint ett_ff_sm_clear_assign_info_req = -1;
static gint ett_ff_sm_clear_assign_info_rsp = -1;
static gint ett_ff_sm_clear_assign_info_err = -1;
/*
* 6.5.2.7. SM Device Annunciation (Unconfirmed Service Id = 16)
*/
static int hf_ff_sm_dev_annunc = -1;
static int hf_ff_sm_dev_annunc_req = -1;
static int hf_ff_sm_dev_annunc_req_dev_idx = -1;
static int hf_ff_sm_dev_annunc_req_max_dev_idx = -1;
static int hf_ff_sm_dev_annunc_req_operational_ip_addr = -1;
static int hf_ff_sm_dev_annunc_req_dev_id = -1;
static int hf_ff_sm_dev_annunc_req_pd_tag = -1;
static int hf_ff_sm_dev_annunc_req_hse_repeat_time = -1;
static int hf_ff_sm_dev_annunc_req_lr_port = -1;
static int hf_ff_sm_dev_annunc_req_reserved = -1;
static int hf_ff_sm_dev_annunc_req_annunc_ver_num = -1;
static int hf_ff_sm_dev_annunc_req_hse_dev_ver_num = -1;
static int hf_ff_sm_dev_annunc_req_num_of_entries = -1;
static int hf_ff_sm_dev_annunc_req_h1_live_list_h1_link_id = -1;
static int hf_ff_sm_dev_annunc_req_h1_live_list_reserved = -1;
static int hf_ff_sm_dev_annunc_req_h1_live_list_ver_num = -1;
static int hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_h1_node_addr = -1;
static int hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_ver_num = -1;
static int hf_ff_sm_dev_annunc_req_smk_state_name = -1;
static int hf_ff_sm_dev_annunc_req_smk_state_sync = -1;
static int hf_ff_sm_dev_annunc_req_smk_state = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_link = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_iogateway = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_hse = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_h1 = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_reserved = -1;
static int hf_ff_sm_dev_annunc_req_dev_type_redundant_caps = -1;
static int hf_ff_sm_dev_annunc_req_dev_type = -1;
static int hf_ff_sm_dev_annunc_req_dev_redundancy_state_reserved = -1;
static int hf_ff_sm_dev_annunc_req_dev_redundancy_state_role = -1;
static int hf_ff_sm_dev_annunc_req_dev_redundancy_state_type = -1;
static int hf_ff_sm_dev_annunc_req_dev_redundancy_state = -1;
static int hf_ff_sm_dev_annunc_req_dup_detection_state_reserved = -1;
static int hf_ff_sm_dev_annunc_req_dup_detection_state_pd_tag = -1;
static int hf_ff_sm_dev_annunc_req_dup_detection_state_device = -1;
static int hf_ff_sm_dev_annunc_req_dup_detection_state = -1;
static gint ett_ff_sm_dev_annunc_req = -1;
static gint ett_ff_sm_dev_annunc_req_smk_state = -1;
static gint ett_ff_sm_dev_annunc_req_dev_type = -1;
static gint ett_ff_sm_dev_annunc_req_dev_redundancy_state = -1;
static gint ett_ff_sm_dev_annunc_req_dup_detection_state = -1;
static gint ett_ff_sm_dev_annunc_req_entries_h1_live_list = -1;
static gint ett_ff_sm_dev_annunc_req_h1_live_list = -1;
static gint ett_ff_sm_dev_annunc_req_entries_node_addr = -1;
static gint ett_ff_sm_dev_annunc_req_h1_node_addr = -1;
/*
* 6.5.3. FMS Services
*/
static int hf_ff_fms = -1;
/*
* 6.5.3.2. FMS Initiate (Confirmed Service Id = 96)
*/
static int hf_ff_fms_init = -1;
static int hf_ff_fms_init_req = -1;
static int hf_ff_fms_init_req_conn_opt = -1;
static int hf_ff_fms_init_req_access_protection_supported_calling = -1;
static int hf_ff_fms_init_req_passwd_and_access_grps_calling = -1;
static int hf_ff_fms_init_req_ver_od_calling = -1;
static int hf_ff_fms_init_req_prof_num_calling = -1;
static int hf_ff_fms_init_req_pd_tag = -1;
static int hf_ff_fms_init_rsp = -1;
static int hf_ff_fms_init_rsp_ver_od_called = -1;
static int hf_ff_fms_init_rsp_prof_num_called = -1;
static int hf_ff_fms_init_err = -1;
static int hf_ff_fms_init_err_err_class = -1;
static int hf_ff_fms_init_err_err_code = -1;
static int hf_ff_fms_init_err_additional_code = -1;
static int hf_ff_fms_init_err_additional_desc = -1;
static gint ett_ff_fms_init_req = -1;
static gint ett_ff_fms_init_rep = -1;
static gint ett_ff_fms_init_err = -1;
/*
* 6.5.3.3. FMS Abort (Unconfirmed Service Id = 112)
*/
static int hf_ff_fms_abort = -1;
static int hf_ff_fms_abort_req = -1;
static int hf_ff_fms_abort_req_detail = -1;
static int hf_ff_fms_abort_req_abort_id = -1;
static int hf_ff_fms_abort_req_reason_code = -1;
static int hf_ff_fms_abort_req_reserved = -1;
static gint ett_ff_fms_abort_req = -1;
/*
* 6.5.3.4. FMS Status (Confirmed Service Id = 0)
*/
static int hf_ff_fms_status = -1;
static int hf_ff_fms_status_req = -1;
static int hf_ff_fms_status_rsp = -1;
static int hf_ff_fms_status_rsp_logical_status = -1;
static int hf_ff_fms_status_rsp_physical_status = -1;
static int hf_ff_fms_status_rsp_reserved = -1;
static int hf_ff_fms_status_rsp_local_detail = -1;
static int hf_ff_fms_status_err = -1;
static int hf_ff_fms_status_err_err_class = -1;
static int hf_ff_fms_status_err_err_code = -1;
static int hf_ff_fms_status_err_additional_code = -1;
static int hf_ff_fms_status_err_additional_desc = -1;
static gint ett_ff_fms_status_req = -1;
static gint ett_ff_fms_status_rsp = -1;
static gint ett_ff_fms_status_err = -1;
/*
* 6.5.3.5. FMS Unsolicited Status (Unconfirmed Service Id = 1)
*/
static int hf_ff_fms_unsolicited_status = -1;
static int hf_ff_fms_unsolicited_status_req = -1;
static int hf_ff_fms_unsolicited_status_req_logical_status = -1;
static int hf_ff_fms_unsolicited_status_req_physical_status = -1;
static int hf_ff_fms_unsolicited_status_req_reserved = -1;
static int hf_ff_fms_unsolicited_status_req_local_detail = -1;
static gint ett_ff_fms_unsolicited_status_req = -1;
/*
* 6.5.3.6. FMS Identify (Confirmed Service Id = 1)
*/
static int hf_ff_fms_id = -1;
static int hf_ff_fms_id_req = -1;
static int hf_ff_fms_id_rsp = -1;
static int hf_ff_fms_id_rsp_vendor_name = -1;
static int hf_ff_fms_id_rsp_model_name = -1;
static int hf_ff_fms_id_rsp_revision = -1;
static int hf_ff_fms_id_err = -1;
static int hf_ff_fms_id_err_err_class = -1;
static int hf_ff_fms_id_err_err_code = -1;
static int hf_ff_fms_id_err_additional_code = -1;
static int hf_ff_fms_id_err_additional_desc = -1;
static gint ett_ff_fms_id_req = -1;
static gint ett_ff_fms_id_rsp = -1;
static gint ett_ff_fms_id_err = -1;
/*
* 6.5.3.7. FMS Get OD (Confirmed Service Id = 4)
*/
static int hf_ff_fms_get_od = -1;
static int hf_ff_fms_get_od_req = -1;
static int hf_ff_fms_get_od_req_all_attrs = -1;
static int hf_ff_fms_get_od_req_start_idx_flag = -1;
static int hf_ff_fms_get_od_req_reserved = -1;
static int hf_ff_fms_get_od_req_idx = -1;
static int hf_ff_fms_get_od_rsp = -1;
static int hf_ff_fms_get_od_rsp_more_follows = -1;
static int hf_ff_fms_get_od_rsp_num_of_obj_desc = -1;
static int hf_ff_fms_get_od_rsp_reserved = -1;
static int hf_ff_fms_get_od_rsp_object_descriptions = -1;
static int hf_ff_fms_get_od_err = -1;
static int hf_ff_fms_get_od_err_err_class = -1;
static int hf_ff_fms_get_od_err_err_code = -1;
static int hf_ff_fms_get_od_err_additional_code = -1;
static int hf_ff_fms_get_od_err_additional_desc = -1;
static gint ett_ff_fms_get_od_req = -1;
static gint ett_ff_fms_get_od_rsp = -1;
static gint ett_ff_fms_get_od_err = -1;
/*
* 6.5.3.8. FMS Initiate Put OD (Confirmed Service Id = 28)
*/
static int hf_ff_fms_init_put_od = -1;
static int hf_ff_fms_init_put_od_req = -1;
static int hf_ff_fms_init_put_od_req_reserved = -1;
static int hf_ff_fms_init_put_od_req_consequence = -1;
static int hf_ff_fms_init_put_od_rsp = -1;
static int hf_ff_fms_init_put_od_err = -1;
static int hf_ff_fms_init_put_od_err_err_class = -1;
static int hf_ff_fms_init_put_od_err_err_code = -1;
static int hf_ff_fms_init_put_od_err_additional_code = -1;
static int hf_ff_fms_init_put_od_err_additional_desc = -1;
static gint ett_ff_fms_init_put_od_req = -1;
static gint ett_ff_fms_init_put_od_rsp = -1;
static gint ett_ff_fms_init_put_od_err = -1;
/*
* 6.5.3.9. FMS Put OD (Confirmed Service Id = 29)
*/
static int hf_ff_fms_put_od = -1;
static int hf_ff_fms_put_od_req = -1;
static int hf_ff_fms_put_od_req_num_of_obj_desc = -1;
static int hf_ff_fms_put_od_req_object_descriptions = -1;
static int hf_ff_fms_put_od_rsp = -1;
static int hf_ff_fms_put_od_err = -1;
static int hf_ff_fms_put_od_err_err_class = -1;
static int hf_ff_fms_put_od_err_err_code = -1;
static int hf_ff_fms_put_od_err_additional_code = -1;
static int hf_ff_fms_put_od_err_additional_desc = -1;
static gint ett_ff_fms_put_od_req = -1;
static gint ett_ff_fms_put_od_rsp = -1;
static gint ett_ff_fms_put_od_err = -1;
/*
* 6.5.3.10. FMS Terminate Put OD (Confirmed Service Id = 30)
*/
static int hf_ff_fms_terminate_put_od = -1;
static int hf_ff_fms_terminate_put_od_req = -1;
static int hf_ff_fms_terminate_put_od_rsp = -1;
static int hf_ff_fms_terminate_put_od_err = -1;
static int hf_ff_fms_terminate_put_od_err_index = -1;
static int hf_ff_fms_terminate_put_od_err_err_class = -1;
static int hf_ff_fms_terminate_put_od_err_err_code = -1;
static int hf_ff_fms_terminate_put_od_err_additional_code = -1;
static int hf_ff_fms_terminate_put_od_err_additional_desc = -1;
static gint ett_ff_fms_terminate_put_od_req = -1;
static gint ett_ff_fms_terminate_put_od_rsp = -1;
static gint ett_ff_fms_terminate_put_od_err = -1;
/*
* 6.5.3.11. FMS Generic Initiate Download Sequence (Confirmed Service Id = 31)
*/
static int hf_ff_fms_gen_init_download_seq = -1;
static int hf_ff_fms_gen_init_download_seq_req = -1;
static int hf_ff_fms_gen_init_download_seq_req_idx = -1;
static int hf_ff_fms_gen_init_download_seq_rsp = -1;
static int hf_ff_fms_gen_init_download_seq_err = -1;
static int hf_ff_fms_gen_init_download_seq_err_err_class = -1;
static int hf_ff_fms_gen_init_download_seq_err_err_code = -1;
static int hf_ff_fms_gen_init_download_seq_err_additional_code = -1;
static int hf_ff_fms_gen_init_download_seq_err_additional_desc = -1;
static gint ett_ff_fms_gen_init_download_seq_req = -1;
static gint ett_ff_fms_gen_init_download_seq_rep = -1;
static gint ett_ff_fms_gen_init_download_seq_err = -1;
/*
* 6.5.3.12. FMS Generic Download Segment (Confirmed Service Id = 32)
*/
static int hf_ff_fms_gen_download_seg = -1;
static int hf_ff_fms_gen_download_seg_req = -1;
static int hf_ff_fms_gen_download_seg_req_idx = -1;
static int hf_ff_fms_gen_download_seg_req_more_follows = -1;
static int hf_ff_fms_gen_download_seg_req_load_data = -1;
static int hf_ff_fms_gen_download_seg_rsp = -1;
static int hf_ff_fms_gen_download_seg_err = -1;
static int hf_ff_fms_gen_download_seg_err_err_class = -1;
static int hf_ff_fms_gen_download_seg_err_err_code = -1;
static int hf_ff_fms_gen_download_seg_err_additional_code = -1;
static int hf_ff_fms_gen_download_seg_err_additional_desc = -1;
static gint ett_ff_fms_gen_download_seg_req = -1;
static gint ett_ff_fms_gen_download_seg_rsp = -1;
static gint ett_ff_fms_gen_download_seg_err = -1;
/*
* 6.5.3.13. FMS Generic Terminate Download Sequence (Confirmed Service Id = 33)
*/
static int hf_ff_fms_gen_terminate_download_seq = -1;
static int hf_ff_fms_gen_terminate_download_seq_req = -1;
static int hf_ff_fms_gen_terminate_download_seq_req_idx = -1;
static int hf_ff_fms_gen_terminate_download_seq_rsp = -1;
static int hf_ff_fms_gen_terminate_download_seq_rsp_final_result = -1;
static int hf_ff_fms_gen_terminate_download_seq_err = -1;
static int hf_ff_fms_gen_terminate_download_seq_err_err_class = -1;
static int hf_ff_fms_gen_terminate_download_seq_err_err_code = -1;
static int hf_ff_fms_gen_terminate_download_seq_err_additional_code = -1;
static int hf_ff_fms_gen_terminate_download_seq_err_additional_desc = -1;
static gint ett_ff_fms_gen_terminate_download_seq_req = -1;
static gint ett_ff_fms_gen_terminate_download_seq_rsp = -1;
static gint ett_ff_fms_gen_terminate_download_seq_err = -1;
/*
* 6.5.3.14. FMS Initiate Download Sequence (Confirmed Service Id = 9)
*/
static int hf_ff_fms_init_download_seq = -1;
static int hf_ff_fms_init_download_seq_req = -1;
static int hf_ff_fms_init_download_seq_req_idx = -1;
static int hf_ff_fms_init_download_seq_rsp = -1;
static int hf_ff_fms_init_download_seq_err = -1;
static int hf_ff_fms_init_download_seq_err_err_class = -1;
static int hf_ff_fms_init_download_seq_err_err_code = -1;
static int hf_ff_fms_init_download_seq_err_additional_code = -1;
static int hf_ff_fms_init_download_seq_err_additional_desc = -1;
static gint ett_ff_fms_init_download_seq_req = -1;
static gint ett_ff_fms_init_download_seq_rsp = -1;
static gint ett_ff_fms_init_download_seq_err = -1;
/*
* 6.5.3.15. FMS Download Segment (Confirmed Service Id = 10)
*/
static int hf_ff_fms_download_seg = -1;
static int hf_ff_fms_download_seg_req = -1;
static int hf_ff_fms_download_seg_req_idx = -1;
static int hf_ff_fms_download_seg_rsp = -1;
static int hf_ff_fms_download_seg_rsp_more_follows = -1;
static int hf_ff_fms_download_seg_rsp_load_data = -1;
static int hf_ff_fms_download_seg_err = -1;
static int hf_ff_fms_download_seg_err_err_class = -1;
static int hf_ff_fms_download_seg_err_err_code = -1;
static int hf_ff_fms_download_seg_err_additional_code = -1;
static int hf_ff_fms_download_seg_err_additional_desc = -1;
static gint ett_ff_fms_download_seg_req = -1;
static gint ett_ff_fms_download_seg_rsp = -1;
static gint ett_ff_fms_download_seg_err = -1;
/*
* 6.5.3.16. FMS Terminate Download Sequence (Confirmed Service Id = 11)
*/
static int hf_ff_fms_terminate_download_seq = -1;
static int hf_ff_fms_terminate_download_seq_req = -1;
static int hf_ff_fms_terminate_download_seq_req_idx = -1;
static int hf_ff_fms_terminate_download_seq_req_final_result = -1;
static int hf_ff_fms_terminate_download_seq_rsp = -1;
static int hf_ff_fms_terminate_download_seq_err = -1;
static int hf_ff_fms_terminate_download_seq_err_err_class = -1;
static int hf_ff_fms_terminate_download_seq_err_err_code = -1;
static int hf_ff_fms_terminate_download_seq_err_additional_code = -1;
static int hf_ff_fms_terminate_download_seq_err_additional_desc = -1;
static gint ett_ff_fms_terminate_download_seq_req = -1;
static gint ett_ff_fms_terminate_download_seq_rsp = -1;
static gint ett_ff_fms_terminate_download_seq_err = -1;
/*
* 6.5.3.17. FMS Initiate Upload Sequence (Confirmed Service Id = 12)
*/
static int hf_ff_fms_init_upload_seq = -1;
static int hf_ff_fms_init_upload_seq_req = -1;
static int hf_ff_fms_init_upload_seq_req_idx = -1;
static int hf_ff_fms_init_upload_seq_rsp = -1;
static int hf_ff_fms_init_upload_seq_err = -1;
static int hf_ff_fms_init_upload_seq_err_err_class = -1;
static int hf_ff_fms_init_upload_seq_err_err_code = -1;
static int hf_ff_fms_init_upload_seq_err_additional_code = -1;
static int hf_ff_fms_init_upload_seq_err_additional_desc = -1;
static gint ett_ff_fms_init_upload_seq_req = -1;
static gint ett_ff_fms_init_upload_seq_rsp = -1;
static gint ett_ff_fms_init_upload_seq_err = -1;
/*
* 6.5.3.18. FMS Upload Segment (Confirmed Service Id = 13)
*/
static int hf_ff_fms_upload_seg = -1;
static int hf_ff_fms_upload_seg_req = -1;
static int hf_ff_fms_upload_seg_req_idx = -1;
static int hf_ff_fms_upload_seg_rsp = -1;
static int hf_ff_fms_upload_seg_rsp_more_follows = -1;
static int hf_ff_fms_upload_seg_rsp_final_result = -1;
static int hf_ff_fms_upload_seg_err = -1;
static int hf_ff_fms_upload_seg_err_err_class = -1;
static int hf_ff_fms_upload_seg_err_err_code = -1;
static int hf_ff_fms_upload_seg_err_additional_code = -1;
static int hf_ff_fms_upload_seg_err_additional_desc = -1;
static gint ett_ff_fms_upload_seg_req = -1;
static gint ett_ff_fms_upload_seg_rsp = -1;
static gint ett_ff_fms_upload_seg_err = -1;
/*
* 6.5.3.19. FMS Terminate Upload Sequence (Confirmed Service Id = 14)
*/
static int hf_ff_fms_terminate_upload_seq = -1;
static int hf_ff_fms_terminate_upload_seq_req = -1;
static int hf_ff_fms_terminate_upload_seq_req_idx = -1;
static int hf_ff_fms_terminate_upload_seq_rsp = -1;
static int hf_ff_fms_terminate_upload_seq_err = -1;
static int hf_ff_fms_terminate_upload_seq_err_err_class = -1;
static int hf_ff_fms_terminate_upload_seq_err_err_code = -1;
static int hf_ff_fms_terminate_upload_seq_err_additional_code = -1;
static int hf_ff_fms_terminate_upload_seq_err_additional_desc = -1;
static gint ett_ff_fms_terminate_upload_seq_req = -1;
static gint ett_ff_fms_terminate_upload_seq_rsp = -1;
static gint ett_ff_fms_terminate_upload_seq_err = -1;
/*
* 6.5.3.20. FMS Request Domain Download (Confirmed Service Id = 15)
*/
static int hf_ff_fms_req_dom_download = -1;
static int hf_ff_fms_req_dom_download_req = -1;
static int hf_ff_fms_req_dom_download_req_idx = -1;
static int hf_ff_fms_req_dom_download_req_additional_info = -1;
static int hf_ff_fms_req_dom_download_rsp = -1;
static int hf_ff_fms_req_dom_download_err = -1;
static int hf_ff_fms_req_dom_download_err_err_class = -1;
static int hf_ff_fms_req_dom_download_err_err_code = -1;
static int hf_ff_fms_req_dom_download_err_additional_code = -1;
static int hf_ff_fms_req_dom_download_err_additional_desc = -1;
static gint ett_ff_fms_req_dom_download_req = -1;
static gint ett_ff_fms_req_dom_download_rsp = -1;
static gint ett_ff_fms_req_dom_download_err = -1;
/*
* 6.5.3.21. FMS Request Domain Upload (Confirmed Service Id = 16)
*/
static int hf_ff_fms_req_dom_upload = -1;
static int hf_ff_fms_req_dom_upload_req = -1;
static int hf_ff_fms_req_dom_upload_req_idx = -1;
static int hf_ff_fms_req_dom_upload_req_additional_info = -1;
static int hf_ff_fms_req_dom_upload_rsp = -1;
static int hf_ff_fms_req_dom_upload_err = -1;
static int hf_ff_fms_req_dom_upload_err_err_class = -1;
static int hf_ff_fms_req_dom_upload_err_err_code = -1;
static int hf_ff_fms_req_dom_upload_err_additional_code = -1;
static int hf_ff_fms_req_dom_upload_err_additional_desc = -1;
static gint ett_ff_fms_req_dom_upload_req = -1;
static gint ett_ff_fms_req_dom_upload_rsp = -1;
static gint ett_ff_fms_req_dom_upload_err = -1;
/*
* 6.5.3.22. FMS Create Program Invocation (Confirmed Service Id = 17)
*/
static int hf_ff_fms_create_pi = -1;
static int hf_ff_fms_create_pi_req = -1;
static int hf_ff_fms_create_pi_req_reusable = -1;
static int hf_ff_fms_create_pi_req_reserved = -1;
static int hf_ff_fms_create_pi_req_num_of_dom_idxes = -1;
static int hf_ff_fms_create_pi_req_dom_idx = -1;
static int hf_ff_fms_create_pi_rsp = -1;
static int hf_ff_fms_create_pi_rsp_idx = -1;
static int hf_ff_fms_create_pi_err = -1;
static int hf_ff_fms_create_pi_err_err_class = -1;
static int hf_ff_fms_create_pi_err_err_code = -1;
static int hf_ff_fms_create_pi_err_additional_code = -1;
static int hf_ff_fms_create_pi_err_additional_desc = -1;
static gint ett_ff_fms_create_pi_req = -1;
static gint ett_ff_fms_create_pi_req_list_of_dom_idxes = -1;
static gint ett_ff_fms_create_pi_rsp = -1;
static gint ett_ff_fms_create_pi_err = -1;
/*
* 6.5.3.23. FMS Delete Program Invocation (Confirmed Service Id = 18)
*/
static int hf_ff_fms_del_pi = -1;
static int hf_ff_fms_del_pi_req = -1;
static int hf_ff_fms_del_pi_req_idx = -1;
static int hf_ff_fms_del_pi_rsp = -1;
static int hf_ff_fms_del_pi_err = -1;
static int hf_ff_fms_del_pi_err_err_class = -1;
static int hf_ff_fms_del_pi_err_err_code = -1;
static int hf_ff_fms_del_pi_err_additional_code = -1;
static int hf_ff_fms_del_pi_err_additional_desc = -1;
static gint ett_ff_fms_del_pi_req = -1;
static gint ett_ff_fms_del_pi_rsp = -1;
static gint ett_ff_fms_del_pi_err = -1;
/*
* 6.5.3.24. FMS Start (Confirmed Service Id = 19)
*/
static int hf_ff_fms_start = -1;
static int hf_ff_fms_start_req = -1;
static int hf_ff_fms_start_req_idx = -1;
static int hf_ff_fms_start_req_execution_argument = -1;
static int hf_ff_fms_start_rsp = -1;
static int hf_ff_fms_start_err = -1;
static int hf_ff_fms_start_err_pi_state = -1;
static int hf_ff_fms_start_err_err_class = -1;
static int hf_ff_fms_start_err_err_code = -1;
static int hf_ff_fms_start_err_additional_code = -1;
static int hf_ff_fms_start_err_additional_desc = -1;
static gint ett_ff_fms_start_req = -1;
static gint ett_ff_fms_start_rsp = -1;
static gint ett_ff_fms_start_err = -1;
/*
* 6.5.3.25. FMS Stop (Confirmed Service Id = 20)
*/
static int hf_ff_fms_stop = -1;
static int hf_ff_fms_stop_req = -1;
static int hf_ff_fms_stop_req_idx = -1;
static int hf_ff_fms_stop_rsp = -1;
static int hf_ff_fms_stop_err = -1;
static int hf_ff_fms_stop_err_pi_state = -1;
static int hf_ff_fms_stop_err_err_class = -1;
static int hf_ff_fms_stop_err_err_code = -1;
static int hf_ff_fms_stop_err_additional_code = -1;
static int hf_ff_fms_stop_err_additional_desc = -1;
static gint ett_ff_fms_stop_req = -1;
static gint ett_ff_fms_stop_rsp = -1;
static gint ett_ff_fms_stop_err = -1;
/*
* 6.5.3.26. FMS Resume (Confirmed Service Id = 21)
*/
static int hf_ff_fms_resume = -1;
static int hf_ff_fms_resume_req = -1;
static int hf_ff_fms_resume_req_idx = -1;
static int hf_ff_fms_resume_req_execution_argument = -1;
static int hf_ff_fms_resume_rsp = -1;
static int hf_ff_fms_resume_err = -1;
static int hf_ff_fms_resume_err_pi_state = -1;
static int hf_ff_fms_resume_err_err_class = -1;
static int hf_ff_fms_resume_err_err_code = -1;
static int hf_ff_fms_resume_err_additional_code = -1;
static int hf_ff_fms_resume_err_additional_desc = -1;
static gint ett_ff_fms_resume_req = -1;
static gint ett_ff_fms_resume_rsp = -1;
static gint ett_ff_fms_resume_err = -1;
/*
* 6.5.3.27. FMS Reset (Confirmed Service Id = 22)
*/
static int hf_ff_fms_reset = -1;
static int hf_ff_fms_reset_req = -1;
static int hf_ff_fms_reset_req_idx = -1;
static int hf_ff_fms_reset_rsp = -1;
static int hf_ff_fms_reset_err = -1;
static int hf_ff_fms_reset_err_pi_state = -1;
static int hf_ff_fms_reset_err_err_class = -1;
static int hf_ff_fms_reset_err_err_code = -1;
static int hf_ff_fms_reset_err_additional_code = -1;
static int hf_ff_fms_reset_err_additional_desc = -1;
static gint ett_ff_fms_reset_req = -1;
static gint ett_ff_fms_reset_rsp = -1;
static gint ett_ff_fms_reset_err = -1;
/*
* 6.5.3.28. FMS Kill (Confirmed Service Id = 23)
*/
static int hf_ff_fms_kill = -1;
static int hf_ff_fms_kill_req = -1;
static int hf_ff_fms_kill_req_idx = -1;
static int hf_ff_fms_kill_rsp = -1;
static int hf_ff_fms_kill_err = -1;
static int hf_ff_fms_kill_err_err_class = -1;
static int hf_ff_fms_kill_err_err_code = -1;
static int hf_ff_fms_kill_err_additional_code = -1;
static int hf_ff_fms_kill_err_additional_desc = -1;
static gint ett_ff_fms_kill_req = -1;
static gint ett_ff_fms_kill_rsp = -1;
static gint ett_ff_fms_kill_err = -1;
/*
* 6.5.3.29. FMS Read (Confirmed Service Id = 2)
*/
static int hf_ff_fms_read = -1;
static int hf_ff_fms_read_req = -1;
static int hf_ff_fms_read_req_idx = -1;
static int hf_ff_fms_read_rsp = -1;
static int hf_ff_fms_read_err = -1;
static int hf_ff_fms_read_err_err_class = -1;
static int hf_ff_fms_read_err_err_code = -1;
static int hf_ff_fms_read_err_additional_code = -1;
static int hf_ff_fms_read_err_additional_desc = -1;
static gint ett_ff_fms_read_req = -1;
static gint ett_ff_fms_read_rsp = -1;
static gint ett_ff_fms_read_err = -1;
/*
* 6.5.3.30. FMS Read with Subindex (Confirmed Service Id = 82)
*/
static int hf_ff_fms_read_with_subidx = -1;
static int hf_ff_fms_read_with_subidx_req = -1;
static int hf_ff_fms_read_with_subidx_req_idx = -1;
static int hf_ff_fms_read_with_subidx_req_subidx = -1;
static int hf_ff_fms_read_with_subidx_rsp = -1;
static int hf_ff_fms_read_with_subidx_err = -1;
static int hf_ff_fms_read_with_subidx_err_err_class = -1;
static int hf_ff_fms_read_with_subidx_err_err_code = -1;
static int hf_ff_fms_read_with_subidx_err_additional_code = -1;
static int hf_ff_fms_read_with_subidx_err_additional_desc = -1;
static gint ett_ff_fms_read_with_subidx_req = -1;
static gint ett_ff_fms_read_with_subidx_rsp = -1;
static gint ett_ff_fms_read_with_subidx_err = -1;
/*
* 6.5.3.31. FMS Write (Confirmed Service Id = 3)
*/
static int hf_ff_fms_write = -1;
static int hf_ff_fms_write_req = -1;
static int hf_ff_fms_write_req_idx = -1;
static int hf_ff_fms_write_rsp = -1;
static int hf_ff_fms_write_err = -1;
static int hf_ff_fms_write_err_err_class = -1;
static int hf_ff_fms_write_err_err_code = -1;
static int hf_ff_fms_write_err_additional_code = -1;
static int hf_ff_fms_write_err_additional_desc = -1;
static gint ett_ff_fms_write_req = -1;
static gint ett_ff_fms_write_rsp = -1;
static gint ett_ff_fms_write_err = -1;
/*
* 6.5.3.32. FMS Write with Subindex (Confirmed Service Id = 83)
*/
static int hf_ff_fms_write_with_subidx = -1;
static int hf_ff_fms_write_with_subidx_req = -1;
static int hf_ff_fms_write_with_subidx_req_idx = -1;
static int hf_ff_fms_write_with_subidx_req_subidx = -1;
static int hf_ff_fms_write_with_subidx_rsp = -1;
static int hf_ff_fms_write_with_subidx_err = -1;
static int hf_ff_fms_write_with_subidx_err_err_class = -1;
static int hf_ff_fms_write_with_subidx_err_err_code = -1;
static int hf_ff_fms_write_with_subidx_err_additional_code = -1;
static int hf_ff_fms_write_with_subidx_err_additional_desc = -1;
static gint ett_ff_fms_write_with_subidx_req = -1;
static gint ett_ff_fms_write_with_subidx_rsp = -1;
static gint ett_ff_fms_write_with_subidx_err = -1;
/*
* 6.5.3.33. FMS Define Variable List (Confirmed Service Id = 7)
*/
static int hf_ff_fms_def_variable_list = -1;
static int hf_ff_fms_def_variable_list_req = -1;
static int hf_ff_fms_def_variable_list_req_num_of_idxes = -1;
static int hf_ff_fms_def_variable_list_req_idx = -1;
static int hf_ff_fms_def_variable_list_rsp = -1;
static int hf_ff_fms_def_variable_list_rsp_idx = -1;
static int hf_ff_fms_def_variable_list_err = -1;
static int hf_ff_fms_def_variable_list_err_err_class = -1;
static int hf_ff_fms_def_variable_list_err_err_code = -1;
static int hf_ff_fms_def_variable_list_err_additional_code = -1;
static int hf_ff_fms_def_variable_list_err_additional_desc = -1;
static gint ett_ff_fms_def_variable_list_req = -1;
static gint ett_ff_fms_def_variable_list_req_list_of_idxes = -1;
static gint ett_ff_fms_def_variable_list_rsp = -1;
static gint ett_ff_fms_def_variable_list_err = -1;
/*
* 6.5.3.34. FMS Delete Variable List (Confirmed Service Id = 8)
*/
static int hf_ff_fms_del_variable_list = -1;
static int hf_ff_fms_del_variable_list_req = -1;
static int hf_ff_fms_del_variable_list_req_idx = -1;
static int hf_ff_fms_del_variable_list_rsp = -1;
static int hf_ff_fms_del_variable_list_err = -1;
static int hf_ff_fms_del_variable_list_err_err_class = -1;
static int hf_ff_fms_del_variable_list_err_err_code = -1;
static int hf_ff_fms_del_variable_list_err_additional_code = -1;
static int hf_ff_fms_del_variable_list_err_additional_desc = -1;
static gint ett_ff_fms_del_variable_list_req = -1;
static gint ett_ff_fms_del_variable_list_rsp = -1;
static gint ett_ff_fms_del_variable_list_err = -1;
/*
* 6.5.3.35. FMS Information Report (Unconfirmed Service Id = 0)
*/
static int hf_ff_fms_info_report = -1;
static int hf_ff_fms_info_report_req = -1;
static int hf_ff_fms_info_report_req_idx = -1;
static gint ett_ff_fms_info_report_req = -1;
/*
* 6.5.3.36. FMS Information Report with Subindex (Unconfirmed Service Id = 16)
*/
static int hf_ff_fms_info_report_with_subidx = -1;
static int hf_ff_fms_info_report_with_subidx_req = -1;
static int hf_ff_fms_info_report_with_subidx_req_idx = -1;
static int hf_ff_fms_info_report_with_subidx_req_subidx = -1;
static gint ett_ff_fms_info_report_with_subidx_req = -1;
/*
* 6.5.3.37. FMS Information Report On Change (Unconfirmed Service Id = 17)
*/
static int hf_ff_fms_info_report_on_change = -1;
static int hf_ff_fms_info_report_on_change_req = -1;
static int hf_ff_fms_info_report_on_change_req_idx = -1;
static gint ett_ff_fms_info_report_on_change_req = -1;
/*
* 6.5.3.38. FMS Information Report On Change with Subindex
* (Unconfirmed Service Id = 18)
*/
static int hf_ff_fms_info_report_on_change_with_subidx = -1;
static int hf_ff_fms_info_report_on_change_with_subidx_req = -1;
static int hf_ff_fms_info_report_on_change_with_subidx_req_idx = -1;
static int hf_ff_fms_info_report_on_change_with_subidx_req_subidx = -1;
static gint ett_ff_fms_info_report_on_change_with_subidx_req = -1;
/*
* 6.5.3.39. FMS Event Notification (Unconfirmed Service Id = 2)
*/
static int hf_ff_fms_ev_notification = -1;
static int hf_ff_fms_ev_notification_req = -1;
static int hf_ff_fms_ev_notification_req_idx = -1;
static int hf_ff_fms_ev_notification_req_ev_num = -1;
static gint ett_ff_fms_ev_notification_req = -1;
/*
* 6.5.3.40. FMS Alter Event Condition Monitoring (Confirmed Service Id = 24)
*/
static int hf_ff_fms_alter_ev_condition_monitoring = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_req = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_req_idx = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_req_enabled = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_rsp = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_err = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_err_err_class = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_err_err_code = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_err_additional_code = -1;
static int hf_ff_fms_alter_ev_condition_monitoring_err_additional_desc = -1;
static gint ett_ff_fms_alter_ev_condition_monitoring_req = -1;
static gint ett_ff_fms_alter_ev_condition_monitoring_rsp = -1;
static gint ett_ff_fms_alter_ev_condition_monitoring_err = -1;
/*
* 6.5.3.41. FMS Acknowledge Event Notification (Confirmed Service Id = 25)
*/
static int hf_ff_fms_ack_ev_notification = -1;
static int hf_ff_fms_ack_ev_notification_req = -1;
static int hf_ff_fms_ack_ev_notification_req_idx = -1;
static int hf_ff_fms_ack_ev_notification_req_ev_num = -1;
static int hf_ff_fms_ack_ev_notification_rsp = -1;
static int hf_ff_fms_ack_ev_notification_err = -1;
static int hf_ff_fms_ack_ev_notification_err_err_class = -1;
static int hf_ff_fms_ack_ev_notification_err_err_code = -1;
static int hf_ff_fms_ack_ev_notification_err_additional_code = -1;
static int hf_ff_fms_ack_ev_notification_err_additional_desc = -1;
static gint ett_ff_fms_ack_ev_notification_req = -1;
static gint ett_ff_fms_ack_ev_notification_rsp = -1;
static gint ett_ff_fms_ack_ev_notification_err = -1;
/*
* 6.5.4. LAN Redundancy Services
*/
static int hf_ff_lr = -1;
/*
* 6.5.4.1. LAN Redundancy Get Information (Confirmed Service Id = 1)
*/
static int hf_ff_lr_get_info = -1;
static int hf_ff_lr_get_info_req = -1;
static int hf_ff_lr_get_info_rsp = -1;
static int hf_ff_lr_get_info_rsp_lr_attrs_ver = -1;
static int hf_ff_lr_get_info_rsp_lr_max_msg_num_diff = -1;
static int hf_ff_lr_get_info_rsp_reserved = -1;
static int hf_ff_lr_get_info_rsp_diagnostic_msg_intvl = -1;
static int hf_ff_lr_get_info_rsp_aging_time = -1;
static int hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_send_addr = -1;
static int hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_recv_addr = -1;
static int hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_send_addr = -1;
static int hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_recv_addr = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_reserved = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_load_balance = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_diag = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_multi_recv = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_cross_cable = -1;
static int hf_ff_lr_get_info_rsp_lr_flags_multi_trans = -1;
static int hf_ff_lr_get_info_rsp_lr_flags = -1;
static int hf_ff_lr_get_info_err = -1;
static int hf_ff_lr_get_info_err_err_class = -1;
static int hf_ff_lr_get_info_err_err_code = -1;
static int hf_ff_lr_get_info_err_additional_code = -1;
static int hf_ff_lr_get_info_err_additional_desc = -1;
static gint ett_ff_lr_get_info_req = -1;
static gint ett_ff_lr_get_info_rsp = -1;
static gint ett_ff_lr_get_info_rsp_lr_flags = -1;
static gint ett_ff_lr_get_info_err = -1;
/*
* 6.5.4.2. LAN Redundancy Put Information (Confirmed Service Id = 2)
*/
static int hf_ff_lr_put_info = -1;
static int hf_ff_lr_put_info_req = -1;
static int hf_ff_lr_put_info_req_lr_attrs_ver = -1;
static int hf_ff_lr_put_info_req_lr_max_msg_num_diff = -1;
static int hf_ff_lr_put_info_req_reserved = -1;
static int hf_ff_lr_put_info_req_diagnostic_msg_intvl = -1;
static int hf_ff_lr_put_info_req_aging_time = -1;
static int hf_ff_lr_put_info_req_diagnostic_msg_if_a_send_addr = -1;
static int hf_ff_lr_put_info_req_diagnostic_msg_if_a_recv_addr = -1;
static int hf_ff_lr_put_info_req_diagnostic_msg_if_b_send_addr = -1;
static int hf_ff_lr_put_info_req_diagnostic_msg_if_b_recv_addr = -1;
static int hf_ff_lr_put_info_req_lr_flags_reserved = -1;
static int hf_ff_lr_put_info_req_lr_flags_load_balance = -1;
static int hf_ff_lr_put_info_req_lr_flags_diag = -1;
static int hf_ff_lr_put_info_req_lr_flags_multi_recv = -1;
static int hf_ff_lr_put_info_req_lr_flags_cross_cable = -1;
static int hf_ff_lr_put_info_req_lr_flags_multi_trans = -1;
static int hf_ff_lr_put_info_req_lr_flags = -1;
static int hf_ff_lr_put_info_rsp = -1;
static int hf_ff_lr_put_info_rsp_lr_attrs_ver = -1;
static int hf_ff_lr_put_info_rsp_lr_max_msg_num_diff = -1;
static int hf_ff_lr_put_info_rsp_reserved = -1;
static int hf_ff_lr_put_info_rsp_diagnostic_msg_intvl = -1;
static int hf_ff_lr_put_info_rsp_aging_time = -1;
static int hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_send_addr = -1;
static int hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_recv_addr = -1;
static int hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_send_addr = -1;
static int hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_recv_addr = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_reserved = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_load_balance = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_diag = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_multi_recv = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_cross_cable = -1;
static int hf_ff_lr_put_info_rsp_lr_flags_multi_trans = -1;
static int hf_ff_lr_put_info_rsp_lr_flags = -1;
static int hf_ff_lr_put_info_err = -1;
static int hf_ff_lr_put_info_err_err_class = -1;
static int hf_ff_lr_put_info_err_err_code = -1;
static int hf_ff_lr_put_info_err_additional_code = -1;
static int hf_ff_lr_put_info_err_additional_desc = -1;
static gint ett_ff_lr_put_info_req = -1;
static gint ett_ff_lr_put_info_req_lr_flags = -1;
static gint ett_ff_lr_put_info_rsp = -1;
static gint ett_ff_lr_put_info_rsp_lr_flags = -1;
static gint ett_ff_lr_put_info_err = -1;
/*
* 6.5.4.3. LAN Redundancy Get Statistics (Confirmed Service Id = 3)
*/
static int hf_ff_lr_get_statistics = -1;
static int hf_ff_lr_get_statistics_req = -1;
static int hf_ff_lr_get_statistics_rsp = -1;
static int hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_a = -1;
static int hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_a = -1;
static int hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_a = -1;
static int hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_b = -1;
static int hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_b = -1;
static int hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_b = -1;
static int hf_ff_lr_get_statistics_rsp_num_x_cable_stat = -1;
static int hf_ff_lr_get_statistics_rsp_x_cable_stat = -1;
static int hf_ff_lr_get_statistics_err = -1;
static int hf_ff_lr_get_statistics_err_err_class = -1;
static int hf_ff_lr_get_statistics_err_err_code = -1;
static int hf_ff_lr_get_statistics_err_additional_code = -1;
static int hf_ff_lr_get_statistics_err_additional_desc = -1;
static gint ett_ff_lr_get_statistics_req = -1;
static gint ett_ff_lr_get_statistics_rsp = -1;
static gint ett_ff_lr_get_statistics_rsp_list_of_x_cable_stat = -1;
static gint ett_ff_lr_get_statistics_err = -1;
/*
* 6.5.4.4. Diagnostic Message (Unconfirmed Service Id = 1)
*/
static int hf_ff_lr_diagnostic_msg = -1;
static int hf_ff_lr_diagnostic_msg_req = -1;
static int hf_ff_lr_diagnostic_msg_req_dev_idx = -1;
static int hf_ff_lr_diagnostic_msg_req_num_of_network_ifs = -1;
static int hf_ff_lr_diagnostic_msg_req_transmission_if = -1;
static int hf_ff_lr_diagnostic_msg_req_diagnostic_msg_intvl = -1;
static int hf_ff_lr_diagnostic_msg_req_pd_tag = -1;
static int hf_ff_lr_diagnostic_msg_req_reserved = -1;
static int hf_ff_lr_diagnostic_msg_req_num_of_if_statuses = -1;
static int hf_ff_lr_diagnostic_msg_req_if_a_to_a_status = -1;
static int hf_ff_lr_diagnostic_msg_req_if_b_to_a_status = -1;
static int hf_ff_lr_diagnostic_msg_req_if_a_to_b_status = -1;
static int hf_ff_lr_diagnostic_msg_req_if_b_to_b_status = -1;
static int hf_ff_lr_diagnostic_msg_req_dup_detection_state_reserved = -1;
static int hf_ff_lr_diagnostic_msg_req_dup_detection_state_pd_tag = -1;
static int hf_ff_lr_diagnostic_msg_req_dup_detection_state_device = -1;
static int hf_ff_lr_diagnostic_msg_req_dup_detection_state = -1;
static gint ett_ff_lr_diagnostic_msg_req = -1;
static gint ett_ff_lr_diagnostic_msg_req_dup_detection_stat = -1;
static gint ett_ff_lr_diagnostic_msg_req_a_to_a_status = -1;
static gint ett_ff_lr_diagnostic_msg_req_b_to_a_status = -1;
static gint ett_ff_lr_diagnostic_msg_req_a_to_b_status = -1;
static gint ett_ff_lr_diagnostic_msg_req_b_to_b_status = -1;
#if 0
static const value_string names_pad_len[] = {
{ 0x00, "No padding" },
{ OPTION_PAD_4BYTE, "pad to 4 byte boundary" },
{ OPTION_PAD_8BYTE, "pad to 8 byte boundary" },
{ 0, NULL }
};
#endif
static const value_string names_proto[] = {
{ 0x00, "Unused"},
{ PROTOCOL_FDA, "FDA Session Management" },
{ PROTOCOL_SM, "SM" },
{ PROTOCOL_FMS, "FMS" },
{ PROTOCOL_LAN, "LAN Redundancy" },
{ 0, NULL }
};
static const value_string names_type[] = {
{ TYPE_REQUEST, "Request Message" },
{ TYPE_RESPONSE, "Response Message" },
{ TYPE_ERROR, "Error Message" },
{ 0, NULL }
};
static const value_string names_nma_conf_use[] = {
{ 0, "NMA Configuration Not Permitted" },
{ 1, "NMA Configuration Permitted" },
{ 0, NULL }
};
static const value_string names_query_type[] = {
{ 0, "PD Tag query for primary device" },
{ 1, "VFD tag query" },
{ 2, "Function-Block tag query" },
{ 3, "Element Id query" },
{ 4, "PD Tag/VFD Reference query" },
{ 5, "Device Index query" },
{ 6, "PD Tag query for secondary or member of redundant set" },
{ 0, NULL }
};
static const value_string names_smk_state[] = {
{ 0x02, "NO_TAG" }, /* 0000 0010 */
{ 0x04, "OPERATIONAL" }, /* 0000 0100 */
{ 0, NULL }
};
static const value_string names_dev_type[] = {
{ 0x00, "Type D-1 Device" }, /* 0000 0000 */
{ 0x01, "Type D-2 Device" }, /* 0000 0001 */
{ 0x02, "Type D-3 Device" }, /* 0000 0010 */
{ 0x03, "Type D-3 and Type D-2 Device" }, /* 0000 0011 */
{ 0x04, "Not used" }, /* 0000 0100 */
{ 0x05, "Type D-2 and Type D-1 Device" }, /* 0000 0101 */
{ 0x06, "Type D-3 and Type D-1 Device" }, /* 0000 0110 */
{ 0x07, "Type D-3 and D-2 and Type D-1 Device" }, /* 0000 0111 */
{ 0, NULL }
};
static const value_string names_dev_redundancy_role[] = {
{ 0x04, "Primary" }, /* 0000 0100 */
{ 0x08, "Secondary" }, /* 0000 1000 */
{ 0, NULL }
};
static const value_string names_assigned_redundant_dev_type[] = {
{ 0x00, "Type D-1 Device" }, /* 0000 0000 */
{ 0x01, "Type D-2 Device" }, /* 0000 0001 */
{ 0x02, "Type D-3 Device" }, /* 0000 0010 */
{ 0, NULL }
};
static const value_string names_type_d2_dev_redundancy_role[] = {
{ 0x00, "Not used" }, /* 0000 0000 */
{ 0x04, "Type D-2 Device Primary" }, /* 0000 0100 */
{ 0x08, "Type D-2 Device Secondary" }, /* 0000 1000 */
{ 0, NULL }
};
static const value_string names_conn_opt[] = {
{ 1, "VCR Selector" },
{ 2, "NMA Access" },
{ 3, "FBAP Access" },
{ 0, NULL }
};
static const value_string names_fda_unconfirmed[] = {
{ 0, NULL }
};
static const value_string names_fda_confirmed[] = {
{ FDA_OPEN_SESSION, "FDA Open Session" },
{ FDA_IDLE, "FDA Idle" },
{ 0, NULL }
};
static const value_string names_sm_unconfirmed[] = {
{ HSE_SM_FIND_TAG_QUERY, "SM Find Tag Query" },
{ HSE_SM_FIND_TAG_REPLY, "SM Find Tag Reply" },
{ HSE_SM_DEVICE_ANNUNCIATION, "SM Device Annunciation" },
{ 0, NULL }
};
static const value_string names_sm_confirmed[] = {
{ HSE_SM_IDENTIFY, "SM Identify" },
{ HSE_SM_CLEAR_ADDRESS, "SM Clear Address" },
{ HSE_SM_SET_ASSIGNMENT, "SM Set Assignment Info" },
{ HSE_SM_CLEAR_ASSIGNMENT, "SM Clear Assignment Info" },
{ 0, NULL }
};
static const value_string names_fms_unconfirmed[] = {
{ HSE_FMS_INFORMATION_REPORT, "FMS Information Report" },
{ HSE_FMS_UNSOLICITED_STATUS, "FMS Unsolicited Status" },
{ HSE_FMS_EVENT_NOTIFICATION, "FMS Event Notification" },
{ HSE_FMS_INFORMATION_REPORT_WITH_SUBINDEX,
"FMS Information Report with Subindex" },
{ HSE_FMS_INFORMATION_REPORT_ON_CHANGE,
"FMS Information Report On Change" },
{ HSE_FMS_INFORMATION_REPORT_ON_CHANGE_WITH_SUBINDEX,
"FMS Information Report On Change with Subindex" },
{ HSE_FMS_ABORT, "FMS Abort" },
{ 0, NULL }
};
static const value_string names_fms_confirmed[] = {
{ HSE_FMS_STATUS, "FMS Status" },
{ HSE_FMS_IDENTIFY, "FMS Identify" },
{ HSE_FMS_READ, "FMS Read" },
{ HSE_FMS_WRITE, "FMS Write" },
{ HSE_FMS_GET_OD, "FMS Get OD" },
{ HSE_FMS_DEFINE_VARIABLE_LIST, "FMS Define Variable List" },
{ HSE_FMS_DELETE_VARIABLE_LIST, "FMS Delete Variable List" },
{ HSE_FMS_INITIATE_DOWNLOAD_SEQUENCE, "FMS Initiate Download Sequence" },
{ HSE_FMS_DOWNLOAD_SEGMENT, "FMS Download Segment" },
{ HSE_FMS_TERMINATE_DOWNLOAD_SEQUENCE, "FMS Terminate Download Sequence" },
{ HSE_FMS_INITIATE_UPLOAD_SEQUENCE, "FMS Initiate Upload Sequence" },
{ HSE_FMS_UPLOAD_SEGMENT, "FMS Upload Segment" },
{ HSE_FMS_TERMINATE_UPLOAD_SEQUENCE, "FMS Terminate Upload Sequence" },
{ HSE_FMS_REQUEST_DOMAIN_DOWNLOAD, "FMS Request Domain Download" },
{ HSE_FMS_REQUEST_DOMAIN_UPLOAD, "FMS Request Domain Upload" },
{ HSE_FMS_CREATE_PROGRAM_INVOCATION, "FMS Create Program Invocation" },
{ HSE_FMS_DELETE_PROGRAM_INVOCATION, "FMS Delete Program Invocation" },
{ HSE_FMS_START, "FMS Start" },
{ HSE_FMS_STOP, "FMS Stop" },
{ HSE_FMS_RESUME, "FMS Resume" },
{ HSE_FMS_RESET, "FMS Reset" },
{ HSE_FMS_KILL, "FMS Kill" },
{ HSE_FMS_ALTER_EVENT_CONDITION_MONITORING,
"FMS Alter Event Condition Monitoring" },
{ HSE_FMS_ACKNOWLEDGE_EVENT_NOTIFICATION,
"FMS Acknowledge Event Notification" },
{ HSE_FMS_INITIATE_PUT_OD, "FMS Initiate Put OD" },
{ HSE_FMS_PUT_OD, "FMS Put OD" },
{ HSE_FMS_TERMINATE_PUT_OD, "FMS Terminate Put OD" },
{ HSE_FMS_GENERIC_INITIATE_DOWNLOAD_SEQUENCE,
"FMS Generic Initiate Download Sequence" },
{ HSE_FMS_GENERIC_DOWNLOAD_SEGMENT, "FMS Generic Download Segment" },
{ HSE_FMS_GENERIC_TERMINATE_DOWNLOAD_SEQUENCE,
"FMS Generic Terminate Download Sequence" },
{ HSE_FMS_READ_WITH_SUBINDEX, "FMS Read with Subindex" },
{ HSE_FMS_WRITE_WITH_SUBINDEX, "FMS Write with Subindex" },
{ HSE_FMS_INITIATE, "FMS Initiate" },
{ 0, NULL }
};
static value_string_ext names_fms_confirmed_ext = VALUE_STRING_EXT_INIT(names_fms_confirmed);
static const value_string names_lan_unconfirmed[] = {
{ LAN_DIAG, "Diagnostic Message" },
{ 0, NULL }
};
static const value_string names_lan_confirmed[] = {
{ LAN_GET_INFO, "LAN Redundancy Get Information" },
{ LAN_PUT_INFO, "LAN Redundancy Put Information" },
{ LAN_GET_STATISTICS, "LAN Redundancy Get Statistics" },
{ 0, NULL }
};
static const value_string names_transmission_interface[] = {
{ 0, "Interface A" },
{ 1, "Interface B" },
{ 0, NULL }
};
static const value_string names_err_class[] = {
{ 1, "vfd state" },
{ 2, "application reference" },
{ 3, "definition" },
{ 4, "resource" },
{ 5, "service" },
{ 6, "access" },
{ 7, "od" },
{ 8, "other" },
{ 9, "reject" },
{ 10, "h1 sm reason code" },
{ 11, "fms initiate" },
{ 0, NULL }
};
static value_string_ext names_err_class_ext = VALUE_STRING_EXT_INIT(names_err_class);
static const value_string names_err_code_vfd_state[] = {
{ 0, "other" },
{ 0, NULL }
};
static const value_string names_err_code_appl_ref[] = {
{ 0, "other" },
{ 1, "object undefined" },
{ 2, "object attributes inconsistent" },
{ 3, "name already exists" },
{ 0, NULL }
};
static const value_string names_err_code_def[] = {
{ 0, "other" },
{ 1, "application unreachable" },
{ 0, NULL }
};
static const value_string names_err_code_res[] = {
{ 0, "other" },
{ 1, "memory unavailable" },
{ 2, "max outstanding requests per session exceeded" },
{ 3, "max sessions exceeded" },
{ 4, "object creation failure" },
{ 0, NULL }
};
static const value_string names_err_code_srv[] = {
{ 0, "other" },
{ 1, "object state conflict" },
{ 2, "pdu size" },
{ 3, "object constraint conflict" },
{ 4, "parameter inconsistent" },
{ 5, "illegal parameter" },
{ 6, "unsupported service" },
{ 7, "unsupported version" },
{ 8, "invalid options" },
{ 9, "unsupported protocol" },
{ 10, "reserved" },
{ 11, "key parameter mismatch" },
{ 12, "assignments already made" },
{ 13, "unsupported device redundancy state" },
{ 14, "response time-out" },
{ 15, "duplicate PD Tag detected" },
{ 0, NULL }
};
static value_string_ext names_err_code_srv_ext = VALUE_STRING_EXT_INIT(names_err_code_srv);
static const value_string names_err_code_access[] = {
{ 0, "other" },
{ 1, "object invalidated" },
{ 2, "hardware fault" },
{ 3, "object access denied" },
{ 4, "invalid address" },
{ 5, "object attribute inconsistent" },
{ 6, "object access unsupported" },
{ 7, "object non existent" },
{ 8, "type conflict" },
{ 9, "named access unsupported" },
{ 10, "access to element unsupported" },
{ 11, "config access already open" },
{ 12, "reserved" },
{ 13, "unrecognized FDA Address" },
{ 0, NULL }
};
static value_string_ext names_err_code_access_ext = VALUE_STRING_EXT_INIT(names_err_code_access);
static const value_string names_err_code_od[] = {
{ 0, "other" },
{ 1, "name length overflow" },
{ 2, "od overflow" },
{ 3, "od write protected" },
{ 4, "extension length overflow" },
{ 5, "od description length overflow" },
{ 6, "operational problem" },
{ 7, "hse to h1 format conversion not supported" },
{ 0, NULL }
};
static const value_string names_err_code_other[] = {
{ 0, "other" },
{ 0, NULL }
};
static const value_string names_err_code_reject[] = {
{ 5, "pdu size" },
{ 0, NULL }
};
static const value_string names_err_code_h1_sm_reason_code[] = {
{ 0, "other" },
{ 1, "DLL Error - insufficient resources" },
{ 2, "DLL Error - sending queue full" },
{ 3, "DLL Error - time-out before transmission" },
{ 4, "DLL Error - reason unspecified" },
{ 5, "Device failed to respond to SET_PD_TAG" },
{ 6, "Device failed to respond to WHO_HAS_PD_TAG" },
{ 7, "Device failed to respond to SET_ADDR" },
{ 8, "Device failed to respond to IDENTIFY" },
{ 9, "Device failed to respond to ENABLE_SM_OP" },
{ 10, "Device failed to respond to CLEAR_ADDRESS" },
{ 11, "Multiple Response from WHO_HAS_PD_TAG" },
{ 12, "Non-Matching PD_TAG from WHO_HAS_PD_TAG" },
{ 13, "Non-Matching PD_TAG from IDENTIFY" },
{ 14, "Non-Matching DEV_ID from IDENTIFY" },
{ 15, "Remote Error Invalid State" },
{ 16, "Remote Error PD-Tag doesn't match" },
{ 17, "Remote Error Dev-ID doesn't match" },
{ 18, "Remote Error SMIB object write failed" },
{ 19, "Remote Error Starting SM Operational" },
{ 0, NULL }
};
static value_string_ext names_err_code_h1_sm_reason_code_ext = VALUE_STRING_EXT_INIT(names_err_code_h1_sm_reason_code);
static const value_string names_err_code_fms_init[] = {
{ 0, "other" },
{ 1, "max-fms-pdu-size-insufficient" },
{ 2, "feature-not-supported" },
{ 3, "version-od-incompatible" },
{ 4, "user-initiate-denied" },
{ 5, "password-error" },
{ 6, "profile-number-incompatible" },
{ 0, NULL }
};
static const char *
val_to_str_err_code(guint8 errclass, guint8 code)
{
switch (errclass) {
case 1:
return (val_to_str_const(code, names_err_code_vfd_state, "Unknown"));
case 2:
return (val_to_str_const(code, names_err_code_appl_ref, "Unknown"));
case 3:
return (val_to_str_const(code, names_err_code_def, "Unknown"));
case 4:
return (val_to_str_const(code, names_err_code_res, "Unknown"));
case 5:
return (val_to_str_ext_const(code, &names_err_code_srv_ext, "Unknown"));
case 6:
return (val_to_str_ext_const(code, &names_err_code_access_ext, "Unknown"));
case 7:
return (val_to_str_const(code, names_err_code_od, "Unknown"));
case 8:
return (val_to_str_const(code, names_err_code_other, "Unknown"));
case 9:
return (val_to_str_const(code, names_err_code_reject, "Unknown"));
case 10:
return (val_to_str_ext_const(code,
&names_err_code_h1_sm_reason_code_ext, "Unknown"));
case 11:
return (val_to_str_const(code, names_err_code_fms_init, "Unknown"));
default:
return ("Unknown");
}
}
/*
* 6.5.1.1. FDA Open Session (Confirmed Service Id = 1)
* 6.5.1.1.1. Request Message Parameters
*/
static void
dissect_ff_msg_fda_open_sess_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Open Session Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_open_sess_req, NULL, "FDA Open Session Request");
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_sess_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_max_buf_siz, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_max_msg_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_nma_conf_use, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_inactivity_close_time, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_transmit_delay_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.1.1.2. Response Message Parameters
*/
static void
dissect_ff_msg_fda_open_sess_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Open Session Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_open_sess_rsp, NULL, "FDA Open Session Response");
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_sess_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_max_buf_siz, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_max_msg_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_nma_conf_use, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_inactivity_close_time, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_transmit_delay_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_rsp_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.1.1.3. Error Message Parameters
*/
static void
dissect_ff_msg_fda_open_sess_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Open Session Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_open_sess_err, NULL, "FDA Open Session Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fda_open_sess_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fda_open_sess_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.1.2. FDA Idle (Confirmed Service Id = 3)
* 6.5.1.2.1. Request Message Parameters
*/
static void
dissect_ff_msg_fda_idle_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Idle Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_idle_req, NULL, "FDA Idle Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.1.2.2. Response Message Parameters
*/
static void
dissect_ff_msg_fda_idle_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Idle Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_idle_rsp, NULL, "FDA Idle Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.1.2.3. Error Message Parameters
*/
static void
dissect_ff_msg_fda_idle_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FDA Idle Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fda_idle_err, NULL, "FDA Idle Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fda_idle_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fda_idle_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fda_idle_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fda_idle_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.1. SM Find Tag Query (Unconfirmed Service Id = 1)
* 6.5.2.1.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_find_tag_query_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Find Tag Query Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_find_tag_query_req, NULL, "SM Find Tag Query Request");
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_query_req_query_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_query_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_query_req_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_query_req_vfd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.2. SM Find Tag Reply (Unconfirmed Service Id = 2)
* 6.5.2.2.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_find_tag_reply_req_dup_detection_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 3-8: Reserved, set to 0.
* Bit 2: 1 = Duplicate PD Tag Detected
* 0 = Duplicate PD Tag Not Detected
* Bit 1: 1 = Duplicate Device Index Detected
* 0 = Duplicate Device Index Not Detected
*/
static int * const dup_flags[] = {
&hf_ff_sm_find_tag_reply_dup_reserved,
&hf_ff_sm_find_tag_reply_dup_pd_tag,
&hf_ff_sm_find_tag_reply_dup_device,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_find_tag_reply_dup, ett_ff_sm_find_tag_reply_req_dup_detection_state, dup_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_find_tag_reply_req_list_of_fda_addr_selectors(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint16 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2 * value,
ett_ff_sm_find_tag_reply_req_list_of_fda_addr_selectors, NULL,
"List of FDA Address Selectors (%u bytes)", 2 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_fda_addr_selector,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
}
static void
dissect_ff_msg_sm_find_tag_reply_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint16 NumOfFDAAddrSelectors;
col_set_str(pinfo->cinfo, COL_INFO, "SM Find Tag Reply Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_find_tag_reply_req, NULL, "SM Find Tag Reply Request");
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_query_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_h1_node_addr, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_fda_addr_link_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_vfd_ref, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_od_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_ip_addr, tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_od_ver, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
dissect_ff_msg_sm_find_tag_reply_req_dup_detection_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
NumOfFDAAddrSelectors = tvb_get_ntohs(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_num_of_fda_addr_selectors,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (NumOfFDAAddrSelectors) {
dissect_ff_msg_sm_find_tag_reply_req_list_of_fda_addr_selectors(tvb,
offset, sub_tree, NumOfFDAAddrSelectors);
offset += 2 * NumOfFDAAddrSelectors;
length -= 2 * NumOfFDAAddrSelectors;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.3. SM Identify (Confirmed Service Id = 3)
* 6.5.2.3.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_id_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Identify Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_id_req, NULL, "SM Identify Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.3.2. Response Message Parameters
*/
static void
dissect_ff_msg_sm_id_rsp_h1_node_addr(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
proto_tree *sub_tree;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
ett_ff_sm_id_rsp_h1_node_addr, NULL, "H1 Node Address Version Number (%u bytes)", 2);
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_h1_node_addr_ver_num_h1_node_addr,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_h1_node_addr_ver_num_ver_num, tvb, offset, 1, ENC_BIG_ENDIAN);
/*offset += 1;*/
}
static void
dissect_ff_msg_sm_id_rsp_entries_node_addr(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_sm_id_rsp_entries_node_addr, NULL, "Version Number List (%u bytes)", 4 * value);
for (d = 0; d < value * 2; d++) {
dissect_ff_msg_sm_id_rsp_h1_node_addr(tvb, offset, sub_tree);
offset += 2;
}
}
static void
dissect_ff_msg_sm_id_rsp_h1_live_list(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
proto_tree *sub_tree;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
ett_ff_sm_id_rsp_h1_live_list, NULL, "H1 Live-list Version Number (%u bytes)", 4);
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_h1_live_list_h1_link_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_h1_live_list_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_h1_live_list_ver_num, tvb, offset, 1, ENC_BIG_ENDIAN);
/*offset += 1;*/
}
static void
dissect_ff_msg_sm_id_rsp_entries_link_id(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_sm_id_rsp_entries_h1_live_list, NULL, "Version Number List (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
dissect_ff_msg_sm_id_rsp_h1_live_list(tvb, offset, sub_tree);
offset += 4;
}
}
static void
dissect_ff_msg_sm_id_rsp_smk_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 2-8:
* 0 = Reserved
* 1 = NO_TAG
* 2 = OPERATIONAL
* 3 127 = Reserved
* Bit 1:
* 0 = Not Synchronized with SNTP Time Server
* 1 = Synchronized with SNTP Time Server
*/
static int * const state_flags[] = {
&hf_ff_sm_id_rsp_smk_state_name,
&hf_ff_sm_id_rsp_smk_state_sync,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_id_rsp_smk_state, ett_ff_sm_id_rsp_smk_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_id_rsp_dev_type(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bit 8 = Linking Device
* Bit 7 = I/O Gateway
* Bit 6 = HSE Field Device
* Bit 5 = H1 Device
* Bit 4 = Reserved
* Bits 1 - 3 Redundant Device Type Capability*
* 0 = Type D-1 Device
* 1 = Type D-2 Device
* 2 = Type D-3 Device
* 3 = Type D-3 and Type D-2 Device
* 4 = Not used
* 5 = Type D-2 and Type D-1 Device
* 6 = Type D-3 and Type D-1 Device
* 7 = Type D-3 and D-2 and Type D-1 Device
*/
static int * const device_flags[] = {
&hf_ff_sm_id_rsp_dev_type_link,
&hf_ff_sm_id_rsp_dev_type_iogateway,
&hf_ff_sm_id_rsp_dev_type_hse,
&hf_ff_sm_id_rsp_dev_type_h1,
&hf_ff_sm_id_rsp_dev_type_reserved,
&hf_ff_sm_id_rsp_dev_type_redundant_caps,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_id_rsp_dev_type, ett_ff_sm_id_rsp_dev_type, device_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_id_rsp_dev_redundancy_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 5-8 = Reserved, set to 0
* Bits 3 & 4 Device Redundancy Role
* 0 = Reserved
* 1 = Primary
* 2 = Secondary
* Bits 1 & 2 Assigned Redundant Device Type*
* 0 = Type D-1 Device
* 1 = Type D-2 Device
* 2 = Type D-3 Device
*/
static int * const state_flags[] = {
&hf_ff_sm_id_rsp_dev_redundancy_state_reserved,
&hf_ff_sm_id_rsp_dev_redundancy_state_role,
&hf_ff_sm_id_rsp_dev_redundancy_state_type,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_id_rsp_dev_redundancy_state, ett_ff_sm_id_rsp_dev_redundancy_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_id_rsp_dup_detection_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 3-8: Reserved, set to 0.
* Bit 2: 1 = Duplicate PD Tag Detected
* 0 = Duplicate PD Tag Not Detected
* Bit 1: 1 = Duplicate Device Index Detected
* 0 = Duplicate Device Index Not Detected
*/
static int * const dup_flags[] = {
&hf_ff_sm_id_rsp_dup_detection_state_reserved,
&hf_ff_sm_id_rsp_dup_detection_state_pd_tag,
&hf_ff_sm_id_rsp_dup_detection_state_device,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_id_rsp_dup_detection_state, ett_ff_sm_id_rsp_dup_detection_state, dup_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_id_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree, guint32 FDAAddress)
{
proto_tree *sub_tree;
guint32 NumOfEntriesInVerNumList;
col_set_str(pinfo->cinfo, COL_INFO, "SM Identify Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_sm_id_rsp, NULL, "SM Identify Response");
dissect_ff_msg_sm_id_rsp_smk_state(tvb, offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_id_rsp_dev_type(tvb, offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_id_rsp_dev_redundancy_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_id_rsp_dup_detection_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_max_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_operational_ip_addr, tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_hse_repeat_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_lr_port, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_annunc_ver_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_hse_dev_ver_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
NumOfEntriesInVerNumList = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_num_of_entries, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (NumOfEntriesInVerNumList) {
guint16 LinkId;
/* 11111111 11111111 00000000 00000000 */
LinkId = (guint16)(FDAAddress >> 16);
if (LinkId) {
dissect_ff_msg_sm_id_rsp_entries_node_addr(tvb,
offset, sub_tree, NumOfEntriesInVerNumList);
} else {
dissect_ff_msg_sm_id_rsp_entries_link_id(tvb,
offset, sub_tree, NumOfEntriesInVerNumList);
}
offset += 4 * NumOfEntriesInVerNumList;
length -= 4 * NumOfEntriesInVerNumList;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.3.3. Error Message Parameters
*/
static void
dissect_ff_msg_sm_id_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "SM Identify Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_sm_id_err, NULL, "SM Identify Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_id_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_sm_id_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.4. SM Clear Address (Confirmed Service Id = 12)
* 6.5.2.4.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_clear_addr_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Address Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_id_err, NULL, "SM Clear Address Request");
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_req_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_req_interface_to_clear, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.4.2. Response Message Parameters
*/
static void
dissect_ff_msg_sm_clear_addr_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Address Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_clear_addr_rsp, NULL, "SM Clear Address Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.4.3. Error Message Parameters
*/
static void
dissect_ff_msg_sm_clear_addr_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Address Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_clear_addr_err, NULL, "SM Clear Address Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_sm_clear_addr_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.5. SM Set Assignment Info (Confirmed Service Id = 14)
* 6.5.2.5.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_set_assign_info_req_dev_redundancy_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 5-8 = Reserved, set to 0
* Bits 3 & 4 Type D-2 Device Redundancy Role
* 0 = Not used
* 1 = Type D-2 Device Primary
* 2 = Type D-2 Device Secondary
* Bits 1 & 2 Assigned Device Redundancy Type
* 0 = Type D-1 Device
* 1 = Type D-2 Device
* 2 = Type D-3 Device
*/
static int * const state_flags[] = {
&hf_ff_sm_set_assign_info_req_dev_redundancy_state_reserved,
&hf_ff_sm_set_assign_info_req_dev_redundancy_state_role,
&hf_ff_sm_set_assign_info_req_dev_redundancy_state_type,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_set_assign_info_req_dev_redundancy_state, ett_ff_sm_set_assign_info_req_dev_redundancy_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_set_assign_info_req_clear_dup_detection_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 3-8: Reserved, set to 0.
* Bit 2: 1 = Do not clear Duplicate PD Tag Detected
* 0 = Clear Duplicate PD Tag Detected
* Bit 1: 1 = Do not clear Duplicate Device Index Detected
* 0 = Clear Duplicate Device Index Detected
*/
static int * const state_flags[] = {
&hf_ff_sm_set_assign_info_req_clear_dup_detection_state_reserved,
&hf_ff_sm_set_assign_info_req_clear_dup_detection_state_pd_tag,
&hf_ff_sm_set_assign_info_req_clear_dup_detection_state_device_index,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_set_assign_info_req_clear_dup_detection_state, ett_ff_sm_set_assign_info_req_clear_dup_detection_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_set_assign_info_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Set Assignment Info Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_set_assign_info_req, NULL, "SM Set Assignment Info Request");
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_h1_new_addr, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
dissect_ff_msg_sm_set_assign_info_req_dev_redundancy_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_lr_port, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_hse_repeat_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_max_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_operational_ip_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
dissect_ff_msg_sm_set_assign_info_req_clear_dup_detection_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.5.2. Response Message Parameters
*/
static void
dissect_ff_msg_sm_set_assign_info_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Set Assignment Info Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_set_assign_info_rsp, NULL, "SM Set Assignment Info Response");
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_rsp_max_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_rsp_hse_repeat_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.5.3. Error Message Parameters
*/
static void
dissect_ff_msg_sm_set_assign_info_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "SM Set Assignment Info Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_set_assign_info_err, NULL, "SM Set Assignment Info Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_sm_set_assign_info_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.6. SM Clear Assignment Info (Confirmed Service Id = 15)
* 6.5.2.6.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_clear_assign_info_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Assignment Info Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_clear_assign_info_req, NULL, "SM Clear Assignment Info Request");
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_req_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.6.2. Response Message Parameters
*/
static void
dissect_ff_msg_sm_clear_assign_info_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Assignment Info Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_clear_assign_info_rsp, NULL, "SM Clear Assignment Info Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.6.3. Error Message Parameters
*/
static void
dissect_ff_msg_sm_clear_assign_info_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "SM Clear Assignment Info Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_clear_assign_info_err, NULL, "SM Clear Assignment Info Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_sm_clear_assign_info_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.2.7. SM Device Annunciation (Unconfirmed Service Id = 16)
* 6.5.2.7.1. Request Message Parameters
*/
static void
dissect_ff_msg_sm_dev_annunc_req_h1_node_addr(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
proto_tree *sub_tree;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
ett_ff_sm_dev_annunc_req_h1_node_addr, NULL, "H1 Node Address Version Number (%u bytes)", 2);
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_h1_node_addr,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_ver_num,
tvb, offset, 1, ENC_BIG_ENDIAN);
/*offset += 1;*/
}
static void
dissect_ff_msg_sm_dev_annunc_req_entries_node_addr(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_sm_dev_annunc_req_entries_node_addr, NULL, "Version Number List (%u bytes)", 4 * value);
for (d = 0; d < value * 2; d++) {
dissect_ff_msg_sm_dev_annunc_req_h1_node_addr(tvb, offset, sub_tree);
offset += 2;
}
}
static void
dissect_ff_msg_sm_dev_annunc_req_h1_live_list(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
proto_tree *sub_tree;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
ett_ff_sm_dev_annunc_req_h1_live_list, NULL, "H1 Live-list Version Number (%u bytes)", 4);
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_h1_live_list_h1_link_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_h1_live_list_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_h1_live_list_ver_num, tvb, offset, 1, ENC_BIG_ENDIAN);
/*offset += 1;*/
}
static void
dissect_ff_msg_sm_dev_annunc_req_entries_link_id(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_sm_dev_annunc_req_entries_h1_live_list, NULL, "Version Number List (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
dissect_ff_msg_sm_dev_annunc_req_h1_live_list(tvb, offset, sub_tree);
offset += 4;
}
}
static void
dissect_ff_msg_sm_dev_annunc_req_smk_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 2-8:
* 0 = Reserved
* 1 = NO_TAG
* 2 = OPERATIONAL
* 3 127 = Reserved
* Bit 1:
* 0 = Not Synchronized with SNTP Time Server
* 1 = Synchronized with SNTP Time Server
*/
static int * const state_flags[] = {
&hf_ff_sm_dev_annunc_req_smk_state_name,
&hf_ff_sm_dev_annunc_req_smk_state_sync,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_dev_annunc_req_smk_state, ett_ff_sm_dev_annunc_req_smk_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_dev_annunc_req_dev_type(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bit 8 = Linking Device
* Bit 7 = I/O Gateway
* Bit 6 = HSE Field Device
* Bit 5 = H1 Device
* Bit 4 = Reserved
* Bits 1 - 3 Redundant Device Type Capability*
* 0 = Type D-1 Device
* 1 = Type D-2 Device
* 2 = Type D-3 Device
* 3 = Type D-3 and Type D-2 Device
* 4 = Not used
* 5 = Type D-2 and Type D-1 Device
* 6 = Type D-3 and Type D-1 Device
* 7 = Type D-3 and D-2 and Type D-1 Device
*/
static int * const device_flags[] = {
&hf_ff_sm_dev_annunc_req_dev_type_link,
&hf_ff_sm_dev_annunc_req_dev_type_iogateway,
&hf_ff_sm_dev_annunc_req_dev_type_hse,
&hf_ff_sm_dev_annunc_req_dev_type_h1,
&hf_ff_sm_dev_annunc_req_dev_type_reserved,
&hf_ff_sm_dev_annunc_req_dev_type_redundant_caps,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_dev_annunc_req_dev_type, ett_ff_sm_dev_annunc_req_dev_type, device_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_dev_annunc_req_dev_redundancy_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 5-8 = Reserved, set to 0
* Bits 3 & 4 Device Redundancy Role
* 0 = Reserved
* 1 = Primary
* 2 = Secondary
* Bits 1 & 2 Assigned Redundant Device Type*
* 0 = Type D-1 Device
* 1 = Type D-2 Device
* 2 = Type D-3 Device
*/
static int * const device_flags[] = {
&hf_ff_sm_dev_annunc_req_dev_redundancy_state_reserved,
&hf_ff_sm_dev_annunc_req_dev_redundancy_state_role,
&hf_ff_sm_dev_annunc_req_dev_redundancy_state_type,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_dev_annunc_req_dev_redundancy_state, ett_ff_sm_dev_annunc_req_dev_redundancy_state, device_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_dev_annunc_req_dup_detection_state(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 3-8: Reserved, set to 0.
* Bit 2: 1 = Duplicate PD Tag Detected
* 0 = Duplicate PD Tag Not Detected
* Bit 1: 1 = Duplicate Device Index Detected
* 0 = Duplicate Device Index Not Detected
*/
static int * const state_flags[] = {
&hf_ff_sm_dev_annunc_req_dup_detection_state_reserved,
&hf_ff_sm_dev_annunc_req_dup_detection_state_pd_tag,
&hf_ff_sm_dev_annunc_req_dup_detection_state_device,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_sm_dev_annunc_req_dup_detection_state, ett_ff_sm_dev_annunc_req_dup_detection_state, state_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_sm_dev_annunc_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree, guint32 FDAAddress)
{
proto_tree *sub_tree;
guint32 NumOfEntriesInVerNumList;
col_set_str(pinfo->cinfo, COL_INFO, "SM Device Annunciation Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_sm_dev_annunc_req, NULL, "SM Device Annunciation Request");
dissect_ff_msg_sm_dev_annunc_req_smk_state(tvb, offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_dev_annunc_req_dev_type(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_dev_annunc_req_dev_redundancy_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
dissect_ff_msg_sm_dev_annunc_req_dup_detection_state(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_max_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_operational_ip_addr, tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_dev_id, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_hse_repeat_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_lr_port, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_annunc_ver_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_hse_dev_ver_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
NumOfEntriesInVerNumList = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_num_of_entries, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (NumOfEntriesInVerNumList) {
guint16 LinkId;
/* 11111111 11111111 00000000 00000000 */
LinkId = (guint16)(FDAAddress >> 16);
if (LinkId) {
dissect_ff_msg_sm_dev_annunc_req_entries_node_addr(tvb,
offset, sub_tree, NumOfEntriesInVerNumList);
} else {
dissect_ff_msg_sm_dev_annunc_req_entries_link_id(tvb,
offset, sub_tree, NumOfEntriesInVerNumList);
}
offset += 4 * NumOfEntriesInVerNumList;
length -= 4 * NumOfEntriesInVerNumList;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.2. FMS Initiate (Confirmed Service Id = 96)
* 6.5.3.2.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_init_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_init_req, NULL, "FMS Initiate Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_conn_opt, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_access_protection_supported_calling,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_passwd_and_access_grps_calling,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_ver_od_calling, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_prof_num_calling, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.2.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_init_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_rep, NULL, "FMS Initiate Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_init_rsp_ver_od_called, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_rsp_prof_num_called, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.2.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_init_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_init_err, NULL, "FMS Initiate Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_init_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_init_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.3. FMS Abort (Unconfirmed Service Id = 112)
* 6.5.3.3.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_abort_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Abort Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_abort_req, NULL, "FMS Abort Request");
proto_tree_add_item(sub_tree, hf_ff_fms_abort_req_detail, tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_fms_abort_req_abort_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_abort_req_reason_code, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_abort_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.4. FMS Status (Confirmed Service Id = 0)
* 6.5.3.4.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_status_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Status Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_status_req, NULL, "FMS Status Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.4.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_status_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Status Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_status_rsp, NULL, "FMS Status Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_status_rsp_logical_status, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_status_rsp_physical_status, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_status_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_status_rsp_local_detail, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.4.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_status_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Status Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_status_err, NULL, "FMS Status Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_status_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_status_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_status_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_status_err_additional_desc, tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.5. FMS Unsolicited Status (Unconfirmed Service Id = 1)
* 6.5.3.5.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_unsolicited_status_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Unsolicited Status Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_unsolicited_status_req, NULL, "FMS Unsolicited Status Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_unsolicited_status_req_logical_status, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_unsolicited_status_req_physical_status,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_unsolicited_status_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_unsolicited_status_req_local_detail, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.6. FMS Identify (Confirmed Service Id = 1)
* 6.5.3.6.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_id_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Identify Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_id_req, NULL, "FMS Identify Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.6.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_id_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Identify Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_id_rsp, NULL, "FMS Identify Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_id_rsp_vendor_name, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_fms_id_rsp_model_name, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_fms_id_rsp_revision, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.6.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_id_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Identify Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_id_err, NULL, "FMS Identify Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_id_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_id_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_id_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_id_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.7. FMS Get OD (Confirmed Service Id = 4)
* 6.5.3.7.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_get_od_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Get OD Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_get_od_req, NULL, "FMS Get OD Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_req_all_attrs, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_req_start_idx_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.7.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_get_od_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Get OD Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_get_od_rsp, NULL, "FMS Get OD Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_rsp_more_follows, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_rsp_num_of_obj_desc, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_get_od_rsp_object_descriptions, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.7.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_get_od_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Get OD Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_get_od_err, NULL, "FMS Get OD Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_get_od_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_get_od_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_get_od_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.8. FMS Initiate Put OD (Confirmed Service Id = 28)
* 6.5.3.8.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_init_put_od_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Put OD Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_put_od_req, NULL, "FMS Initiate Put OD Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_init_put_od_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_put_od_req_consequence, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.8.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_init_put_od_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Put OD Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_put_od_rsp, NULL, "FMS Initiate Put OD Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.8.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_init_put_od_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Put OD Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_put_od_err, NULL, "FMS Initiate Put OD Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_init_put_od_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_init_put_od_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_put_od_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_init_put_od_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.9. FMS Put OD (Confirmed Service Id = 29)
* 6.5.3.9.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_put_od_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Put OD Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_put_od_req, NULL, "FMS Put OD Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_put_od_req_num_of_obj_desc, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
proto_tree_add_item(sub_tree, hf_ff_fms_put_od_req_object_descriptions, tvb, offset, length, ENC_NA);
}
/*
* 6.5.3.9.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_put_od_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Put OD Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_put_od_rsp, NULL, "FMS Put OD Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.9.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_put_od_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Put OD Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_put_od_err, NULL, "FMS Put OD Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_put_od_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_put_od_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_put_od_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_put_od_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.10. FMS Terminate Put OD (Confirmed Service Id = 30)
* 6.5.3.10.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_put_od_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Put OD Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_put_od_req, NULL, "FMS Terminate Put OD Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.10.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_put_od_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Put OD Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_put_od_rsp, NULL, "FMS Terminate Put OD Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.10.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_put_od_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Put OD Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_put_od_err, NULL, "FMS Terminate Put OD Error");
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_put_od_err_index, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_put_od_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_terminate_put_od_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_put_od_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_put_od_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.11. FMS Generic Initiate Download Sequence
* (Confirmed Service Id = 31)
* 6.5.3.11.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_generic_init_download_sequence_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Initiate Download Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_init_download_seq_req, NULL, "FMS Generic Initiate Download Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_init_download_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.11.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_generic_init_download_sequence_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Initiate Download Sequence Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_init_download_seq_rep, NULL, "FMS Generic Initiate Download Sequence Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.11.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_generic_init_download_sequence_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Initiate Download Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_init_download_seq_err, NULL, "FMS Generic Initiate Download Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_init_download_seq_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_gen_init_download_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_init_download_seq_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_init_download_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.12. FMS Generic Download Segment (Confirmed Service Id = 32)
* 6.5.3.12.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_generic_download_segment_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Download Segment Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_download_seg_req, NULL, "FMS Generic Download Segment Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_download_seg_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_download_seg_req_more_follows, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_gen_download_seg_req_load_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.12.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_generic_download_segment_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Download Segment Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_download_seg_rsp, NULL, "FMS Generic Download Segment Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.12.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_generic_download_segment_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Download Segment Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_download_seg_err, NULL, "FMS Generic Download Segment Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_download_seg_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_gen_download_seg_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_download_seg_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_download_seg_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.13. FMS Generic Terminate Download Sequence
* (Confirmed Service Id = 33)
* 6.5.3.13.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_generic_terminate_download_sequence_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Terminate Download Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_terminate_download_seq_req, NULL, "FMS Generic Terminate Download Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_terminate_download_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.13.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_generic_terminate_download_sequence_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Terminate Download Sequence Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_terminate_download_seq_rsp, NULL, "FMS Generic Terminate Download Sequence Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_terminate_download_seq_rsp_final_result,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.13.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_generic_terminate_download_sequence_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Generic Terminate Download Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_gen_terminate_download_seq_err, NULL, "FMS Generic Terminate Download Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_terminate_download_seq_err_err_class,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_gen_terminate_download_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_terminate_download_seq_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_gen_terminate_download_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.14. FMS Initiate Download Sequence (Confirmed Service Id = 9)
* 6.5.3.14.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_init_download_sequence_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Download Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_download_seq_req, NULL, "FMS Initiate Download Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_init_download_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.14.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_init_download_sequence_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Download Sequence Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_download_seq_rsp, NULL, "FMS Initiate Download Sequence Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.14.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_init_download_sequence_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Download Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_download_seq_err, NULL, "FMS Initiate Download Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_init_download_seq_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_init_download_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_download_seq_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_download_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.15. FMS Download Segment (Confirmed Service Id = 10)
* 6.5.3.15.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_download_segment_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Download Segment Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_download_seg_req, NULL, "FMS Download Segment Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_download_seg_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.15.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_download_segment_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Download Segment Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_download_seg_rsp, NULL, "FMS Download Segment Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_download_seg_rsp_more_follows, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_download_seg_rsp_load_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.15.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_download_segment_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Download Segment Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_download_seg_err, NULL, "FMS Download Segment Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_download_seg_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_download_seg_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_download_seg_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_download_seg_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.16. FMS Terminate Download Sequence (Confirmed Service Id = 11)
* 6.5.3.16.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_download_sequence_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Download Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_download_seq_req, NULL, "FMS Terminate Download Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_download_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_download_seq_req_final_result,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.16.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_download_sequence_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Download Sequence Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_download_seq_rsp, NULL, "FMS Terminate Download Sequence Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.16.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_download_sequence_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Download Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_download_seq_err, NULL, "FMS Terminate Download Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_download_seq_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_terminate_download_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_download_seq_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_download_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.17. FMS Initiate Upload Sequence (Confirmed Service Id = 12)
* 6.5.3.17.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_init_upload_seq_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Upload Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_upload_seq_req, NULL, "FMS Initiate Upload Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_init_upload_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.17.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_init_upload_seq_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Upload Sequence Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_upload_seq_rsp, NULL, "FMS Initiate Upload Sequence Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.17.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_init_upload_seq_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Initiate Upload Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_init_upload_seq_err, NULL, "FMS Initiate Upload Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_init_upload_seq_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_init_upload_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_init_upload_seq_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_init_upload_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.18. FMS Upload Segment (Confirmed Service Id = 13)
* 6.5.3.18.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_upload_segment_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Upload Segment Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_upload_seg_req, NULL, "FMS Upload Segment Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_upload_seg_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.18.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_upload_segment_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Upload Segment Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_upload_seg_rsp, NULL, "FMS Upload Segment Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_upload_seg_rsp_more_follows, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_upload_seg_rsp_final_result, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.18.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_upload_segment_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Upload Segment Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_upload_seg_err, NULL, "FMS Upload Segment Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_upload_seg_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_upload_seg_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_upload_seg_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_upload_seg_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.19. FMS Terminate Upload Sequence (Confirmed Service Id = 14)
* 6.5.3.19.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_upload_seq_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Upload Sequence Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_upload_seq_req, NULL, "FMS Terminate Upload Sequence Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_upload_seq_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.19.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_upload_seq_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Upload Sequence Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_upload_seq_rsp, NULL, "FMS Terminate Upload Sequence Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.19.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_terminate_upload_seq_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Terminate Upload Sequence Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_terminate_upload_seq_err, NULL, "FMS Terminate Upload Sequence Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_upload_seq_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_terminate_upload_seq_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_upload_seq_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_terminate_upload_seq_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.20. FMS Request Domain Download (Confirmed Service Id = 15)
* 6.5.3.20.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_download_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Download Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_download_req, NULL, "FMS Request Domain Download Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_download_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_download_req_additional_info,
tvb, offset, length, ENC_ASCII);
}
}
/*
* 6.5.3.20.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_download_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Download Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_download_rsp, NULL, "FMS Request Domain Download Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.20.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_download_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Download Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_download_err, NULL, "FMS Request Domain Download Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_download_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_req_dom_download_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_download_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_download_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.21. FMS Request Domain Upload (Confirmed Service Id = 16)
* 6.5.3.21.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_upload_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Upload Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_upload_req, NULL, "FMS Request Domain Upload Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_upload_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_upload_req_additional_info,
tvb, offset, length, ENC_ASCII);
}
}
/*
* 6.5.3.21.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_upload_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Upload Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_upload_rsp, NULL, "FMS Request Domain Upload Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.21.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_req_dom_upload_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Request Domain Upload Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_req_dom_upload_err, NULL, "FMS Request Domain Upload Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_upload_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_req_dom_upload_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_upload_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_req_dom_upload_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.22. FMS Create Program Invocation (Confirmed Service Id = 17)
* 6.5.3.22.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_create_pi_req_dom_idxes(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint16 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_fms_create_pi_req_list_of_dom_idxes, NULL, "List Of Domain Indexes (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_req_dom_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_fms_create_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint16 NumOfDomIdxes;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Create Program Invocation Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_create_pi_req, NULL, "FMS Create Program Invocation Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_req_reusable, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_req_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
NumOfDomIdxes = tvb_get_ntohs(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_req_num_of_dom_idxes, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (NumOfDomIdxes) {
dissect_ff_msg_fms_create_pi_req_dom_idxes(tvb,
offset, sub_tree, NumOfDomIdxes);
offset += 4 * NumOfDomIdxes;
length -= 4 * NumOfDomIdxes;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.22.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_create_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Create Program Invocation Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_create_pi_rsp, NULL, "FMS Create Program Invocation Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_rsp_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.22.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_create_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Create Program Invocation Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_create_pi_err, NULL, "FMS Create Program Invocation Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_create_pi_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_create_pi_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.23. FMS Delete Program Invocation (Confirmed Service Id = 18)
* 6.5.3.23.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_del_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Program Invocation Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_pi_req, NULL, "FMS Delete Program Invocation Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_del_pi_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.23.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_del_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Program Invocation Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_pi_rsp, NULL, "FMS Delete Program Invocation Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.23.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_del_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Program Invocation Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_pi_err, NULL, "FMS Delete Program Invocation Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_del_pi_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_del_pi_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_del_pi_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_del_pi_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.24. FMS Start (Confirmed Service Id = 19)
* 6.5.3.24.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_start_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Start Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_start_req, NULL, "FMS Start Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_start_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_start_req_execution_argument, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.24.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_start_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Start Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_start_rsp, NULL, "FMS Start Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.24.3. PI Error Message Parameters
*/
static void
dissect_ff_msg_fms_start_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Start Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_start_err, NULL, "FMS Start Error");
proto_tree_add_item(sub_tree,
hf_ff_fms_start_err_pi_state, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_start_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_start_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_start_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_start_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.25. FMS Stop (Confirmed Service Id = 20)
* 6.5.3.25.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_stop_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Stop Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_stop_req, NULL, "FMS Stop Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_stop_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.25.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_stop_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Stop Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_stop_rsp, NULL, "FMS Stop Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.25.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_stop_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Stop Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_stop_err, NULL, "FMS Stop Error");
proto_tree_add_item(sub_tree,
hf_ff_fms_stop_err_pi_state, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_stop_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_stop_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_stop_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_stop_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.26. FMS Resume (Confirmed Service Id = 21)
* 6.5.3.26.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_resume_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Resume Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_resume_req, NULL, "FMS Resume Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_resume_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_fms_resume_req_execution_argument, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.26.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_resume_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Resume Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_resume_rsp, NULL, "FMS Resume Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.26.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_resume_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Resume Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_resume_err, NULL, "FMS Resume Error");
proto_tree_add_item(sub_tree,
hf_ff_fms_resume_err_pi_state, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_resume_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_resume_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_resume_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_resume_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.27. FMS Reset (Confirmed Service Id = 22)
* 6.5.3.27.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_reset_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Reset Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_reset_req, NULL, "FMS Reset Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_reset_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.27.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_reset_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Reset Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_reset_rsp, NULL, "FMS Reset Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.27.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_reset_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Reset Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_reset_err, NULL, "FMS Reset Error");
proto_tree_add_item(sub_tree,
hf_ff_fms_reset_err_pi_state, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_reset_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_reset_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_reset_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_reset_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.28. FMS Kill (Confirmed Service Id = 23)
* 6.5.3.28.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_kill_pi_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Kill Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_kill_req, NULL, "FMS Kill Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_kill_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.28.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_kill_pi_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Kill Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_kill_rsp, NULL, "FMS Kill Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.28.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_kill_pi_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Kill Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_kill_err, NULL, "FMS Kill Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_kill_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_kill_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_kill_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_kill_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.29. FMS Read (Confirmed Service Id = 2)
* 6.5.3.29.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_read_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_read_req, NULL, "FMS Read Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_read_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.29.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_read_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_read_rsp, NULL, "FMS Read Response");
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
/*
* 6.5.3.29.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_read_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_read_err, NULL, "FMS Read Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_read_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_read_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_read_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_read_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.30. FMS Read with Subindex (Confirmed Service Id = 82)
* 6.5.3.30.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_read_subindex_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read with Subindex Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_read_with_subidx_req, NULL, "FMS Read with Subindex Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_read_with_subidx_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_read_with_subidx_req_subidx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.30.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_read_subindex_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read with Subindex Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_read_with_subidx_rsp, NULL, "FMS Read with Subindex Response");
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
/*
* 6.5.3.30.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_read_subindex_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Read with Subindex Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_read_with_subidx_err, NULL, "FMS Read with Subindex Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_read_with_subidx_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_read_with_subidx_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_read_with_subidx_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_read_with_subidx_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.31. FMS Write (Confirmed Service Id = 3)
* 6.5.3.31.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_write_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_write_req, NULL, "FMS Write Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_write_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.31.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_write_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_write_rsp, NULL, "FMS Write Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.31.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_write_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ff_fms_write_err, NULL, "FMS Write Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_write_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_fms_write_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_write_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree, hf_ff_fms_write_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.32. FMS Write with Subindex (Confirmed Service Id = 83)
* 6.5.3.32.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_write_subindex_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write with Subindex Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_write_with_subidx_req, NULL, "FMS Write with Subindex Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_write_with_subidx_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_write_with_subidx_req_subidx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.32.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_write_subindex_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write with Subindex Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_write_with_subidx_rsp, NULL, "FMS Write with Subindex Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.32.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_write_subindex_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Write with Subindex Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_write_with_subidx_err, NULL, "FMS Write with Subindex Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_write_with_subidx_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_write_with_subidx_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_write_with_subidx_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_write_with_subidx_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.33. FMS Define Variable List (Confirmed Service Id = 7)
* 6.5.3.33.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_def_variable_list_req_list_of_idxes(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_fms_def_variable_list_req_list_of_idxes, NULL, "List Of Indexes (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_fms_def_variable_list_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint32 NumOfIndexes;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Define Variable List Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_def_variable_list_req, NULL, "FMS Define Variable List Request");
NumOfIndexes = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_req_num_of_idxes, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (NumOfIndexes) {
dissect_ff_msg_fms_def_variable_list_req_list_of_idxes(tvb,
offset, sub_tree, NumOfIndexes);
offset += 4 * NumOfIndexes;
length -= 4 * NumOfIndexes;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.33.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_def_variable_list_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Define Variable List Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_def_variable_list_rsp, NULL, "FMS Define Variable List Response");
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_rsp_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.33.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_def_variable_list_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Define Variable List Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_def_variable_list_err, NULL, "FMS Define Variable List Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_def_variable_list_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_def_variable_list_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.34. FMS Delete Variable List (Confirmed Service Id = 8)
* 6.5.3.34.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_del_variable_list_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Variable List Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_variable_list_req, NULL, "FMS Delete Variable List Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_del_variable_list_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.34.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_del_variable_list_rsp(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Variable List Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_variable_list_rsp, NULL, "FMS Delete Variable List Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.34.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_del_variable_list_err(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Delete Variable List Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_del_variable_list_err, NULL, "FMS Delete Variable List Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_del_variable_list_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_del_variable_list_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_del_variable_list_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_del_variable_list_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.35. FMS Information Report (Unconfirmed Service Id = 0)
* 6.5.3.35.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_info_report_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Information Report Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_info_report_req, NULL, "FMS Information Report Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.36. FMS Information Report with Subindex
* (Unconfirmed Service Id = 16)
* 6.5.3.36.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_info_report_subindex_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Information Report with Subindex Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_info_report_with_subidx_req, NULL, "FMS Information Report with Subindex Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_with_subidx_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_with_subidx_req_subidx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.37. FMS Information Report On Change (Unconfirmed Service Id = 17)
* 6.5.3.37.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_info_report_change_req(tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Information Report On Change Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_info_report_on_change_req, NULL, "FMS Information Report On Change Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_on_change_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.38. FMS Information Report On Change with Subindex
* (Unconfirmed Service Id = 18)
* 6.5.3.38.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_info_report_change_subindex_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Information Report On Change with Subindex Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_info_report_on_change_with_subidx_req, NULL, "FMS Information Report On Change with Subindex Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_on_change_with_subidx_req_idx,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_info_report_on_change_with_subidx_req_subidx,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.39. FMS Event Notification (Unconfirmed Service Id = 2)
* 6.5.3.39.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_ev_notification_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Event Notification Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_ev_notification_req, NULL, "FMS Event Notification Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_ev_notification_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_ev_notification_req_ev_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.40. FMS Alter Event Condition Monitoring (Confirmed Service Id = 24)
* 6.5.3.40.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Alter Event Condition Monitoring Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_alter_ev_condition_monitoring_req, NULL, "FMS Alter Event Condition Monitoring Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree, hf_ff_reserved24, tvb, offset, 3, ENC_BIG_ENDIAN);
offset += 3;
length -= 3;
proto_tree_add_item(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_req_enabled,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.40.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Alter Event Condition Monitoring Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_alter_ev_condition_monitoring_rsp, NULL, "FMS Alter Event Condition Monitoring Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.40.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Alter Event Condition Monitoring Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_alter_ev_condition_monitoring_err, NULL, "FMS Alter Event Condition Monitoring Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_err_err_class,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_alter_ev_condition_monitoring_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.41. FMS Acknowledge Event Notification (Confirmed Service Id = 25)
* 6.5.3.41.1. Request Message Parameters
*/
static void
dissect_ff_msg_fms_ack_ev_notification_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Acknowledge Event Notification Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_ack_ev_notification_req, NULL, "FMS Acknowledge Event Notification Request");
proto_tree_add_item(sub_tree,
hf_ff_fms_ack_ev_notification_req_idx, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_fms_ack_ev_notification_req_ev_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.41.2. Response Message Parameters
*/
static void
dissect_ff_msg_fms_ack_ev_notification_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Acknowledge Event Notification Response");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_ack_ev_notification_rsp, NULL, "FMS Acknowledge Event Notification Response");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.3.41.3. Error Message Parameters
*/
static void
dissect_ff_msg_fms_ack_ev_notification_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "FMS Acknowledge Event Notification Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_fms_ack_ev_notification_err, NULL, "FMS Acknowledge Event Notification Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_fms_ack_ev_notification_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_fms_ack_ev_notification_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_fms_ack_ev_notification_err_additional_code,
tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_fms_ack_ev_notification_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.1. LAN Redundancy Get Information (Confirmed Service Id = 1)
* 6.5.4.1.1. Request Message Parameters
*/
static void
dissect_ff_msg_lr_get_info_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Information Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_info_req, NULL, "LAN Redundancy Get Information Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.1.2. Response Message Parameters
*/
static void
dissect_ff_msg_lr_get_info_rsp_lr_flags(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 6-8: Reserved (not used) = 0
* Bit 5: Load Balancing Enabled
* 0 = False Do not do load balancing
* 1 = True Do load balancing
* Bit 4: Diagnosis Using Own Messages Enabled
* 0 = False Do not use own diagnostic messages for diagnosis
* 1 = True Use own diagnostic messages for diagnosis
* Bit 3: Single Multicast Message Reception Interface Enabled
* 0 = False Listen for multicast addresses
* on both interfaces
* 1 = True Listen for multicast addresses
* on one interface
* if zero or one fault detected
* in network status table
* Bit 2: Crossed Cable Detection Enabled
* 0 = False Do not detect crossed cables
* 1 = True Detect crossed cables
* B1 (lsb): Single Multicast Message Transmission Interface Enabled
* 0 = False Transmit on both interfaces
* 1 = True Transmit on one interface
*/
static int * const lan_flags[] = {
&hf_ff_lr_get_info_rsp_lr_flags_reserved,
&hf_ff_lr_get_info_rsp_lr_flags_load_balance,
&hf_ff_lr_get_info_rsp_lr_flags_diag,
&hf_ff_lr_get_info_rsp_lr_flags_multi_recv,
&hf_ff_lr_get_info_rsp_lr_flags_cross_cable,
&hf_ff_lr_get_info_rsp_lr_flags_multi_trans,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_lr_get_info_rsp_lr_flags, ett_ff_lr_get_info_rsp_lr_flags, lan_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_lr_get_info_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 MaxMsgNumDiff;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Information Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_info_rsp, NULL, "LAN Redundancy Get Information Response");
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_lr_attrs_ver, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
MaxMsgNumDiff = tvb_get_guint8(tvb, offset);
switch (MaxMsgNumDiff) {
case 0:
case 1:
proto_tree_add_uint_format_value(sub_tree,
hf_ff_lr_get_info_rsp_lr_max_msg_num_diff,
tvb, offset, 1, MaxMsgNumDiff,
"Do not detect a fault (%u)",
MaxMsgNumDiff);
break;
default:
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_lr_max_msg_num_diff,
tvb, offset, 1, ENC_BIG_ENDIAN);
}
offset += 1;
length -= 1;
dissect_ff_msg_lr_get_info_rsp_lr_flags(tvb, offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_diagnostic_msg_intvl, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_aging_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.1.3. Error Message Parameters
*/
static void
dissect_ff_msg_lr_get_info_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Information Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_info_err, NULL, "LAN Redundancy Get Information Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_lr_get_info_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_info_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.2. LAN Redundancy Put Information (Confirmed Service Id = 2)
* 6.5.4.2.1. Request Message Parameters
*/
static void
dissect_ff_msg_lr_put_info_req_lr_flags(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 6-8: Reserved (not used) = 0
* Bit 5: Load Balancing Enabled
* 0 = False Do not do load balancing
* 1 = True Do load balancing
* Bit 4: Diagnosis Using Own Messages Enabled
* 0 = False Do not use own diagnostic messages for diagnosis
* 1 = True Use own diagnostic messages for diagnosis
* Bit 3: Single Multicast Message Reception Interface Enabled
* 0 = False Listen for multicast addresses
* on both interfaces
* 1 = True Listen for multicast addresses
* on one interface
* if zero or one fault detected
* in network status table
* Bit 2: Crossed Cable Detection Enabled
* 0 = False Do not detect crossed cables
* 1 = True Detect crossed cables
* B1 (lsb): Single Multicast Message Transmission Interface Enabled
* 0 = False Transmit on both interfaces
* 1 = True Transmit on one interface
*/
static int * const lan_flags[] = {
&hf_ff_lr_put_info_req_lr_flags_reserved,
&hf_ff_lr_put_info_req_lr_flags_load_balance,
&hf_ff_lr_put_info_req_lr_flags_diag,
&hf_ff_lr_put_info_req_lr_flags_multi_recv,
&hf_ff_lr_put_info_req_lr_flags_cross_cable,
&hf_ff_lr_put_info_req_lr_flags_multi_trans,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_lr_put_info_req_lr_flags, ett_ff_lr_put_info_req_lr_flags, lan_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_lr_put_info_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 MaxMsgNumDiff;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Put Information Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_put_info_req, NULL, "LAN Redundancy Put Information Request");
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_lr_attrs_ver, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
MaxMsgNumDiff = tvb_get_guint8(tvb, offset);
switch (MaxMsgNumDiff) {
case 0:
case 1:
proto_tree_add_uint_format_value(sub_tree,
hf_ff_lr_put_info_req_lr_max_msg_num_diff,
tvb, offset, 1, MaxMsgNumDiff,
"Do not detect a fault (%u)",
MaxMsgNumDiff);
break;
default:
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_lr_max_msg_num_diff,
tvb, offset, 1, ENC_BIG_ENDIAN);
}
offset += 1;
length -= 1;
dissect_ff_msg_lr_put_info_req_lr_flags(tvb, offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_diagnostic_msg_intvl, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_aging_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_diagnostic_msg_if_a_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_diagnostic_msg_if_a_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_diagnostic_msg_if_b_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_req_diagnostic_msg_if_b_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.2.2. Response Message Parameters
*/
static void
dissect_ff_msg_lr_put_info_rsp_lr_flags(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 6-8: Reserved (not used) = 0
* Bit 5: Load Balancing Enabled
* 0 = False Do not do load balancing
* 1 = True Do load balancing
* Bit 4: Diagnosis Using Own Messages Enabled
* 0 = False Do not use own diagnostic messages for diagnosis
* 1 = True Use own diagnostic messages for diagnosis
* Bit 3: Single Multicast Message Reception Interface Enabled
* 0 = False Listen for multicast addresses
* on both interfaces
* 1 = True Listen for multicast addresses
* on one interface
* if zero or one fault detected
* in network status table
* Bit 2: Crossed Cable Detection Enabled
* 0 = False Do not detect crossed cables
* 1 = True Detect crossed cables
* B1 (lsb): Single Multicast Message Transmission Interface Enabled
* 0 = False Transmit on both interfaces
* 1 = True Transmit on one interface
*/
static int * const lan_flags[] = {
&hf_ff_lr_put_info_rsp_lr_flags_reserved,
&hf_ff_lr_put_info_rsp_lr_flags_load_balance,
&hf_ff_lr_put_info_rsp_lr_flags_diag,
&hf_ff_lr_put_info_rsp_lr_flags_multi_recv,
&hf_ff_lr_put_info_rsp_lr_flags_cross_cable,
&hf_ff_lr_put_info_rsp_lr_flags_multi_trans,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_lr_put_info_rsp_lr_flags, ett_ff_lr_put_info_rsp_lr_flags, lan_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_lr_put_info_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 MaxMsgNumDiff;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Put Information Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_put_info_rsp, NULL, "LAN Redundancy Put Information Response");
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_lr_attrs_ver, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
MaxMsgNumDiff = tvb_get_guint8(tvb, offset);
switch (MaxMsgNumDiff) {
case 0:
case 1:
proto_tree_add_uint_format_value(sub_tree,
hf_ff_lr_put_info_rsp_lr_max_msg_num_diff,
tvb, offset, 1, MaxMsgNumDiff,
"Do not detect a fault (%u)",
MaxMsgNumDiff);
break;
default:
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_lr_max_msg_num_diff,
tvb, offset, 1, ENC_BIG_ENDIAN);
}
offset += 1;
length -= 1;
dissect_ff_msg_lr_put_info_rsp_lr_flags(tvb, offset, sub_tree);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_diagnostic_msg_intvl, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_aging_time, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_send_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_recv_addr,
tvb, offset, 16, ENC_NA);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.2.3. Error Message Parameters
*/
static void
dissect_ff_msg_lr_put_info_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Put Information Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_put_info_err, NULL, "LAN Redundancy Put Information Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree, hf_ff_lr_put_info_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_put_info_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
return;
}
/*
* 6.5.4.3. LAN Redundancy Get Statistics (Confirmed Service Id = 3)
* 6.5.4.3.1. Request Message Parameters
*/
static void
dissect_ff_msg_lr_get_statistics_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Statistics Request");
if (!tree) {
return;
}
if (length) {
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_statistics_req, NULL, "LAN Redundancy Get Statistics Request");
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.3.2. Response Message Parameters
*/
static void
dissect_ff_msg_lr_get_statistics_rsp_x_cable_stat(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_lr_get_statistics_rsp_list_of_x_cable_stat, NULL,
"List of Crossed Cable Status (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_x_cable_stat, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_lr_get_statistics_rsp(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint32 NumXcableStat;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Statistics Response");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_statistics_rsp, NULL, "LAN Redundancy Get Statistics Response");
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_a,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_a,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_a,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_b,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_b,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_b,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
NumXcableStat = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_rsp_num_x_cable_stat, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
if (NumXcableStat) {
dissect_ff_msg_lr_get_statistics_rsp_x_cable_stat(tvb,
offset, sub_tree, NumXcableStat);
offset += 4 * NumXcableStat;
length -= 4 * NumXcableStat;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.3.3. Error Message Parameters
*/
static void
dissect_ff_msg_lr_get_statistics_err(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint8 ErrorClass;
guint8 ErrorCode;
const char *error_code;
col_set_str(pinfo->cinfo, COL_INFO, "LAN Redundancy Get Statistics Error");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_get_statistics_err, NULL, "LAN Redundancy Get Statistics Error");
ErrorClass = tvb_get_guint8(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_err_err_class, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
ErrorCode = tvb_get_guint8(tvb, offset);
error_code = val_to_str_err_code(ErrorClass, ErrorCode);
proto_tree_add_uint_format_value(sub_tree,
hf_ff_lr_get_statistics_err_err_code,
tvb, offset, 1, ErrorCode,
"%s (%u)", error_code, ErrorCode);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_err_additional_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_get_statistics_err_additional_desc,
tvb, offset, 16, ENC_ASCII);
offset += 16;
length -= 16;
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5.4.4. Diagnostic Message (Unconfirmed Service Id = 1)
* 6.5.4.4.1. Request Message Parameters
*/
static void
dissect_ff_msg_diagnostic_msg_req_dup_detection_stat(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
/*
* Bits 3-8: Reserved, set to 0.
* Bit 2: 1 = Duplicate PD Tag Detected
* 0 = Duplicate PD Tag Not Detected
* Bit 18: 1 = Duplicate Device Index Detected
* 0 = Duplicate Device Index Not Detected
*/
static int * const dup_flags[] = {
&hf_ff_lr_diagnostic_msg_req_dup_detection_state_reserved,
&hf_ff_lr_diagnostic_msg_req_dup_detection_state_pd_tag,
&hf_ff_lr_diagnostic_msg_req_dup_detection_state_device,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_lr_diagnostic_msg_req_dup_detection_state, ett_ff_lr_diagnostic_msg_req_dup_detection_stat, dup_flags, ENC_BIG_ENDIAN);
}
static void
dissect_ff_msg_diagnostic_msg_req_if_a_to_a_status(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_lr_diagnostic_msg_req_a_to_a_status, NULL,
"List of Interface AtoA Statuses (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_if_a_to_a_status,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_diagnostic_msg_req_if_b_to_a_status(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_lr_diagnostic_msg_req_b_to_a_status, NULL,
"List of Interface BtoA Statuses (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_if_b_to_a_status,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_diagnostic_msg_req_if_a_to_b_status(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_lr_diagnostic_msg_req_a_to_b_status, NULL,
"List of Interface AtoB Statuses (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_if_a_to_b_status,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_diagnostic_msg_req_if_b_to_b_status(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint32 value)
{
proto_tree *sub_tree;
guint d;
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 * value,
ett_ff_lr_diagnostic_msg_req_b_to_b_status, NULL,
"List of Interface BtoB Statuses (%u bytes)", 4 * value);
for (d = 0; d < value; d++) {
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_if_b_to_b_status,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
}
static void
dissect_ff_msg_diagnostic_msg_req(
tvbuff_t *tvb, gint offset,
guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *sub_tree;
guint16 DeviceIndex;
guint16 NumOfInterfaceStatuses;
col_set_str(pinfo->cinfo, COL_INFO, "Diagnostic Message Request");
if (!tree) {
return;
}
sub_tree = proto_tree_add_subtree(tree, tvb, offset, length,
ett_ff_lr_diagnostic_msg_req, NULL, "Diagnostic Message Request");
DeviceIndex = tvb_get_ntohs(tvb, offset);
if (DeviceIndex) {
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_dev_idx, tvb, offset, 2, ENC_BIG_ENDIAN);
} else {
proto_tree_add_uint_format_value(sub_tree,
hf_ff_lr_diagnostic_msg_req_dev_idx,
tvb, offset, 2, DeviceIndex,
"Index not assigned (%u)", DeviceIndex);
}
offset += 2;
length -= 2;
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_num_of_network_ifs,
tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_transmission_if, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_diagnostic_msg_intvl,
tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
length -= 4;
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_pd_tag, tvb, offset, 32, ENC_ASCII);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
length -= 1;
dissect_ff_msg_diagnostic_msg_req_dup_detection_stat(tvb,
offset, sub_tree);
offset += 1;
length -= 1;
NumOfInterfaceStatuses = tvb_get_ntohs(tvb, offset);
proto_tree_add_item(sub_tree,
hf_ff_lr_diagnostic_msg_req_num_of_if_statuses, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
length -= 2;
if (NumOfInterfaceStatuses) {
dissect_ff_msg_diagnostic_msg_req_if_a_to_a_status(tvb,
offset, sub_tree, NumOfInterfaceStatuses);
offset += 4 * NumOfInterfaceStatuses;
length -= 4 * NumOfInterfaceStatuses;
dissect_ff_msg_diagnostic_msg_req_if_b_to_a_status(tvb,
offset, sub_tree, NumOfInterfaceStatuses);
offset += 4 * NumOfInterfaceStatuses;
length -= 4 * NumOfInterfaceStatuses;
dissect_ff_msg_diagnostic_msg_req_if_a_to_b_status(tvb,
offset, sub_tree, NumOfInterfaceStatuses);
offset += 4 * NumOfInterfaceStatuses;
length -= 4 * NumOfInterfaceStatuses;
dissect_ff_msg_diagnostic_msg_req_if_b_to_b_status(tvb,
offset, sub_tree, NumOfInterfaceStatuses);
offset += 4 * NumOfInterfaceStatuses;
length -= 4 * NumOfInterfaceStatuses;
}
if (length) {
proto_tree_add_item(sub_tree, hf_ff_unknown_data, tvb, offset, length, ENC_NA);
}
}
/*
* 6.5. Service-Specific Parameters
*/
static void
dissect_ff_msg_body(tvbuff_t *tvb, gint offset, guint32 length,
packet_info *pinfo, proto_tree *tree,
guint8 ProtocolAndType, guint8 Service, guint32 FDAAddress)
{
proto_item *hidden_item;
guint16 message = 0;
message = ((guint16)ProtocolAndType) << 8;
message |= (guint16)Service;
switch (message) {
case FDA_MSG_SESSION_OPEN_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_open_sess_req(tvb, offset, length,
pinfo, tree);
break;
case FDA_MSG_SESSION_OPEN_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_open_sess_rsp(tvb, offset, length,
pinfo, tree);
break;
case FDA_MSG_SESSION_OPEN_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_open_sess_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_open_sess_err(tvb, offset, length,
pinfo, tree);
break;
case FDA_MSG_SESSION_IDLE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_idle_req(tvb, offset, length,
pinfo, tree);
break;
case FDA_MSG_SESSION_IDLE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_idle_rsp(tvb, offset, length,
pinfo, tree);
break;
case FDA_MSG_SESSION_IDLE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fda_idle_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fda_idle_err(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_FIND_TAG_QUERY_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_find_tag_query, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_find_tag_query_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_find_tag_query_req(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_FIND_TAG_REPLY_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_find_tag_reply, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_find_tag_reply_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_find_tag_reply_req(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_IDENTIFY_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_id_req(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_IDENTIFY_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_id_rsp(tvb, offset, length,
pinfo, tree, FDAAddress);
break;
case SM_MSG_IDENTIFY_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_id_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_id_err(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_CLEAR_ADDRESS_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_addr_req(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_CLEAR_ADDRESS_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_addr_rsp(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_CLEAR_ADDRESS_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_addr_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_addr_err(tvb, offset, length,
pinfo, tree);
break;
case SM_MSG_SET_ASSIGNMENT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_set_assign_info_req(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_SET_ASSIGNMENT_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_set_assign_info_rsp(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_SET_ASSIGNMENT_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_set_assign_info_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_set_assign_info_err(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_CLEAR_ASSIGNMENT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_assign_info_req(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_CLEAR_ASSIGNMENT_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_assign_info_rsp(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_CLEAR_ASSIGNMENT_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_clear_assign_info_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_clear_assign_info_err(tvb, offset,
length, pinfo, tree);
break;
case SM_MSG_DEVICE_ANNUNCIATION_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_dev_annunc, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_sm_dev_annunc_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_sm_dev_annunc_req(tvb, offset,
length, pinfo, tree, FDAAddress);
break;
case FMS_MSG_INITIATE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INITIATE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INITIATE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_ABORT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_abort, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_abort_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_abort_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STATUS_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_status_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STATUS_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_status_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STATUS_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_status_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_status_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_UNSOLICITED_STATUS_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_unsolicited_status, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_unsolicited_status_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_unsolicited_status_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_IDENTIFY_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_id_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_IDENTIFY_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_id_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_IDENTIFY_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_id_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_id_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_GET_OD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_get_od_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_GET_OD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_get_od_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_GET_OD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_get_od_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_get_od_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INITIATE_PUT_OD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_put_od_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INITIATE_PUT_OD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_put_od_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INITIATE_PUT_OD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_put_od_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_put_od_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_PUT_OD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_put_od_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_PUT_OD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_put_od_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_PUT_OD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_put_od_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_put_od_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_PUT_OD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_put_od_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_PUT_OD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_put_od_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_PUT_OD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_put_od_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_put_od_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_GENERIC_INITIATE_DOWNLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_init_download_sequence_req(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_INITIATE_DOWNLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_init_download_sequence_rsp(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_INITIATE_DOWNLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_init_download_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_init_download_sequence_err(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_DOWNLOAD_SEGMENT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_download_segment_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_DOWNLOAD_SEGMENT_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_download_segment_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_DOWNLOAD_SEGMENT_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_download_seg_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_download_segment_err(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_TERMINATE_DOWNLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_terminate_download_sequence_req(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_TERMINATE_DOWNLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_terminate_download_sequence_rsp(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_GENERIC_TERMINATE_DOWNLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_gen_terminate_download_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_generic_terminate_download_sequence_err(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_DOWNLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_download_sequence_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_DOWNLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_download_sequence_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_DOWNLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_download_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_download_sequence_err(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_DOWNLOAD_SEGMENT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_download_segment_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DOWNLOAD_SEGMENT_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_download_segment_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DOWNLOAD_SEGMENT_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_download_seg_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_download_segment_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_DOWNLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_download_sequence_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_DOWNLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_download_sequence_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_DOWNLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_download_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_download_sequence_err(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_UPLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_upload_seq_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_UPLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_upload_seq_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_INITIATE_UPLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_init_upload_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_init_upload_seq_err(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_UPLOAD_SEGMENT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_upload_segment_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_UPLOAD_SEGMENT_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_upload_segment_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_UPLOAD_SEGMENT_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_upload_seg_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_upload_segment_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_UPLOAD_SEQUENCE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_upload_seq_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_UPLOAD_SEQUENCE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_upload_seq_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_TERMINATE_UPLOAD_SEQUENCE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_terminate_upload_seq_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_terminate_upload_seq_err(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_DOWNLOAD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_download_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_DOWNLOAD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_download_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_DOWNLOAD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_download_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_download_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_UPLOAD_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_upload_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_UPLOAD_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_upload_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_REQUEST_DOMAIN_UPLOAD_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_req_dom_upload_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_req_dom_upload_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_CREATE_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_create_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_CREATE_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_create_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_CREATE_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_create_pi_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_create_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_pi_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_START_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_start_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_START_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_start_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_START_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_start_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_start_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STOP_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_stop_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STOP_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_stop_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_STOP_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_stop_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_stop_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESUME_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_resume_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESUME_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_resume_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESUME_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_resume_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_resume_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESET_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_reset_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESET_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_reset_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_RESET_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_reset_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_reset_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_KILL_PI_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_kill_pi_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_KILL_PI_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_kill_pi_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_KILL_PI_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_kill_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_kill_pi_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_SUBINDEX_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_subindex_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_SUBINDEX_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_subindex_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_READ_SUBINDEX_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_read_with_subidx_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_read_subindex_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_SUBINDEX_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_subindex_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_SUBINDEX_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_subindex_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_WRITE_SUBINDEX_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_write_with_subidx_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_write_subindex_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DEFINE_VARIABLE_LIST_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_def_variable_list_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DEFINE_VARIABLE_LIST_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_def_variable_list_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DEFINE_VARIABLE_LIST_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_def_variable_list_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_def_variable_list_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_VARIABLE_LIST_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_variable_list_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_VARIABLE_LIST_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_variable_list_rsp(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_DELETE_VARIABLE_LIST_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_del_variable_list_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_del_variable_list_err(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INFO_REPORT_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_info_report_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INFO_REPORT_SUBINDEX_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_with_subidx_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_info_report_subindex_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INFO_REPORT_CHANGE_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_on_change, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_on_change_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_info_report_change_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_INFO_REPORT_CHANGE_SUBINDEX_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_on_change_with_subidx, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_info_report_on_change_with_subidx_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_info_report_change_subindex_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_EVENT_NOTIFICATION_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ev_notification, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ev_notification_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_ev_notification_req(tvb, offset,
length, pinfo, tree);
break;
case FMS_MSG_ALTER_EVENT_CONDITION_MONITORING_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_req(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_ALTER_EVENT_CONDITION_MONITORING_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_rsp(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_ALTER_EVENT_CONDITION_MONITORING_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_alter_ev_condition_monitoring_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_alter_alter_ev_condition_monitoring_err(
tvb, offset, length, pinfo, tree);
break;
case FMS_MSG_ACKNOWLEDGE_EVENT_NOTIFICATION_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_ack_ev_notification_req(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_ACKNOWLEDGE_EVENT_NOTIFICATION_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_ack_ev_notification_rsp(tvb,
offset, length, pinfo, tree);
break;
case FMS_MSG_ACKNOWLEDGE_EVENT_NOTIFICATION_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_fms_ack_ev_notification_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_fms_ack_ev_notification_err(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_INFO_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_info_req(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_INFO_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_info_rsp(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_INFO_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_info_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_info_err(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_PUT_INFO_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_put_info_req(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_PUT_INFO_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_put_info_rsp(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_PUT_INFO_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_put_info_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_put_info_err(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_STATISTICS_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_statistics_req(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_STATISTICS_RSP:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics_rsp, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_statistics_rsp(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_GET_STATISTICS_ERR:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_get_statistics_err, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_lr_get_statistics_err(tvb,
offset, length, pinfo, tree);
break;
case LAN_MSG_DIAG_REQ:
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_diagnostic_msg, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
hidden_item = proto_tree_add_boolean(tree,
hf_ff_lr_diagnostic_msg_req, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
dissect_ff_msg_diagnostic_msg_req(tvb,
offset, length, pinfo, tree);
break;
default:
col_add_fstr(pinfo->cinfo, COL_INFO,
"Unknown Service (Protocol Id: %u, Confirmed Msg Type: %u) "
"(%s Service Id = %u)",
(ProtocolAndType & PROTOCOL_MASK) >> 2,
ProtocolAndType & TYPE_MASK,
(Service & SERVICE_CONFIRMED_FLAG_MASK)?
"Confirmed": "Unconfirmed",
Service & SERVICE_SERVICE_ID_MASK);
if (length) {
proto_tree_add_item(tree, hf_ff_unknown_service, tvb, offset, length, ENC_NA);
}
}
}
/*
* 6.4. Message Trailer
*/
static void
dissect_ff_msg_trailer(tvbuff_t *tvb,
gint offset, guint32 length, proto_tree *tree, guint8 Options)
{
proto_tree *sub_tree;
proto_item *hidden_item;
if (!tree) {
return;
}
hidden_item = proto_tree_add_boolean(tree, hf_ff_fda_msg_trailer, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
sub_tree = proto_tree_add_subtree(tree,
tvb, offset, length, ett_ff_fda_msg_trailer, NULL, "FDA Message Trailer");
if (Options & OPTION_MESSAGE_NUMBER_MASK) {
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_trailer_msg_num, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if (Options & OPTION_INVOKE_ID_MASK) {
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_trailer_invoke_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if (Options & OPTION_TIME_STAMP_MASK) {
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_trailer_time_stamp, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
if (Options & OPTION_EXTENDED_CNTRL_MASK) {
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_trailer_extended_control_field,
tvb, offset, 4, ENC_BIG_ENDIAN);
/* offset += 4; */
}
}
/*
* Service
*/
static void
dissect_ff_msg_hdr_srv(tvbuff_t *tvb,
gint offset, proto_tree *tree, guint8 proto_and_type, guint8 service)
{
proto_tree *sub_tree;
proto_item *ti;
if (!tree) {
return;
}
ti = proto_tree_add_uint(tree, hf_ff_hdr_srv, tvb, offset, 1, service);
sub_tree = proto_item_add_subtree(ti, ett_ff_fda_msg_hdr_srv);
/* Bit 8: Confirmed Flag */
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_confirm_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
/* Bits 1-7 Service Id of the service */
switch (proto_and_type & PROTOCOL_MASK) {
case PROTOCOL_FDA:
if (service & SERVICE_CONFIRMED_FLAG_MASK) {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_fda_service_id_confirm, tvb, offset, 1, ENC_BIG_ENDIAN);
} else {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_fda_service_id_unconfirm, tvb, offset, 1, ENC_BIG_ENDIAN);
}
break;
case PROTOCOL_SM:
if (service & SERVICE_CONFIRMED_FLAG_MASK) {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_sm_service_id_confirm, tvb, offset, 1, ENC_BIG_ENDIAN);
} else {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_sm_service_id_unconfirm, tvb, offset, 1, ENC_BIG_ENDIAN);
}
break;
case PROTOCOL_FMS:
if (service & SERVICE_CONFIRMED_FLAG_MASK) {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_fms_service_id_confirm, tvb, offset, 1, ENC_BIG_ENDIAN);
} else {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_fms_service_id_unconfirm, tvb, offset, 1, ENC_BIG_ENDIAN);
}
break;
case PROTOCOL_LAN:
if (service & SERVICE_CONFIRMED_FLAG_MASK) {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_lan_service_id_confirm, tvb, offset, 1, ENC_BIG_ENDIAN);
} else {
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_lan_service_id_unconfirm, tvb, offset, 1, ENC_BIG_ENDIAN);
}
break;
default:
proto_tree_add_item(sub_tree, hf_ff_hdr_srv_service_id, tvb, offset, 1, ENC_BIG_ENDIAN);
}
}
/*
* Protocol Id And Confirmed Msg Type
*/
static void
dissect_ff_msg_hdr_proto_and_type(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
static int * const header[] = {
&hf_ff_hdr_proto_id,
&hf_ff_hdr_confirm_msg_type,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_hdr_proto_confirm, ett_ff_fda_msg_hdr_proto_and_type, header, ENC_BIG_ENDIAN);
}
/*
* Options
*/
static void
dissect_ff_msg_hdr_opts(tvbuff_t *tvb,
gint offset, proto_tree *tree)
{
static int * const options[] = {
&hf_ff_hdr_opts_msg_num,
&hf_ff_hdr_opts_invoke_id,
&hf_ff_hdr_opts_timestamp,
&hf_ff_hdr_opts_reserved,
&hf_ff_hdr_opts_ext_ctrl,
&hf_ff_hdr_opts_pad,
NULL
};
proto_tree_add_bitmask(tree, tvb, offset, hf_ff_hdr_opts, ett_ff_fda_msg_hdr_opts, options, ENC_BIG_ENDIAN);
}
/*
* 6.3. Message Header
*/
static void
dissect_ff_msg_hdr(tvbuff_t *tvb,
proto_tree *tree, guint8 ProtocolAndType, guint8 Service)
{
proto_tree *sub_tree;
proto_item *hidden_item;
gint offset = 0;
if (!tree) {
return;
}
hidden_item = proto_tree_add_boolean(tree, hf_ff_fda_msg_hdr, tvb, 0, 0, 1);
proto_item_set_hidden(hidden_item);
sub_tree = proto_tree_add_subtree(tree,
tvb, offset, FDA_MSG_HDR_LENGTH, ett_ff_fda_msg_hdr, NULL, "FDA Message Header");
/* FDA Message Version */
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_hdr_ver, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
/* Options */
dissect_ff_msg_hdr_opts(tvb, offset, sub_tree);
offset += 1;
/* Protocol Id And Confirmed Msg Type */
dissect_ff_msg_hdr_proto_and_type(tvb,
offset, sub_tree);
offset += 1;
/* Service */
dissect_ff_msg_hdr_srv(tvb,
offset, sub_tree, ProtocolAndType, Service);
offset += 1;
/* FDA Address */
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_hdr_fda_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
/* Message Length */
proto_tree_add_item(sub_tree,
hf_ff_fda_msg_hdr_len, tvb, offset, 4, ENC_BIG_ENDIAN);
/* offset += 4; */
}
static int
dissect_ff(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
proto_tree *sub_tree;
proto_item *ti;
gint offset = 0;
guint8 Options = 0; /* Options */
guint8 ProtocolAndType = 0; /* Protocol Id And Confirmed Msg Type */
guint8 Service = 0; /* Service */
guint32 FDAAddress = 0; /* FDA Address */
guint32 length = 0; /* Message Length */
guint32 trailer_len = 0;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "FF");
Options = tvb_get_guint8(tvb, 1);
ProtocolAndType = tvb_get_guint8(tvb, 2);
Service = tvb_get_guint8(tvb, 3);
FDAAddress = tvb_get_ntohl(tvb, 4);
length = tvb_get_ntohl(tvb, 8);
ti = proto_tree_add_item(tree, proto_ff, tvb, offset, length, ENC_NA);
sub_tree = proto_item_add_subtree(ti, ett_ff);
if (Options & OPTION_MESSAGE_NUMBER_MASK) {
length -= 4;
trailer_len += 4;
}
if (Options & OPTION_INVOKE_ID_MASK) {
length -= 4;
trailer_len += 4;
}
if (Options & OPTION_TIME_STAMP_MASK) {
length -= 8;
trailer_len += 8;
}
if (Options & OPTION_EXTENDED_CNTRL_MASK) {
length -= 4;
trailer_len += 4;
}
/*
* Header
*/
dissect_ff_msg_hdr(tvb, sub_tree, ProtocolAndType, Service);
offset += FDA_MSG_HDR_LENGTH;
length -= FDA_MSG_HDR_LENGTH;
/*
* Service-Specific Parameters + User Data (optional)
*/
dissect_ff_msg_body(tvb, offset, length, pinfo, sub_tree,
ProtocolAndType, Service, FDAAddress);
offset += length;
/*
* Trailer (optional)
*/
if (trailer_len) {
dissect_ff_msg_trailer(tvb,
offset, trailer_len, sub_tree, Options);
offset += trailer_len;
}
return offset;
}
static guint
get_ff_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
{
return (tvb_get_ntohl(tvb, offset + 8));
}
static int
dissect_ff_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
/*
*
* 6.3. Message Header
*
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Version | Options | Protocol/Type | Service |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | FDA Address |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Message Length |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*
*/
tcp_dissect_pdus(tvb, pinfo, tree, ff_desegment,
FDA_MSG_HDR_LENGTH, get_ff_pdu_len, dissect_ff, data);
return tvb_reported_length(tvb);
}
static int
dissect_ff_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
gint offset = 0;
while (tvb_reported_length_remaining(tvb, offset) > FDA_MSG_HDR_LENGTH)
{
tvbuff_t *pdu_tvb;
gint length;
/* Make sure at least the header is there */
if (tvb_captured_length_remaining(tvb, offset) < FDA_MSG_HDR_LENGTH)
break;
length = get_ff_pdu_len(pinfo, tvb, offset, data);
/* Make sure the length field is valid */
if ((length > tvb_reported_length_remaining(tvb, offset)) ||
(length < FDA_MSG_HDR_LENGTH))
break;
pdu_tvb = tvb_new_subset_length(tvb, offset, length);
offset += dissect_ff(pdu_tvb, pinfo, tree, data);
}
return offset;
}
void
proto_register_ff(void)
{
static hf_register_info hf[] = {
/*
* 6.3. Message Header
*/
{ &hf_ff_fda_msg_hdr,
{ "Message Header", "ff.hdr",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_hdr_ver,
{ "FDA Message Version", "ff.hdr.ver",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_hdr_fda_addr,
{ "FDA Address", "ff.hdr.fda_addr",
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_hdr_len,
{ "Message Length", "ff.hdr.len",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_unknown_data,
{ "Unknown data", "ff.unknown_data",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_data,
{ "Data", "ff.data",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_reserved24,
{ "Reserved", "ff.reserved",
FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_unknown_service,
{ "Unknown service", "ff.unknown_service",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.4. Message Trailer
*/
{ &hf_ff_fda_msg_trailer,
{ "Message Trailer", "ff.trailer",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_trailer_msg_num,
{ "Message Number", "ff.trailer.msg_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_trailer_invoke_id,
{ "Invoke Id", "ff.trailer.invoke_id",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_trailer_time_stamp,
{ "Time Stamp", "ff.trailer.time_stamp",
FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_msg_trailer_extended_control_field,
{ "Extended Control Field", "ff.trailer.extended_control_field",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1. FDA Session Management Services
*/
{ &hf_ff_fda,
{ "FDA Session Management Service", "ff.fda",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_hdr_srv,
{ "Service", "ff.hdr_srv",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_hdr_srv_confirm_flag,
{ "Confirmed Flag", "ff.hdr_srv.confirm_flag",
FT_BOOLEAN, 8, TFS(&tfs_confirmed_unconfirmed), SERVICE_CONFIRMED_FLAG_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_service_id,
{ "Service Id (Unknown)", "ff.hdr_srv.service_id",
FT_UINT8, BASE_DEC, NULL, SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_fda_service_id_confirm,
{ "Service Id", "ff.hdr_srv.fda.service_id.confirm",
FT_UINT8, BASE_DEC, VALS(names_fda_confirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_fda_service_id_unconfirm,
{ "Service Id", "ff.hdr_srv.fda.service_id.unconfirm",
FT_UINT8, BASE_DEC, VALS(names_fda_unconfirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_sm_service_id_confirm,
{ "Service Id", "ff.hdr_srv.sm.service_id.confirm",
FT_UINT8, BASE_DEC, VALS(names_sm_confirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_sm_service_id_unconfirm,
{ "Service Id", "ff.hdr_srv.sm.service_id.unconfirm",
FT_UINT8, BASE_DEC, VALS(names_sm_unconfirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_fms_service_id_confirm,
{ "Service Id", "ff.hdr_srv.fms.service_id.confirm",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_fms_confirmed_ext, SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_fms_service_id_unconfirm,
{ "Service Id", "ff.hdr_srv.fms.service_id.unconfirm",
FT_UINT8, BASE_DEC, VALS(names_fms_unconfirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_lan_service_id_confirm,
{ "Service Id", "ff.hdr_srv.lan.service_id.confirm",
FT_UINT8, BASE_DEC, VALS(names_lan_confirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_srv_lan_service_id_unconfirm,
{ "Service Id", "ff.hdr_srv.lan.service_id.unconfirm",
FT_UINT8, BASE_DEC, VALS(names_lan_unconfirmed), SERVICE_SERVICE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_proto_id,
{ "Service Id", "ff.hdr.proto_id",
FT_UINT8, BASE_DEC, VALS(names_proto), PROTOCOL_MASK, NULL, HFILL } },
{ &hf_ff_hdr_confirm_msg_type,
{ "Service Id", "ff.hdr.confirm_msg_type",
FT_UINT8, BASE_DEC, VALS(names_type), TYPE_MASK, NULL, HFILL } },
{ &hf_ff_hdr_proto_confirm,
{ "Protocol Id And Confirmed Msg Type", "ff.hdr.proto_confirm",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_hdr_opts_msg_num,
{ "Message Number in the Trailer", "ff.hdr.opts.msg_num",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), OPTION_MESSAGE_NUMBER_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts_invoke_id,
{ "Invoke Id in the Trailer", "ff.hdr.opts.invoke_id",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), OPTION_INVOKE_ID_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts_timestamp,
{ "Time Stamp in the Trailer", "ff.hdr.opts.timestamp",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), OPTION_TIME_STAMP_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts_reserved,
{ "Reserved", "ff.hdr.opts.reserved",
FT_UINT8, BASE_HEX, NULL, OPTION_RESERVED_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts_ext_ctrl,
{ "Extended Control in the Trailer", "ff.hdr.opts.ext_ctrl",
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), OPTION_EXTENDED_CNTRL_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts_pad,
{ "Pad Length", "ff.hdr.opts.pad",
FT_UINT8, BASE_HEX, NULL, OPTION_PAD_LENGTH_MASK, NULL, HFILL } },
{ &hf_ff_hdr_opts,
{ "Options", "ff.hdr.opts",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.1. FDA Open Session (Confirmed Service Id = 1)
*/
{ &hf_ff_fda_open_sess,
{ "FDA Open Session", "ff.fda.open_sess",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.1.1. Request Message Parameters
*/
{ &hf_ff_fda_open_sess_req,
{ "FDA Open Session Request", "ff.fda.open_sess.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_sess_idx,
{ "Session Index", "ff.fda.open_sess.req.sess_idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_max_buf_siz,
{ "Max Buffer Size", "ff.fda.open_sess.req.max_buf_siz",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_max_msg_len,
{ "Max Message Length", "ff.fda.open_sess.req.max_msg_len",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_reserved,
{ "Reserved", "ff.fda.open_sess.req.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_nma_conf_use,
{ "NMA Configuration Use", "ff.fda.open_sess.req.nma_conf_use",
FT_UINT8, BASE_DEC, VALS(names_nma_conf_use), 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_inactivity_close_time,
{ "Inactivity Close Time",
"ff.fda.open_sess.req.inactivity_close_time",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_transmit_delay_time,
{ "Transmit Delay Time", "ff.fda.open_sess.req.transmit_delay_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_req_pd_tag,
{ "PD Tag", "ff.fda.open_sess.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.1.2. Response Message Parameters
*/
{ &hf_ff_fda_open_sess_rsp,
{ "FDA Open Session Response", "ff.fda.open_sess.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_sess_idx,
{ "Session Index", "ff.fda.open_sess.rsp.sess_idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_max_buf_siz,
{ "Max Buffer Size", "ff.fda.open_sess.rsp.max_buf_siz",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_max_msg_len,
{ "Max Message Length", "ff.fda.open_sess.rsp.max_msg_len",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_reserved,
{ "Reserved", "ff.fda.open_sess.rsp.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_nma_conf_use,
{ "NMA Configuration Use", "ff.fda.open_sess.rsp.nma_conf_use",
FT_UINT8, BASE_DEC, VALS(names_nma_conf_use), 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_inactivity_close_time,
{ "Inactivity Close Time",
"ff.fda.open_sess.rsp.inactivity_close_time",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_transmit_delay_time,
{ "Transmit Delay Time", "ff.fda.open_sess.rsp.transmit_delay_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_rsp_pd_tag,
{ "PD Tag", "ff.fda.open_sess.rsp.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.1.3. Error Message Parameters
*/
{ &hf_ff_fda_open_sess_err,
{ "FDA Open Session Error", "ff.fda.open_sess.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_err_err_class,
{ "Error Class", "ff.fda.open_sess.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_err_err_code,
{ "Error Code", "ff.fda.open_sess.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_err_additional_code,
{ "Additional Code", "ff.fda.open_sess.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_open_sess_err_additional_desc,
{ "Additional Description", "ff.fda.open_sess.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.2. FDA Idle (Confirmed Service Id = 3)
*/
{ &hf_ff_fda_idle,
{ "FDA Idle", "ff.fda.idle",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.2.1. Request Message Parameters
*/
{ &hf_ff_fda_idle_req,
{ "FDA Idle Request", "ff.fda.idle.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.2.2. Response Message Parameters
*/
{ &hf_ff_fda_idle_rsp,
{ "FDA Idle Response", "ff.fda.idle.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.1.2.3. Error Message Parameters
*/
{ &hf_ff_fda_idle_err,
{ "FDA Idle Error", "ff.fda.idle.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_idle_err_err_class,
{ "Error Class", "ff.fda.idle.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fda_idle_err_err_code,
{ "Error Code", "ff.fda.idle.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_idle_err_additional_code,
{ "Additional Code", "ff.fda.idle.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fda_idle_err_additional_desc,
{ "Additional Description", "ff.fda.idle.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2. SM Services
*/
{ &hf_ff_sm,
{ "SM Service", "ff.sm",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.1. SM Find Tag Query (Unconfirmed Service Id = 1)
*/
{ &hf_ff_sm_find_tag_query,
{ "SM Find Tag Query", "ff.sm.find_tag_query",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.1.1. Request Message Parameters
*/
{ &hf_ff_sm_find_tag_query_req,
{ "SM Find Tag Query Request", "ff.sm.find_tag_query.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_query_req_query_type,
{ "Query Type", "ff.sm.find_tag_query.req.query_type",
FT_UINT8, BASE_DEC, VALS(names_query_type), 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_query_req_idx,
{ "Element Id or VFD Reference or Device Index",
"ff.sm.find_tag_query.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_query_req_tag,
{ "PD Tag or Function Block Tag", "ff.sm.find_tag_query.req.tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_query_req_vfd_tag,
{ "VFD Tag", "ff.sm.find_tag_query.req.vfd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.2. SM Find Tag Reply (Unconfirmed Service Id = 2)
*/
{ &hf_ff_sm_find_tag_reply,
{ "SM Find Tag Reply", "ff.sm.find_tag_reply",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.2.1. Request Message Parameters
*/
{ &hf_ff_sm_find_tag_reply_req,
{ "SM Find Tag Reply Request", "ff.sm.find_tag_reply.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_query_type,
{ "Query Type", "ff.sm.find_tag_reply.req.query_type",
FT_UINT8, BASE_DEC, VALS(names_query_type), 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_h1_node_addr,
{ "Queried Object H1 Node Address",
"ff.sm.find_tag_reply.req.h1_node_addr",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_fda_addr_link_id,
{ "Queried Object FDA Address Link Id",
"ff.sm.find_tag_reply.req.fda_addr_link_id",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_vfd_ref,
{ "Queried Object VFD Reference",
"ff.sm.find_tag_reply.req.vfd_ref",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_od_idx,
{ "Queried Object OD Index", "ff.sm.find_tag_reply.req.od_idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_ip_addr,
{ "Queried Object IP Address", "ff.sm.find_tag_reply.req.ip_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_od_ver,
{ "Queried Object OD Version", "ff.sm.find_tag_reply.req.od_ver",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_dev_id,
{ "Queried Object Device ID", "ff.sm.find_tag_reply.req.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_pd_tag,
{ "Queried Object PD Tag", "ff.sm.find_tag_reply.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_reserved,
{ "Reserved", "ff.sm.find_tag_reply.req.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_num_of_fda_addr_selectors,
{ "Number Of FDA Address Selectors",
"ff.sm.find_tag_reply.req.num_of_fda_addr_selectors",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_req_fda_addr_selector,
{ "FDA Address Selector",
"ff.sm.find_tag_reply.req.fda_addr_selector.fda_addr_selector",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_dup_reserved,
{ "Reserved",
"ff.sm.find_tag_reply.dup_reserved",
FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_dup_pd_tag,
{ "Duplicate PD Tag",
"ff.sm.find_tag_reply.dup_pd_tag",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_dup_device,
{ "Duplicate Device Index",
"ff.sm.find_tag_reply.dup_device",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x01, NULL, HFILL } },
{ &hf_ff_sm_find_tag_reply_dup,
{ "Duplicate Detection State",
"ff.sm.find_tag_reply.dup",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.7. SM Identify (Unconfirmed Service Id = 16)
*/
{ &hf_ff_sm_id,
{ "SM Identify", "ff.sm.id",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.3.1. Request Message Parameters
*/
{ &hf_ff_sm_id_req,
{ "SM Identify Request", "ff.sm.id.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.3.2. Response Message Parameters
*/
{ &hf_ff_sm_id_rsp,
{ "SM Identify Response", "ff.sm.id.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_idx,
{ "Device Index", "ff.sm.id.rsp.dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_max_dev_idx,
{ "Max Device Index", "ff.sm.id.rsp.max_dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_operational_ip_addr,
{ "Operational IP Address", "ff.sm.id.rsp.operational_ip_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_id,
{ "Device ID", "ff.sm.id.rsp.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_pd_tag,
{ "PD Tag", "ff.sm.id.rsp.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_hse_repeat_time,
{ "HSE Repeat Time", "ff.sm.id.rsp.hse_repeat_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_lr_port,
{ "LAN Redundancy Port", "ff.sm.id.rsp.lr_port",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_reserved,
{ "Reserved", "ff.sm.id.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_annunc_ver_num,
{ "Annunciation Version Number", "ff.sm.id.rsp.annunc_ver_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_hse_dev_ver_num,
{ "HSE Device Version Number", "ff.sm.id.rsp.hse_dev_ver_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_num_of_entries,
{ "Number of Entries in Version Number List",
"ff.sm.id.rsp.num_of_entries",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_h1_live_list_h1_link_id,
{ "H1 Link Id", "ff.sm.id.rsp.h1_live_list.h1_link_id",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_h1_live_list_reserved,
{ "Reserved", "ff.sm.id.rsp.h1_live_list.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_h1_live_list_ver_num,
{ "Version Number", "ff.sm.id.rsp.h1_live_list.ver_num",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_h1_node_addr_ver_num_h1_node_addr,
{ "H1 Node Address",
"ff.sm.id.rsp.h1_node_addr_ver_num.h1_node_addr",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_h1_node_addr_ver_num_ver_num,
{ "Version Number", "ff.sm.id.rsp.h1_node_addr_ver_num.ver_num",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_smk_state_name,
{ "Name", "ff.sm.id.rsp.smk_state_name",
FT_UINT8, BASE_DEC, VALS(names_smk_state), 0xFE, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_smk_state_sync,
{ "Synchronized with SNTP Time Server", "ff.sm.id.rsp.smk_state_sync",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_smk_state,
{ "SMK State", "ff.sm.id.rsp.smk_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_link,
{ "Linking Device", "ff.sm.id.rsp.dev_type.link",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_iogateway,
{ "I/O Gateway", "ff.sm.id.rsp.dev_type.iogateway",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_hse,
{ "HSE Field Device", "ff.sm.id.rsp.dev_type.hse",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_h1,
{ "H1 Device", "ff.sm.id.rsp.dev_type.h1",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_reserved,
{ "Reserved", "ff.sm.id.rsp.dev_type.reserved",
FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type_redundant_caps,
{ "Redundant Device Type Capability", "ff.sm.id.rsp.dev_type.redundant_caps",
FT_UINT8, BASE_DEC, VALS(names_dev_type), 0x07, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_type,
{ "Device Type", "ff.sm.id.rsp.dev_type",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_redundancy_state_reserved,
{ "Reserved", "ff.sm.id.rsp.dev_redundancy_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_redundancy_state_role,
{ "Device Redundancy Role", "ff.sm.id.rsp.dev_redundancy_state.role",
FT_UINT8, BASE_DEC, VALS(names_dev_redundancy_role), 0x0C, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_redundancy_state_type,
{ "Assigned Redundant Device Type", "ff.sm.id.rsp.dev_redundancy_state.type",
FT_UINT8, BASE_DEC, VALS(names_assigned_redundant_dev_type), 0x03, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dev_redundancy_state,
{ "Device Redundancy State", "ff.sm.id.rsp.dev_redundancy_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dup_detection_state_reserved,
{ "Reserved", "ff.sm.id.rsp.dup_detection_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dup_detection_state_pd_tag,
{ "Duplicate PD Tag", "ff.sm.id.rsp.dup_detection_state.pd_tag",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dup_detection_state_device,
{ "Duplicate Device Index", "ff.sm.id.rsp.dup_detection_state.device",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x01, NULL, HFILL } },
{ &hf_ff_sm_id_rsp_dup_detection_state,
{ "Duplicate Detection State", "ff.sm.id.rsp.dup_detection_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.3.3. Error Message Parameters
*/
{ &hf_ff_sm_id_err,
{ "SM Identify Error", "ff.sm.id.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_err_err_class,
{ "Error Class", "ff.sm.id.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_err_err_code,
{ "Error Code", "ff.sm.id.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_err_additional_code,
{ "Additional Code", "ff.sm.id.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_id_err_additional_desc,
{ "Additional Description", "ff.sm.id.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.4. SM Clear Address (Confirmed Service Id = 12)
*/
{ &hf_ff_sm_clear_addr,
{ "SM Clear Address", "ff.sm.clear_addr",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.4.1. Request Message Parameters
*/
{ &hf_ff_sm_clear_addr_req,
{ "SM Clear Address Request", "ff.sm.clear_addr.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_req_dev_id,
{ "Device ID", "ff.sm.clear_addr.req.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_req_pd_tag,
{ "PD Tag", "ff.sm.clear_addr.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_req_interface_to_clear,
{ "Interface to Clear", "ff.sm.clear_addr.req.interface_to_clear",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.4.2. Response Message Parameters
*/
{ &hf_ff_sm_clear_addr_rsp,
{ "SM Clear Address Response", "ff.sm.clear_addr.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.4.3. Error Message Parameters
*/
{ &hf_ff_sm_clear_addr_err,
{ "SM Clear Address Error", "ff.sm.clear_addr.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_err_err_class,
{ "Error Class", "ff.sm.clear_addr.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_err_err_code,
{ "Error Code", "ff.sm.clear_addr.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_err_additional_code,
{ "Additional Code", "ff.sm.clear_addr.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_addr_err_additional_desc,
{ "Additional Description", "ff.sm.clear_addr.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.5. SM Set Assignment Info (Confirmed Service Id = 14)
*/
{ &hf_ff_sm_set_assign_info,
{ "SM Set Assignment Info", "ff.sm.set_assign_info",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.5.1. Request Message Parameters
*/
{ &hf_ff_sm_set_assign_info_req_dev_redundancy_state_reserved,
{ "Reserved", "ff.sm.set_assign_info.req_dev_redundancy_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_dev_redundancy_state_role,
{ "Type D-2 Device Redundancy Role", "ff.sm.set_assign_info.req_dev_redundancy_state.role",
FT_UINT8, BASE_DEC, VALS(names_type_d2_dev_redundancy_role), 0x0C, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_dev_redundancy_state_type,
{ "Assigned Device Redundancy Type", "ff.sm.set_assign_info.req_dev_redundancy_state.type",
FT_UINT8, BASE_DEC, VALS(names_assigned_redundant_dev_type), 0x03, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_dev_redundancy_state,
{ "Device Redundancy State", "ff.sm.set_assign_info.req_dev_redundancy_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_clear_dup_detection_state_reserved,
{ "Reserved", "ff.sm.set_assign_info.req_clear_dup_detection_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_clear_dup_detection_state_pd_tag,
{ "Duplicate PD Tag Detected", "ff.sm.set_assign_info.req_clear_dup_detection_state.pd_tag",
FT_BOOLEAN, 8, TFS(&tfs_do_not_clear_clear), 0x02, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_clear_dup_detection_state_device_index,
{ "Duplicate Device Index Detected", "ff.sm.set_assign_info.req_clear_dup_detection_state.device_index",
FT_BOOLEAN, 8, TFS(&tfs_do_not_clear_clear), 0x01, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_clear_dup_detection_state,
{ "Clear Duplicate Detection State", "ff.sm.set_assign_info.req_clear_dup_detection_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req,
{ "SM Set Assignment Info Request", "ff.sm.set_assign_info.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_dev_id,
{ "Device ID", "ff.sm.set_assign_info.req.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_pd_tag,
{ "PD Tag", "ff.sm.set_assign_info.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_h1_new_addr,
{ "H1 New Address", "ff.sm.set_assign_info.req.h1_new_addr",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_lr_port,
{ "LAN Redundancy Port",
"ff.sm.set_assign_info.req.lr_port",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_hse_repeat_time,
{ "HSE Repeat Time", "ff.sm.set_assign_info.req.hse_repeat_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_dev_idx,
{ "Device Index", "ff.sm.set_assign_info.req.dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_max_dev_idx,
{ "Max Device Index", "ff.sm.set_assign_info.req.max_dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_req_operational_ip_addr,
{ "Operational IP Address",
"ff.sm.set_assign_info.req.operational_ip_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.5.2. Response Message Parameters
*/
{ &hf_ff_sm_set_assign_info_rsp,
{ "SM Set Assignment Info Response", "ff.sm.set_assign_info.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_rsp_reserved,
{ "Reserved", "ff.sm.set_assign_info.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_rsp_max_dev_idx,
{ "Max Device Index", "ff.sm.set_assign_info.rsp.max_dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_rsp_hse_repeat_time,
{ "HSE Repeat Time", "ff.sm.set_assign_info.rsp.hse_repeat_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.5.3. Error Message Parameters
*/
{ &hf_ff_sm_set_assign_info_err,
{ "SM Set Assignment Info Error", "ff.sm.set_assign_info.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_err_err_class,
{ "Error Class", "ff.sm.set_assign_info.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_err_err_code,
{ "Error Code", "ff.sm.set_assign_info.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_err_additional_code,
{ "Additional Code", "ff.sm.set_assign_info.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_set_assign_info_err_additional_desc,
{ "Additional Description",
"ff.sm.set_assign_info.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.6. SM Clear Assignment Info (Confirmed Service Id = 15)
*/
{ &hf_ff_sm_clear_assign_info,
{ "SM Clear Assignment Info", "ff.sm.clear_assign_info",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.6.1. Request Message Parameters
*/
{ &hf_ff_sm_clear_assign_info_req,
{ "SM Clear Assignment Info Request", "ff.sm.clear_assign_info.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_req_dev_id,
{ "Device ID", "ff.sm.clear_assign_info.req.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_req_pd_tag,
{ "PD Tag", "ff.sm.clear_assign_info.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.6.2. Response Message Parameters
*/
{ &hf_ff_sm_clear_assign_info_rsp,
{ "SM Clear Assignment Info Response",
"ff.sm.clear_assign_info.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.6.3. Error Message Parameters
*/
{ &hf_ff_sm_clear_assign_info_err,
{ "SM Clear Assignment Info Error", "ff.sm.clear_assign_info.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_err_err_class,
{ "Error Class", "ff.sm.clear_assign_info.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_err_err_code,
{ "Error Code", "ff.sm.clear_assign_info.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_err_additional_code,
{ "Additional Code", "ff.sm.clear_assign_info.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_clear_assign_info_err_additional_desc,
{ "Additional Description",
"ff.sm.clear_assign_info.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.7. SM Device Annunciation (Unconfirmed Service Id = 16)
*/
{ &hf_ff_sm_dev_annunc,
{ "SM Device Annunciation", "ff.sm.dev_annunc",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.2.7.1. Request Message Parameters
*/
{ &hf_ff_sm_dev_annunc_req,
{ "SM Device Annunciation Request", "ff.sm.dev_annunc.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_idx,
{ "Device Index", "ff.sm.dev_annunc.req.dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_max_dev_idx,
{ "Max Device Index", "ff.sm.dev_annunc.req.max_dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_operational_ip_addr,
{ "Operational IP Address",
"ff.sm.dev_annunc.req.operational_ip_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_id,
{ "Device ID", "ff.sm.dev_annunc.req.dev_id",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_pd_tag,
{ "PD Tag", "ff.sm.dev_annunc.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_hse_repeat_time,
{ "HSE Repeat Time", "ff.sm.dev_annunc.req.hse_repeat_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_lr_port,
{ "LAN Redundancy Port", "ff.sm.dev_annunc.req.lr_port",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_reserved,
{ "Reserved", "ff.sm.dev_annunc.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_annunc_ver_num,
{ "Annunciation Version Number",
"ff.sm.dev_annunc.req.annunc_ver_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_hse_dev_ver_num,
{ "HSE Device Version Number",
"ff.sm.dev_annunc.req.hse_dev_ver_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_num_of_entries,
{ "Number of Entries in Version Number List",
"ff.sm.dev_annunc.req.num_of_entries",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_h1_live_list_h1_link_id,
{ "H1 Link Id", "ff.sm.dev_annunc.req.h1_live_list.h1_link_id",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_h1_live_list_reserved,
{ "Reserved", "ff.sm.dev_annunc.req.h1_live_list.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_h1_live_list_ver_num,
{ "Version Number", "ff.sm.dev_annunc.req.h1_live_list.ver_num",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_h1_node_addr,
{ "H1 Node Address",
"ff.sm.dev_annunc.req.h1_node_addr_ver_num.h1_node_addr",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_h1_node_addr_ver_num_ver_num,
{ "Version Number",
"ff.sm.dev_annunc.req.h1_node_addr_ver_num.ver_num",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_smk_state_name,
{ "Name", "ff.sm.dev_annunc.req.smk_state_name",
FT_UINT8, BASE_DEC, VALS(names_smk_state), 0xFE, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_smk_state_sync,
{ "Synchronized with SNTP Time Server", "ff.sm.dev_annunc.req.smk_state_sync",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_smk_state,
{ "SMK State", "ff.sm.dev_annunc.req.smk_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_link,
{ "Linking Device", "ff.sm.dev_annunc.req.dev_type.link",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_iogateway,
{ "I/O Gateway", "ff.sm.dev_annunc.req.dev_type.iogateway",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_hse,
{ "HSE Field Device", "ff.sm.dev_annunc.req.dev_type.hse",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_h1,
{ "H1 Device", "ff.sm.dev_annunc.req.dev_type.h1",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_reserved,
{ "Reserved", "ff.sm.dev_annunc.req.dev_type.reserved",
FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type_redundant_caps,
{ "Redundant Device Type Capability", "ff.sm.dev_annunc.req.dev_type.redundant_caps",
FT_UINT8, BASE_DEC, VALS(names_dev_type), 0x07, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_type,
{ "Device Type", "ff.sm.dev_annunc.req.dev_type",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_redundancy_state_reserved,
{ "Reserved", "ff.sm.dev_annunc.req_dev_redundancy_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_redundancy_state_role,
{ "Type D-2 Device Redundancy Role", "ff.sm.dev_annunc.req_dev_redundancy_state.role",
FT_UINT8, BASE_DEC, VALS(names_type_d2_dev_redundancy_role), 0x0C, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_redundancy_state_type,
{ "Assigned Device Redundancy Type", "ff.sm.dev_annunc.req_dev_redundancy_state.type",
FT_UINT8, BASE_DEC, VALS(names_assigned_redundant_dev_type), 0x03, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dev_redundancy_state,
{ "Device Redundancy State", "ff.sm.dev_annunc.req_dev_redundancy_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dup_detection_state_reserved,
{ "Reserved", "ff.sm.dev_annunc.req.dup_detection_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dup_detection_state_pd_tag,
{ "Duplicate PD Tag", "ff.sm.dev_annunc.req.dup_detection_state.pd_tag",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dup_detection_state_device,
{ "Duplicate Device Index", "ff.sm.dev_annunc.req.dup_detection_state.device",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x01, NULL, HFILL } },
{ &hf_ff_sm_dev_annunc_req_dup_detection_state,
{ "Duplicate Detection State", "ff.sm.dev_annunc.req.dup_detection_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3. FMS Services
*/
{ &hf_ff_fms,
{ "FMS Service", "ff.fms",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.2. FMS Initiate (Confirmed Service Id = 96)
*/
{ &hf_ff_fms_init,
{ "FMS Initiate", "ff.fms.init",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.2.1. Request Message Parameters
*/
{ &hf_ff_fms_init_req,
{ "FMS Initiate Request", "ff.fms.init.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_conn_opt,
{ "Connect Option", "ff.fms.init.req.conn_opt",
FT_UINT8, BASE_DEC, VALS(names_conn_opt), 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_access_protection_supported_calling,
{ "Access Protection Supported Calling",
"ff.fms.init.req.access_protection_supported_calling",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_passwd_and_access_grps_calling,
{ "Password and Access Groups Calling",
"ff.fms.init.req.passwd_and_access_grps_calling",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_ver_od_calling,
{ "Version OD Calling", "ff.fms.init.req.ver_od_calling",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_prof_num_calling,
{ "Profile Number Calling", "ff.fms.init.req.prof_num_calling",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_req_pd_tag,
{ "PD Tag", "ff.fms.init.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.2.2. Response Message Parameters
*/
{ &hf_ff_fms_init_rsp,
{ "FMS Initiate Response", "ff.fms.init.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_rsp_ver_od_called,
{ "Version OD Called", "ff.fms.init.rsp.ver_od_called",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_rsp_prof_num_called,
{ "Profile Number Called", "ff.fms.init.rsp.prof_num_called",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.2.3. Error Message Parameters
*/
{ &hf_ff_fms_init_err,
{ "FMS Initiate Error", "ff.fms.init.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_err_err_class,
{ "Error Class", "ff.fms.init.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_err_err_code,
{ "Error Code", "ff.fms.init.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_err_additional_code,
{ "Additional Code", "ff.fms.init.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_err_additional_desc,
{ "Additional Description", "ff.fms.init.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.3. FMS Abort (Unconfirmed Service Id = 112)
*/
{ &hf_ff_fms_abort,
{ "FMS Abort", "ff.fms.abort",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.3.1. Request Message Parameters
*/
{ &hf_ff_fms_abort_req,
{ "FMS Abort Request", "ff.fms.abort.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_abort_req_detail,
{ "Abort Detail", "ff.fms.abort.req.detail",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_abort_req_abort_id,
{ "Abort Identifier", "ff.fms.abort.req.abort_id",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_abort_req_reason_code,
{ "Reason Code", "ff.fms.abort.req.reason_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_abort_req_reserved,
{ "Reserved", "ff.fms.abort.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.4. FMS Status (Confirmed Service Id = 0)
*/
{ &hf_ff_fms_status,
{ "FMS Status", "ff.fms.status",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.4.1. Request Message Parameters
*/
{ &hf_ff_fms_status_req,
{ "FMS Status Request", "ff.fms.status.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.4.2. Response Message Parameters
*/
{ &hf_ff_fms_status_rsp,
{ "FMS Status Response", "ff.fms.status.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_rsp_logical_status,
{ "Logical Status", "ff.fms.status.rsp.logical_status",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_rsp_physical_status,
{ "Physical Status", "ff.fms.status.rsp.physical_status",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_rsp_reserved,
{ "Reserved", "ff.fms.status.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_rsp_local_detail,
{ "Local Detail", "ff.fms.status.rsp.local_detail",
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.4.3. Error Message Parameters
*/
{ &hf_ff_fms_status_err,
{ "FMS Status Error", "ff.fms.status.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_err_err_class,
{ "Error Class", "ff.fms.status.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_err_err_code,
{ "Error Code", "ff.fms.status.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_err_additional_code,
{ "Additional Code", "ff.fms.status.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_status_err_additional_desc,
{ "Additional Description", "ff.fms.status.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.5. FMS Unsolicited Status (Unconfirmed Service Id = 1)
*/
{ &hf_ff_fms_unsolicited_status,
{ "FMS Unsolicited Status", "ff.fms.unsolicited_status",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.5.1. Request Message Parameters
*/
{ &hf_ff_fms_unsolicited_status_req,
{ "FMS Unsolicited Status Request", "ff.fms.unsolicited_status.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_unsolicited_status_req_logical_status,
{ "Logical Status", "ff.fms.unsolicited_status.req.logical_status",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_unsolicited_status_req_physical_status,
{ "Physical Status",
"ff.fms.unsolicited_status.req.physical_status",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_unsolicited_status_req_reserved,
{ "Reserved", "ff.fms.unsolicited_status.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_unsolicited_status_req_local_detail,
{ "Local Detail", "ff.fms.unsolicited_status.req.local_detail",
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.6. FMS Identify (Confirmed Service Id = 1)
*/
{ &hf_ff_fms_id,
{ "FMS Identify", "ff.fms.id",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.6.1. Request Message Parameters
*/
{ &hf_ff_fms_id_req,
{ "FMS Identify Request", "ff.fms.id.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.6.2. Response Message Parameters
*/
{ &hf_ff_fms_id_rsp,
{ "FMS Identify Response", "ff.fms.id.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_rsp_vendor_name,
{ "Vendor Name", "ff.fms.id.rsp.vendor_name",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_rsp_model_name,
{ "Model Name", "ff.fms.id.rsp.model_name",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_rsp_revision,
{ "Revision", "ff.fms.id.rsp.revision",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.6.3. Error Message Parameters
*/
{ &hf_ff_fms_id_err,
{ "FMS Identify Error", "ff.fms.id.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_err_err_class,
{ "Error Class", "ff.fms.id.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_err_err_code,
{ "Error Code", "ff.fms.id.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_err_additional_code,
{ "Additional Code", "ff.fms.id.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_id_err_additional_desc,
{ "Additional Description", "ff.fms.id.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.7. FMS Get OD (Confirmed Service Id = 4)
*/
{ &hf_ff_fms_get_od,
{ "FMS Get OD", "ff.fms.get_od",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.7.1. Request Message Parameters
*/
{ &hf_ff_fms_get_od_req,
{ "FMS Get OD Request", "ff.fms.get_od.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_req_all_attrs,
{ "All Attributes", "ff.fms.get_od.req.all_attrs",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_req_start_idx_flag,
{ "Start Index Flag", "ff.fms.get_od.req.start_idx_flag",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_req_reserved,
{ "Reserved", "ff.fms.get_od.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_req_idx,
{ "Index", "ff.fms.get_od.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.7.2. Response Message Parameters
*/
{ &hf_ff_fms_get_od_rsp,
{ "FMS Get OD Response", "ff.fms.get_od.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_rsp_more_follows,
{ "More Follows", "ff.fms.get_od.rsp.more_follows",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_rsp_num_of_obj_desc,
{ "Number of Object Descriptions",
"ff.fms.get_od.rsp.num_of_obj_desc",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_rsp_reserved,
{ "Reserved", "ff.fms.get_od.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_rsp_object_descriptions,
{ "List of Object Descriptions", "ff.fms.get_od.rsp.object_descriptions",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.7.3. Error Message Parameters
*/
{ &hf_ff_fms_get_od_err,
{ "FMS Get OD Error", "ff.fms.get_od.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_err_err_class,
{ "Error Class", "ff.fms.get_od.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_err_err_code,
{ "Error Code", "ff.fms.get_od.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_err_additional_code,
{ "Additional Code", "ff.fms.get_od.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_get_od_err_additional_desc,
{ "Additional Description", "ff.fms.get_od.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.8. FMS Initiate Put OD (Confirmed Service Id = 28)
*/
{ &hf_ff_fms_init_put_od,
{ "FMS Initiate Put OD", "ff.fms.init_put_od",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.8.1. Request Message Parameters
*/
{ &hf_ff_fms_init_put_od_req,
{ "FMS Initiate Put OD Request", "ff.fms.init_put_od.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_req_reserved,
{ "Reserved", "ff.fms.init_put_od.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_req_consequence,
{ "Consequence", "ff.fms.init_put_od.req.consequence",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.8.2. Response Message Parameters
*/
{ &hf_ff_fms_init_put_od_rsp,
{ "FMS Initiate Put OD Response", "ff.fms.init_put_od.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.8.3. Error Message Parameters
*/
{ &hf_ff_fms_init_put_od_err,
{ "FMS Initiate Put OD Error", "ff.fms.init_put_od.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_err_err_class,
{ "Error Class", "ff.fms.init_put_od.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_err_err_code,
{ "Error Code", "ff.fms.init_put_od.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_err_additional_code,
{ "Additional Code", "ff.fms.init_put_od.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_put_od_err_additional_desc,
{ "Additional Description",
"ff.fms.init_put_od.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.9. FMS Put OD (Confirmed Service Id = 29)
*/
{ &hf_ff_fms_put_od,
{ "FMS Put OD", "ff.fms.put_od",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.9.1. Request Message Parameters
*/
{ &hf_ff_fms_put_od_req,
{ "FMS Put OD Request", "ff.fms.put_od.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_req_num_of_obj_desc,
{ "Number of Object Descriptions",
"ff.fms.put_od.req.num_of_obj_desc",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_req_object_descriptions,
{ "List of Object Descriptions", "ff.fms.put_od.req.object_descriptions",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.9.2. Response Message Parameters
*/
{ &hf_ff_fms_put_od_rsp,
{ "FMS Put OD Response", "ff.fms.put_od.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.9.3. Error Message Parameters
*/
{ &hf_ff_fms_put_od_err,
{ "FMS Put OD Error", "ff.fms.put_od.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_err_err_class,
{ "Error Class", "ff.fms.put_od.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_err_err_code,
{ "Error Code", "ff.fms.put_od.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_err_additional_code,
{ "Additional Code", "ff.fms.put_od.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_put_od_err_additional_desc,
{ "Additional Description", "ff.fms.put_od.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.10. FMS Terminate Put OD (Confirmed Service Id = 30)
*/
{ &hf_ff_fms_terminate_put_od,
{ "FMS Terminate Put OD", "ff.fms.terminate_put_od",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.10.1. Request Message Parameters
*/
{ &hf_ff_fms_terminate_put_od_req,
{ "FMS Terminate Put OD Request", "ff.fms.terminate_put_od.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.10.2. Response Message Parameters
*/
{ &hf_ff_fms_terminate_put_od_rsp,
{ "FMS Terminate Put OD Response", "ff.fms.terminate_put_od.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.10.3. Error Message Parameters
*/
{ &hf_ff_fms_terminate_put_od_err,
{ "FMS Terminate Put OD Error", "ff.fms.terminate_put_od.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_put_od_err_index,
{ "Index", "ff.fms.terminate_put_od.err.index",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_put_od_err_err_class,
{ "Error Class", "ff.fms.terminate_put_od.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_put_od_err_err_code,
{ "Error Code", "ff.fms.terminate_put_od.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_put_od_err_additional_code,
{ "Additional Code", "ff.fms.terminate_put_od.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_put_od_err_additional_desc,
{ "Additional Description",
"ff.fms.terminate_put_od.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.11. FMS Generic Initiate Download Sequence
* (Confirmed Service Id = 31)
*/
{ &hf_ff_fms_gen_init_download_seq,
{ "FMS Generic Initiate Download Sequence",
"ff.fms.gen_init_download_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.11.1. Request Message Parameters
*/
{ &hf_ff_fms_gen_init_download_seq_req,
{ "FMS Generic Initiate Download Sequence Request",
"ff.fms.gen_init_download_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_init_download_seq_req_idx,
{ "Index",
"ff.fms.gen_init_download_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.11.2. Response Message Parameters
*/
{ &hf_ff_fms_gen_init_download_seq_rsp,
{ "FMS Generic Initiate Download Sequence Response",
"ff.fms.gen_init_download_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.11.3. Error Message Parameters
*/
{ &hf_ff_fms_gen_init_download_seq_err,
{ "FMS Generic Initiate Download Sequence Error",
"ff.fms.gen_init_download_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_init_download_seq_err_err_class,
{ "Error Class", "ff.fms.gen_init_download_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_init_download_seq_err_err_code,
{ "Error Code", "ff.fms.gen_init_download_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_init_download_seq_err_additional_code,
{ "Additional Code",
"ff.fms.gen_init_download_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_init_download_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.gen_init_download_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.12. FMS Generic Download Segment (Confirmed Service Id = 32)
*/
{ &hf_ff_fms_gen_download_seg,
{ "FMS Generic Download Segment", "ff.fms.gen_download_seg",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.12.1. Request Message Parameters
*/
{ &hf_ff_fms_gen_download_seg_req,
{ "FMS Generic Download Segment Request",
"ff.fms.gen_download_seg.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_req_idx,
{ "Index", "ff.fms.gen_download_seg.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_req_more_follows,
{ "More Follows", "ff.fms.gen_download_seg.req.more_follows",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_req_load_data,
{ "Load Data", "ff.fms.gen_download_seg.req.load_data",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.12.2. Response Message Parameters
*/
{ &hf_ff_fms_gen_download_seg_rsp,
{ "FMS Generic Download Segment Response",
"ff.fms.gen_download_seg.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.12.3. Error Message Parameters
*/
{ &hf_ff_fms_gen_download_seg_err,
{ "FMS Generic Download Segment Error",
"ff.fms.gen_download_seg.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_err_err_class,
{ "Error Class", "ff.fms.gen_download_seg.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_err_err_code,
{ "Error Code", "ff.fms.gen_download_seg.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_err_additional_code,
{ "Additional Code", "ff.fms.gen_download_seg.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_download_seg_err_additional_desc,
{ "Additional Description",
"ff.fms.gen_download_seg.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.13. FMS Generic Terminate Download Sequence
* (Confirmed Service Id = 33)
*/
{ &hf_ff_fms_gen_terminate_download_seq,
{ "FMS Generic Terminate Download Sequence",
"ff.fms.gen_terminate_download_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.13.1. Request Message Parameters
*/
{ &hf_ff_fms_gen_terminate_download_seq_req,
{ "FMS Generic Terminate Download Sequence Request",
"ff.fms.gen_terminate_download_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_req_idx,
{ "Index", "ff.fms.gen_terminate_download_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.13.2. Response Message Parameters
*/
{ &hf_ff_fms_gen_terminate_download_seq_rsp,
{ "FMS Generic Terminate Download Sequence Response",
"ff.fms.gen_terminate_download_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_rsp_final_result,
{ "Final Result",
"ff.fms.gen_terminate_download_seq.rsp.final_result",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.13.3. Error Message Parameters
*/
{ &hf_ff_fms_gen_terminate_download_seq_err,
{ "FMS Generic Terminate Download Sequence Error",
"ff.fms.gen_terminate_download_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_err_err_class,
{ "Error Class", "ff.fms.gen_terminate_download_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_err_err_code,
{ "Error Code", "ff.fms.gen_terminate_download_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_err_additional_code,
{ "Additional Code",
"ff.fms.gen_terminate_download_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_gen_terminate_download_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.gen_terminate_download_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.14. FMS Initiate Download Sequence (Confirmed Service Id = 9)
*/
{ &hf_ff_fms_init_download_seq,
{ "FMS Initiate Download Sequence",
"ff.fms.init_download_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.14.1. Request Message Parameters
*/
{ &hf_ff_fms_init_download_seq_req,
{ "FMS Initiate Download Sequence Request",
"ff.fms.init_download_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_download_seq_req_idx,
{ "Index", "ff.fms.init_download_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.14.2. Response Message Parameters
*/
{ &hf_ff_fms_init_download_seq_rsp,
{ "FMS Initiate Download Sequence Response",
"ff.fms.init_download_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.14.3. Error Message Parameters
*/
{ &hf_ff_fms_init_download_seq_err,
{ "FMS Initiate Download Sequence Error",
"ff.fms.init_download_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_download_seq_err_err_class,
{ "Error Class", "ff.fms.init_download_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_download_seq_err_err_code,
{ "Error Code", "ff.fms.init_download_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_download_seq_err_additional_code,
{ "Additional Code", "ff.fms.init_download_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_download_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.init_download_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.15. FMS Download Segment (Confirmed Service Id = 10)
*/
{ &hf_ff_fms_download_seg,
{ "FMS Download Segment", "ff.fms.download_seg",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.15.1. Request Message Parameters
*/
{ &hf_ff_fms_download_seg_req,
{ "FMS Download Segment Request", "ff.fms.download_seg.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_req_idx,
{ "Index", "ff.fms.download_seg.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.15.2. Response Message Parameters
*/
{ &hf_ff_fms_download_seg_rsp,
{ "FMS Download Segment Response", "ff.fms.download_seg.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_rsp_more_follows,
{ "Final Result", "ff.fms.download_seg.rsp.more_follows",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_rsp_load_data,
{ "Load Data", "ff.fms.download_seg.rsp.load_data",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.15.3. Error Message Parameters
*/
{ &hf_ff_fms_download_seg_err,
{ "FMS Download Segment Error", "ff.fms.download_seg.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_err_err_class,
{ "Error Class", "ff.fms.download_seg.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_err_err_code,
{ "Error Code", "ff.fms.download_seg.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_err_additional_code,
{ "Additional Code", "ff.fms.download_seg.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_download_seg_err_additional_desc,
{ "Additional Description",
"ff.fms.download_seg.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.16. FMS Terminate Download Sequence (Confirmed Service Id = 11)
*/
{ &hf_ff_fms_terminate_download_seq,
{ "FMS Terminate Download Sequence",
"ff.fms.terminate_download_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.16.1. Request Message Parameters
*/
{ &hf_ff_fms_terminate_download_seq_req,
{ "FMS Terminate Download Sequence Request",
"ff.fms.terminate_download_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_req_idx,
{ "Index", "ff.fms.terminate_download_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_req_final_result,
{ "Final Result", "ff.fms.terminate_download_seq.req.final_result",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.16.2. Response Message Parameters
*/
{ &hf_ff_fms_terminate_download_seq_rsp,
{ "FMS Terminate Download Sequence Response",
"ff.fms.terminate_download_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.16.3. Error Message Parameters
*/
{ &hf_ff_fms_terminate_download_seq_err,
{ "FMS Terminate Download Sequence Error",
"ff.fms.terminate_download_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_err_err_class,
{ "Error Class", "ff.fms.terminate_download_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_err_err_code,
{ "Error Code", "ff.fms.terminate_download_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_err_additional_code,
{ "Additional Code",
"ff.fms.terminate_download_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_download_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.terminate_download_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.17. FMS Initiate Upload Sequence (Confirmed Service Id = 12)
*/
{ &hf_ff_fms_init_upload_seq,
{ "FMS Initiate Upload Sequence", "ff.fms.init_upload_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.17.1. Request Message Parameters
*/
{ &hf_ff_fms_init_upload_seq_req,
{ "FMS Initiate Upload Sequence Request",
"ff.fms.init_upload_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_upload_seq_req_idx,
{ "Index", "ff.fms.init_upload_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.17.2. Response Message Parameters
*/
{ &hf_ff_fms_init_upload_seq_rsp,
{ "FMS Initiate Upload Sequence Response",
"ff.fms.init_upload_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.17.3. Error Message Parameters
*/
{ &hf_ff_fms_init_upload_seq_err,
{ "FMS Initiate Upload Sequence Error",
"ff.fms.init_upload_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_upload_seq_err_err_class,
{ "Error Class", "ff.fms.init_upload_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_upload_seq_err_err_code,
{ "Error Code", "ff.fms.init_upload_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_upload_seq_err_additional_code,
{ "Additional Code", "ff.fms.init_upload_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_init_upload_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.init_upload_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.18. FMS Upload Segment (Confirmed Service Id = 13)
*/
{ &hf_ff_fms_upload_seg,
{ "FMS Upload Segment", "ff.fms.upload_seg",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.18.1. Request Message Parameters
*/
{ &hf_ff_fms_upload_seg_req,
{ "FMS Upload Segment Request", "ff.fms.upload_seg.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_req_idx,
{ "Index", "ff.fms.upload_seg.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.18.2. Response Message Parameters
*/
{ &hf_ff_fms_upload_seg_rsp,
{ "FMS Upload Segment Response", "ff.fms.upload_seg.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_rsp_more_follows,
{ "More Follows", "ff.fms.upload_seg.rsp.more_follows",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_rsp_final_result,
{ "Final Result", "ff.fms.upload_seg.rsp.final_result",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.18.3. Error Message Parameters
*/
{ &hf_ff_fms_upload_seg_err,
{ "FMS Upload Segment Error", "ff.fms.upload_seg.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_err_err_class,
{ "Error Class", "ff.fms.upload_seg.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_err_err_code,
{ "Error Code", "ff.fms.upload_seg.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_err_additional_code,
{ "Additional Code", "ff.fms.upload_seg.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_upload_seg_err_additional_desc,
{ "Additional Description", "ff.fms.upload_seg.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.19. FMS Terminate Upload Sequence (Confirmed Service Id = 14)
*/
{ &hf_ff_fms_terminate_upload_seq,
{ "FMS Terminate Upload Sequence",
"ff.fms.terminate_upload_seq",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.19.1. Request Message Parameters
*/
{ &hf_ff_fms_terminate_upload_seq_req,
{ "FMS Terminate Upload Sequence Request",
"ff.fms.terminate_upload_seq.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_upload_seq_req_idx,
{ "Index", "ff.fms.terminate_upload_seq.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.19.2. Response Message Parameters
*/
{ &hf_ff_fms_terminate_upload_seq_rsp,
{ "FMS Terminate Upload Sequence Response",
"ff.fms.terminate_upload_seq.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.19.3. Error Message Parameters
*/
{ &hf_ff_fms_terminate_upload_seq_err,
{ "FMS Terminate Upload Sequence Error",
"ff.fms.terminate_upload_seq.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_upload_seq_err_err_class,
{ "Error Class", "ff.fms.terminate_upload_seq.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_upload_seq_err_err_code,
{ "Error Code", "ff.fms.terminate_upload_seq.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_upload_seq_err_additional_code,
{ "Additional Code",
"ff.fms.terminate_upload_seq.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_terminate_upload_seq_err_additional_desc,
{ "Additional Description",
"ff.fms.terminate_upload_seq.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.20. FMS Request Domain Download (Confirmed Service Id = 15)
*/
{ &hf_ff_fms_req_dom_download,
{ "FMS Request Domain Download", "ff.fms.req_dom_download",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.20.1. Request Message Parameters
*/
{ &hf_ff_fms_req_dom_download_req,
{ "FMS Request Domain Download Request",
"ff.fms.req_dom_download.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_req_idx,
{ "Index", "ff.fms.req_dom_download.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_req_additional_info,
{ "Additional Description",
"ff.fms.req_dom_download.req.additional_info",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.20.2. Response Message Parameters
*/
{ &hf_ff_fms_req_dom_download_rsp,
{ "FMS Request Domain Download Response",
"ff.fms.req_dom_download.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.20.3. Error Message Parameters
*/
{ &hf_ff_fms_req_dom_download_err,
{ "FMS Request Domain Download Error",
"ff.fms.req_dom_download.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_err_err_class,
{ "Error Class", "ff.fms.req_dom_download.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_err_err_code,
{ "Error Code", "ff.fms.req_dom_download.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_err_additional_code,
{ "Additional Code", "ff.fms.req_dom_download.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_download_err_additional_desc,
{ "Additional Description",
"ff.fms.req_dom_download.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.21. FMS Request Domain Upload (Confirmed Service Id = 16)
*/
{ &hf_ff_fms_req_dom_upload,
{ "FMS Request Domain Upload", "ff.fms.req_dom_upload",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.21.1. Request Message Parameters
*/
{ &hf_ff_fms_req_dom_upload_req,
{ "FMS Request Domain Upload Request", "ff.fms.req_dom_upload.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_req_idx,
{ "Index", "ff.fms.req_dom_upload.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_req_additional_info,
{ "Additional Description",
"ff.fms.req_dom_upload.req.additional_info",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.21.2. Response Message Parameters
*/
{ &hf_ff_fms_req_dom_upload_rsp,
{ "FMS Request Domain Upload Response", "ff.fms.req_dom_upload.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.21.3. Error Message Parameters
*/
{ &hf_ff_fms_req_dom_upload_err,
{ "FMS Request Domain Upload Error", "ff.fms.req_dom_upload.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_err_err_class,
{ "Error Class", "ff.fms.req_dom_upload.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_err_err_code,
{ "Error Code", "ff.fms.req_dom_upload.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_err_additional_code,
{ "Additional Code", "ff.fms.req_dom_upload.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_req_dom_upload_err_additional_desc,
{ "Additional Description",
"ff.fms.req_dom_upload.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.22. FMS Create Program Invocation (Confirmed Service Id = 17)
*/
{ &hf_ff_fms_create_pi,
{ "FMS Create Program Invocation", "ff.fms.create_pi",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.22.1. Request Message Parameters
*/
{ &hf_ff_fms_create_pi_req,
{ "FMS Create Program Invocation Request", "ff.fms.create_pi.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_req_reusable,
{ "Reusable", "ff.fms.create_pi.req.reusable",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_req_reserved,
{ "Reserved", "ff.fms.create_pi.req.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_req_num_of_dom_idxes,
{ "Number of Domain Indexes",
"ff.fms.create_pi.req.num_of_dom_idxes",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_req_dom_idx,
{ "Domain Index", "ff.fms.create_pi.req.list_of_dom_idxes.dom_idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.22.2. Response Message Parameters
*/
{ &hf_ff_fms_create_pi_rsp,
{ "FMS Create Program Invocation Response", "ff.fms.create_pi.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_rsp_idx,
{ "Index", "ff.fms.create_pi.rsp.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.22.3. Error Message Parameters
*/
{ &hf_ff_fms_create_pi_err,
{ "FMS Create Program Invocation Error", "ff.fms.create_pi.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_err_err_class,
{ "Error Class", "ff.fms.create_pi.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_err_err_code,
{ "Error Code", "ff.fms.create_pi.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_err_additional_code,
{ "Additional Code",
"ff.fms.create_pi.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_create_pi_err_additional_desc,
{ "Additional Description",
"ff.fms.create_pi.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.23. FMS Delete Program Invocation (Confirmed Service Id = 18)
*/
{ &hf_ff_fms_del_pi ,
{ "FMS Delete Program Invocation", "ff.fms.del_pi",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.23.1. Request Message Parameters
*/
{ &hf_ff_fms_del_pi_req,
{ "FMS Delete Program Invocation Request", "ff.fms.del_pi.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_pi_req_idx,
{ "Index", "ff.fms.del_pi.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.23.2. Response Message Parameters
*/
{ &hf_ff_fms_del_pi_rsp,
{ "FMS Delete Program Invocation Response", "ff.fms.del_pi.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.23.3. Error Message Parameters
*/
{ &hf_ff_fms_del_pi_err,
{ "FMS Delete Program Invocation Error", "ff.fms.del_pi.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_pi_err_err_class,
{ "Error Class", "ff.fms.del_pi.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_pi_err_err_code,
{ "Error Code", "ff.fms.del_pi.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_pi_err_additional_code,
{ "Additional Code",
"ff.fms.del_pi.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_pi_err_additional_desc,
{ "Additional Description",
"ff.fms.del_pi.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.24. FMS Start (Confirmed Service Id = 19)
*/
{ &hf_ff_fms_start,
{ "FMS Start", "ff.fms.start",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.24.1. Request Message Parameters
*/
{ &hf_ff_fms_start_req,
{ "FMS Start Request", "ff.fms.start.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_req_idx,
{ "Index", "ff.fms.start.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_req_execution_argument,
{ "Execution Argument", "ff.fms.start.req.execution_argument",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.24.2. Response Message Parameters
*/
{ &hf_ff_fms_start_rsp,
{ "FMS Start Response", "ff.fms.start.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.24.3. PI Error Message Parameters
*/
{ &hf_ff_fms_start_err,
{ "FMS Start Error", "ff.fms.start.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_err_pi_state,
{ "Pi State", "ff.fms.start.err.pi_state",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_err_err_class,
{ "Error Class", "ff.fms.start.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_err_err_code,
{ "Error Code", "ff.fms.start.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_err_additional_code,
{ "Additional Code", "ff.fms.start.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_start_err_additional_desc,
{ "Additional Description", "ff.fms.start.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.25. FMS Stop (Confirmed Service Id = 20)
*/
{ &hf_ff_fms_stop,
{ "FMS Stop", "ff.fms.stop",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.25.1. Request Message Parameters
*/
{ &hf_ff_fms_stop_req,
{ "FMS Stop Request", "ff.fms.stop.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_req_idx,
{ "Index", "ff.fms.stop.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.25.2. Response Message Parameters
*/
{ &hf_ff_fms_stop_rsp,
{ "FMS Stop Response", "ff.fms.stop.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.25.3. Error Message Parameters
*/
{ &hf_ff_fms_stop_err,
{ "FMS Stop Error", "ff.fms.stop.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_err_pi_state,
{ "Pi State", "ff.fms.stop.err.pi_state",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_err_err_class,
{ "Error Class", "ff.fms.stop.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_err_err_code,
{ "Error Code", "ff.fms.stop.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_err_additional_code,
{ "Additional Code", "ff.fms.stop.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_stop_err_additional_desc,
{ "Additional Description", "ff.fms.stop.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.26. FMS Resume (Confirmed Service Id = 21)
*/
{ &hf_ff_fms_resume,
{ "FMS Resume", "ff.fms.resume",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.26.1. Request Message Parameters
*/
{ &hf_ff_fms_resume_req,
{ "FMS Resume Request", "ff.fms.resume.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_req_idx,
{ "Index", "ff.fms.resume.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_req_execution_argument,
{ "Execution Argument", "ff.fms.resume.req.execution_argument",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.26.2. Response Message Parameters
*/
{ &hf_ff_fms_resume_rsp,
{ "FMS Resume Response", "ff.fms.resume.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.26.3. Error Message Parameters
*/
{ &hf_ff_fms_resume_err,
{ "FMS Resume Error", "ff.fms.resume.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_err_pi_state,
{ "Pi State", "ff.fms.resume.err.pi_state",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_err_err_class,
{ "Error Class", "ff.fms.resume.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_err_err_code,
{ "Error Code", "ff.fms.resume.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_err_additional_code,
{ "Additional Code", "ff.fms.resume.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_resume_err_additional_desc,
{ "Additional Description", "ff.fms.resume.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.27. FMS Reset (Confirmed Service Id = 22)
*/
{ &hf_ff_fms_reset,
{ "FMS Reset", "ff.fms.reset",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.27.1. Request Message Parameters
*/
{ &hf_ff_fms_reset_req,
{ "FMS Reset Request", "ff.fms.reset.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_req_idx,
{ "Index", "ff.fms.reset.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.27.2. Response Message Parameters
*/
{ &hf_ff_fms_reset_rsp,
{ "FMS Reset Response", "ff.fms.reset.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.27.3. Error Message Parameters
*/
{ &hf_ff_fms_reset_err,
{ "FMS Reset Error", "ff.fms.reset.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_err_pi_state,
{ "Pi State", "ff.fms.reset.err.pi_state",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_err_err_class,
{ "Error Class", "ff.fms.reset.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_err_err_code,
{ "Error Code", "ff.fms.reset.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_err_additional_code,
{ "Additional Code", "ff.fms.reset.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_reset_err_additional_desc,
{ "Additional Description", "ff.fms.reset.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.28. FMS Kill (Confirmed Service Id = 23)
*/
{ &hf_ff_fms_kill,
{ "FMS Kill", "ff.fms.kill",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.28.1. Request Message Parameters
*/
{ &hf_ff_fms_kill_req,
{ "FMS Kill Request", "ff.fms.kill.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.28.2. Response Message Parameters
*/
{ &hf_ff_fms_kill_rsp,
{ "FMS Kill Response", "ff.fms.kill.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.28.3. Error Message Parameters
*/
{ &hf_ff_fms_kill_err,
{ "FMS Kill Error", "ff.fms.kill.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_kill_req_idx,
{ "Index", "ff.fms.kill.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_kill_err_err_class,
{ "Error Class", "ff.fms.kill.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_kill_err_err_code,
{ "Error Code", "ff.fms.kill.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_kill_err_additional_code,
{ "Additional Code", "ff.fms.kill.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_kill_err_additional_desc,
{ "Additional Description", "ff.fms.kill.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.29. FMS Read (Confirmed Service Id = 2)
*/
{ &hf_ff_fms_read,
{ "FMS Read", "ff.fms.read",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.29.1. Request Message Parameters
*/
{ &hf_ff_fms_read_req,
{ "FMS Read Request", "ff.fms.read.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_req_idx,
{ "Index", "ff.fms.read.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.29.2. Response Message Parameters
*/
{ &hf_ff_fms_read_rsp,
{ "FMS Read Response", "ff.fms.read.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.29.3. Error Message Parameters
*/
{ &hf_ff_fms_read_err,
{ "FMS Read Error", "ff.fms.read.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_err_err_class,
{ "Error Class", "ff.fms.read.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_err_err_code,
{ "Error Code", "ff.fms.read.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_err_additional_code,
{ "Additional Code", "ff.fms.read.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_err_additional_desc,
{ "Additional Description", "ff.fms.read.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.30. FMS Read with Subindex (Confirmed Service Id = 82)
*/
{ &hf_ff_fms_read_with_subidx,
{ "FMS Read with Subindex", "ff.fms.read_with_subidx",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.30.1. Request Message Parameters
*/
{ &hf_ff_fms_read_with_subidx_req,
{ "FMS Read with Subindex Request", "ff.fms.read_with_subidx.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_req_idx,
{ "Index", "ff.fms.read_with_subidx.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_req_subidx,
{ "Index", "ff.fms.read_with_subidx.req.subidx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.30.2. Response Message Parameters
*/
{ &hf_ff_fms_read_with_subidx_rsp,
{ "FMS Read with Subindex Response", "ff.fms.read_with_subidx.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.30.3. Error Message Parameters
*/
{ &hf_ff_fms_read_with_subidx_err,
{ "FMS Read with Subindex Error", "ff.fms.read_with_subidx.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_err_err_class,
{ "Error Class", "ff.fms.read_with_subidx.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_err_err_code,
{ "Error Code", "ff.fms.read_with_subidx.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_err_additional_code,
{ "Additional Code", "ff.fms.read_with_subidx.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_read_with_subidx_err_additional_desc,
{ "Additional Description",
"ff.fms.read_with_subidx.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.31. FMS Write (Confirmed Service Id = 3)
*/
{ &hf_ff_fms_write,
{ "FMS Write", "ff.fms.write",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.31.1. Request Message Parameters
*/
{ &hf_ff_fms_write_req,
{ "FMS Write Request", "ff.fms.write.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_req_idx,
{ "Index", "ff.fms.write.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.31.2. Response Message Parameters
*/
{ &hf_ff_fms_write_rsp,
{ "FMS Write Response", "ff.fms.write.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.31.3. Error Message Parameters
*/
{ &hf_ff_fms_write_err,
{ "FMS Write Error", "ff.fms.write.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_err_err_class,
{ "Error Class", "ff.fms.write.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_err_err_code,
{ "Error Code", "ff.fms.write.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_err_additional_code,
{ "Additional Code", "ff.fms.write.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_err_additional_desc,
{ "Additional Description", "ff.fms.write.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.32. FMS Write with Subindex (Confirmed Service Id = 83)
*/
{ &hf_ff_fms_write_with_subidx,
{ "FMS Write with Subindex", "ff.fms.write_with_subidx",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.32.1. Request Message Parameters
*/
{ &hf_ff_fms_write_with_subidx_req,
{ "FMS Write with Subindex Request", "ff.fms.write_with_subidx.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_req_idx,
{ "Index", "ff.fms.write_with_subidx.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_req_subidx,
{ "Index", "ff.fms.write_with_subidx.req.subidx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.32.2. Response Message Parameters
*/
{ &hf_ff_fms_write_with_subidx_rsp,
{ "FMS Write with Subindex Response",
"ff.fms.write_with_subidx.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.32.3. Error Message Parameters
*/
{ &hf_ff_fms_write_with_subidx_err,
{ "FMS Write with Subindex Error", "ff.fms.write_with_subidx.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_err_err_class,
{ "Error Class", "ff.fms.write_with_subidx.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_err_err_code,
{ "Error Code", "ff.fms.write_with_subidx.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_err_additional_code,
{ "Additional Code", "ff.fms.write_with_subidx.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_write_with_subidx_err_additional_desc,
{ "Additional Description",
"ff.fms.write_with_subidx.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.33. FMS Define Variable List (Confirmed Service Id = 7)
*/
{ &hf_ff_fms_def_variable_list,
{ "FMS Define Variable List", "ff.fms.def_variable_list",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.33.1. Request Message Parameters
*/
{ &hf_ff_fms_def_variable_list_req,
{ "FMS Define Variable List Request",
"ff.fms.def_variable_list.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_req_num_of_idxes,
{ "Number of Indexes", "ff.fms.def_variable_list.req.num_of_idxes",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_req_idx,
{ "Index", "ff.fms.def_variable_list.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.33.2. Response Message Parameters
*/
{ &hf_ff_fms_def_variable_list_rsp,
{ "FMS Define Variable List Response",
"ff.fms.def_variable_list.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_rsp_idx,
{ "Index", "ff.fms.def_variable_list.rsp.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.33.3. Error Message Parameters
*/
{ &hf_ff_fms_def_variable_list_err,
{ "FMS Define Variable List Error", "ff.fms.def_variable_list.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_err_err_class,
{ "Error Class", "ff.fms.def_variable_list.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_err_err_code,
{ "Error Code", "ff.fms.def_variable_list.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_err_additional_code,
{ "Additional Code", "ff.fms.def_variable_list.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_def_variable_list_err_additional_desc,
{ "Additional Description",
"ff.fms.def_variable_list.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.34. FMS Delete Variable List (Confirmed Service Id = 8)
*/
{ &hf_ff_fms_del_variable_list,
{ "FMS Delete Variable List", "ff.fms.del_variable_list",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.34.1. Request Message Parameters
*/
{ &hf_ff_fms_del_variable_list_req,
{ "FMS Delete Variable List Request",
"ff.fms.del_variable_list.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_variable_list_req_idx,
{ "Index", "ff.fms.del_variable_list.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.34.2. Response Message Parameters
*/
{ &hf_ff_fms_del_variable_list_rsp,
{ "FMS Delete Variable List Response",
"ff.fms.del_variable_list.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.34.3. Error Message Parameters
*/
{ &hf_ff_fms_del_variable_list_err,
{ "FMS Delete Variable List Error", "ff.fms.del_variable_list.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_variable_list_err_err_class,
{ "Error Class", "ff.fms.del_variable_list.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_variable_list_err_err_code,
{ "Error Code", "ff.fms.del_variable_list.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_variable_list_err_additional_code,
{ "Additional Code", "ff.fms.del_variable_list.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_del_variable_list_err_additional_desc,
{ "Additional Description",
"ff.fms.del_variable_list.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.35. FMS Information Report (Unconfirmed Service Id = 0)
*/
{ &hf_ff_fms_info_report,
{ "FMS Information Report", "ff.fms.info_report",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.35.1. Request Message Parameters
*/
{ &hf_ff_fms_info_report_req,
{ "FMS Information Report Request", "ff.fms.info_report.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_req_idx,
{ "Index", "ff.fms.info_report.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.36. FMS Information Report with Subindex
* (Unconfirmed Service Id = 16)
*/
{ &hf_ff_fms_info_report_with_subidx,
{ "FMS Information Report with Subindex",
"ff.fms.info_report_with_subidx",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.36.1. Request Message Parameters
*/
{ &hf_ff_fms_info_report_with_subidx_req,
{ "FMS Information Report with Subindex Request",
"ff.fms.info_report_with_subidx.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_with_subidx_req_idx,
{ "Index", "ff.fms.info_report_with_subidx.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_with_subidx_req_subidx,
{ "Subindex", "ff.fms.info_report_with_subidx.req.subidx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.37. FMS Information Report On Change
* (Unconfirmed Service Id = 17)
*/
{ &hf_ff_fms_info_report_on_change,
{ "FMS Information Report On Change with Subindex",
"ff.fms.info_report_on_change",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.37.1. Request Message Parameters
*/
{ &hf_ff_fms_info_report_on_change_req,
{ "FMS Information Report On Change with Subindex Request",
"ff.fms.info_report_on_change.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_on_change_req_idx,
{ "Index", "ff.fms.info_report_on_change.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.38. FMS Information Report On Change with Subindex
* (Unconfirmed Service Id = 18)
*/
{ &hf_ff_fms_info_report_on_change_with_subidx,
{ "FMS Information Report On Change",
"ff.fms.info_report_on_change_with_subidx",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.38.1. Request Message Parameters
*/
{ &hf_ff_fms_info_report_on_change_with_subidx_req,
{ "FMS Information Report On Change Request",
"ff.fms.info_report_on_change_with_subidx.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_on_change_with_subidx_req_idx,
{ "Index", "ff.fms.info_report_on_change_with_subidx.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_info_report_on_change_with_subidx_req_subidx,
{ "Subindex", "ff.fms.info_report_on_change_with_subidx.req.subidx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.39. FMS Event Notification (Unconfirmed Service Id = 2)
*/
{ &hf_ff_fms_ev_notification,
{ "FMS Event Notification", "ff.fms.ev_notification",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.39.1. Request Message Parameters
*/
{ &hf_ff_fms_ev_notification_req,
{ "FMS Event Notification Request", "ff.fms.ev_notification.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ev_notification_req_idx,
{ "Index", "ff.fms.ev_notification.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ev_notification_req_ev_num,
{ "Event Number", "ff.fms.ev_notification.req.ev_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.40. FMS Alter Event Condition Monitoring
* (Confirmed Service Id = 24)
*/
{ &hf_ff_fms_alter_ev_condition_monitoring,
{ "FMS Alter Event Condition Monitoring",
"ff.fms.alter_ev_condition_monitoring",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.40.1. Request Message Parameters
*/
{ &hf_ff_fms_alter_ev_condition_monitoring_req,
{ "FMS Alter Event Condition Monitoring Request",
"ff.fms.alter_ev_condition_monitoring.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_req_idx,
{ "Index", "ff.fms.alter_ev_condition_monitoring.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_req_enabled,
{ "Enabled", "ff.fms.alter_ev_condition_monitoring.req.enabled",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.40.2. Response Message Parameters
*/
{ &hf_ff_fms_alter_ev_condition_monitoring_rsp,
{ "FMS Alter Event Condition Monitoring Response",
"ff.fms.alter_ev_condition_monitoring.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.40.3. Error Message Parameters
*/
{ &hf_ff_fms_alter_ev_condition_monitoring_err,
{ "FMS Alter Event Condition Monitoring Error",
"ff.fms.alter_ev_condition_monitoring.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_err_err_class,
{ "Error Class",
"ff.fms.alter_ev_condition_monitoring.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_err_err_code,
{ "Error Code", "ff.fms.alter_ev_condition_monitoring.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_err_additional_code,
{ "Additional Code",
"ff.fms.alter_ev_condition_monitoring.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_alter_ev_condition_monitoring_err_additional_desc,
{ "Additional Description",
"ff.fms.alter_ev_condition_monitoring.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.41. FMS Acknowledge Event Notification
* (Confirmed Service Id = 25)
*/
{ &hf_ff_fms_ack_ev_notification,
{ "FMS Acknowledge Event Notification",
"ff.fms.ack_ev_notification",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.41.1. Request Message Parameters
*/
{ &hf_ff_fms_ack_ev_notification_req,
{ "FMS Acknowledge Event Notification Request",
"ff.fms.ack_ev_notification.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_req_idx,
{ "Index", "ff.fms.ack_ev_notification.req.idx",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_req_ev_num,
{ "Event Number", "ff.fms.ack_ev_notification.req.ev_num",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.41.2. Response Message Parameters
*/
{ &hf_ff_fms_ack_ev_notification_rsp,
{ "FMS Acknowledge Event Notification Response",
"ff.fms.ack_ev_notification.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.3.41.3. Error Message Parameters
*/
{ &hf_ff_fms_ack_ev_notification_err,
{ "FMS Acknowledge Event Notification Error",
"ff.fms.ack_ev_notification.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_err_err_class,
{ "Error Class", "ff.fms.ack_ev_notification.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_err_err_code,
{ "Error Code", "ff.fms.ack_ev_notification.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_err_additional_code,
{ "Additional Code",
"ff.fms.ack_ev_notification.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_fms_ack_ev_notification_err_additional_desc,
{ "Additional Description",
"ff.fms.ack_ev_notification.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4. LAN Redundancy Services
*/
{ &hf_ff_lr,
{ "LAN Redundancy Service", "ff.lr",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.1. LAN Redundancy Get Information (Confirmed Service Id = 1)
*/
{ &hf_ff_lr_get_info,
{ "LAN Redundancy Get Information",
"ff.lr.get_info",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.1.1. Request Message Parameters
*/
{ &hf_ff_lr_get_info_req,
{ "LAN Redundancy Get Information Request",
"ff.lr.get_info.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.1.2. Response Message Parameters
*/
{ &hf_ff_lr_get_info_rsp,
{ "LAN Redundancy Get Information Response",
"ff.lr.get_info.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_attrs_ver,
{ "LAN Redundancy Attributes Version",
"ff.lr.get_info.rsp.lr_attrs_ver",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_max_msg_num_diff,
{ "Max Message Number Difference",
"ff.lr.get_info.rsp.max_msg_num_diff",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_reserved,
{ "Reserved",
"ff.lr.get_info.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_diagnostic_msg_intvl,
{ "Diagnostic Message Interval",
"ff.lr.get_info.rsp.diagnostic_msg_intvl",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_aging_time,
{ "Aging Time",
"ff.lr.get_info.rsp.aging_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_send_addr,
{ "Diagnostic Message Interface A Send Address",
"ff.lr.get_info.rsp.diagnostic_msg_if_a_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_diagnostic_msg_if_a_recv_addr,
{ "Diagnostic Message Interface A Receive Address",
"ff.lr.get_info.rsp.diagnostic_msg_if_a_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_send_addr,
{ "Diagnostic Message Interface B Send Address",
"ff.lr.get_info.rsp.diagnostic_msg_if_b_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_diagnostic_msg_if_b_recv_addr,
{ "Diagnostic Message Interface B Receive Address",
"ff.lr.get_info.rsp.diagnostic_msg_if_b_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_reserved,
{ "Reserved",
"ff.lr.get_info.rsp.lr_flags.reserved",
FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_load_balance,
{ "Load Balancing",
"ff.lr.get_info.rsp.lr_flags.load_balance",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_diag,
{ "Diagnosis Using Own Messages",
"ff.lr.get_info.rsp.lr_flags.diag",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_multi_recv,
{ "Single Multicast Message Reception Interface",
"ff.lr.get_info.rsp.lr_flags.multi_recv",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_cross_cable,
{ "Crossed Cable Detection",
"ff.lr.get_info.rsp.lr_flags.cross_cable",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags_multi_trans,
{ "Single Multicast Message Transmission Interface",
"ff.lr.get_info.rsp.lr_flags.multi_trans",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL } },
{ &hf_ff_lr_get_info_rsp_lr_flags,
{ "LAN Redundancy Flags",
"ff.lr.get_info.rsp.lr_flags",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.1.3. Error Message Parameters
*/
{ &hf_ff_lr_get_info_err,
{ "LAN Redundancy Get Information Error",
"ff.lr.get_info.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_err_err_class,
{ "Error Class", "ff.lr.get_info.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_err_err_code,
{ "Error Code", "ff.lr.get_info.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_err_additional_code,
{ "Additional Code",
"ff.lr.get_info.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_info_err_additional_desc,
{ "Additional Description",
"ff.lr.get_info.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.2. LAN Redundancy Put Information (Confirmed Service Id = 2)
*/
{ &hf_ff_lr_put_info,
{ "LAN Redundancy Put Information", "ff.lr.put_info",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.2.1. Request Message Parameters
*/
{ &hf_ff_lr_put_info_req,
{ "LAN Redundancy Put Information Request", "ff.lr.put_info.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_attrs_ver,
{ "LAN Redundancy Attributes Version",
"ff.lr.put_info.req.lr_attrs_ver",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_max_msg_num_diff,
{ "Max Message Number Difference",
"ff.lr.put_info.req.max_msg_num_diff",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_reserved,
{ "Reserved",
"ff.lr.put_info.req.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_diagnostic_msg_intvl,
{ "Diagnostic Message Interval",
"ff.lr.put_info.req.diagnostic_msg_intvl",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_aging_time,
{ "Aging Time",
"ff.lr.put_info.req.aging_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_diagnostic_msg_if_a_send_addr,
{ "Diagnostic Message Interface A Send Address",
"ff.lr.put_info.req.diagnostic_msg_if_a_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_diagnostic_msg_if_a_recv_addr,
{ "Diagnostic Message Interface A Receive Address",
"ff.lr.put_info.req.diagnostic_msg_if_a_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_diagnostic_msg_if_b_send_addr,
{ "Diagnostic Message Interface B Send Address",
"ff.lr.put_info.req.diagnostic_msg_if_b_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_diagnostic_msg_if_b_recv_addr,
{ "Diagnostic Message Interface B Receive Address",
"ff.lr.put_info.req.diagnostic_msg_if_b_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_reserved,
{ "Reserved",
"ff.lr.put_info.req.lr_flags.reserved",
FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_load_balance,
{ "Load Balancing",
"ff.lr.put_info.req.lr_flags.load_balance",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_diag,
{ "Diagnosis Using Own Messages",
"ff.lr.put_info.req.lr_flags.diag",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_multi_recv,
{ "Single Multicast Message Reception Interface",
"ff.lr.put_info.req.lr_flags.multi_recv",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_cross_cable,
{ "Crossed Cable Detection",
"ff.lr.put_info.req.lr_flags.cross_cable",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags_multi_trans,
{ "Single Multicast Message Transmission Interface",
"ff.lr.put_info.req.lr_flags.multi_trans",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL } },
{ &hf_ff_lr_put_info_req_lr_flags,
{ "LAN Redundancy Flags",
"ff.lr.put_info.req.lr_flags",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.2.2. Response Message Parameters
*/
{ &hf_ff_lr_put_info_rsp,
{ "LAN Redundancy Put Information Response",
"ff.lr.put_info.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_attrs_ver,
{ "LAN Redundancy Attributes Version",
"ff.lr.put_info.rsp.lr_attrs_ver",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_max_msg_num_diff,
{ "Max Message Number Difference",
"ff.lr.put_info.rsp.max_msg_num_diff",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_reserved,
{ "Reserved",
"ff.lr.put_info.rsp.reserved",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_diagnostic_msg_intvl,
{ "Diagnostic Message Interval",
"ff.lr.put_info.rsp.diagnostic_msg_intvl",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_aging_time,
{ "Aging Time",
"ff.lr.put_info.rsp.aging_time",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_send_addr,
{ "Diagnostic Message Interface A Send Address",
"ff.lr.put_info.rsp.diagnostic_msg_if_a_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_diagnostic_msg_if_a_recv_addr,
{ "Diagnostic Message Interface A Receive Address",
"ff.lr.put_info.rsp.diagnostic_msg_if_a_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_send_addr,
{ "Diagnostic Message Interface B Send Address",
"ff.lr.put_info.rsp.diagnostic_msg_if_b_send_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_diagnostic_msg_if_b_recv_addr,
{ "Diagnostic Message Interface B Receive Address",
"ff.lr.put_info.rsp.diagnostic_msg_if_b_recv_addr",
FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_reserved,
{ "Reserved",
"ff.lr.put_info.rsp.lr_flags.reserved",
FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_load_balance,
{ "Load Balancing",
"ff.lr.put_info.rsp.lr_flags.load_balance",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_diag,
{ "Diagnosis Using Own Messages",
"ff.lr.put_info.rsp.lr_flags.diag",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_multi_recv,
{ "Single Multicast Message Reception Interface",
"ff.lr.put_info.rsp.lr_flags.multi_recv",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_cross_cable,
{ "Crossed Cable Detection",
"ff.lr.put_info.rsp.lr_flags.cross_cable",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags_multi_trans,
{ "Single Multicast Message Transmission Interface",
"ff.lr.put_info.rsp.lr_flags.multi_trans",
FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL } },
{ &hf_ff_lr_put_info_rsp_lr_flags,
{ "LAN Redundancy Flags",
"ff.lr.put_info.rsp.lr_flags",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.2.3. Error Message Parameters
*/
{ &hf_ff_lr_put_info_err,
{ "LAN Redundancy Put Information Error", "ff.lr.put_info.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_err_err_class,
{ "Error Class", "ff.lr.put_info.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_err_err_code,
{ "Error Code", "ff.lr.put_info.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_err_additional_code,
{ "Additional Code",
"ff.lr.put_info.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_put_info_err_additional_desc,
{ "Additional Description",
"ff.lr.put_info.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.3. LAN Redundancy Get Statistics (Confirmed Service Id = 3)
*/
{ &hf_ff_lr_get_statistics,
{ "LAN Redundancy Get Statistics",
"ff.lr.get_statistics",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.3.1. Request Message Parameters
*/
{ &hf_ff_lr_get_statistics_req,
{ "LAN Redundancy Get Statistics Request",
"ff.lr.get_statistics.req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.3.2. Response Message Parameters
*/
{ &hf_ff_lr_get_statistics_rsp,
{ "LAN Redundancy Get Statistics Response",
"ff.lr.get_statistics.rsp",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_a,
{ "Error Code", "ff.lr.get_statistics.rsp.num_diag_svr_ind_recv_a",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_a,
{ "Error Code", "ff.lr.get_statistics.rsp.num_diag_svr_ind_miss_a",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_a,
{ "Error Code",
"ff.lr.get_statistics.rsp.num_rem_dev_diag_recv_fault_a",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_recv_b,
{ "Error Code", "ff.lr.get_statistics.rsp.num_diag_svr_ind_recv_b",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_diag_svr_ind_miss_b,
{ "Error Code", "ff.lr.get_statistics.rsp.num_diag_svr_ind_miss_b",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_rem_dev_diag_recv_fault_b,
{ "Error Code",
"ff.lr.get_statistics.rsp.num_rem_dev_diag_recv_fault_b",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_num_x_cable_stat,
{ "Error Code", "ff.lr.get_statistics.rsp.num_x_cable_stat",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_rsp_x_cable_stat,
{ "Error Code", "ff.lr.get_statistics.rsp.x_cable_stat",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.3.3. Error Message Parameters
*/
{ &hf_ff_lr_get_statistics_err,
{ "LAN Redundancy Get Statistics Error",
"ff.lr.get_statistics.err",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_err_err_class,
{ "Error Class", "ff.lr.get_statistics.err.err_class",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &names_err_class_ext, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_err_err_code,
{ "Error Code", "ff.lr.get_statistics.err.err_code",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_err_additional_code,
{ "Additional Code",
"ff.lr.get_statistics.err.additional_code",
FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_get_statistics_err_additional_desc,
{ "Additional Description",
"ff.lr.get_statistics.err.additional_desc",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.4 Diagnostic Message (Unconfirmed Service Id = 1)
*/
{ &hf_ff_lr_diagnostic_msg,
{ "Diagnostic Message", "ff.lr.diagnostic_msg",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/*
* 6.5.4.4.1. Request Message Parameters
*/
{ &hf_ff_lr_diagnostic_msg_req,
{ "Diagnostic Message Request", "ff.lr.diagnostic_msg_req",
FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_dev_idx,
{ "Device Index", "ff.lr.diagnostic_msg.req.dev_idx",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_num_of_network_ifs,
{ "Number of Network Interfaces",
"ff.lr.diagnostic_msg.req.num_of_network_ifs",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_transmission_if,
{ "Transmission Interface",
"ff.lr.diagnostic_msg.req.transmission_if",
FT_UINT8, BASE_DEC, VALS(names_transmission_interface), 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_diagnostic_msg_intvl,
{ "Diagnostic Message Interval",
"ff.lr.diagnostic_msg.req.diagnostic_msg_intvl",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_pd_tag,
{ "PD Tag", "ff.lr.diagnostic_msg.req.pd_tag",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_reserved,
{ "Reserved", "ff.lr.diagnostic_msg.req.reserved",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_num_of_if_statuses,
{ "Number of Interface Statuses",
"ff.lr.diagnostic_msg.req.num_of_if_statuses",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_if_a_to_a_status,
{ "Interface AtoA Status",
"ff.lr.diagnostic_msg.req.if_a_to_a_status",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_if_b_to_a_status,
{ "Interface BtoA Status",
"ff.lr.diagnostic_msg.req.if_b_to_a_status",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_if_a_to_b_status,
{ "Interface AtoB Status",
"ff.lr.diagnostic_msg.req.if_a_to_b_status",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_if_b_to_b_status,
{ "Interface BtoB Status",
"ff.lr.diagnostic_msg.req.if_b_to_b_status",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_dup_detection_state_reserved,
{ "Reserved", "ff.lr.diagnostic_msg.req.dup_detection_state.reserved",
FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_dup_detection_state_pd_tag,
{ "Duplicate PD Tag", "ff.lr.diagnostic_msg.req.dup_detection_state.pd_tag",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_dup_detection_state_device,
{ "Duplicate Device Index", "ff.lr.diagnostic_msg.req.dup_detection_state.device",
FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x01, NULL, HFILL } },
{ &hf_ff_lr_diagnostic_msg_req_dup_detection_state,
{ "Duplicate Detection State", "ff.lr.diagnostic_msg.req.dup_detection_state",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
};
static gint *ett[] = {
&ett_ff,
&ett_ff_fda_msg_hdr,
&ett_ff_fda_msg_hdr_proto_and_type,
&ett_ff_fda_msg_hdr_opts,
&ett_ff_fda_msg_hdr_srv,
&ett_ff_fda_msg_trailer,
&ett_ff_fda_open_sess_req,
&ett_ff_fda_open_sess_rsp,
&ett_ff_fda_open_sess_err,
&ett_ff_fda_idle_req,
&ett_ff_fda_idle_rsp,
&ett_ff_fda_idle_err,
&ett_ff_sm_find_tag_query_req,
&ett_ff_sm_find_tag_reply_req,
&ett_ff_sm_find_tag_reply_req_dup_detection_state,
&ett_ff_sm_find_tag_reply_req_list_of_fda_addr_selectors,
&ett_ff_sm_id_req,
&ett_ff_sm_id_rsp,
&ett_ff_sm_id_rsp_smk_state,
&ett_ff_sm_id_rsp_dev_type,
&ett_ff_sm_id_rsp_dev_redundancy_state,
&ett_ff_sm_id_rsp_dup_detection_state,
&ett_ff_sm_id_rsp_entries_h1_live_list,
&ett_ff_sm_id_rsp_h1_live_list,
&ett_ff_sm_id_rsp_entries_node_addr,
&ett_ff_sm_id_rsp_h1_node_addr,
&ett_ff_sm_id_err,
&ett_ff_sm_clear_addr_req,
&ett_ff_sm_clear_addr_rsp,
&ett_ff_sm_clear_addr_err,
&ett_ff_sm_set_assign_info_req,
&ett_ff_sm_set_assign_info_req_dev_redundancy_state,
&ett_ff_sm_set_assign_info_req_clear_dup_detection_state,
&ett_ff_sm_set_assign_info_rsp,
&ett_ff_sm_set_assign_info_err,
&ett_ff_sm_clear_assign_info_req,
&ett_ff_sm_clear_assign_info_rsp,
&ett_ff_sm_clear_assign_info_err,
&ett_ff_sm_dev_annunc_req,
&ett_ff_sm_dev_annunc_req_smk_state,
&ett_ff_sm_dev_annunc_req_dev_type,
&ett_ff_sm_dev_annunc_req_dev_redundancy_state,
&ett_ff_sm_dev_annunc_req_dup_detection_state,
&ett_ff_sm_dev_annunc_req_entries_h1_live_list,
&ett_ff_sm_dev_annunc_req_h1_live_list,
&ett_ff_sm_dev_annunc_req_entries_node_addr,
&ett_ff_sm_dev_annunc_req_h1_node_addr,
&ett_ff_fms_init_req,
&ett_ff_fms_init_rep,
&ett_ff_fms_init_err,
&ett_ff_fms_abort_req,
&ett_ff_fms_status_req,
&ett_ff_fms_status_rsp,
&ett_ff_fms_status_err,
&ett_ff_fms_unsolicited_status_req,
&ett_ff_fms_id_req,
&ett_ff_fms_id_rsp,
&ett_ff_fms_id_err,
&ett_ff_fms_get_od_req,
&ett_ff_fms_get_od_rsp,
&ett_ff_fms_get_od_err,
&ett_ff_fms_init_put_od_req,
&ett_ff_fms_init_put_od_rsp,
&ett_ff_fms_init_put_od_err,
&ett_ff_fms_put_od_req,
&ett_ff_fms_put_od_rsp,
&ett_ff_fms_put_od_err,
&ett_ff_fms_terminate_put_od_req,
&ett_ff_fms_terminate_put_od_rsp,
&ett_ff_fms_terminate_put_od_err,
&ett_ff_fms_gen_init_download_seq_req,
&ett_ff_fms_gen_init_download_seq_rep,
&ett_ff_fms_gen_init_download_seq_err,
&ett_ff_fms_gen_download_seg_req,
&ett_ff_fms_gen_download_seg_rsp,
&ett_ff_fms_gen_download_seg_err,
&ett_ff_fms_gen_terminate_download_seq_req,
&ett_ff_fms_gen_terminate_download_seq_rsp,
&ett_ff_fms_gen_terminate_download_seq_err,
&ett_ff_fms_init_download_seq_req,
&ett_ff_fms_init_download_seq_rsp,
&ett_ff_fms_init_download_seq_err,
&ett_ff_fms_download_seg_req,
&ett_ff_fms_download_seg_rsp,
&ett_ff_fms_download_seg_err,
&ett_ff_fms_terminate_download_seq_req,
&ett_ff_fms_terminate_download_seq_rsp,
&ett_ff_fms_terminate_download_seq_err,
&ett_ff_fms_init_upload_seq_req,
&ett_ff_fms_init_upload_seq_rsp,
&ett_ff_fms_init_upload_seq_err,
&ett_ff_fms_upload_seg_req,
&ett_ff_fms_upload_seg_rsp,
&ett_ff_fms_upload_seg_err,
&ett_ff_fms_terminate_upload_seq_req,
&ett_ff_fms_terminate_upload_seq_rsp,
&ett_ff_fms_terminate_upload_seq_err,
&ett_ff_fms_req_dom_download_req,
&ett_ff_fms_req_dom_download_rsp,
&ett_ff_fms_req_dom_download_err,
&ett_ff_fms_req_dom_upload_req,
&ett_ff_fms_req_dom_upload_rsp,
&ett_ff_fms_req_dom_upload_err,
&ett_ff_fms_create_pi_req,
&ett_ff_fms_create_pi_req_list_of_dom_idxes,
&ett_ff_fms_create_pi_rsp,
&ett_ff_fms_create_pi_err,
&ett_ff_fms_del_pi_req,
&ett_ff_fms_del_pi_rsp,
&ett_ff_fms_del_pi_err,
&ett_ff_fms_start_req,
&ett_ff_fms_start_rsp,
&ett_ff_fms_start_err,
&ett_ff_fms_stop_req,
&ett_ff_fms_stop_rsp,
&ett_ff_fms_stop_err,
&ett_ff_fms_resume_req,
&ett_ff_fms_resume_rsp,
&ett_ff_fms_resume_err,
&ett_ff_fms_reset_req,
&ett_ff_fms_reset_rsp,
&ett_ff_fms_reset_err,
&ett_ff_fms_kill_req,
&ett_ff_fms_kill_rsp,
&ett_ff_fms_kill_err,
&ett_ff_fms_read_req,
&ett_ff_fms_read_rsp,
&ett_ff_fms_read_err,
&ett_ff_fms_read_with_subidx_req,
&ett_ff_fms_read_with_subidx_rsp,
&ett_ff_fms_read_with_subidx_err,
&ett_ff_fms_write_req,
&ett_ff_fms_write_rsp,
&ett_ff_fms_write_err,
&ett_ff_fms_write_with_subidx_req,
&ett_ff_fms_write_with_subidx_rsp,
&ett_ff_fms_write_with_subidx_err,
&ett_ff_fms_def_variable_list_req,
&ett_ff_fms_def_variable_list_req_list_of_idxes,
&ett_ff_fms_def_variable_list_rsp,
&ett_ff_fms_def_variable_list_err,
&ett_ff_fms_del_variable_list_req,
&ett_ff_fms_del_variable_list_rsp,
&ett_ff_fms_del_variable_list_err,
&ett_ff_fms_info_report_req,
&ett_ff_fms_info_report_with_subidx_req,
&ett_ff_fms_info_report_on_change_req,
&ett_ff_fms_info_report_on_change_with_subidx_req,
&ett_ff_fms_ev_notification_req,
&ett_ff_fms_alter_ev_condition_monitoring_req,
&ett_ff_fms_alter_ev_condition_monitoring_rsp,
&ett_ff_fms_alter_ev_condition_monitoring_err,
&ett_ff_fms_ack_ev_notification_req,
&ett_ff_fms_ack_ev_notification_rsp,
&ett_ff_fms_ack_ev_notification_err,
&ett_ff_lr_get_info_req,
&ett_ff_lr_get_info_rsp,
&ett_ff_lr_get_info_rsp_lr_flags,
&ett_ff_lr_get_info_err,
&ett_ff_lr_put_info_req,
&ett_ff_lr_put_info_req_lr_flags,
&ett_ff_lr_put_info_rsp,
&ett_ff_lr_put_info_rsp_lr_flags,
&ett_ff_lr_put_info_err,
&ett_ff_lr_get_statistics_req,
&ett_ff_lr_get_statistics_rsp,
&ett_ff_lr_get_statistics_rsp_list_of_x_cable_stat,
&ett_ff_lr_get_statistics_err,
&ett_ff_lr_diagnostic_msg_req,
&ett_ff_lr_diagnostic_msg_req_dup_detection_stat,
&ett_ff_lr_diagnostic_msg_req_a_to_a_status,
&ett_ff_lr_diagnostic_msg_req_b_to_a_status,
&ett_ff_lr_diagnostic_msg_req_a_to_b_status,
&ett_ff_lr_diagnostic_msg_req_b_to_b_status,
};
proto_ff = proto_register_protocol("FOUNDATION Fieldbus", "FF", "ff");
proto_register_field_array(proto_ff, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
void
proto_reg_handoff_ff(void)
{
/*
* 4.8. Using UDP and TCP
*/
ff_udp_handle = create_dissector_handle(dissect_ff_udp, proto_ff);
ff_tcp_handle = create_dissector_handle(dissect_ff_tcp, proto_ff);
/*
* 4.8.4.2. Use
*
* - Device Annunciation
* - Client / Server
* - Set/Clear Assignment Info and Clear Address
* - SM Identify
* - SM Find Tag
* - LAN Redundancy Get and Put Information
*/
dissector_add_uint_range_with_preference("udp.port", UDP_PORT_FF_RANGE, ff_udp_handle);
dissector_add_uint_with_preference("tcp.port", TCP_PORT_FF_FMS, ff_tcp_handle);
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/