wireshark/epan/dissectors/packet-ff.c
Michael Mann 2eb7b05b8c Convert most UDP dissectors to use "auto" preferences.
Similar to the "tcp.port" changes in I99604f95d426ad345f4b494598d94178b886eb67,
convert dissectors that use "udp.port".

More cleanup done on dissectors that use both TCP and UDP dissector
tables, so that less preference callbacks exist.

Change-Id: If07be9b9e850c244336a7069599cd554ce312dd3
Reviewed-on: https://code.wireshark.org/review/18120
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-10-13 02:51:18 +00:00

15314 lines
492 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
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
* /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"
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|ENC_NA);
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|ENC_NA);
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|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.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|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.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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_query_req_vfd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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 const int * 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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_find_tag_reply_req_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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 const int * 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 const int * 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 const int * 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 const int * 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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_id_rsp_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|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.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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_addr_req_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|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.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 const int * 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 const int * 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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_set_assign_info_req_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|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.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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_clear_assign_info_req_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|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.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 const int * 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 const int * 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 const int * 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 const int * 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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_sm_dev_annunc_req_pd_tag, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|ENC_NA);
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|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.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|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.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|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_fms_id_rsp_model_name, tvb, offset, 32, ENC_ASCII|ENC_NA);
offset += 32;
length -= 32;
proto_tree_add_item(sub_tree,
hf_ff_fms_id_rsp_revision, tvb, offset, 32, ENC_ASCII|ENC_NA);
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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|ENC_NA);
}
}
/*
* 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|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.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|ENC_NA);
}
}
/*
* 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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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.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|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. 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 const int * 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|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. 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 const int * 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 const int * 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|ENC_NA);
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|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.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 const int * 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|ENC_NA);
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 const int * 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 const int * 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, 12, 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 += 12;
length -= 12;
/*
* 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 tvb_captured_length(tvb);
}
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,
12, 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)
{
guint32 length;
/* Make sure at least the header is there */
if (tvb_captured_length(tvb) < 12)
return 0;
length = tvb_get_ntohl(tvb, 8);
/* Make sure the length field is valid */
if ((length > tvb_reported_length(tvb)) ||
(length < 12))
return 0;
dissect_ff(tvb, pinfo, tree, data);
return tvb_reported_length(tvb);
}
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_UINT8, 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_UINT16, 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_UINT8, 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_UINT8, 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_UINT8, 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_UINT8, 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 - http://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:
*/