From 63bc18bb95799a9c5d2855ebc9869a9b9652edcc Mon Sep 17 00:00:00 2001 From: Michal Ruprich Date: Nov 25 2021 11:06:21 +0000 Subject: New version 3.6.0 Fix for CVE-2021-39920, CVE-2021-39921, CVE-2021-39922, CVE-2021-39923, CVE-2021-39924, CVE-2021-39925, CVE-2021-39926, CVE-2021-39928, CVE-2021-39929 --- diff --git a/sources b/sources index 8bbce52..6bfbc40 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (wireshark-3.4.9.tar.xz) = 479abcf7b44504a269b73201da5aabac0d7770cd779a325df3214b6df5dc37e175f2889165a933c2902001a06c8141768f35cd8ca35cc55fc6cf30a482ea27eb -SHA512 (SIGNATURES-3.4.9.txt) = 989192fa4d2c3377ae1b349cda2b7fdff6b9decfc28a59ee73b175a9c1c7eeb1bd5261360f98c1751991f35e4bf698e75b80b47a043ca4c115b1b10e41729d66 +SHA512 (wireshark-3.6.0.tar.xz) = 7c8afdee8957eb794030e0818a686c0efabc8ad9547449f434fc7299c7b7e624347698fdc7a42afac150eb86c8ca3d1d6360c29525bb35946619c4636f721094 +SHA512 (SIGNATURES-3.6.0.txt) = 52d306dcb5afa949e97b760a0d7aaec2f46f0501f80a637a8b1e6715752a0fe4139f0599c71a6befd86029c3b9bcf63862ac272c43201ba1028c9431b7226d8a diff --git a/wireshark-0002-Customize-permission-denied-error.patch b/wireshark-0002-Customize-permission-denied-error.patch index db8296f..cad4663 100644 --- a/wireshark-0002-Customize-permission-denied-error.patch +++ b/wireshark-0002-Customize-permission-denied-error.patch @@ -7,10 +7,10 @@ because of permissions. Signed-off-by: Jan Safranek -diff --git a/capchild/capture_sync.c b/capchild/capture_sync.c +diff --git a/capture/capture_sync.c b/capture/capture_sync.c index 2f9d2cc..b18e47f 100644 ---- a/capchild/capture_sync.c -+++ b/capchild/capture_sync.c +--- a/capture/capture_sync.c ++++ b/capture/capture_sync.c @@ -375,6 +375,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, voi gchar *signal_pipe_name; #else diff --git a/wireshark-0004-Restore-Fedora-specific-groups.patch b/wireshark-0004-Restore-Fedora-specific-groups.patch index 72ebf49..4ec1140 100644 --- a/wireshark-0004-Restore-Fedora-specific-groups.patch +++ b/wireshark-0004-Restore-Fedora-specific-groups.patch @@ -3,10 +3,10 @@ Date: Fri, 13 Sep 2013 14:36:55 +0400 Subject: [PATCH] Restore Fedora-specific groups Signed-off-by: Peter Lemenkov -diff --git a/wireshark.desktop b/wireshark.desktop +diff --git a/org.wireshark.Wireshark.desktop b/org.wireshark.Wireshark.desktop index 334db48..669c6f1 100644 ---- a/wireshark.desktop -+++ b/wireshark.desktop +--- a/org.wireshark.Wireshark.desktop ++++ b/org.wireshark.Wireshark.desktop @@ -108,4 +108,4 @@ Terminal=false MimeType=application/vnd.tcpdump.pcap;application/x-pcapng;application/x-snoop;application/x-iptrace;application/x-lanalyzer;application/x-nettl;application/x-radcom;application/x-etherpeek;application/x-visualnetworks;application/x-netinstobserver;application/x-5view;application/x-tektronix-rf5;application/x-micropross-mplog;application/x-apple-packetlogger;application/x-endace-erf;application/ipfix;application/x-ixia-vwr; # Category entry according to: diff --git a/wireshark-0005-Fix-paths-in-a-wireshark.desktop-file.patch b/wireshark-0005-Fix-paths-in-a-wireshark.desktop-file.patch index a762194..e2c5b99 100644 --- a/wireshark-0005-Fix-paths-in-a-wireshark.desktop-file.patch +++ b/wireshark-0005-Fix-paths-in-a-wireshark.desktop-file.patch @@ -1,16 +1,16 @@ From: Kenneth Soerensen Date: Wed, 29 Jan 2014 16:04:12 +0400 -Subject: [PATCH] Fix paths in a wireshark.desktop file +Subject: [PATCH] Fix paths in a org.wireshark.Wireshark.desktop file -diff --git a/wireshark.desktop b/wireshark.desktop +diff --git a/org.wireshark.Wireshark.desktop b/org.wireshark.Wireshark.desktop index 669c6f1..f7df1f3 100644 ---- a/wireshark.desktop -+++ b/wireshark.desktop +--- a/org.wireshark.Wireshark.desktop ++++ b/org.wireshark.Wireshark.desktop @@ -102,8 +102,8 @@ Comment[tr]=Ağ trafiği çözümleyicisi Comment[vi]=Trình phân tích giao thông mạng Comment[uk]=Аналізатор мережевого трафіку - Icon=wireshark + Icon=org.wireshark.Wireshark -TryExec=wireshark -Exec=wireshark %f +TryExec=/usr/bin/wireshark diff --git a/wireshark-0006-Move-tmp-to-var-tmp.patch b/wireshark-0006-Move-tmp-to-var-tmp.patch index dbc1d70..268cbaf 100644 --- a/wireshark-0006-Move-tmp-to-var-tmp.patch +++ b/wireshark-0006-Move-tmp-to-var-tmp.patch @@ -64,52 +64,27 @@ index ee4e5fd..fe17a95 100644 rev_tempfile_ = new QTemporaryFile(tempname, this); rev_tempfile_->open(); -diff --git a/ui/qt/rtp_analysis_dialog.cpp b/ui/qt/rtp_analysis_dialog.cpp -index 5d82e46..8008984 100644 ---- a/ui/qt/rtp_analysis_dialog.cpp -+++ b/ui/qt/rtp_analysis_dialog.cpp -@@ -37,6 +37,7 @@ +diff --git a/ui/qt/utils/rtp_audio_file.cpp b/ui/qt/utils/rtp_audio_file.cpp +index 591a63b..203f5c5 100644 +--- a/ui/qt/utils/rtp_audio_file.cpp ++++ b/ui/qt/utils/rtp_audio_file.cpp +@@ -31,6 +31,7 @@ - #include - #include + #include "rtp_audio_file.h" + #include +#include /* for get_tmp_dir() */ - #include - #include -@@ -331,10 +332,10 @@ RtpAnalysisDialog::RtpAnalysisDialog(QWidget &parent, CaptureFile &cf, struct _r - - // We keep our temp files open for the lifetime of the dialog. The GTK+ - // UI opens and closes at various points. -- QString tempname = QString("%1/wireshark_rtp_f").arg(QDir::tempPath()); -+ QString tempname = QString("%1/wireshark_rtp_f").arg(get_tmp_dir()); - fwd_tempfile_ = new QTemporaryFile(tempname, this); - fwd_tempfile_->open(); -- tempname = QString("%1/wireshark_rtp_r").arg(QDir::tempPath()); -+ tempname = QString("%1/wireshark_rtp_r").arg(get_tmp_dir()); - rev_tempfile_ = new QTemporaryFile(tempname, this); - rev_tempfile_->open(); - -diff --git a/ui/qt/rtp_audio_stream.cpp b/ui/qt/rtp_audio_stream.cpp -index fde66c8..b9531d2 100644 ---- a/ui/qt/rtp_audio_stream.cpp -+++ b/ui/qt/rtp_audio_stream.cpp -@@ -37,6 +37,7 @@ - #include - - #include -+#include /* for get_tmp_dir() */ - - #include - #include -@@ -76,7 +77,7 @@ RtpAudioStream::RtpAudioStream(QObject *parent, _rtp_stream_info *rtp_stream) : - visual_sample_rate_, SPEEX_RESAMPLER_QUALITY_MIN, NULL); - speex_resampler_skip_zeros(visual_resampler_); - -- QString tempname = QString("%1/wireshark_rtp_stream").arg(QDir::tempPath()); -+ QString tempname = QString("%1/wireshark_rtp_stream").arg(get_tmp_dir()); - tempfile_ = new QTemporaryFile(tempname, this); - tempfile_->open(); + RtpAudioFile::RtpAudioFile(bool use_disk_for_temp, bool use_disk_for_frames): + real_pos_(0) +@@ -45,7 +46,7 @@ RtpAudioFile::RtpAudioFile(bool use_disk_for_temp, bool use_disk_for_frames): + tempname = "memory"; + if (use_disk_for_temp) { +- tempname = QString("%1/wireshark_rtp_stream").arg(QDir::tempPath()); ++ tempname = QString("%1/wireshark_rtp_stream").arg(get_tmp_dir()); + sample_file_ = new QTemporaryFile(tempname, this); + } else { + sample_file_ = new QBuffer(this); diff --git a/wsutil/tempfile.c b/wsutil/tempfile.c index 5082452..f751a7c 100644 --- a/wsutil/tempfile.c @@ -292,4 +267,3 @@ index 0000000..07ac583 +#endif -- 2.13.0 - diff --git a/wireshark-0007-cmakelists.patch b/wireshark-0007-cmakelists.patch index 870c9a4..0d75fc3 100644 --- a/wireshark-0007-cmakelists.patch +++ b/wireshark-0007-cmakelists.patch @@ -5,16 +5,16 @@ index 0367cd1..6382a2c 100644 @@ -69,6 +69,7 @@ set(WSUTIL_PUBLIC_HEADERS ws_mempbrk_int.h ws_pipe.h - ws_printf.h + ws_roundup.h + wstmpdir.h wsjson.h + wslog.h xtea.h - ) @@ -118,6 +118,7 @@ set(WSUTIL_COMMON_FILES - unicode-utils.c + ws_getopt.c ws_mempbrk.c ws_pipe.c + wstmpdir.c wsgcrypt.c wsjson.c - xtea.c + wslog.c diff --git a/wireshark-0009-smc-support.patch b/wireshark-0009-smc-support.patch deleted file mode 100644 index 8de1d91..0000000 --- a/wireshark-0009-smc-support.patch +++ /dev/null @@ -1,1893 +0,0 @@ -diff --git a/epan/dissectors/CMakeLists.txt b/epan/dissectors/CMakeLists.txt -index 11d2c89cd0..3c313d2c5e 100644 ---- a/epan/dissectors/CMakeLists.txt -+++ b/epan/dissectors/CMakeLists.txt -@@ -1745,7 +1745,7 @@ set(DISSECTOR_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/packet-smb-direct.c - ${CMAKE_CURRENT_SOURCE_DIR}/packet-smb.c - ${CMAKE_CURRENT_SOURCE_DIR}/packet-smb2.c -- ${CMAKE_CURRENT_SOURCE_DIR}/packet-smcr.c -+ ${CMAKE_CURRENT_SOURCE_DIR}/packet-smc.c - ${CMAKE_CURRENT_SOURCE_DIR}/packet-sml.c - ${CMAKE_CURRENT_SOURCE_DIR}/packet-smp.c - ${CMAKE_CURRENT_SOURCE_DIR}/packet-smpp.c -diff --git a/epan/dissectors/packet-smcr.c b/epan/dissectors/packet-smc.c -similarity index 56% -rename from epan/dissectors/packet-smcr.c -rename to epan/dissectors/packet-smc.c -index 7096d1b0b0..bbfa9c07ef 100644 ---- a/epan/dissectors/packet-smcr.c -+++ b/epan/dissectors/packet-smc.c -@@ -1,7 +1,8 @@ --/* packet-smcr.c -- * SMC-R dissector for wireshark -+/* packet-smc.c -+ * SMC dissector for wireshark - * By Joe Fowler -- * (c) Copyright IBM Corporation 2014 -+ * By Guvenc Gulce -+ * (c) Copyright IBM Corporation 2014,2020 - * LICENSE: GNU General Public License, version 2, or (at your option) any - * version. http://opensource.org/licenses/gpl-2.0.php - * -@@ -13,6 +14,7 @@ - * - * Please refer to the following specs for protocol: - * - ietf - draft-fox-tcpm-shared-memory-rdma-05 -+ * - https://www.ibm.com/support/pages/node/6326337 - */ - - #include "config.h" -@@ -20,25 +22,33 @@ - #include - - #include "packet-tcp.h" -+#include - --#define SMCR_TCP_MIN_HEADER_LENGTH 7 --#define CLC_MSG_START_OFFSET 7 -+#define SMC_TCP_MIN_HEADER_LENGTH 7 -+#define CLC_MSG_START_OFFSET 5 - #define LLC_MSG_START_OFFSET 3 - #define RMBE_CTRL_START_OFFSET 2 - #define MAC_ADDR_LEN 6 -+#define SMC_V2 2 - #define GID_LEN 16 - #define PEERID_LEN 8 -+#define DIAG_INFO_LEN 4 -+#define EID_LEN 32 -+#define ISM_GID_LEN 8 -+#define ISM_CHID_LEN 2 - #define IPV4_SUBNET_MASK_LEN 4 --#define IPV6_PREFIX_LEN 4 -+#define IPV6_PREFIX_LEN 16 - #define ONE_BYTE_RESERVED 1 - #define TWO_BYTE_RESERVED 2 - #define QP_LEN 3 - #define RKEY_LEN 4 - #define VIRTUAL_ADDR_LEN 8 - #define FLAG_BYTE_LEN 1 -+#define LENGTH_BYTE_LEN 2 - #define SEQNO_LEN 2 - #define CURSOR_LEN 4 - #define ALERT_TOKEN_LEN 4 -+#define DMB_TOKEN_LEN 8 - #define PSN_LEN 3 - #define CONN_INDEX_LEN 1 - #define SMCR_MSG_BYTE_0 0 -@@ -52,6 +62,7 @@ - #define LLC_CMD_RSP_OFFSET 3 - #define ACCEPT_CONFIRM_QP_OFFSET 38 - #define SMCR_CLC_ID 0xe2d4c3d9 /*EBCDIC 'SMCR' */ -+#define SMCD_CLC_ID 0xe2d4c3c4 /*EBCDIC 'SMCD' */ - #define SMC_CLC_V1 0x10 - #define SMC_CLC_SMC_R 0x01 - -@@ -66,6 +77,52 @@ typedef enum { - SMC_CLC_DECLINE = 4 - } clc_message; - -+typedef enum { -+ SMC_CLC_SMCR = 0, -+ SMC_CLC_SMCD = 1, -+ SMC_CLC_NONE = 2, -+ SMC_CLC_BOTH = 3, -+} clc_type_message; -+ -+typedef enum { -+ SMC_CLC_OS_ZOS = 1, -+ SMC_CLC_OS_LINUX = 2, -+ SMC_CLC_OS_AIX = 3, -+ SMC_CLC_OS_UNKOWN = 15, -+} clc_os_message; -+ -+static const value_string smc_clc_os_message_txt[] = { -+ { SMC_CLC_OS_ZOS, "z/OS" }, -+ { SMC_CLC_OS_LINUX, "Linux" }, -+ { SMC_CLC_OS_AIX, "AIX" }, -+ { SMC_CLC_OS_UNKOWN, "Unknown" }, -+ { 0, NULL } -+}; -+ -+static const value_string smc_clc_type_message_txt[] = { -+ { SMC_CLC_SMCR, "SMC-R" }, -+ { SMC_CLC_SMCD, "SMC-D" }, -+ { SMC_CLC_NONE, "NONE" }, -+ { SMC_CLC_BOTH, "SMC-R/SMC-D" }, -+ { 0, NULL } -+}; -+ -+ -+static const value_string smcv2_clc_col_info_message_txt[] = { -+ { SMC_CLC_SMCR, "[SMC-R-Proposal]" }, -+ { SMC_CLC_SMCD, "[SMC-Dv2-Proposal]" }, -+ { SMC_CLC_NONE, "[NONE]" }, -+ { SMC_CLC_BOTH, "[SMC-Dv2/SMC-R-Proposal]" }, -+ { 0, NULL } -+}; -+ -+static const value_string smc_clc_col_info_message_txt[] = { -+ { SMC_CLC_SMCR, "[SMC-R-Proposal]" }, -+ { SMC_CLC_SMCD, "[SMC-D-Proposal]" }, -+ { SMC_CLC_NONE, "[NONE]" }, -+ { SMC_CLC_BOTH, "[SMC-D/SMC-R-Proposal]" }, -+ { 0, NULL } -+}; - - static const value_string smcr_clc_message_txt[] = { - { SMC_CLC_PROPOSAL, "Proposal" }, -@@ -104,22 +161,35 @@ static const value_string smcr_llc_message_txt[] = { - { 0, NULL } - }; - --static int proto_smcr = -1; -+static int proto_smc = -1; - static int ett_smcr = -1; - static int hf_smcr_clc_msg = -1; - static int hf_smcr_llc_msg = -1; - --/* SMC-R Proposal */ -+/* SMC Proposal for both SMC-D and SMC-R */ - static int ett_proposal_flag = -1; -+static int ett_proposal_ext_flag2 = -1; -+static int hf_proposal_smc_version_release_number = -1; -+static int hf_proposal_smc_version_seid = -1; - static int hf_proposal_smc_version = -1; --static int hf_smcr_proposal_flags = -1; --static int hf_smcr_proposal_client_peer_id = -1; --static int hf_smcr_proposal_client_preferred_gid = -1; --static int hf_smcr_proposal_client_preferred_mac = -1; --static int hf_smcr_proposal_outgoing_interface_subnet_mask = -1; --static int hf_smcr_proposal_outgoing_subnet_mask_signifcant_bits = -1; --static int hf_smcr_proposal_ipv6_prefix = -1; --static int hf_smcr_proposal_ipv6_prefix_length = -1; -+static int hf_proposal_smc_type = -1; -+static int hf_proposal_smc_v2_type = -1; -+static int hf_smc_length = -1; -+static int hf_smc_proposal_smc_chid = -1; -+static int hf_smc_proposal_flags = -1; -+static int hf_smc_proposal_eid = -1; -+static int hf_smc_proposal_system_eid = -1; -+static int hf_smc_proposal_ext_flags = -1; -+static int hf_smc_proposal_client_peer_id = -1; -+static int hf_smc_proposal_ism_gid = -1; -+static int hf_smc_proposal_client_preferred_gid = -1; -+static int hf_smc_proposal_client_preferred_mac = -1; -+static int hf_smc_proposal_outgoing_interface_subnet_mask = -1; -+static int hf_smc_proposal_rocev2_gid_ipv4_addr = -1; -+static int hf_smc_proposal_rocev2_gid_ipv6_addr = -1; -+static int hf_smc_proposal_outgoing_subnet_mask_signifcant_bits = -1; -+static int hf_smc_proposal_ipv6_prefix = -1; -+static int hf_smc_proposal_ipv6_prefix_length = -1; - - /* SMC-R Accept */ - static int ett_accept_flag = -1; -@@ -158,10 +228,57 @@ static int hf_confirm_smc_version = -1; - static int hf_confirm_rmb_buffer_size = -1; - static int hf_confirm_qp_mtu_value = -1; - -+/* SMC-D Accept */ -+static int hf_accept_smc_type = -1; -+static int ett_smcd_accept_flag = -1; -+static int ett_smcd_accept_fce_flag = -1; -+static int ett_smcd_accept_flag2 = -1; -+static int hf_smcd_accept_smc_version = -1; -+static int hf_accept_os_type = -1; -+static int hf_accept_smc_version_release_number = -1; -+static int hf_smcd_accept_first_contact = -1; -+static int hf_accept_dmb_buffer_size = -1; -+static int hf_smcd_accept_flags = -1; -+static int hf_smcd_accept_fce_flags = -1; -+static int hf_smcd_accept_flags2 = -1; -+static int hf_smcd_accept_server_peer_id = -1; -+static int hf_smcd_accept_dmbe_conn_index = -1; -+static int hf_smcd_accept_dmb_token = -1; -+static int hf_smcd_accept_server_link_id = -1; -+static int hf_smcd_accept_smc_chid = -1; -+static int hf_smcd_accept_eid = -1; -+static int hf_smcd_accept_peer_name = -1; -+ -+/* SMC-D Confirm */ -+static int hf_confirm_smc_type = -1; -+static int ett_smcd_confirm_flag = -1; -+static int ett_smcd_confirm_fce_flag = -1; -+static int ett_smcd_confirm_flag2 = -1; -+static int hf_smcd_confirm_smc_version = -1; -+static int hf_confirm_os_type = -1; -+static int hf_smcd_confirm_flags = -1; -+static int hf_smcd_confirm_flags2 = -1; -+static int hf_smcd_confirm_first_contact = -1; -+static int hf_smcd_confirm_client_peer_id = -1; -+static int hf_smcd_confirm_dmb_token = -1; -+static int hf_smcd_confirm_dmbe_conn_index = -1; -+static int hf_smcd_confirm_client_link_id = -1; -+static int hf_confirm_smc_version_release_number = -1; -+static int hf_smcd_confirm_dmb_buffer_size = -1; -+static int hf_smcd_confirm_smc_chid = -1; -+static int hf_smcd_confirm_eid = -1; -+static int hf_smcd_confirm_peer_name = -1; -+ - /* SMC-R Decline */ --static int hf_smcr_decline_flags = -1; --static int hf_smcr_decline_peer_id = -1; --static int hf_smcr_decline_diag_info = -1; -+static int ett_decline_flag = -1; -+static int ett_decline_flag2 = -1; -+static int hf_smc_decline_flags = -1; -+static int hf_smc_decline_flags2 = -1; -+static int hf_smc_decline_peer_id = -1; -+static int hf_smc_decline_diag_info = -1; -+static int hf_decline_os_type = -1; -+static int hf_decline_smc_version = -1; -+static int hf_decline_out_of_sync = -1; - - /* SMC-R Confirm Link*/ - static int ett_confirm_link_flag = -1; -@@ -256,55 +373,300 @@ static int hf_smcr_rmbe_ctrl_peer_abnormal_close = -1; - - void proto_register_smcr(void); - void proto_reg_handoff_smcr(void); --static dissector_handle_t smcr_tcp_handle; -+static dissector_handle_t smc_tcp_handle; - - static void --disect_smcr_proposal(tvbuff_t *tvb, proto_tree *tree) -+disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - { -- guint offset; -- guint16 mask_offset; -- guint8 ipv6_prefix_count; -+ guint offset, suboffset; -+ guint16 mask_offset, v2_ext_offset; -+ guint16 v2_ext_pos = 0, smcd_v2_ext_offset = 0; -+ guint16 smcd_v2_ext_pos = 0; -+ guint8 ipv6_prefix_count, smc_version; -+ guint8 smc_type, num_of_gids = 0, num_of_eids = 0; -+ guint8 smc_type_v1 = 0, smc_type_v2 = 0; -+ bool is_smc_v2, is_smcdv1, is_smcdv2; - proto_item *proposal_flag_item; - proto_tree *proposal_flag_tree; - -+ - offset = CLC_MSG_START_OFFSET; -- proposal_flag_item = proto_tree_add_item(tree, hf_smcr_proposal_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ proposal_flag_item = proto_tree_add_item(tree, hf_smc_proposal_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - proposal_flag_tree = proto_item_add_subtree(proposal_flag_item, ett_proposal_flag); - proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_version, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ smc_version = tvb_get_guint8(tvb, offset); -+ smc_type = tvb_get_guint8(tvb, offset); -+ smc_version = ((smc_version >> 4) & 0x0F); -+ is_smc_v2 = (smc_version >= SMC_V2); -+ smc_type_v2 = ((smc_type >> 2) & 0x03); -+ smc_type_v1 = (smc_type & 0x03); -+ is_smcdv1 = ((smc_type_v1 == SMC_CLC_SMCD) || (smc_type_v1 == SMC_CLC_BOTH)); -+ is_smcdv2 = ((smc_type_v2 == SMC_CLC_SMCD) || (smc_type_v2 == SMC_CLC_BOTH)); -+ -+ if (is_smc_v2) -+ proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_v2_type, tvb, -+ offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ -+ proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_type, tvb, -+ offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ - offset += FLAG_BYTE_LEN; -- proto_tree_add_item(tree, hf_smcr_proposal_client_peer_id, tvb, offset, -+ proto_tree_add_item(tree, hf_smc_proposal_client_peer_id, tvb, offset, - PEERID_LEN, ENC_BIG_ENDIAN); - offset += PEERID_LEN; -- proto_tree_add_item(tree, hf_smcr_proposal_client_preferred_gid, tvb, -+ proto_tree_add_item(tree, hf_smc_proposal_client_preferred_gid, tvb, - offset, GID_LEN, ENC_NA); - offset += GID_LEN; -- proto_tree_add_item(tree, hf_smcr_proposal_client_preferred_mac, tvb, -+ proto_tree_add_item(tree, hf_smc_proposal_client_preferred_mac, tvb, - offset, MAC_ADDR_LEN, ENC_NA); - offset += MAC_ADDR_LEN; - mask_offset = tvb_get_ntohs(tvb, offset); -- offset += 2 + mask_offset; -- proto_tree_add_item(tree, hf_smcr_proposal_outgoing_interface_subnet_mask, tvb, -- offset, IPV4_SUBNET_MASK_LEN, ENC_BIG_ENDIAN); -+ -+ if (mask_offset != 0) { -+ suboffset = offset; -+ suboffset += TWO_BYTE_RESERVED; -+ if (is_smcdv1 || is_smcdv2) { -+ proto_tree_add_item(tree, hf_smc_proposal_ism_gid, tvb, -+ suboffset, ISM_GID_LEN, ENC_NA); -+ } -+ suboffset += ISM_GID_LEN; -+ if (is_smc_v2) { -+ if (is_smcdv2) { -+ proto_tree_add_item(tree, hf_smc_proposal_smc_chid, tvb, suboffset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ } -+ suboffset += LENGTH_BYTE_LEN; -+ v2_ext_offset = tvb_get_ntohs(tvb, suboffset); -+ v2_ext_pos = suboffset + TWO_BYTE_RESERVED + v2_ext_offset; -+ } -+ } -+ offset += TWO_BYTE_RESERVED + mask_offset; -+ -+ proto_tree_add_item(tree, hf_smc_proposal_outgoing_interface_subnet_mask, tvb, -+ offset, IPV4_SUBNET_MASK_LEN, ENC_BIG_ENDIAN); - offset += IPV4_SUBNET_MASK_LEN; -- proto_tree_add_item(tree, hf_smcr_proposal_outgoing_subnet_mask_signifcant_bits, tvb, -- offset, 1, ENC_BIG_ENDIAN); -+ proto_tree_add_item(tree, hf_smc_proposal_outgoing_subnet_mask_signifcant_bits, tvb, -+ offset, 1, ENC_BIG_ENDIAN); - offset += 1; - /* Bump past reserved bytes */ - offset += TWO_BYTE_RESERVED; - ipv6_prefix_count = tvb_get_guint8(tvb, offset); -- offset += 2; -+ offset += 1; - - while (ipv6_prefix_count != 0) { -- proto_tree_add_item(tree, hf_smcr_proposal_ipv6_prefix, tvb, -+ proto_tree_add_item(tree, hf_smc_proposal_ipv6_prefix, tvb, - offset, IPV6_PREFIX_LEN, ENC_NA); - offset += IPV6_PREFIX_LEN; -- proto_tree_add_item(tree, hf_smcr_proposal_ipv6_prefix_length, tvb, -+ proto_tree_add_item(tree, hf_smc_proposal_ipv6_prefix_length, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset += 1; - ipv6_prefix_count--; - } -+ -+ if (v2_ext_pos >= offset) { -+ offset = v2_ext_pos; -+ num_of_eids = tvb_get_guint8(tvb, offset); -+ offset += FLAG_BYTE_LEN; -+ num_of_gids = tvb_get_guint8(tvb, offset); -+ offset += FLAG_BYTE_LEN; -+ /*Skip reserved flag 1*/ -+ offset += 1; -+ proposal_flag_item = proto_tree_add_item(tree, hf_smc_proposal_ext_flags, tvb, -+ offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proposal_flag_tree = proto_item_add_subtree(proposal_flag_item, ett_proposal_ext_flag2); -+ proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_version_release_number, -+ tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_version_seid, tvb, -+ offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += FLAG_BYTE_LEN; -+ /*Skip not used 2 bytes*/ -+ offset += 2; -+ smcd_v2_ext_offset = tvb_get_ntohs(tvb, offset); -+ offset += 2; -+ smcd_v2_ext_pos = offset + smcd_v2_ext_offset; -+ -+ if (is_ipv6) { -+ proto_tree_add_item(tree, hf_smc_proposal_rocev2_gid_ipv6_addr, tvb, -+ offset, GID_LEN, ENC_NA); -+ offset += GID_LEN; -+ } -+ else { -+ offset += 12; -+ proto_tree_add_item(tree, hf_smc_proposal_rocev2_gid_ipv4_addr, tvb, -+ offset, IPV4_SUBNET_MASK_LEN, ENC_BIG_ENDIAN); -+ offset += IPV4_SUBNET_MASK_LEN; -+ } -+ /*Skip reserved 16 bytes*/ -+ offset += 16; -+ while (num_of_eids != 0) { -+ proto_tree_add_item(tree, hf_smc_proposal_eid, tvb, -+ offset, EID_LEN, ENC_ASCII | ENC_NA); -+ offset += EID_LEN; -+ num_of_eids--; -+ } -+ if (smcd_v2_ext_pos >= offset) { -+ offset = smcd_v2_ext_pos; -+ proto_tree_add_item(tree, hf_smc_proposal_system_eid, tvb, -+ offset, EID_LEN, ENC_ASCII | ENC_NA); -+ offset += EID_LEN; -+ /*Skip reserved 16 bytes*/ -+ offset += 16; -+ while (num_of_gids != 0) { -+ proto_tree_add_item(tree, hf_smc_proposal_ism_gid, tvb, -+ offset, ISM_GID_LEN, ENC_NA); -+ offset += ISM_GID_LEN; -+ proto_tree_add_item(tree, hf_smc_proposal_smc_chid, tvb, offset, -+ ISM_CHID_LEN, ENC_BIG_ENDIAN); -+ offset += ISM_CHID_LEN; -+ num_of_gids--; -+ } -+ } -+ -+ } -+} -+ -+static void -+disect_smcd_accept(tvbuff_t* tvb, proto_tree* tree) -+{ -+ guint offset; -+ proto_item* accept_flag_item; -+ proto_tree* accept_flag_tree; -+ proto_item* accept_flag2_item; -+ proto_tree* accept_flag2_tree; -+ guint8 smc_version, first_contact = 0; -+ -+ offset = CLC_MSG_START_OFFSET; -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ accept_flag_item = proto_tree_add_item(tree, hf_smcd_accept_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ accept_flag_tree = proto_item_add_subtree(accept_flag_item, ett_smcd_accept_flag); -+ proto_tree_add_item(accept_flag_tree, hf_smcd_accept_smc_version, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(accept_flag_tree, hf_smcd_accept_first_contact, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(accept_flag_tree, hf_accept_smc_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ smc_version = tvb_get_guint8(tvb, offset); -+ first_contact = tvb_get_guint8(tvb, offset); -+ smc_version = ((smc_version >> 4) & 0x0F); -+ first_contact = ((first_contact >> 3) & 0x01); -+ offset += FLAG_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smcd_accept_server_peer_id, tvb, offset, -+ PEERID_LEN, ENC_BIG_ENDIAN); -+ offset += PEERID_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_accept_dmb_token, tvb, -+ offset, DMB_TOKEN_LEN, ENC_NA); -+ offset += DMB_TOKEN_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_accept_dmbe_conn_index, tvb, -+ offset, CONN_INDEX_LEN, ENC_BIG_ENDIAN); -+ offset += CONN_INDEX_LEN; -+ -+ accept_flag2_item = proto_tree_add_item(tree, hf_smcd_accept_flags2, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ accept_flag2_tree = proto_item_add_subtree(accept_flag2_item, ett_smcd_accept_flag2); -+ proto_tree_add_item(accept_flag2_tree, hf_accept_dmb_buffer_size, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += FLAG_BYTE_LEN; -+ offset += TWO_BYTE_RESERVED; -+ proto_tree_add_item(tree, hf_smcd_accept_server_link_id, tvb, -+ offset, ALERT_TOKEN_LEN, ENC_BIG_ENDIAN); -+ offset += ALERT_TOKEN_LEN; -+ -+ if (smc_version >= SMC_V2) { -+ proto_tree_add_item(tree, hf_smcd_accept_smc_chid, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_accept_eid, tvb, offset, 32, ENC_ASCII | ENC_NA); -+ offset += 32; -+ /* Reserved bytes */ -+ offset += 8; -+ -+ if (first_contact) { -+ offset += ONE_BYTE_RESERVED; -+ accept_flag_item = proto_tree_add_item(tree, hf_smcd_accept_fce_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ accept_flag_tree = proto_item_add_subtree(accept_flag_item, ett_smcd_accept_fce_flag); -+ proto_tree_add_item(accept_flag_tree, hf_accept_os_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(accept_flag_tree, hf_accept_smc_version_release_number, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += FLAG_BYTE_LEN; -+ offset += TWO_BYTE_RESERVED; -+ proto_tree_add_item(tree, hf_smcd_accept_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); -+ offset += 32; -+ } -+ } -+} -+ -+static void -+disect_smcd_confirm(tvbuff_t* tvb, proto_tree* tree) -+{ -+ guint offset; -+ proto_item* confirm_flag_item; -+ proto_tree* confirm_flag_tree; -+ proto_item* confirm_flag2_item; -+ proto_tree* confirm_flag2_tree; -+ guint8 smc_version, first_contact = 0; -+ -+ offset = CLC_MSG_START_OFFSET; -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ confirm_flag_item = proto_tree_add_item(tree, hf_smcd_confirm_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ confirm_flag_tree = proto_item_add_subtree(confirm_flag_item, ett_smcd_confirm_flag); -+ proto_tree_add_item(confirm_flag_tree, hf_smcd_confirm_smc_version, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(confirm_flag_tree, hf_smcd_confirm_first_contact, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(confirm_flag_tree, hf_confirm_smc_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ smc_version = tvb_get_guint8(tvb, offset); -+ first_contact = tvb_get_guint8(tvb, offset); -+ smc_version = ((smc_version >> 4) & 0x0F); -+ first_contact = ((first_contact >> 3) & 0x01); -+ offset += FLAG_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smcd_confirm_client_peer_id, tvb, offset, -+ PEERID_LEN, ENC_BIG_ENDIAN); -+ offset += PEERID_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_confirm_dmb_token, tvb, -+ offset, DMB_TOKEN_LEN, ENC_NA); -+ offset += DMB_TOKEN_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_confirm_dmbe_conn_index, tvb, -+ offset, CONN_INDEX_LEN, ENC_BIG_ENDIAN); -+ offset += CONN_INDEX_LEN; -+ -+ confirm_flag2_item = proto_tree_add_item(tree, hf_smcd_confirm_flags2, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ confirm_flag2_tree = proto_item_add_subtree(confirm_flag2_item, ett_smcd_confirm_flag2); -+ proto_tree_add_item(confirm_flag2_tree, hf_smcd_confirm_dmb_buffer_size, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += FLAG_BYTE_LEN; -+ offset += TWO_BYTE_RESERVED; -+ proto_tree_add_item(tree, hf_smcd_confirm_client_link_id, tvb, -+ offset, ALERT_TOKEN_LEN, ENC_BIG_ENDIAN); -+ offset += ALERT_TOKEN_LEN; -+ -+ if (smc_version >= SMC_V2) { -+ proto_tree_add_item(tree, hf_smcd_confirm_smc_chid, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ -+ proto_tree_add_item(tree, hf_smcd_confirm_eid, tvb, offset, 32, ENC_ASCII | ENC_NA); -+ offset += 32; -+ /* Reserved bytes */ -+ offset += 8; -+ -+ if (first_contact) { -+ offset += ONE_BYTE_RESERVED; -+ confirm_flag_item = proto_tree_add_item(tree, hf_smcd_accept_fce_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ confirm_flag_tree = proto_item_add_subtree(confirm_flag_item, ett_smcd_confirm_fce_flag); -+ proto_tree_add_item(confirm_flag_tree, hf_confirm_os_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(confirm_flag_tree, hf_confirm_smc_version_release_number, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += FLAG_BYTE_LEN; -+ offset += TWO_BYTE_RESERVED; -+ proto_tree_add_item(tree, hf_smcd_confirm_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); -+ offset += 32; -+ } -+ } - } - -+ - static void - disect_smcr_accept(tvbuff_t *tvb, proto_tree *tree) - { -@@ -315,6 +677,9 @@ disect_smcr_accept(tvbuff_t *tvb, proto_tree *tree) - proto_tree *accept_flag2_tree; - - offset = CLC_MSG_START_OFFSET; -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; - accept_flag_item = proto_tree_add_item(tree, hf_smcr_accept_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - accept_flag_tree = proto_item_add_subtree(accept_flag_item, ett_accept_flag); - proto_tree_add_item(accept_flag_tree, hf_accept_smc_version, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -@@ -367,6 +732,9 @@ disect_smcr_confirm(tvbuff_t *tvb, proto_tree *tree) - proto_tree *confirm_flag2_tree; - - offset = CLC_MSG_START_OFFSET; -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; - confirm_flag_item = proto_tree_add_item(tree, hf_smcr_confirm_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - confirm_flag_tree = proto_item_add_subtree(confirm_flag_item, ett_confirm_flag); - proto_tree_add_item(confirm_flag_tree, hf_confirm_smc_version, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -@@ -411,17 +779,41 @@ disect_smcr_confirm(tvbuff_t *tvb, proto_tree *tree) - static void - disect_smcr_decline(tvbuff_t *tvb, proto_tree *tree) - { -- guint offset; -+ proto_item* decline_flag_item; -+ proto_tree* decline_flag_tree; -+ proto_item* decline_flag2_item; -+ proto_tree* decline_flag2_tree; -+ guint offset, smc_version; - - offset = CLC_MSG_START_OFFSET; -- proto_tree_add_item(tree, hf_smcr_decline_flags, tvb, offset, -+ proto_tree_add_item(tree, hf_smc_length, tvb, offset, -+ LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); -+ offset += LENGTH_BYTE_LEN; -+ -+ decline_flag_item = proto_tree_add_item(tree, hf_smc_decline_flags, tvb, offset, -+ FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ decline_flag_tree = proto_item_add_subtree(decline_flag_item, ett_decline_flag); -+ proto_tree_add_item(decline_flag_tree, hf_decline_smc_version, tvb, offset, -+ FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ proto_tree_add_item(decline_flag_tree, hf_decline_out_of_sync, tvb, offset, - FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ smc_version = tvb_get_guint8(tvb, offset); -+ smc_version = ((smc_version >> 4) & 0x0F); -+ - offset += FLAG_BYTE_LEN; -- proto_tree_add_item(tree, hf_smcr_decline_peer_id, tvb, offset, -+ proto_tree_add_item(tree, hf_smc_decline_peer_id, tvb, offset, - PEERID_LEN, ENC_BIG_ENDIAN); - offset += PEERID_LEN; -- proto_tree_add_item(tree, hf_smcr_decline_diag_info, tvb, offset, -- 4, ENC_BIG_ENDIAN); -+ proto_tree_add_item(tree, hf_smc_decline_diag_info, tvb, offset, -+ DIAG_INFO_LEN, ENC_BIG_ENDIAN); -+ offset += DIAG_INFO_LEN; -+ if (smc_version >= SMC_V2) { -+ decline_flag2_item = proto_tree_add_item(tree, hf_smc_decline_flags2, tvb, offset, -+ FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ decline_flag2_tree = proto_item_add_subtree(decline_flag2_item, ett_decline_flag2); -+ proto_tree_add_item(decline_flag2_tree, hf_decline_os_type, tvb, offset, -+ FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -+ } - } - - static void -@@ -730,50 +1122,126 @@ disect_smcr_rmbe_ctrl(tvbuff_t *tvb, proto_tree *tree) - tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - } - -+static guint8 get_mixed_type(guint8 v1_type, guint8 v2_type) -+{ -+ if (v1_type == SMC_CLC_BOTH) -+ return v1_type; -+ -+ if (v1_type == SMC_CLC_NONE) -+ return v2_type; -+ -+ if (((v2_type == SMC_CLC_SMCD) && (v1_type == SMC_CLC_SMCR)) || -+ ((v2_type == SMC_CLC_SMCR) && (v1_type == SMC_CLC_SMCD))) -+ return SMC_CLC_BOTH; -+ -+ return v2_type; -+} -+ - static int --dissect_smcr_tcp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, -+dissect_smc_tcp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - void *data _U_) - { - gint offset; - guint16 msg_len; -+ guint8 smc_type, smc_v2_type = 0, smc_v1_type = 0, smc_version = 0; -+ guint8 mixed_type; - clc_message clc_msgid; - proto_item *ti; -- proto_tree *smcr_tree; -+ proto_tree *smc_tree; -+ bool is_ipv6, is_smc_v2, is_smcd = false; - -- col_set_str(pinfo->cinfo, COL_PROTOCOL, "SMC-R"); - msg_len = tvb_get_ntohs(tvb, CLC_MSG_LEN_OFFSET); - offset = 4; -- clc_msgid = (clc_message) tvb_get_guint8(tvb, offset); -- col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMC-R-%s],", -- val_to_str_const((guint32)clc_msgid, -- smcr_clc_message_txt, "Unknown Command")); -+ clc_msgid = (clc_message)tvb_get_guint8(tvb, offset); - -- if ((clc_msgid == SMC_CLC_ACCEPT) || -- (clc_msgid == SMC_CLC_CONFIRMATION)) { -+ smc_version = tvb_get_guint8(tvb, offset + 3); -+ smc_version = ((smc_version >> 4) & 0x0F); -+ smc_type = tvb_get_guint8(tvb, offset + 3); -+ is_smc_v2 = (smc_version >= SMC_V2); -+ -+ if (is_smc_v2 && (clc_msgid == SMC_CLC_PROPOSAL)) { -+ smc_v1_type = (smc_type & 0x03); -+ smc_v2_type = ((smc_type >> 2) & 0x03); -+ } -+ else if (clc_msgid != SMC_CLC_DECLINE) { -+ smc_v2_type = (smc_type & 0x03); -+ smc_v1_type = (smc_type & 0x03); -+ } -+ -+ is_ipv6 = (pinfo->src.type == AT_IPv6); -+ -+ if (is_smc_v2) -+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "SMCv2"); -+ else -+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "SMC"); -+ -+ if (clc_msgid == SMC_CLC_PROPOSAL) { -+ if (is_smc_v2 && (smc_v2_type != SMC_CLC_NONE)) { -+ mixed_type = get_mixed_type(smc_v1_type, smc_v2_type); -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "%s,", -+ val_to_str_const((guint32)mixed_type, -+ smcv2_clc_col_info_message_txt, "Unknown Command")); -+ } else { -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "%s,", -+ val_to_str_const((guint32)smc_v1_type, -+ smc_clc_col_info_message_txt, "Unknown Command")); -+ } -+ } else if ((smc_v2_type == SMC_CLC_SMCR) && ((clc_msgid == SMC_CLC_ACCEPT) || -+ (clc_msgid == SMC_CLC_CONFIRMATION))) { -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMC-R-%s],", -+ val_to_str_const((guint32)clc_msgid, -+ smcr_clc_message_txt, "Unknown Command")); - col_append_fstr(pinfo->cinfo, COL_INFO, " QP=0x%06x", - tvb_get_ntoh24(tvb, ACCEPT_CONFIRM_QP_OFFSET)); - } -+ else if ((smc_v2_type == SMC_CLC_SMCD) && ((clc_msgid == SMC_CLC_ACCEPT) || -+ (clc_msgid == SMC_CLC_CONFIRMATION))) { -+ is_smcd = true; -+ if (is_smc_v2) -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMC-Dv2-%s],", -+ val_to_str_const((guint32)clc_msgid, -+ smcr_clc_message_txt, "Unknown Command")); -+ else -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMC-D-%s],", -+ val_to_str_const((guint32)clc_msgid, -+ smcr_clc_message_txt, "Unknown Command")); -+ } -+ else { -+ if (is_smc_v2) -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMCv2-%s],", -+ val_to_str_const((guint32)clc_msgid, -+ smcr_clc_message_txt, "Unknown Command")); -+ else -+ col_prepend_fstr(pinfo->cinfo, COL_INFO, "[SMC-%s],", -+ val_to_str_const((guint32)clc_msgid, -+ smcr_clc_message_txt, "Unknown Command")); -+ } - - if (!tree) - return tvb_reported_length(tvb); - -- ti = proto_tree_add_item(tree, proto_smcr, tvb, 0, msg_len, ENC_NA); -- smcr_tree = proto_item_add_subtree(ti, ett_smcr); -- proto_tree_add_item(smcr_tree, hf_smcr_clc_msg, tvb, offset, 1, -+ ti = proto_tree_add_item(tree, proto_smc, tvb, 0, msg_len, ENC_NA); -+ smc_tree = proto_item_add_subtree(ti, ett_smcr); -+ proto_tree_add_item(smc_tree, hf_smcr_clc_msg, tvb, offset, 1, - ENC_BIG_ENDIAN); -- - switch (clc_msgid) { - case SMC_CLC_PROPOSAL: -- disect_smcr_proposal(tvb, smcr_tree); -+ disect_smc_proposal(tvb, smc_tree, is_ipv6); - break; - case SMC_CLC_ACCEPT: -- disect_smcr_accept(tvb, smcr_tree); -+ if (is_smcd) -+ disect_smcd_accept(tvb, smc_tree); -+ else -+ disect_smcr_accept(tvb, smc_tree); - break; - case SMC_CLC_CONFIRMATION: -- disect_smcr_confirm(tvb, smcr_tree); -+ if (is_smcd) -+ disect_smcd_confirm(tvb, smc_tree); -+ else -+ disect_smcr_confirm(tvb, smc_tree); - break; - case SMC_CLC_DECLINE: -- disect_smcr_decline(tvb, smcr_tree); -+ disect_smcr_decline(tvb, smc_tree); - break; - default: - /* Unknown Command */ -@@ -802,7 +1270,7 @@ dissect_smcr_infiniband(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi - (tvb_get_guint8(tvb, LLC_CMD_RSP_OFFSET) & LLC_FLAG_RESP)) - col_append_str(pinfo->cinfo, COL_INFO, "(Resp)"); - -- ti = proto_tree_add_item(tree, proto_smcr, tvb, 0, msg_len, ENC_NA); -+ ti = proto_tree_add_item(tree, proto_smc, tvb, 0, msg_len, ENC_NA); - smcr_tree = proto_item_add_subtree(ti, ett_smcr); - proto_tree_add_item(smcr_tree, hf_smcr_llc_msg, tvb, 0, 1, - ENC_BIG_ENDIAN); -@@ -861,24 +1329,27 @@ get_smcr_pdu_length(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *dat - } - - static int --dissect_smcr_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, -+dissect_smc_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - void *data) - { -- tcp_dissect_pdus(tvb, pinfo, tree, TRUE, SMCR_TCP_MIN_HEADER_LENGTH, -- get_smcr_pdu_length, dissect_smcr_tcp_pdu, data); -+ tcp_dissect_pdus(tvb, pinfo, tree, TRUE, SMC_TCP_MIN_HEADER_LENGTH, -+ get_smcr_pdu_length, dissect_smc_tcp_pdu, data); - return tvb_reported_length(tvb); - } - - static gboolean --dissect_smcr_tcp_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, -+dissect_smc_tcp_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - void *data) - { - if (tvb_captured_length(tvb) < 4) { - return FALSE; - } - -- if (tvb_get_ntohl(tvb, CLC_MSG_BYTE_0) != SMCR_CLC_ID) return FALSE; -- dissect_smcr_tcp(tvb, pinfo, tree, data); -+ if ((tvb_get_ntohl(tvb, CLC_MSG_BYTE_0) != SMCR_CLC_ID) && -+ (tvb_get_ntohl(tvb, CLC_MSG_BYTE_0) != SMCD_CLC_ID)) -+ return FALSE; -+ -+ dissect_smc_tcp(tvb, pinfo, tree, data); - return TRUE; - } - -@@ -921,479 +1392,688 @@ proto_register_smcr(void) - /* Setup list of header fields */ - static hf_register_info hf[] = { - { &hf_smcr_clc_msg, { -- "CLC Message", "smcr.clc_msg", -+ "CLC Message", "smc.clc_msg", - FT_UINT8, BASE_DEC, VALS(smcr_clc_message_txt), 0x0, - NULL, HFILL}}, - - { &hf_smcr_llc_msg, { -- "LLC Message", "smcr.llc_msg", -+ "LLC Message", "smc.llc_msg", - FT_UINT8, BASE_DEC, VALS(smcr_llc_message_txt), 0x0, - NULL, HFILL}}, - -+ { &hf_proposal_smc_version_release_number, { -+ "SMC Version Release Number", "smc.proposal.smc.version.relnum", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL }}, -+ -+ { &hf_proposal_smc_version_seid, { -+ "SEID Indicator", "smc.proposal.smc.seid", -+ FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } }, -+ - { &hf_proposal_smc_version, { -- "SMC Version", "smcr.proposal.smc.version", -+ "SMC Version", "smc.proposal.smc.version", - FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, - -+ { &hf_proposal_smc_type, { -+ "SMC(v1) Type", "smc.proposal.smc.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_type_message_txt), -+ 0x03, NULL, HFILL}}, -+ -+ { &hf_accept_smc_type, { -+ "SMC Type", "smc.accept.smc.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_type_message_txt), -+ 0x03, NULL, HFILL}}, -+ -+ { &hf_confirm_smc_type, { -+ "SMC Type", "smc.confirm.smc.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_type_message_txt), -+ 0x03, NULL, HFILL}}, -+ -+ { &hf_proposal_smc_v2_type, { -+ "SMC(v2) Type", "smc.proposal.smcv2.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_type_message_txt), -+ 0x0C, NULL, HFILL}}, -+ -+ { &hf_smc_proposal_smc_chid, { -+ "ISM CHID", "smc.proposal.smc.chid", -+ FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL}}, -+ -+ { &hf_smc_length, { -+ "SMC Length", "smc.length", -+ FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}}, -+ - { &hf_accept_smc_version, { -- "SMC Version", "smcr.proposal.smc.version", -+ "SMC Version", "smc.proposal.smc.version", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, -+ -+ { &hf_smcd_accept_smc_version, { -+ "SMC Version", "smc.proposal.smc.version", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, -+ -+ { &hf_smcd_confirm_smc_version, { -+ "SMC Version", "smc.proposal.smc.version", - FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, - - { &hf_accept_first_contact, { -- "First Contact", "smcr.proposal.first.contact", -+ "First Contact", "smc.proposal.first.contact", - FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL}}, - - { &hf_confirm_smc_version, { -- "SMC Version", "smcr.proposal.smc.version", -+ "SMC Version", "smc.proposal.smc.version", - FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, - - { &hf_accept_rmb_buffer_size, { - "Server RMB Buffers Size (Compressed Notation)", -- "smcr.accept.rmb.buffer.size", -+ "smc.accept.rmb.buffer.size", - FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, - - { &hf_accept_qp_mtu_value, { - "QP MTU Value (enumerated value)", -- "smcr.accept.qp.mtu.value", -+ "smc.accept.qp.mtu.value", - FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL}}, - - { &hf_confirm_rmb_buffer_size, { - "Client RMB Buffers Size (Compressed Notation)", -- "smcr.confirm.rmb.buffer.size", -+ "smc.confirm.rmb.buffer.size", - FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL}}, - - { &hf_confirm_qp_mtu_value, { - "QP MTU Value (enumerated value)", -- "smcr.confirm.qp.mtu.value", -+ "smc.confirm.qp.mtu.value", - FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL}}, - -- { &hf_smcr_proposal_flags, { -- "Flags", "smcr.proposal.flags", -+ { &hf_smc_proposal_flags, { -+ "Flags", "smc.proposal.flags", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, -+ -+ { &hf_smc_proposal_ext_flags, { -+ "Flag 2", "smc.proposal.extflags.2", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_flags, { -- "Flags", "smcr.accept.flags", -+ "Flags", "smc.accept.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_flags2, { -- "Flags 2", "smcr.accept.flags.2", -+ "Flags 2", "smc.accept.flags.2", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_flags, { -- "Flags", "smcr.confirm.flags", -+ "Flags", "smc.confirm.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_decline_flags, { -- "Flags", "smcr.decline.flags", -+ { &hf_decline_smc_version, { -+ "SMC Version", "smc.decline.smc.version", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL} }, -+ -+ { &hf_decline_out_of_sync, { -+ "Out of Sync", "smc.decline.osync", -+ FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} }, -+ -+ { &hf_smc_decline_flags2, { -+ "Flags 2", "smc.decline.flags2", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -+ { &hf_smc_decline_flags, { -+ "Flags", "smc.decline.flags", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ - { &hf_smcr_confirm_flags2, { -- "Flags 2", "smcr.confirm.flags.2", -+ "Flags 2", "smc.confirm.flags.2", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_client_peer_id, { -- "Sender (Client) Peer ID", "smcr.proposal.sender.client.peer.id", -+ { &hf_smc_proposal_client_peer_id, { -+ "Sender (Client) Peer ID", "smc.proposal.sender.client.peer.id", -+ FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, -+ -+ { &hf_smc_proposal_ism_gid, { -+ "ISM GID", "smc.proposal.ism.gid", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_client_preferred_gid, { -- "Client Preferred GID", "smcr.proposal.client.preferred.gid", -+ { &hf_smc_proposal_client_preferred_gid, { -+ "Client Preferred GID", "smc.proposal.client.preferred.gid", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_client_preferred_mac, { -+ { &hf_smc_proposal_client_preferred_mac, { - "Client Preferred MAC Address", -- "smcr.proposal.client.preferred.mac", -+ "smc.proposal.client.preferred.mac", - FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_peer_id, { -- "Sender (Server) Peer ID", "smcr.accept.sender.server.peer.id", -+ "Sender (Server) Peer ID", "smc.accept.sender.server.peer.id", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_preferred_gid, { -- "Server Preferred GID", "smcr.accept.server.preferred.gid", -+ "Server Preferred GID", "smc.accept.server.preferred.gid", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_preferred_mac, { - "Server Preferred MAC Address", -- "smcr.accept.server.preferred.mac", -+ "smc.accept.server.preferred.mac", - FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_outgoing_interface_subnet_mask, { -+ { &hf_smc_proposal_rocev2_gid_ipv6_addr, { -+ "RoCEv2 GID IPv6 Address", -+ "smc.proposal.rocev2.gid.ipv6", -+ FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smc_proposal_rocev2_gid_ipv4_addr, { -+ "RoCEv2 GID IPv4 Address", -+ "smc.proposal.rocev2.gid.ipv4", -+ FT_IPv4, BASE_NETMASK, NULL, 0x0, NULL, HFILL}}, -+ -+ { &hf_smc_proposal_outgoing_interface_subnet_mask, { - "Outgoing Interface Subnet Mask", -- "smcr.outgoing.interface.subnet.mask", -+ "smc.outgoing.interface.subnet.mask", - FT_IPv4, BASE_NETMASK, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_outgoing_subnet_mask_signifcant_bits, { -+ { &hf_smc_proposal_outgoing_subnet_mask_signifcant_bits, { - "Outgoing Interface Subnet Mask Number of Significant Bits", -- "smcr.outgoing.interface.subnet.mask.number.of.significant.bits", -+ "smc.outgoing.interface.subnet.mask.number.of.significant.bits", - FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_ipv6_prefix, { -- "IPv6 Prefix Value","smcr.proposal.ipv6.prefix.value", -+ { &hf_smc_proposal_ipv6_prefix, { -+ "IPv6 Prefix Value","smc.proposal.ipv6.prefix.value", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_proposal_ipv6_prefix_length, { -- "IPv6 Prefix Length", "smcr.proposal.ipv6.prefix.length", -+ { &hf_smc_proposal_ipv6_prefix_length, { -+ "IPv6 Prefix Length", "smc.proposal.ipv6.prefix.length", - FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_qp_number, { -- "Server QP Number","smcr.accept.server.qp.number", -+ "Server QP Number","smc.accept.server.qp.number", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_rmb_rkey, { -- "Server RMB Rkey","smcr.accept.server.rmb.rkey", -+ "Server RMB Rkey","smc.accept.server.rmb.rkey", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_tcp_conn_index, { - "Server TCP Connection Index", -- "smcr.accept.server.tcp.conn.index", -+ "smc.accept.server.tcp.conn.index", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_rmb_element_alert_token, { - "Server RMB Element Alert Token", -- "smcr.accept.server.rmb.element.alert.token", -+ "smc.accept.server.rmb.element.alert.token", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_server_rmb_virtual_address, { - "Server's RMB Virtual Address", -- "smcr.accept.server.rmb.virtual.address", -+ "smc.accept.server.rmb.virtual.address", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_accept_initial_psn, { -- "Initial PSN","smcr.accept.initial.psn", -+ "Initial PSN","smc.accept.initial.psn", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_peer_id, { - "Sender (Client) Peer ID", -- "smcr.confirm.sender.client.peer.id", -+ "smc.confirm.sender.client.peer.id", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_gid, { -- "Client GID", "smcr.client.gid", -+ "Client GID", "smc.client.gid", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_mac, { -- "Client MAC Address", "smcr.confirm.client.mac", -+ "Client MAC Address", "smc.confirm.client.mac", - FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_qp_number, { -- "Client QP Number","smcr.confirm.client.qp.number", -+ "Client QP Number","smc.confirm.client.qp.number", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_rmb_rkey, { -- "Client RMB Rkey","smcr.confirm.client.rmb.rkey", -+ "Client RMB Rkey","smc.confirm.client.rmb.rkey", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_tcp_conn_index, { - "Client TCP Connection Index", -- "smcr.confirm.client.tcp.conn.index", -+ "smc.confirm.client.tcp.conn.index", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_rmb_element_alert_token, { - "Client RMB Element Alert Token", -- "smcr.client.rmb.element.alert.token", -+ "smc.client.rmb.element.alert.token", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_client_rmb_virtual_address, { - "Client's RMB Virtual Address", -- "smcr.client.rmb.virtual.address", -+ "smc.client.rmb.virtual.address", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_initial_psn, { -- "Initial PSN","smcr.initial.psn", -+ "Initial PSN","smc.initial.psn", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_decline_peer_id, { -- "Sender Peer ID", "smcr.sender.peer.id", -+ { &hf_smc_decline_peer_id, { -+ "Sender Peer ID", "smc.sender.peer.id", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -- { &hf_smcr_decline_diag_info, { -- "Peer Diagnosis Information", "smcr.peer.diag.info", -+ { &hf_smc_decline_diag_info, { -+ "Peer Diagnosis Information", "smc.peer.diag.info", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -+ { &hf_decline_os_type, { -+ "OS Type", "smc.decline.os.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_os_message_txt), 0xF0, NULL, HFILL} }, -+ - { &hf_smcr_confirm_link_gid, { -- "Sender GID", "smcr.sender.gid", -+ "Sender GID", "smc.sender.gid", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_mac, { -- "Sender MAC Address", "smcr.confirm.link.sender.mac", -+ "Sender MAC Address", "smc.confirm.link.sender.mac", - FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_qp_number, { -- "Sender QP Number","smcr.confirm.link.sender.qp.number", -+ "Sender QP Number","smc.confirm.link.sender.qp.number", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_number, { -- "Link Number", "smcr.confirm.link.number", -+ "Link Number", "smc.confirm.link.number", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_userid, { - "Sender Link User ID", -- "smcr.confirm.link.sender.link.userid", -+ "smc.confirm.link.sender.link.userid", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_max_links, { -- "Max Links","smcr.confirm.link.max.links", -+ "Max Links","smc.confirm.link.max.links", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_flags, { -- "Flags", "smcr.confirm.link.flags", -+ "Flags", "smc.confirm.link.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_link_response, { -- "Response", "smcr.confirm.link.response", -+ "Response", "smc.confirm.link.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_add_link_gid, { -- "Sender GID", "smcr.add.link.sender.gid", -+ "Sender GID", "smc.add.link.sender.gid", - FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_mac, { -- "Sender MAC Address", "smcr.add.link.sender.mac", -+ "Sender MAC Address", "smc.add.link.sender.mac", - FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_qp_number, { -- "Sender QP Number","smcr.add.link.sender.qp.number", -+ "Sender QP Number","smc.add.link.sender.qp.number", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_number, { -- "Link Number", "smcr.add.link.link.number", -+ "Link Number", "smc.add.link.link.number", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_initial_psn, { -- "Initial PSN", "smcr.add.link.initial.psn", -+ "Initial PSN", "smc.add.link.initial.psn", - FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_flags, { -- "Flags", "smcr.add.link.flags", -+ "Flags", "smc.add.link.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_response, { -- "Add Link Response", "smcr.add.link.response", -+ "Add Link Response", "smc.add.link.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_add_link_response_rejected, { -- "Add Link Rejected", "smcr.add.link.response.rejected", -+ "Add Link Rejected", "smc.add.link.response.rejected", - FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}}, - - { &hf_smcr_add_link_flags2, { -- "Flags", "smcr.add.link.flags2", -+ "Flags", "smc.add.link.flags2", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }}, - - { &hf_smcr_add_link_qp_mtu_value, { -- "QP MTU Value", "smcr.add.link.qp.mtu.value", -+ "QP MTU Value", "smc.add.link.qp.mtu.value", - FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_flags, { -- "Flags", "smcr.add.link.cont.flags", -+ "Flags", "smc.add.link.cont.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_response, { -- "Response", "smcr.add.link.cont.response", -+ "Response", "smc.add.link.cont.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_link_number, { -- "Link Number", "smcr.add.link.cont.link.number", -+ "Link Number", "smc.add.link.cont.link.number", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_number_of_rkeys, { -- "Number of Rkeys", "smcr.add.link.cont.rkey.number", -+ "Number of Rkeys", "smc.add.link.cont.rkey.number", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p1_rkey, { - "RMB RToken Pair 1 - Rkey as known on this SMC Link", -- "smcr.add.link.cont.rmb.RTok1.Rkey1", -+ "smc.add.link.cont.rmb.RTok1.Rkey1", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p1_rkey2, { - "RMB RToken Pair 1 - Equivalent Rkey for the new SMC Link", -- "smcr.add.link.cont.rmb.RTok1.Rkey2", -+ "smc.add.link.cont.rmb.RTok1.Rkey2", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p1_virt_addr, { - "RMB RToken Pair 1 Virtual Address for the new SMC Link", -- "smcr.add.link.cont.rmb.RTok1.virt", -+ "smc.add.link.cont.rmb.RTok1.virt", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p2_rkey, { - "RMB RToken Pair 2 - Rkey as known on this SMC Link", -- "smcr.add.link.cont.rmb.RTok2.Rkey1", -+ "smc.add.link.cont.rmb.RTok2.Rkey1", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p2_rkey2, { - "RMB RToken Pair 2 - Equivalent Rkey for the new SMC Link", -- "smcr.add.link.cont.rmb.RTok2.Rkey2", -+ "smc.add.link.cont.rmb.RTok2.Rkey2", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_add_link_cont_p2_virt_addr, { - "RMB RToken Pair 2 Virtual Address for the new SMC Link", -- "smcr.add.link.cont.rmb.RTok1.virt", -+ "smc.add.link.cont.rmb.RTok1.virt", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_delete_link_flags, { -- "Flags", "smcr.delete.link.flags", -+ "Flags", "smc.delete.link.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_delete_link_response, { -- "Response", "smcr.delete.link.response", -+ "Response", "smc.delete.link.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_delete_link_all, { - "Terminate All Links In The Link Group", -- "smcr.delete.link.all", -+ "smc.delete.link.all", - FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}}, - - { &hf_smcr_delete_link_orderly, { -- "Terminate Links Orderly", "smcr.delete.link.orderly", -+ "Terminate Links Orderly", "smc.delete.link.orderly", - FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}}, - - { &hf_smcr_delete_link_number, { -- "Link Number For The Failed Link", "smcr.delete.link.number", -+ "Link Number For The Failed Link", "smc.delete.link.number", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_delete_link_reason_code, { -- "Reason Code", "smcr.delete.link.reason.code", -+ "Reason Code", "smc.delete.link.reason.code", - FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_flags, { -- "Flags", "smcr.confirm.rkey.flags", -+ "Flags", "smc.confirm.rkey.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_response, { -- "Response", "smcr.confirm.rkey.response", -+ "Response", "smc.confirm.rkey.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_negative_response, { -- "Negative Response", "smcr.confirm.rkey.negative.response", -+ "Negative Response", "smc.confirm.rkey.negative.response", - FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_retry_rkey_set, { -- "Retry Rkey Set", "smcr.confirm.rkey.retry.rkey.set", -+ "Retry Rkey Set", "smc.confirm.rkey.retry.rkey.set", - FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_number, { -- "Number of other QP", "smcr.confirm.rkey.number.qp", -+ "Number of other QP", "smc.confirm.rkey.number.qp", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_new_rkey, { -- "New Rkey for this link","smcr.confirm.rkey.new.rkey", -+ "New Rkey for this link","smc.confirm.rkey.new.rkey", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_virtual_address, { - "New RMB virtual address for this link", -- "smcr.confirm.rkey.new.virt", -+ "smc.confirm.rkey.new.virt", - FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_confirm_rkey_link_number, { -- "Link Number", "smcr.confirm.rkey.link.number", -+ "Link Number", "smc.confirm.rkey.link.number", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_delete_rkey_flags, { -- "Flags", "smcr.delete.rkey.flags", -+ "Flags", "smc.delete.rkey.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_delete_rkey_response, { -- "Response", "smcr.delete.rkey.response", -+ "Response", "smc.delete.rkey.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_delete_rkey_negative_response, { -- "Negative Response", "smcr.delete.rkey.negative.response", -+ "Negative Response", "smc.delete.rkey.negative.response", - FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}}, - - { &hf_smcr_delete_rkey_mask, { -- "Error Mask", "smcr.delete.rkey.error.mask", -+ "Error Mask", "smc.delete.rkey.error.mask", - FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}}, - - { &hf_smcr_delete_rkey_deleted, { -- "RMB Rkey to be deleted", "smcr.delete.rkey.deleted", -+ "RMB Rkey to be deleted", "smc.delete.rkey.deleted", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_test_link_flags, { -- "Flags", "smcr.test.link.flags", -+ "Flags", "smc.test.link.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_test_link_response, { -- "Response", "smcr.test.link.response", -+ "Response", "smc.test.link.response", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_seqno, { -- "Sequence Number", "smcr.rmbe.ctrl.seqno", -+ "Sequence Number", "smc.rmbe.ctrl.seqno", - FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_alert_token, { -- "Alert Token", "smcr.rmbe.ctrl.alert.token", -+ "Alert Token", "smc.rmbe.ctrl.alert.token", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - -+ { &hf_smc_proposal_eid, { -+ "EID", "smc.proposal.eid", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smc_proposal_system_eid, { -+ "SEID", "smc.proposal.system.eid", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ - { &hf_smcr_rmbe_ctrl_prod_wrap_seqno, { - "Producer window wrap sequence number", -- "smcr.rmbe.ctrl.prod.wrap.seq", -+ "smc.rmbe.ctrl.prod.wrap.seq", - FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_prod_curs, { -- "Peer Producer Cursor", "smcr.rmbe.ctrl.peer.prod.curs", -+ "Peer Producer Cursor", "smc.rmbe.ctrl.peer.prod.curs", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }}, - - { &hf_smcr_rmbe_ctrl_cons_wrap_seqno, { - "Consumer window wrap sequence number", -- "smcr.rmbe.ctrl.prod.wrap.seq", -+ "smc.rmbe.ctrl.prod.wrap.seq", - FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_cons_curs, { -- "Peer Consumer Cursor", "smcr.rmbe.ctrl.peer.prod.curs", -+ "Peer Consumer Cursor", "smc.rmbe.ctrl.peer.prod.curs", - FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_conn_rw_status_flags, { - "Connection read/write status flags", -- "smcr.rmbe.ctrl.conn.rw.status.flags", -+ "smc.rmbe.ctrl.conn.rw.status.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_write_blocked, { -- "Write Blocked", "smcr.rmbe.ctrl.write.blocked", -+ "Write Blocked", "smc.rmbe.ctrl.write.blocked", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_urgent_pending, { -- "Urgent Data Pending", "smcr.rmbe.ctrl.urgent.pending", -+ "Urgent Data Pending", "smc.rmbe.ctrl.urgent.pending", - FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_urgent_present, { -- "Urgent Data Present", "smcr.rmbe.ctrl.urgent.present", -+ "Urgent Data Present", "smc.rmbe.ctrl.urgent.present", - FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_cons_update_requested, { - "Consumer Cursor Update Requested", -- "smcr.rmbe.ctrl.cons.update.requested", -+ "smc.rmbe.ctrl.cons.update.requested", - FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_failover_validation, { - "Failover Validation Indicator", -- "smcr.rmbe.ctrl.failover.validation", -+ "smc.rmbe.ctrl.failover.validation", - FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_conn_state_flags, { - "Peer Connection State Flags", -- "smcr.rmbe.ctrl.peer.conn.state.flags", -+ "smc.rmbe.ctrl.peer.conn.state.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_sending_done, { -- "Peer Sending Done", "smcr.rmbe.ctrl.peer.sending.done", -+ "Peer Sending Done", "smc.rmbe.ctrl.peer.sending.done", - FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_closed_conn, { -- "Peer Closed Connection", "smcr.rmbe.ctrl.peer.closed.conn", -+ "Peer Closed Connection", "smc.rmbe.ctrl.peer.closed.conn", - FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL}}, - - { &hf_smcr_rmbe_ctrl_peer_abnormal_close, { -- "Peer Abnormal Close", "smcr.rmbe.ctrl.peer.abnormal.close", -- FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}} -+ "Peer Abnormal Close", "smc.rmbe.ctrl.peer.abnormal.close", -+ FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL}}, -+ -+ { &hf_smcd_accept_eid, { -+ "EID", "smc.accept.eid", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_eid, { -+ "EID", "smc.confirm.eid", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_peer_name, { -+ "Peer Host Name", "smc.accept.peer.host.name", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_peer_name, { -+ "Peer Host Name", "smc.confirm.peer.host.name", -+ FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_first_contact, { -+ "First Contact", "smc.accept.first.contact", -+ FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_first_contact, { -+ "First Contact", "smc.confirm.first.contact", -+ FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} }, -+ -+ { &hf_accept_smc_version_release_number, { -+ "SMC Version Release Number", "smc.accept.smc.version.relnum", -+ FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL } }, -+ -+ { &hf_confirm_smc_version_release_number, { -+ "SMC Version Release Number", "smc.confirm.smc.version.relnum", -+ FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL } }, -+ -+ { &hf_accept_os_type, { -+ "OS Type", "smc.accept.os.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_os_message_txt), 0xF0, NULL, HFILL} }, -+ -+ { &hf_confirm_os_type, { -+ "OS Type", "smc.confirm.os.type", -+ FT_UINT8, BASE_DEC, VALS(smc_clc_os_message_txt), 0xF0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_dmb_token, { -+ "DMB Token", "smc.accept.dmb.token", -+ FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_dmb_token, { -+ "DMB Token", "smc.confirm.dmb.token", -+ FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_accept_dmb_buffer_size, { -+ "Server DMBE Buffers Size (Compressed Notation)", -+ "smc.accept.dmbe.buffer.size", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_dmb_buffer_size, { -+ "Client DMBE Buffers Size (Compressed Notation)", -+ "smc.confirm.dmbe.buffer.size", -+ FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_smc_chid, { -+ "ISM CHID", "smc.accept.smc.chid", -+ FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_smc_chid, { -+ "ISM CHID", "smc.confirm.smc.chid", -+ FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_server_peer_id, { -+ "Sender (Server) ISM GID", "smc.accept.sender.server.ism.gid", -+ FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_client_peer_id, { -+ "Sender (Client) ISM GID", "smc.confirm.sender.client.ism.gid", -+ FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_dmbe_conn_index, { -+ "DMBE Connection Index", -+ "smc.accept.dmbe.conn.index", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_server_link_id, { -+ "Server Link ID", -+ "smc.accept.server.linkid", -+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_dmbe_conn_index, { -+ "DMBE Connection Index", -+ "smc.confirm.dmbe.conn.index", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_client_link_id, { -+ "Client Link ID", -+ "smc.confirm.client.linkid", -+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_flags, { -+ "Flags", "smc.accept.flags", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_flags, { -+ "Flags", "smc.confirm.flags", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_flags2, { -+ "DMBE Size", "smc.accept.dmbe.size", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_confirm_flags2, { -+ "DMBE Size", "smc.confirm.dmbe.size", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smcd_accept_fce_flags, { -+ "Flags", "smc.accept.fce.flags", -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} } - }; - - /* Setup protocol subtree arrays */ -- static gint *ett[] = { -+ static gint* ett[] = { - &ett_smcr, - &ett_proposal_flag, -+ &ett_proposal_ext_flag2, - &ett_accept_flag, - &ett_accept_flag2, -+ &ett_smcd_accept_flag, -+ &ett_smcd_accept_flag2, -+ &ett_smcd_accept_fce_flag, -+ &ett_smcd_confirm_flag, -+ &ett_smcd_confirm_fce_flag, -+ &ett_smcd_confirm_flag2, - &ett_confirm_flag, - &ett_confirm_flag2, - &ett_confirm_link_flag, -+ &ett_decline_flag, -+ &ett_decline_flag2, - &ett_add_link_flag, - &ett_add_link_flag2, - &ett_add_link_cont_flag, -@@ -1405,21 +2085,21 @@ proto_register_smcr(void) - &ett_rmbe_ctrl_peer_conn_state_flag - }; - -- proto_smcr = proto_register_protocol("Shared Memory Communications - RDMA", -- "SMCR", "smcr"); -+ proto_smc = proto_register_protocol("Shared Memory Communications", -+ "SMC", "smc"); - -- proto_register_field_array(proto_smcr, hf, array_length(hf)); -+ proto_register_field_array(proto_smc, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - -- smcr_tcp_handle = register_dissector("smcr", dissect_smcr_tcp, proto_smcr); -+ smc_tcp_handle = register_dissector("smc", dissect_smc_tcp, proto_smc); - } - - void - proto_reg_handoff_smcr(void) - { -- heur_dissector_add("tcp", dissect_smcr_tcp_heur, "Shared Memory Communications over TCP", "smcr_tcp", proto_smcr, HEURISTIC_ENABLE); -- heur_dissector_add("infiniband.payload", dissect_smcr_infiniband_heur, "Shared Memory Communications Infiniband", "smcr_infiniband", proto_smcr, HEURISTIC_ENABLE); -- dissector_add_for_decode_as("infiniband", create_dissector_handle( dissect_smcr_infiniband, proto_smcr ) ); -+ heur_dissector_add("tcp", dissect_smc_tcp_heur, "Shared Memory Communications over TCP", "smc_tcp", proto_smc, HEURISTIC_ENABLE); -+ heur_dissector_add("infiniband.payload", dissect_smcr_infiniband_heur, "Shared Memory Communications Infiniband", "smcr_infiniband", proto_smc, HEURISTIC_ENABLE); -+ dissector_add_for_decode_as("infiniband", create_dissector_handle( dissect_smcr_infiniband, proto_smc ) ); - } - - /* -diff --git a/epan/dissectors/packet-smc.c b/epan/dissectors/packet-smc.c -index bbfa9c07ef..0a4e96e055 100644 ---- a/epan/dissectors/packet-smc.c -+++ b/epan/dissectors/packet-smc.c -@@ -592,7 +592,7 @@ disect_smcd_accept(tvbuff_t* tvb, proto_tree* tree) - offset += FLAG_BYTE_LEN; - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcd_accept_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); -- offset += 32; -+ /* offset += 32; */ - } - } - } -@@ -661,7 +661,7 @@ disect_smcd_confirm(tvbuff_t* tvb, proto_tree* tree) - offset += FLAG_BYTE_LEN; - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcd_confirm_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); -- offset += 32; -+ /* offset += 32; */ - } - } - } -diff --git a/epan/dissectors/packet-smc.c b/epan/dissectors/packet-smc.c -index 0a4e96e055..6ede4690db 100644 ---- a/epan/dissectors/packet-smc.c -+++ b/epan/dissectors/packet-smc.c -@@ -1,3 +1,6 @@ -+ -+ -+ - /* packet-smc.c - * SMC dissector for wireshark - * By Joe Fowler -@@ -191,6 +194,8 @@ static int hf_smc_proposal_outgoing_subnet_mask_signifcant_bits = -1; - static int hf_smc_proposal_ipv6_prefix = -1; - static int hf_smc_proposal_ipv6_prefix_length = -1; - -+static int hf_smc_reserved = -1; -+ - /* SMC-R Accept */ - static int ett_accept_flag = -1; - static int ett_accept_flag2 = -1; -@@ -427,6 +432,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - - if (mask_offset != 0) { - suboffset = offset; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ suboffset, TWO_BYTE_RESERVED, ENC_NA); - suboffset += TWO_BYTE_RESERVED; - if (is_smcdv1 || is_smcdv2) { - proto_tree_add_item(tree, hf_smc_proposal_ism_gid, tvb, -@@ -439,6 +446,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - LENGTH_BYTE_LEN, ENC_BIG_ENDIAN); - } - suboffset += LENGTH_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ suboffset, TWO_BYTE_RESERVED, ENC_NA); - v2_ext_offset = tvb_get_ntohs(tvb, suboffset); - v2_ext_pos = suboffset + TWO_BYTE_RESERVED + v2_ext_offset; - } -@@ -451,7 +460,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - proto_tree_add_item(tree, hf_smc_proposal_outgoing_subnet_mask_signifcant_bits, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset += 1; -- /* Bump past reserved bytes */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - ipv6_prefix_count = tvb_get_guint8(tvb, offset); - offset += 1; -@@ -472,7 +482,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - offset += FLAG_BYTE_LEN; - num_of_gids = tvb_get_guint8(tvb, offset); - offset += FLAG_BYTE_LEN; -- /*Skip reserved flag 1*/ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 1, ENC_NA); - offset += 1; - proposal_flag_item = proto_tree_add_item(tree, hf_smc_proposal_ext_flags, tvb, - offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); -@@ -482,7 +493,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - proto_tree_add_item(proposal_flag_tree, hf_proposal_smc_version_seid, tvb, - offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -- /*Skip not used 2 bytes*/ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 2, ENC_NA); - offset += 2; - smcd_v2_ext_offset = tvb_get_ntohs(tvb, offset); - offset += 2; -@@ -499,7 +511,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - offset, IPV4_SUBNET_MASK_LEN, ENC_BIG_ENDIAN); - offset += IPV4_SUBNET_MASK_LEN; - } -- /*Skip reserved 16 bytes*/ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 16, ENC_NA); - offset += 16; - while (num_of_eids != 0) { - proto_tree_add_item(tree, hf_smc_proposal_eid, tvb, -@@ -512,7 +525,8 @@ disect_smc_proposal(tvbuff_t *tvb, proto_tree *tree, bool is_ipv6) - proto_tree_add_item(tree, hf_smc_proposal_system_eid, tvb, - offset, EID_LEN, ENC_ASCII | ENC_NA); - offset += EID_LEN; -- /*Skip reserved 16 bytes*/ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 16, ENC_NA); - offset += 16; - while (num_of_gids != 0) { - proto_tree_add_item(tree, hf_smc_proposal_ism_gid, tvb, -@@ -580,16 +594,21 @@ disect_smcd_accept(tvbuff_t* tvb, proto_tree* tree) - - proto_tree_add_item(tree, hf_smcd_accept_eid, tvb, offset, 32, ENC_ASCII | ENC_NA); - offset += 32; -- /* Reserved bytes */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 8, ENC_NA); - offset += 8; - - if (first_contact) { -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - accept_flag_item = proto_tree_add_item(tree, hf_smcd_accept_fce_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - accept_flag_tree = proto_item_add_subtree(accept_flag_item, ett_smcd_accept_fce_flag); - proto_tree_add_item(accept_flag_tree, hf_accept_os_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(accept_flag_tree, hf_accept_smc_version_release_number, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcd_accept_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); - /* offset += 32; */ -@@ -637,6 +656,8 @@ disect_smcd_confirm(tvbuff_t* tvb, proto_tree* tree) - confirm_flag2_tree = proto_item_add_subtree(confirm_flag2_item, ett_smcd_confirm_flag2); - proto_tree_add_item(confirm_flag2_tree, hf_smcd_confirm_dmb_buffer_size, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcd_confirm_client_link_id, tvb, - offset, ALERT_TOKEN_LEN, ENC_BIG_ENDIAN); -@@ -649,16 +670,21 @@ disect_smcd_confirm(tvbuff_t* tvb, proto_tree* tree) - - proto_tree_add_item(tree, hf_smcd_confirm_eid, tvb, offset, 32, ENC_ASCII | ENC_NA); - offset += 32; -- /* Reserved bytes */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, 8, ENC_NA); - offset += 8; - - if (first_contact) { -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - confirm_flag_item = proto_tree_add_item(tree, hf_smcd_accept_fce_flags, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - confirm_flag_tree = proto_item_add_subtree(confirm_flag_item, ett_smcd_confirm_fce_flag); - proto_tree_add_item(confirm_flag_tree, hf_confirm_os_type, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(confirm_flag_tree, hf_confirm_smc_version_release_number, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcd_confirm_peer_name, tvb, offset, 32, ENC_ASCII | ENC_NA); - /* offset += 32; */ -@@ -711,12 +737,14 @@ disect_smcr_accept(tvbuff_t *tvb, proto_tree *tree) - proto_tree_add_item(accept_flag2_tree, hf_accept_rmb_buffer_size, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(accept_flag2_tree, hf_accept_qp_mtu_value, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -- /* Bump past reserved byte */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_accept_server_rmb_virtual_address, tvb, - offset, VIRTUAL_ADDR_LEN, ENC_BIG_ENDIAN); - offset += VIRTUAL_ADDR_LEN; -- /* Bump past reserved byte */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_accept_initial_psn, tvb, - offset, PSN_LEN, ENC_BIG_ENDIAN); -@@ -765,12 +793,14 @@ disect_smcr_confirm(tvbuff_t *tvb, proto_tree *tree) - proto_tree_add_item(confirm_flag2_tree, hf_confirm_rmb_buffer_size, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - proto_tree_add_item(confirm_flag2_tree, hf_confirm_qp_mtu_value, tvb, offset, FLAG_BYTE_LEN, ENC_BIG_ENDIAN); - offset += FLAG_BYTE_LEN; -- /* Bump past reserved byte */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_confirm_client_rmb_virtual_address, tvb, - offset, VIRTUAL_ADDR_LEN, ENC_BIG_ENDIAN); - offset += VIRTUAL_ADDR_LEN; -- /* Bump past reserved byte */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, ONE_BYTE_RESERVED, ENC_NA); - offset += ONE_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_confirm_initial_psn, tvb, - offset, PSN_LEN, ENC_BIG_ENDIAN); -@@ -866,7 +896,8 @@ disect_smcr_add_link(tvbuff_t *tvb, proto_tree *tree) - proto_tree_add_item(tree, hf_smcr_add_link_mac, tvb, - offset, MAC_ADDR_LEN, ENC_NA); - offset += MAC_ADDR_LEN; -- /* Bump past reserved bytes */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, -+ offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_add_link_gid, tvb, - offset, GID_LEN, ENC_NA); -@@ -1084,12 +1115,13 @@ disect_smcr_rmbe_ctrl(tvbuff_t *tvb, proto_tree *tree) - offset += SEQNO_LEN; - proto_tree_add_item(tree, hf_smcr_rmbe_ctrl_alert_token, tvb, offset, ALERT_TOKEN_LEN, ENC_BIG_ENDIAN); - offset += ALERT_TOKEN_LEN; -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_rmbe_ctrl_prod_wrap_seqno, tvb, offset, SEQNO_LEN, ENC_BIG_ENDIAN); - offset += SEQNO_LEN; - proto_tree_add_item(tree, hf_smcr_rmbe_ctrl_peer_prod_curs, tvb, offset, CURSOR_LEN, ENC_BIG_ENDIAN); - offset += CURSOR_LEN; -- /* Bump past reserved bytes */ -+ proto_tree_add_item(tree, hf_smc_reserved, tvb, offset, TWO_BYTE_RESERVED, ENC_NA); - offset += TWO_BYTE_RESERVED; - proto_tree_add_item(tree, hf_smcr_rmbe_ctrl_cons_wrap_seqno, tvb, offset, SEQNO_LEN, ENC_BIG_ENDIAN); - offset += SEQNO_LEN; -@@ -2053,7 +2085,11 @@ proto_register_smcr(void) - - { &hf_smcd_accept_fce_flags, { - "Flags", "smc.accept.fce.flags", -- FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} } -+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} }, -+ -+ { &hf_smc_reserved, { -+ "Reserved", "smc.reserved", -+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} } - }; - - /* Setup protocol subtree arrays */ diff --git a/wireshark.spec b/wireshark.spec index ee44900..b8825b8 100644 --- a/wireshark.spec +++ b/wireshark.spec @@ -1,13 +1,13 @@ %undefine __cmake_in_source_build %global with_lua 1 %global with_maxminddb 1 -%global plugins_version 3.4 +%global plugins_version 3.6 # added temporarily due to errors in libqt5core %define _lto_cflags %{nil} Summary: Network traffic analyzer Name: wireshark -Version: 3.4.9 +Version: 3.6.0 Release: 1%{?dist} Epoch: 1 License: GPL+ @@ -29,7 +29,6 @@ Patch5: wireshark-0005-Fix-paths-in-a-wireshark.desktop-file.patch # Fedora-specific Patch6: wireshark-0006-Move-tmp-to-var-tmp.patch Patch7: wireshark-0007-cmakelists.patch -Patch9: wireshark-0009-smc-support.patch #install tshark together with wireshark GUI Requires: %{name}-cli = %{epoch}:%{version}-%{release} @@ -69,6 +68,7 @@ BuildRequires: qt5-qtbase-devel BuildRequires: qt5-qtmultimedia-devel BuildRequires: qt5-qtsvg-devel BuildRequires: zlib-devel +BuildRequires: asciidoctor %if %{with_maxminddb} && 0%{?fedora} BuildRequires: libmaxminddb-devel %endif @@ -148,7 +148,7 @@ and plugins. %install %cmake_install -desktop-file-validate %{buildroot}%{_datadir}/applications/wireshark.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/org.wireshark.Wireshark.desktop #install devel files (inspired by debian/wireshark-dev.header-files) install -d -m 0755 %{buildroot}%{_includedir}/wireshark @@ -170,7 +170,6 @@ install -m 644 epan/crypt/*.h "${IDIR}/epan/crypt" install -m 644 epan/ftypes/*.h "${IDIR}/epan/ftypes" install -m 644 epan/dfilter/*.h "${IDIR}/epan/dfilter" install -m 644 epan/dissectors/*.h "${IDIR}/epan/dissectors" -install -m 644 epan/wmem/*.h "${IDIR}/epan/wmem" install -m 644 wiretap/*.h "${IDIR}/wiretap" install -m 644 wsutil/*.h "${IDIR}/wsutil" install -m 644 ws_diag_control.h "${IDIR}/" @@ -196,11 +195,11 @@ fi %ldconfig_postun cli %files -%{_datadir}/appdata/%{name}.appdata.xml -%{_datadir}/applications/wireshark.desktop +%{_datadir}/applications/org.wireshark.Wireshark.desktop +%{_datadir}/metainfo/*.xml +%{_datadir}/mime/packages/*.xml %{_datadir}/icons/hicolor/*/apps/* %{_datadir}/icons/hicolor/*/mimetypes/* -%{_datadir}/mime/packages/wireshark.xml %{_bindir}/wireshark %{_mandir}/man1/wireshark.* %{_sysusersdir}/%{name}.conf @@ -262,13 +261,13 @@ fi %{_mandir}/man1/randpktdump.* %{_mandir}/man1/dpauxmon.* %{_mandir}/man1/sdjournal.* +%{_mandir}/man1/etwdump.1.gz %{_mandir}/man4/extcap.* %if %{with_maxminddb} && 0%{?fedora} %{_mandir}/man1/mmdbresolve.* %endif %dir %{_datadir}/wireshark %{_datadir}/wireshark/* -%{_docdir}/wireshark/*.html %files devel %doc doc/README.* ChangeLog @@ -277,6 +276,10 @@ fi %{_libdir}/pkgconfig/%{name}.pc %changelog +* Thu Nov 25 2021 Michal Ruprich - 1:3.6.0-1 +- New version 3.6.0 +- Fix for CVE-2021-39920, CVE-2021-39921, CVE-2021-39922, CVE-2021-39923, CVE-2021-39924, CVE-2021-39925, CVE-2021-39926, CVE-2021-39928, CVE-2021-39929 + * Wed Oct 13 2021 Michal Ruprich - 1:3.4.9-2 - New version 3.4.9