diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-02-22 10:52:05 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-02-22 10:52:05 +0000 |
commit | 9fb248f1c0c2a6b6092f1902087787e2f1c8b298 (patch) | |
tree | b977229d5abc482c555560ce87e7e1fc26775e7e /plugins | |
parent | 03bbd18a0bfb50b3d3c3c313fa112c03fd823e75 (diff) | |
download | wireshark-9fb248f1c0c2a6b6092f1902087787e2f1c8b298.tar.gz wireshark-9fb248f1c0c2a6b6092f1902087787e2f1c8b298.tar.bz2 wireshark-9fb248f1c0c2a6b6092f1902087787e2f1c8b298.zip |
Incorporate plugin dissector into build in collection.
svn path=/trunk/; revision=27502
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/Makefile.am | 1 | ||||
-rw-r--r-- | plugins/Makefile.nmake | 4 | ||||
-rw-r--r-- | plugins/infiniband/Makefile.am | 127 | ||||
-rw-r--r-- | plugins/infiniband/Makefile.common | 35 | ||||
-rw-r--r-- | plugins/infiniband/Makefile.nmake | 102 | ||||
-rw-r--r-- | plugins/infiniband/moduleinfo.h | 16 | ||||
-rw-r--r-- | plugins/infiniband/moduleinfo.nmake | 28 | ||||
-rw-r--r-- | plugins/infiniband/packet-infiniband.c | 3150 | ||||
-rw-r--r-- | plugins/infiniband/packet-infiniband.h | 2571 | ||||
-rw-r--r-- | plugins/infiniband/plugin.rc.in | 34 |
10 files changed, 0 insertions, 6068 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 611537d4d4..f0987277c0 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -32,7 +32,6 @@ SUBDIRS = $(_CUSTOM_SUBDIRS_) \ ethercat \ giop \ gryphon \ - infiniband \ irda \ m2m \ mate \ diff --git a/plugins/Makefile.nmake b/plugins/Makefile.nmake index 6e13ecb416..b3cefe987a 100644 --- a/plugins/Makefile.nmake +++ b/plugins/Makefile.nmake @@ -57,9 +57,6 @@ process-plugins: cd gryphon $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake $(PLUGIN_TARGET) cd .. - cd infiniband - $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake $(PLUGIN_TARGET) - cd .. cd irda $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake $(PLUGIN_TARGET) cd .. @@ -109,7 +106,6 @@ install-plugins: xcopy plugins\ethercat\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d xcopy plugins\giop\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d xcopy plugins\gryphon\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d - xcopy plugins\infiniband\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d xcopy plugins\irda\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d xcopy plugins\m2m\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d xcopy plugins\mate\*.dll $(INSTALL_DIR)\plugins\$(VERSION) /d diff --git a/plugins/infiniband/Makefile.am b/plugins/infiniband/Makefile.am deleted file mode 100644 index 1fbb3a47b6..0000000000 --- a/plugins/infiniband/Makefile.am +++ /dev/null @@ -1,127 +0,0 @@ -# Makefile.am -# Automake file for Infiniband plugin -# -# $Id$ -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# - -INCLUDES = -I$(top_srcdir) -I$(includedir) - -include Makefile.common - -if HAVE_WARNINGS_AS_ERRORS -AM_CFLAGS = -Werror -endif - -plugindir = @plugindir@ - -plugin_LTLIBRARIES = infiniband.la -infiniband_la_SOURCES = \ - plugin.c \ - moduleinfo.h \ - $(DISSECTOR_SRC) \ - $(DISSECTOR_INCLUDES) -infiniband_la_LDFLAGS = -module -avoid-version -infiniband_la_LIBADD = @PLUGIN_LIBS@ - -# Libs must be cleared, or else libtool won't create a shared module. -# If your module needs to be linked against any particular libraries, -# add them here. -LIBS = - -# -# Build plugin.c, which contains the plugin version[] string, a -# function plugin_register() that calls the register routines for all -# protocols, and a function plugin_reg_handoff() that calls the handoff -# registration routines for all protocols. -# -# We do this by scanning sources. If that turns out to be too slow, -# maybe we could just require every .o file to have an register routine -# of a given name (packet-aarp.o -> proto_register_aarp, etc.). -# -# Formatting conventions: The name of the proto_register_* routines an -# proto_reg_handoff_* routines must start in column zero, or must be -# preceded only by "void " starting in column zero, and must not be -# inside #if. -# -# DISSECTOR_SRC is assumed to have all the files that need to be scanned. -# -# For some unknown reason, having a big "for" loop in the Makefile -# to scan all the files doesn't work with some "make"s; they seem to -# pass only the first few names in the list to the shell, for some -# reason. -# -# Therefore, we have a script to generate the plugin.c file. -# The shell script runs slowly, as multiple greps and seds are run -# for each input file; this is especially slow on Windows. Therefore, -# if Python is present (as indicated by PYTHON being defined), we run -# a faster Python script to do that work instead. -# -# The first argument is the directory in which the source files live. -# The second argument is "plugin", to indicate that we should build -# a plugin.c file for a plugin. -# All subsequent arguments are the files to scan. -# -plugin.c: $(DISSECTOR_SRC) $(top_srcdir)/tools/make-dissector-reg \ - $(top_srcdir)/tools/make-dissector-reg.py - @if test -n $(PYTHON); then \ - echo Making plugin.c with python ; \ - $(PYTHON) $(top_srcdir)/tools/make-dissector-reg.py $(srcdir) \ - plugin $(DISSECTOR_SRC) ; \ - else \ - echo Making plugin.c with shell script ; \ - $(top_srcdir)/tools/make-dissector-reg $(srcdir) \ - $(plugin_src) plugin $(DISSECTOR_SRC) ; \ - fi - -# -# Currently plugin.c can be included in the distribution because -# we always build all protocol dissectors. We used to have to check -# whether or not to build the snmp dissector. If we again need to -# variably build something, making plugin.c non-portable, uncomment -# the dist-hook line below. -# -# Oh, yuk. We don't want to include "plugin.c" in the distribution, as -# its contents depend on the configuration, and therefore we want it -# to be built when the first "make" is done; however, Automake insists -# on putting *all* source into the distribution. -# -# We work around this by having a "dist-hook" rule that deletes -# "plugin.c", so that "dist" won't pick it up. -# -#dist-hook: -# @rm -f $(distdir)/plugin.c - -CLEANFILES = \ - infiniband \ - *~ - -MAINTAINERCLEANFILES = \ - Makefile.in \ - plugin.c - -EXTRA_DIST = \ - Makefile.common \ - Makefile.nmake \ - moduleinfo.nmake \ - plugin.rc.in - -checkapi: - $(PERL) $(top_srcdir)/tools/checkAPIs.pl -g abort -g termoutput $(DISSECTOR_SRC) diff --git a/plugins/infiniband/Makefile.common b/plugins/infiniband/Makefile.common deleted file mode 100644 index 147ef613b6..0000000000 --- a/plugins/infiniband/Makefile.common +++ /dev/null @@ -1,35 +0,0 @@ -# Makefile.common for Infiniband plugin -# Contains the stuff from Makefile.am and Makefile.nmake that is -# a) common to both files and -# b) portable between both files -# -# $Id$ -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# the name of the plugin -PLUGIN_NAME = infiniband - -# the dissector sources (without any helpers) -DISSECTOR_SRC = \ - packet-infiniband.c - -DISSECTOR_INCLUDES = \ - packet-infiniband.h - diff --git a/plugins/infiniband/Makefile.nmake b/plugins/infiniband/Makefile.nmake deleted file mode 100644 index f83e2b6d7f..0000000000 --- a/plugins/infiniband/Makefile.nmake +++ /dev/null @@ -1,102 +0,0 @@ -# Makefile.nmake -# nmake file for Wireshark plugin -# -# $Id$ -# - -include ..\..\config.nmake -include moduleinfo.nmake - -include Makefile.common - -CFLAGS=/WX /DHAVE_CONFIG_H /I../.. $(GLIB_CFLAGS) \ - /I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS) - -LDFLAGS = $(PLUGIN_LDFLAGS) - -!IFDEF ENABLE_LIBWIRESHARK -LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib -CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS) - -DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj) - -DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj) - -OBJECTS = $(DISSECTOR_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS) plugin.obj - -RESOURCE=$(PLUGIN_NAME).res - -all: $(PLUGIN_NAME).dll - -$(PLUGIN_NAME).rc : moduleinfo.nmake - sed -e s/@PLUGIN_NAME@/$(PLUGIN_NAME)/ \ - -e s/@RC_MODULE_VERSION@/$(RC_MODULE_VERSION)/ \ - -e s/@RC_VERSION@/$(RC_VERSION)/ \ - -e s/@MODULE_VERSION@/$(MODULE_VERSION)/ \ - -e s/@PACKAGE@/$(PACKAGE)/ \ - -e s/@VERSION@/$(VERSION)/ \ - -e s/@MSVC_VARIANT@/$(MSVC_VARIANT)/ \ - < plugin.rc.in > $@ - -$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) $(LINK_PLUGIN_WITH) $(RESOURCE) - link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \ - $(GLIB_LIBS) $(RESOURCE) -!IF $(MSC_VER_REQUIRED) >= 1400 - mt.exe -nologo -manifest "$(PLUGIN_NAME).dll.manifest" -outputresource:$(PLUGIN_NAME).dll;2 -!ENDIF - -# -# Build plugin.c, which contains the plugin version[] string, a -# function plugin_register() that calls the register routines for all -# protocols, and a function plugin_reg_handoff() that calls the handoff -# registration routines for all protocols. -# -# We do this by scanning sources. If that turns out to be too slow, -# maybe we could just require every .o file to have an register routine -# of a given name (packet-aarp.o -> proto_register_aarp, etc.). -# -# Formatting conventions: The name of the proto_register_* routines an -# proto_reg_handoff_* routines must start in column zero, or must be -# preceded only by "void " starting in column zero, and must not be -# inside #if. -# -# DISSECTOR_SRC is assumed to have all the files that need to be scanned. -# -# For some unknown reason, having a big "for" loop in the Makefile -# to scan all the files doesn't work with some "make"s; they seem to -# pass only the first few names in the list to the shell, for some -# reason. -# -# Therefore, we have a script to generate the plugin.c file. -# The shell script runs slowly, as multiple greps and seds are run -# for each input file; this is especially slow on Windows. Therefore, -# if Python is present (as indicated by PYTHON being defined), we run -# a faster Python script to do that work instead. -# -# The first argument is the directory in which the source files live. -# The second argument is "plugin", to indicate that we should build -# a plugin.c file for a plugin. -# All subsequent arguments are the files to scan. -# -plugin.c: $(DISSECTOR_SRC) ../../tools/make-dissector-reg.py ../../tools/make-dissector-reg -!IFDEF PYTHON - @echo Making plugin.c (using python) - @$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC) -!ELSE - @echo Making plugin.c (using sh) - @$(SH) ../../tools/make-dissector-reg . plugin $(DISSECTOR_SRC) -!ENDIF - -!ENDIF - -clean: - rm -f $(OBJECTS) $(RESOURCE) plugin.c *.pdb \ - $(PLUGIN_NAME).dll $(PLUGIN_NAME).dll.manifest $(PLUGIN_NAME).lib \ - $(PLUGIN_NAME).exp $(PLUGIN_NAME).rc - -distclean: clean - -maintainer-clean: distclean - -checkapi: - $(PERL) ../../tools/checkAPIs.pl -g abort -g termoutput $(DISSECTOR_SRC) diff --git a/plugins/infiniband/moduleinfo.h b/plugins/infiniband/moduleinfo.h deleted file mode 100644 index 97a1fd2f75..0000000000 --- a/plugins/infiniband/moduleinfo.h +++ /dev/null @@ -1,16 +0,0 @@ -/* Included *after* config.h, in order to re-define these macros */ - -#ifdef PACKAGE -#undef PACKAGE -#endif - -/* Name of package */ -#define PACKAGE "infiniband" - - -#ifdef VERSION -#undef VERSION -#endif - -/* Version number of package */ -#define VERSION "1.2.0" diff --git a/plugins/infiniband/moduleinfo.nmake b/plugins/infiniband/moduleinfo.nmake deleted file mode 100644 index 3b514a3bde..0000000000 --- a/plugins/infiniband/moduleinfo.nmake +++ /dev/null @@ -1,28 +0,0 @@ -# -# $Id$ -# - -# The name -PACKAGE=infiniband - -# The version -MODULE_VERSION_MAJOR=1 -MODULE_VERSION_MINOR=2 -MODULE_VERSION_MICRO=0 -MODULE_VERSION_EXTRA=0 - -# -# The RC_VERSION should be comma-separated, not dot-separated, -# as per Graham Bloice's message in -# -# http://www.ethereal.com/lists/ethereal-dev/200303/msg00283.html -# -# "The RC_VERSION variable in config.nmake should be comma separated. -# This allows the resources to be built correctly and the version -# number to be correctly displayed in the explorer properties dialog -# for the executables, and XP's tooltip, rather than 0.0.0.0." -# - -MODULE_VERSION=$(MODULE_VERSION_MAJOR).$(MODULE_VERSION_MINOR).$(MODULE_VERSION_MICRO).$(MODULE_VERSION_EXTRA) -RC_MODULE_VERSION=$(MODULE_VERSION_MAJOR),$(MODULE_VERSION_MINOR),$(MODULE_VERSION_MICRO),$(MODULE_VERSION_EXTRA) - diff --git a/plugins/infiniband/packet-infiniband.c b/plugins/infiniband/packet-infiniband.c deleted file mode 100644 index 59db318926..0000000000 --- a/plugins/infiniband/packet-infiniband.c +++ /dev/null @@ -1,3150 +0,0 @@ -/* packet-infiniband.c - * Routines for Infiniband/ERF Dissection - * - * $Id$ - * - * Copyright 2008 Endace Technology Limited - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <glib.h> -#include <epan/packet.h> -#include <epan/proto.h> -#include <epan/dissectors/packet-frame.h> -#include "packet-infiniband.h" - - -/* Protocol Registration */ -void proto_register_infiniband(void) -{ - proto_infiniband = proto_register_protocol("InfiniBand", "InfiniBand", "infiniband"); - register_dissector("infiniband", dissect_infiniband, proto_infiniband); - - proto_register_field_array(proto_infiniband, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - -} - -/* Reg Handoff. Register dissectors we'll need for IPoIB */ -void proto_reg_handoff_infiniband(void) -{ - ipv6_handle = find_dissector("ipv6"); - data_handle = find_dissector("data"); - ethertype_dissector_table = find_dissector_table("ethertype"); -} - - -/* Main Dissector */ -/* Notes: */ -/* 1.) Floating "offset+=" statements should probably be "functionized" but they are inline */ -/* Offset is only passed by reference in specific places, so do not be confused when following code */ -/* In any code path, adding up "offset+=" statements will tell you what byte you are at */ -static void -dissect_infiniband(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) -{ - /* Top Level Item */ - proto_item *infiniband_packet = NULL; - - /* The Headers Subtree */ - proto_tree *all_headers_tree = NULL; - - /* LRH - Local Route Header */ - proto_tree *local_route_header_tree = NULL; - proto_item *local_route_header_item = NULL; - - /* GRH - Global Route Header */ - proto_tree *global_route_header_tree = NULL; - proto_item *global_route_header_item = NULL; - - /* BTH - Base Transport header */ - proto_tree *base_transport_header_tree = NULL; - proto_item *base_transport_header_item = NULL; - - /* Raw Data */ - proto_tree *RAWDATA_header_tree; - proto_item *RAWDATA_header_item; - guint8 lnh_val = 0; /* Link Next Header Value */ - gint offset = 0; /* Current Offset */ - - /* General Variables */ - gboolean bthFollows = 0; /* Tracks if we are parsing a BTH. This is a significant decision point */ - guint8 virtualLane = 0; /* IB VirtualLane. Keyed off of for detecting subnet admin/management */ - guint8 opCode = 0; /* OpCode from BTH header. */ - gint32 nextHeaderSequence = -1; /* defined by this dissector. #define which indicates the upcoming header sequence from OpCode */ - guint16 payloadLength = 0; /* Payload Length should it exist */ - guint8 nxtHdr = 0; /* Keyed off for header dissection order */ - guint16 packetLength = 0; /* Packet Length. We track this as tvb->length - offset. It provides the parsing methods a known size */ /* that must be available for that header. */ - struct e_in6_addr SRCgid; /* Structures to hold GIDs should be need them */ - struct e_in6_addr DSTgid; - gint crc_length = 0; - - /* Mark the Packet type as Infiniband in the wireshark UI */ - /* Clear other columns */ - if(pinfo->cinfo) - { - if(check_col(pinfo->cinfo, COL_PROTOCOL)) - col_set_str(pinfo->cinfo, COL_PROTOCOL, "InfiniBand"); - if(check_col(pinfo->cinfo, COL_INFO)) - col_clear(pinfo->cinfo, COL_INFO); - } - - /* Get the parent tree from the ERF dissector. We don't want to nest under ERF */ - if(tree && tree->parent) - { - /* Set the normal tree outside of ERF */ - tree = tree->parent; - /* Set a global reference for nested protocols */ - top_tree = tree; - } - - if(!tree) - { - /* If no packet details are being dissected, extract some high level info for the packet view */ - /* Assigns column values rather than full tree population */ - dissect_general_info(tvb, offset, pinfo); - return; - } - - /* Top Level Packet */ - infiniband_packet = proto_tree_add_item(tree, proto_infiniband, tvb, offset, -1, FALSE); - - /* Headers Level Tree */ - all_headers_tree = proto_item_add_subtree(infiniband_packet, ett_all_headers); - - /* Local Route Header Subtree */ - local_route_header_item = proto_tree_add_bytes(all_headers_tree, hf_infiniband_LRH, tvb, offset, 8, tvb->real_data); - proto_item_set_text(local_route_header_item, "%s", "Local Route Header"); - local_route_header_tree = proto_item_add_subtree(local_route_header_item, ett_lrh); - - proto_tree_add_item(local_route_header_tree, hf_infiniband_virtual_lane, tvb, offset, 1, FALSE); - - - /* Get the Virtual Lane. We'll use this to identify Subnet Management and Subnet Administration Packets. */ - virtualLane = tvb_get_guint8(tvb, offset); - virtualLane = virtualLane & 0xF0; - - - proto_tree_add_item(local_route_header_tree, hf_infiniband_link_version, tvb, offset, 1, FALSE); offset+=1; - proto_tree_add_item(local_route_header_tree, hf_infiniband_service_level, tvb, offset, 1, FALSE); - - proto_tree_add_item(local_route_header_tree, hf_infiniband_reserved2, tvb, offset, 1, FALSE); - proto_tree_add_item(local_route_header_tree, hf_infiniband_link_next_header, tvb, offset, 1, FALSE); - - - /* Save Link Next Header... This tells us what the next header is. */ - lnh_val = tvb_get_guint8(tvb, offset); - lnh_val = lnh_val & 0x03; - offset+=1; - - - proto_tree_add_item(local_route_header_tree, hf_infiniband_destination_local_id, tvb, offset, 2, FALSE); - - - /* Set destination in packet view. */ - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_DST, "DLID: %s", tvb_bytes_to_str(tvb, offset, 2)); - } - offset+=2; - - - proto_tree_add_item(local_route_header_tree, hf_infiniband_reserved5, tvb, offset, 2, FALSE); - - packetLength = tvb_get_ntohs(tvb, offset); /* Get the Packet Length. This will determine payload size later on. */ - packetLength = packetLength & 0x07FF; /* Mask off top 5 bits, they are reserved */ - packetLength = packetLength * 4; /* Multiply by 4 to get true byte length. This is by specification. PktLen is size in 4 byte words (byteSize /4). */ - - proto_tree_add_item(local_route_header_tree, hf_infiniband_packet_length, tvb, offset, 2, FALSE); offset+=2; - proto_tree_add_item(local_route_header_tree, hf_infiniband_source_local_id, tvb, offset, 2, FALSE); - - /* Set Source in packet view. */ - if (check_col(pinfo->cinfo, COL_DEF_SRC)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_SRC, "SLID: %s", tvb_bytes_to_str(tvb, offset, 2)); - } - - offset+=2; - packetLength -= 8; /* Shave 8 bytes for the LRH. */ - - /* Key off Link Next Header. This tells us what High Level Data Format we have */ - switch(lnh_val) - { - case IBA_GLOBAL: - global_route_header_item = proto_tree_add_item(all_headers_tree, hf_infiniband_GRH, tvb, offset, 40, FALSE); - proto_item_set_text(global_route_header_item, "%s", "Global Route Header"); - global_route_header_tree = proto_item_add_subtree(global_route_header_item, ett_grh); - - proto_tree_add_item(global_route_header_tree, hf_infiniband_ip_version, tvb, offset, 1, FALSE); - proto_tree_add_item(global_route_header_tree, hf_infiniband_traffic_class, tvb, offset, 2, FALSE); - proto_tree_add_item(global_route_header_tree, hf_infiniband_flow_label, tvb, offset, 4, FALSE); offset += 4; - - payloadLength = tvb_get_ntohs(tvb, offset); - - proto_tree_add_item(global_route_header_tree, hf_infiniband_payload_length, tvb, offset, 2, FALSE); offset += 2; - - nxtHdr = tvb_get_guint8(tvb, offset); - - proto_tree_add_item(global_route_header_tree, hf_infiniband_next_header, tvb, offset, 1, FALSE); offset +=1; - proto_tree_add_item(global_route_header_tree, hf_infiniband_hop_limit, tvb, offset, 1, FALSE); offset +=1; - proto_tree_add_item(global_route_header_tree, hf_infiniband_source_gid, tvb, offset, 16, FALSE); - - tvb_get_ipv6(tvb, offset, &SRCgid); - if (check_col(pinfo->cinfo, COL_DEF_SRC)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_SRC, "SGID: %s", ip6_to_str(&SRCgid)); - } - offset += 16; - - proto_tree_add_item(global_route_header_tree, hf_infiniband_destination_gid, tvb, offset, 16, FALSE); - - tvb_get_ipv6(tvb, offset, &DSTgid); - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_DST, "DGID: %s", ip6_to_str(&DSTgid)); - } - offset += 16; - packetLength -= 40; /* Shave 40 bytes for GRH */ - - if(nxtHdr != 0x1B) - { - /* Some kind of packet being transported globally with IBA, but locally it is not IBA - no BTH following. */ - break; - } - /* otherwise fall through and start parsing BTH */ - case IBA_LOCAL: - bthFollows = TRUE; - base_transport_header_item = proto_tree_add_item(all_headers_tree, hf_infiniband_BTH, tvb, offset, 12, FALSE); - proto_item_set_text(base_transport_header_item, "%s", "Base Transport Header"); - base_transport_header_tree = proto_item_add_subtree(base_transport_header_item, ett_bth); - proto_tree_add_item(base_transport_header_tree, hf_infiniband_opcode, tvb, offset, 1, FALSE); - - /* Get the OpCode - this tells us what headers are following */ - opCode = tvb_get_guint8(tvb, offset); - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_str(pinfo->cinfo, COL_INFO, val_to_str((guint32)opCode, OpCodeMap, "Unknown OpCode")); - } - offset +=1; - - proto_tree_add_item(base_transport_header_tree, hf_infiniband_solicited_event, tvb, offset, 1, FALSE); - proto_tree_add_item(base_transport_header_tree, hf_infiniband_migreq, tvb, offset, 1, FALSE); - proto_tree_add_item(base_transport_header_tree, hf_infiniband_pad_count, tvb, offset, 1, FALSE); - proto_tree_add_item(base_transport_header_tree, hf_infiniband_transport_header_version, tvb, offset, 1, FALSE); offset +=1; - proto_tree_add_item(base_transport_header_tree, hf_infiniband_partition_key, tvb, offset, 2, FALSE); offset +=2; - proto_tree_add_item(base_transport_header_tree, hf_infiniband_reserved8, tvb, offset, 1, FALSE); offset +=1; - proto_tree_add_item(base_transport_header_tree, hf_infiniband_destination_qp, tvb, offset, 3, FALSE); offset +=3; - proto_tree_add_item(base_transport_header_tree, hf_infiniband_acknowledge_request, tvb, offset, 1, FALSE); - proto_tree_add_item(base_transport_header_tree, hf_infiniband_reserved7, tvb, offset, 1, FALSE); offset +=1; - proto_tree_add_item(base_transport_header_tree, hf_infiniband_packet_sequence_number, tvb, offset, 3, FALSE); offset +=3; - - - packetLength -= 12; /* Shave 12 for Base Transport Header */ - - break; - case IP_NON_IBA: - /* Raw IPv6 Packet */ - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_set_str(pinfo->cinfo, COL_DEF_DST, "IPv6 over IB Packet"); - col_set_fence(pinfo->cinfo, COL_DEF_DST); - } - parse_IPvSix(all_headers_tree, tvb, &offset, pinfo); - break; - case RAW: - parse_RWH(all_headers_tree, tvb, &offset, pinfo); - break; - default: - /* Unknown Packet */ - RAWDATA_header_item = proto_tree_add_item(all_headers_tree, hf_infiniband_raw_data, tvb, offset, -1, FALSE); - proto_item_set_text(RAWDATA_header_item, "%s", "Unknown Raw Data - IB Encapsulated"); - RAWDATA_header_tree = proto_item_add_subtree(RAWDATA_header_item, ett_rawdata); - break; - } - - /* Base Transport header is hit quite often, however it is alone since it is the exception not the rule */ - /* Only IBA Local packets use it */ - if(bthFollows) - { - /* Find our next header sequence based on the Opcode - * Each case decrements the packetLength by the amount of bytes consumed by each header. - * The find_next_header_sequence method could be used to automate this. - * We need to keep track of this so we know much data to mark as payload/ICRC/VCRC values. */ - - nextHeaderSequence = find_next_header_sequence((guint32) opCode); - - /* find_next_header_sequence gives us the DEFINE value corresponding to the header order following */ - /* Enumerations are named intuitively, e.g. RDETH DETH PAYLOAD means there is an RDETH Header, DETH Header, and a packet payload */ - switch(nextHeaderSequence) - { - case RDETH_DETH_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_DETH_RETH_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - parse_RETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - packetLength -= 16; /* RETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_DETH_IMMDT_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - parse_IMMDT(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - packetLength -= 4; /* IMMDT */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_DETH_RETH_IMMDT_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - parse_RETH(all_headers_tree, tvb, &offset); - parse_IMMDT(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - packetLength -= 16; /* RETH */ - packetLength -= 4; /* IMMDT */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_DETH_RETH: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - parse_RETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - packetLength -= 16; /* RETH */ - - break; - case RDETH_AETH_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_AETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 4; /* AETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_PAYLD: - parse_RDETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RDETH_AETH: - parse_AETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 4; /* AETH */ - - - break; - case RDETH_AETH_ATOMICACKETH: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_AETH(all_headers_tree, tvb, &offset); - parse_ATOMICACKETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 4; /* AETH */ - packetLength -= 8; /* AtomicAckETH */ - - - break; - case RDETH_DETH_ATOMICETH: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - parse_ATOMICETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - packetLength -= 28; /* AtomicETH */ - - break; - case RDETH_DETH: - parse_RDETH(all_headers_tree, tvb, &offset); - parse_DETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* RDETH */ - packetLength -= 8; /* DETH */ - - break; - case DETH_PAYLD: - parse_DETH(all_headers_tree, tvb, &offset); - - packetLength -= 8; /* DETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case PAYLD: - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case IMMDT_PAYLD: - parse_IMMDT(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* IMMDT */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RETH_PAYLD: - parse_RETH(all_headers_tree, tvb, &offset); - - packetLength -= 16; /* RETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case RETH: - parse_RETH(all_headers_tree, tvb, &offset); - - packetLength -= 16; /* RETH */ - - break; - case AETH_PAYLD: - parse_AETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* AETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case AETH: - parse_AETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* AETH */ - - break; - case AETH_ATOMICACKETH: - parse_AETH(all_headers_tree, tvb, &offset); - parse_ATOMICACKETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* AETH */ - packetLength -= 8; /* AtomicAckETH */ - - break; - case ATOMICETH: - parse_ATOMICETH(all_headers_tree, tvb, &offset); - - packetLength -= 28; /* AtomicETH */ - - break; - case IETH_PAYLD: - parse_IETH(all_headers_tree, tvb, &offset); - - packetLength -= 4; /* IETH */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - case DETH_IMMDT_PAYLD: - parse_DETH(all_headers_tree, tvb, &offset); - parse_IMMDT(all_headers_tree, tvb, &offset); - - packetLength -= 8; /* DETH */ - packetLength -= 4; /* IMMDT */ - - parse_PAYLOAD(all_headers_tree, pinfo, tvb, &offset, packetLength, virtualLane); - break; - default: - parse_VENDOR(all_headers_tree, tvb, &offset); - break; - - } - - } - /* Display the ICRC/VCRC */ - /* Doing it this way rather than in a variety of places according to the specific packet */ - /* If we've already displayed it crc_length comes out 0 */ - crc_length = tvb_reported_length_remaining(tvb, offset); - if(crc_length == 6) - { - proto_tree_add_item(all_headers_tree, hf_infiniband_invariant_crc, tvb, offset, 4, FALSE); offset +=4; - proto_tree_add_item(all_headers_tree, hf_infiniband_variant_crc, tvb, offset, 2, FALSE); offset+=2; - } - else if(crc_length == 4) - { - proto_tree_add_item(all_headers_tree, hf_infiniband_invariant_crc, tvb, offset, 4, FALSE); offset +=4; - } - else if(crc_length == 2) - { - proto_tree_add_item(all_headers_tree, hf_infiniband_variant_crc, tvb, offset, 2, FALSE); offset+=2; - } - -} - -/* Description: Finds the header sequence that follows the Base Transport Header. -* Somwhat inefficient (should be using a single key,value pair data structure) -* But uses pure probablity to take a stab at better efficiency. -* Searches largest header sequence groups first, and then finally resorts to single matches for unique header sequences -* IN: OpCode: The OpCode from the Base Transport Header. -* OUT: The Header Sequence enumeration. See Declarations for #defines from (0-22) */ -static gint32 -find_next_header_sequence(guint32 OpCode) -{ - if(contains(OpCode, &opCode_PAYLD[0], (gint32)sizeof(opCode_PAYLD))) - return PAYLD; - - if(contains(OpCode, &opCode_IMMDT_PAYLD[0], (gint32)sizeof(opCode_IMMDT_PAYLD))) - return IMMDT_PAYLD; - - if(contains(OpCode, &opCode_RDETH_DETH_PAYLD[0], (gint32)sizeof(opCode_RDETH_DETH_PAYLD))) - return RDETH_DETH_PAYLD; - - if(contains(OpCode, &opCode_RETH_PAYLD[0], (gint32)sizeof(opCode_RETH_PAYLD))) - return RETH_PAYLD; - - if(contains(OpCode, &opCode_RDETH_AETH_PAYLD[0], (gint32)sizeof(opCode_RDETH_AETH_PAYLD))) - return RDETH_AETH_PAYLD; - - if(contains(OpCode, &opCode_AETH_PAYLD[0], (gint32)sizeof(opCode_AETH_PAYLD))) - return AETH_PAYLD; - - if(contains(OpCode, &opCode_RDETH_DETH_IMMDT_PAYLD[0], (gint32)sizeof(opCode_RDETH_DETH_IMMDT_PAYLD))) - return RDETH_DETH_IMMDT_PAYLD; - - if(contains(OpCode, &opCode_RETH_IMMDT_PAYLD[0], (gint32)sizeof(opCode_RETH_IMMDT_PAYLD))) - return RETH_IMMDT_PAYLD; - - if(contains(OpCode, &opCode_RDETH_DETH_RETH_PAYLD[0], (gint32)sizeof(opCode_RDETH_DETH_RETH_PAYLD))) - return RDETH_DETH_RETH_PAYLD; - - if(contains(OpCode, &opCode_ATOMICETH[0], (gint32)sizeof(opCode_ATOMICETH))) - return ATOMICETH; - - if(contains(OpCode, &opCode_IETH_PAYLD[0], (gint32)sizeof(opCode_IETH_PAYLD))) - return IETH_PAYLD; - - if(contains(OpCode, &opCode_RDETH_DETH_ATOMICETH[0], (gint32)sizeof(opCode_RDETH_DETH_ATOMICETH))) - return RDETH_DETH_ATOMICETH; - - if((OpCode ^ RC_ACKNOWLEDGE) == 0) - return AETH; - - if((OpCode ^ RC_RDMA_READ_REQUEST) == 0) - return RETH; - - if((OpCode ^ RC_ATOMIC_ACKNOWLEDGE) == 0) - return AETH_ATOMICACKETH; - - if((OpCode ^ RD_RDMA_READ_RESPONSE_MIDDLE) == 0) - return RDETH_PAYLD; - - if((OpCode ^ RD_ACKNOWLEDGE) == 0) - return RDETH_AETH; - - if((OpCode ^ RD_ATOMIC_ACKNOWLEDGE) == 0) - return RDETH_AETH_ATOMICACKETH; - - if((OpCode ^ RD_RDMA_WRITE_ONLY_IMM) == 0) - return RDETH_DETH_RETH_IMMDT_PAYLD; - - if((OpCode ^ RD_RDMA_READ_REQUEST) == 0) - return RDETH_DETH_RETH; - - if((OpCode ^ RD_RESYNC) == 0) - return RDETH_DETH; - - if((OpCode ^ UD_SEND_ONLY) == 0) - return DETH_PAYLD; - - if((OpCode ^ UD_SEND_ONLY_IMM) == 0) - return DETH_IMMDT_PAYLD; - - return -1; -} - -/* Description: Finds if a given value is present in an array. This is probably in a standard library somewhere, -* But I'd rather define my own. -* IN: OpCode: The OpCode you are looking for -* IN: Codes: The organized array of OpCodes to look through -* IN: Array length, because we're in C++... -* OUT: Boolean indicating if that OpCode was found in OpCodes */ -static gboolean -contains(guint32 OpCode, guint32* Codes, gint32 length) -{ - gint32 i; - for(i = 0; i < length; i++) - { - if((OpCode ^ Codes[i]) == 0) - return TRUE; - } - return FALSE; -} - -/* Parse RDETH - Reliable Datagram Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_RDETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* RDETH - Reliable Datagram Extended Transport Header */ - proto_tree *RDETH_header_tree = NULL; - proto_item *RDETH_header_item = NULL; - - RDETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_RDETH, tvb, local_offset, 4, FALSE); - proto_item_set_text(RDETH_header_item, "%s", "RDETH - Reliable Datagram Extended Transport Header"); - RDETH_header_tree = proto_item_add_subtree(RDETH_header_item, ett_rdeth); - - proto_tree_add_item(RDETH_header_tree, hf_infiniband_reserved8_RDETH, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(RDETH_header_tree, hf_infiniband_ee_context, tvb, local_offset, 3, FALSE); local_offset+=3; - *offset = local_offset; -} - -/* Parse DETH - Datagram Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_DETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* DETH - Datagram Extended Transport Header */ - proto_tree *DETH_header_tree = NULL; - proto_item *DETH_header_item = NULL; - - DETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_DETH, tvb, local_offset, 8, FALSE); - proto_item_set_text(DETH_header_item, "%s", "DETH - Datagram Extended Transport Header"); - DETH_header_tree = proto_item_add_subtree(DETH_header_item, ett_deth); - - proto_tree_add_item(DETH_header_tree, hf_infiniband_queue_key, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(DETH_header_tree, hf_infiniband_reserved8_DETH, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(DETH_header_tree, hf_infiniband_source_qp, tvb, local_offset, 3, FALSE); local_offset+=3; - - *offset = local_offset; -} - -/* Parse RETH - RDMA Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_RETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* RETH - RDMA Extended Transport Header */ - proto_tree *RETH_header_tree = NULL; - proto_item *RETH_header_item = NULL; - - RETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_RETH, tvb, local_offset, 16, FALSE); - proto_item_set_text(RETH_header_item, "%s", "RETH - RDMA Extended Transport Header"); - RETH_header_tree = proto_item_add_subtree(RETH_header_item, ett_reth); - - proto_tree_add_item(RETH_header_tree, hf_infiniband_virtual_address, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(RETH_header_tree, hf_infiniband_remote_key, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RETH_header_tree, hf_infiniband_dma_length, tvb, local_offset, 4, FALSE); local_offset+=4; - - *offset = local_offset; -} - -/* Parse AtomicETH - Atomic Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_ATOMICETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* AtomicETH - Atomic Extended Transport Header */ - proto_tree *ATOMICETH_header_tree = NULL; - proto_item *ATOMICETH_header_item = NULL; - - ATOMICETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_AtomicETH, tvb, local_offset, 28, FALSE); - proto_item_set_text(ATOMICETH_header_item, "%s", "AtomicETH - Atomic Extended Transport Header"); - ATOMICETH_header_tree = proto_item_add_subtree(ATOMICETH_header_item, ett_atomiceth); - - proto_tree_add_item(ATOMICETH_header_tree, hf_infiniband_virtual_address, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(ATOMICETH_header_tree, hf_infiniband_remote_key, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(ATOMICETH_header_tree, hf_infiniband_swap_or_add_data, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(ATOMICETH_header_tree, hf_infiniband_compare_data, tvb, local_offset, 8, FALSE); local_offset+=8; - *offset = local_offset; -} - -/* Parse AETH - ACK Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_AETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* AETH - ACK Extended Transport Header */ - proto_tree *AETH_header_tree = NULL; - proto_item *AETH_header_item = NULL; - - AETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_AETH, tvb, local_offset, 4, FALSE); - proto_item_set_text(AETH_header_item, "%s", "AETH - ACK Extended Transport Header"); - AETH_header_tree = proto_item_add_subtree(AETH_header_item, ett_aeth); - - proto_tree_add_item(AETH_header_tree, hf_infiniband_syndrome, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(AETH_header_tree, hf_infiniband_message_sequence_number, tvb, local_offset, 3, FALSE); local_offset+=3; - - *offset = local_offset; -} - -/* Parse AtomicAckEth - Atomic ACK Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_ATOMICACKETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* AtomicAckEth - Atomic ACK Extended Transport Header */ - proto_tree *ATOMICACKETH_header_tree = NULL; - proto_item *ATOMICACKETH_header_item = NULL; - - ATOMICACKETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_AtomicAckETH, tvb, local_offset, 8, FALSE); - proto_item_set_text(ATOMICACKETH_header_item, "%s", "ATOMICACKETH - Atomic ACK Extended Transport Header"); - ATOMICACKETH_header_tree = proto_item_add_subtree(ATOMICACKETH_header_item, ett_atomicacketh); - proto_tree_add_item(ATOMICACKETH_header_tree, hf_infiniband_original_remote_data, tvb, local_offset, 8, FALSE); local_offset+=8; - *offset = local_offset; -} - -/* Parse IMMDT - Immediate Data Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_IMMDT(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* IMMDT - Immediate Data Extended Transport Header */ - proto_tree *IMMDT_header_tree = NULL; - proto_item *IMMDT_header_item = NULL; - - IMMDT_header_item = proto_tree_add_item(parentTree, hf_infiniband_IMMDT, tvb, local_offset, 4, FALSE); - proto_item_set_text(IMMDT_header_item, "%s", "IMMDT - Immediate Data Extended Transport Header"); - IMMDT_header_tree = proto_item_add_subtree(IMMDT_header_item, ett_immdt); - proto_tree_add_item(IMMDT_header_tree, hf_infiniband_IMMDT, tvb, local_offset, 4, FALSE); local_offset+=4; - *offset = local_offset; -} - -/* Parse IETH - Invalidate Extended Transport Header -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void -parse_IETH(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - /* IETH - Invalidate Extended Transport Header */ - proto_tree *IETH_header_tree = NULL; - proto_item *IETH_header_item = NULL; - - IETH_header_item = proto_tree_add_item(parentTree, hf_infiniband_IETH, tvb, local_offset, 4, FALSE); - proto_item_set_text(IETH_header_item, "%s", "IETH - Invalidate Extended Transport Header"); - IETH_header_tree = proto_item_add_subtree(IETH_header_item, ett_ieth); - - proto_tree_add_item(IETH_header_tree, hf_infiniband_IETH, tvb, local_offset, 4, FALSE); local_offset+=4; - - *offset = local_offset; -} - -/* Parse Payload - Packet Payload / Invariant CRC / Variant CRC -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: pinfo - packet info from wireshark -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset -* IN: Length of Payload */ -static void parse_PAYLOAD(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset, gint length, guint8 virtualLane) -{ - gint local_offset = *offset; - /* Payload - Packet Payload */ - proto_tree *PAYLOAD_header_tree = NULL; - proto_item *PAYLOAD_header_item = NULL; - guint8 management_class; - tvbuff_t *volatile next_tvb; - gint captured_length, reported_length; - guint16 etype, reserved; - const char *saved_proto; - volatile gboolean dissector_found = FALSE; - - if(!tvb_bytes_exist(tvb, *offset, length)) /* previously consumed bytes + offset was all the data - none or corrupt payload */ - { - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_set_str(pinfo->cinfo, COL_INFO, "Invalid Packet Length from LRH! [Malformed Packet]"); - col_set_fence(pinfo->cinfo, COL_INFO); - } - return; - } - if(virtualLane == 0xF0) - { - management_class = tvb_get_guint8(tvb, (*offset) + 1); - - if(((management_class >= (guint8)VENDOR_1_START) && (management_class <= (guint8)VENDOR_1_END)) - || ((management_class >= (guint8)VENDOR_2_START) && (management_class <= (guint8)VENDOR_2_END))) - { - /* parse vendor specific */ - parse_VENDOR_MANAGEMENT(parentTree, tvb, offset); - } - else if((management_class >= (guint8)APPLICATION_START) && (management_class <= (guint8)APPLICATION_END)) - { - /* parse application specific */ - parse_APPLICATION_MANAGEMENT(parentTree, tvb, offset); - } - else if(((management_class == (guint8)0x00) || (management_class == (guint8)0x02)) - || ((management_class >= (guint8)0x50) && (management_class <= (guint8)0x80)) - || ((management_class >= (guint8)0x82))) - { - /* parse reserved classes */ - parse_RESERVED_MANAGEMENT(parentTree, tvb, offset); - } - else /* we have a normal management_class */ - { - switch(management_class) - { - case SUBN_LID_ROUTED: - /* parse subn man lid routed */ - parse_SUBN_LID_ROUTED(parentTree, pinfo, tvb, &local_offset); - break; - case SUBN_DIRECTED_ROUTE: - /* parse subn directed route */ - parse_SUBN_DIRECTED_ROUTE(parentTree, pinfo, tvb, &local_offset); - break; - case SUBNADMN: - /* parse sub admin */ - parse_SUBNADMN(parentTree, pinfo, tvb, &local_offset); - break; - case PERF: - /* parse performance */ - parse_PERF(parentTree, tvb, &local_offset); - break; - case BM: - /* parse baseboard mgmt */ - parse_BM(parentTree, tvb, &local_offset); - break; - case DEV_MGT: - /* parse device management */ - parse_DEV_MGT(parentTree, tvb, &local_offset); - break; - case COM_MGT: - /* parse communication management */ - parse_COM_MGT(parentTree, tvb, &local_offset); - break; - case SNMP: - /* parse snmp tunneling */ - parse_SNMP(parentTree, tvb, &local_offset); - break; - default: - break; - } - } - } - else /* Normal Data Packet - Parse as such */ - { - - /* Calculation for Payload: - * (tvb->length) Length of entire packet - (local_offset) Starting byte of Payload Data - * offset addition is more complex for the payload. - * We need the total length of the packet, - length of previous headers, + offset where payload started. - * We also need to reserve 6 bytes for the CRCs which are not actually part of the payload. */ - - /* IBA packet data could be anything in principle, however it is common - * practice to carry non-IBA data encapsulated with an EtherType header, - * similar to the RWH header. There is no way to identify these frames - * positively. - * - * We see if the first few bytes look like an EtherType header, and if so - * call the appropriate dissector. If not we call the "data" dissector. - */ - - etype = tvb_get_ntohs(tvb, local_offset); - reserved = tvb_get_ntohs(tvb, local_offset + 2); - - if (reserved == 0) { - - /* Get the captured length and reported length of the data - after the Ethernet type. */ - captured_length = tvb_length_remaining(tvb, local_offset+4); - reported_length = tvb_reported_length_remaining(tvb, - local_offset+4); - - next_tvb = tvb_new_subset(tvb, local_offset+4, captured_length, - reported_length); - - pinfo->ethertype = etype; - - /* Look for sub-dissector, and call it if found. - Catch exceptions, so that if the reported length of "next_tvb" - was reduced by some dissector before an exception was thrown, - we can still put in an item for the trailer. */ - saved_proto = pinfo->current_proto; - TRY { - dissector_found = dissector_try_port(ethertype_dissector_table, - etype, next_tvb, pinfo, top_tree); - } - CATCH(BoundsError) { - /* Somebody threw BoundsError, which means that: - - 1) a dissector was found, so we don't need to - dissect the payload as data or update the - protocol or info columns; - - 2) dissecting the payload found that the packet was - cut off by a snapshot length before the end of - the payload. The trailer comes after the payload, - so *all* of the trailer is cut off, and we'll - just get another BoundsError if we add the trailer. - - Therefore, we just rethrow the exception so it gets - reported; we don't dissect the trailer or do anything - else. */ - RETHROW; - } - CATCH(OutOfMemoryError) { - RETHROW; - } - CATCH_ALL { - /* Somebody threw an exception other than BoundsError, which - means that a dissector was found, so we don't need to - dissect the payload as data or update the protocol or info - columns. We just show the exception and then drive on - to show the trailer, after noting that a dissector was - found and restoring the protocol value that was in effect - before we called the subdissector. */ - show_exception(next_tvb, pinfo, top_tree, EXCEPT_CODE, GET_MESSAGE); - dissector_found = TRUE; - pinfo->current_proto = saved_proto; - } - ENDTRY; - - if (dissector_found) { - /* now create payload entry to show Ethertype */ - PAYLOAD_header_item = proto_tree_add_item(parentTree, hf_infiniband_payload, tvb, local_offset, tvb_reported_length_remaining(tvb, local_offset)-6, FALSE); - proto_item_set_text(PAYLOAD_header_item, "%s", "IBA Payload - appears to be EtherType encapsulated"); - PAYLOAD_header_tree = proto_item_add_subtree(PAYLOAD_header_item, ett_payload); - proto_tree_add_uint(PAYLOAD_header_tree, hf_infiniband_etype, tvb, - local_offset, 2, tvb_get_ntohs(tvb, local_offset)); - - local_offset += 2; - - proto_tree_add_uint(PAYLOAD_header_tree, hf_infiniband_reserved16_RWH, tvb, - local_offset, 2, tvb_get_ntohs(tvb, local_offset)); - - - } else { - tvb_free(next_tvb); - } - - } - - if (!dissector_found) { - /* No sub-dissector found. - Label rest of packet as "Data" */ - - captured_length = tvb_length_remaining(tvb, local_offset); - reported_length = tvb_reported_length_remaining(tvb, - local_offset); - - if (reported_length >= 6) - reported_length -= 6; - if (captured_length > reported_length) - captured_length = reported_length; - - next_tvb = tvb_new_subset(tvb, local_offset, - captured_length, - reported_length); - - call_dissector(data_handle, next_tvb, pinfo, top_tree); - - } - - - /*parse_RWH(parentTree, tvb, &local_offset, pinfo);*/ - - /* Will contain ICRC and VCRC = 4+2 */ - local_offset = tvb_reported_length(tvb) - 6; - } - - *offset = local_offset; -} - -/* Parse VENDOR - Parse a vendor specific or unknown header sequence -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_VENDOR(proto_tree * parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *VENDOR_header_tree = NULL; - proto_item *VENDOR_header_item = NULL; - - VENDOR_header_item = proto_tree_add_item(parentTree, hf_infiniband_vendor, tvb, local_offset, 4, FALSE); - proto_item_set_text(VENDOR_header_item, "%s", "Vendor Specific or Unknown Header Sequence"); - VENDOR_header_tree = proto_item_add_subtree(VENDOR_header_item, ett_vendor); - proto_tree_add_item(VENDOR_header_tree, hf_infiniband_vendor, tvb, local_offset, -1, FALSE); - *offset = local_offset; -} - -/* Parse IPv6 - Parse an IPv6 Packet -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset -* IN: pinfo - packet info from wireshark */ -static void parse_IPvSix(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, packet_info *pinfo) -{ - tvbuff_t *ipv6_tvb; - - /* (- 2) for VCRC which lives at the end of the packet */ - ipv6_tvb = tvb_new_subset(tvb, *offset, - tvb_length_remaining(tvb, *offset) - 2, - tvb_reported_length_remaining(tvb, *offset) - 2); - call_dissector(ipv6_handle, ipv6_tvb, pinfo, parentTree); - *offset = tvb_reported_length(tvb) - 2; - - /* Display the VCRC */ - proto_tree_add_item(parentTree, hf_infiniband_variant_crc, tvb, *offset, 2, FALSE); -} - -/* Parse EtherType - Parse a generic IP packaet with an EtherType of IP or ARP -* IN: parentTree to add the dissection to - in this code the all_headers_tree -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset -* IN: pinfo - packet info from wireshark */ -static void parse_RWH(proto_tree *ah_tree, tvbuff_t *tvb, gint *offset, packet_info *pinfo) -{ - guint16 ether_type; - - /* RWH - Raw Header */ - proto_tree *RWH_header_tree = NULL; - proto_item *RWH_header_item = NULL; - - RWH_header_item = proto_tree_add_item(ah_tree, hf_infiniband_RWH, tvb, *offset, 4, FALSE); - proto_item_set_text(RWH_header_item, "%s", "RWH - Raw Header"); - RWH_header_tree = proto_item_add_subtree(RWH_header_item, ett_rwh); - - ether_type = tvb_get_ntohs(tvb, *offset); -#if 0 - ether_type = ether_type & 0x0F; /* mask off reserved bits just in case. */ -#endif - *offset += 2; - - proto_tree_add_uint(RWH_header_tree, hf_infiniband_reserved16_RWH, tvb, - *offset, 2, tvb_get_ntohs(tvb, *offset)); - - *offset += 2; - - ethertype(ether_type, tvb, *offset, pinfo, top_tree, RWH_header_tree, hf_infiniband_etype, -1, 0); - - *offset = tvb_reported_length(tvb) - 2; - /* Display the VCRC */ - proto_tree_add_item(ah_tree, hf_infiniband_variant_crc, tvb, *offset, 2, FALSE); - -} - -/* Parse Subnet Management (LID Routed) -* IN: parentTree to add the dissection to -* IN: pinfo - packet info from wireshark -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_SUBN_LID_ROUTED(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_tree *SUBN_LID_ROUTED_header_tree = NULL; - proto_item *SUBN_LID_ROUTED_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - - local_offset = *offset; - - /* local_offset - 24 here because when we come out of parse_MAD_Common, the offset it sitting at the data section. */ - SUBN_LID_ROUTED_header_item = proto_tree_add_item(parentTree, hf_infiniband_SMP_LID, tvb, local_offset - 24, 256, FALSE); - proto_item_set_text(SUBN_LID_ROUTED_header_item, "%s", "SMP (LID Routed) "); - SUBN_LID_ROUTED_header_tree = proto_item_add_subtree(SUBN_LID_ROUTED_header_item, ett_subn_lid_routed); - proto_tree_add_item(SUBN_LID_ROUTED_header_tree, hf_infiniband_m_key, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(SUBN_LID_ROUTED_header_tree, hf_infiniband_reserved256, tvb, local_offset, 32, FALSE); local_offset +=32; - - label_SUBM_Method(SUBN_LID_ROUTED_header_item, &MadData, pinfo); - label_SUBM_Attribute(SUBN_LID_ROUTED_header_item, &MadData, pinfo); - - /* Try to do the detail parse of the attribute. If there is an error, or the attribute is unknown, we'll just highlight the generic data. */ - if(!parse_SUBM_Attribute(SUBN_LID_ROUTED_header_tree, tvb, &local_offset, &MadData)) - { - proto_tree_add_item(SUBN_LID_ROUTED_header_tree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); local_offset +=64; - } - - proto_tree_add_item(SUBN_LID_ROUTED_header_tree, hf_infiniband_reserved1024, tvb, local_offset, 128, FALSE); local_offset +=128; - *offset = local_offset; -} - -/* Parse Subnet Management (Directed Route) -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_SUBN_DIRECTED_ROUTE(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_tree *SUBN_DIRECTED_ROUTE_header_tree = NULL; - proto_item *SUBN_DIRECTED_ROUTE_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - - local_offset = *offset; - - /* local_offset - 24 here because when we come out of parse_MAD_Common, the offset it sitting at the data section. - * We need to go backwards because this particular SMP uses the class specific portion of the Common MAD Header */ - SUBN_DIRECTED_ROUTE_header_item = proto_tree_add_item(parentTree, hf_infiniband_SMP_DIRECTED, tvb, local_offset - 24, 256, FALSE); - proto_item_set_text(SUBN_DIRECTED_ROUTE_header_item, "%s", "SMP (Directed Route) "); - SUBN_DIRECTED_ROUTE_header_tree = proto_item_add_subtree(SUBN_DIRECTED_ROUTE_header_item, ett_subn_directed_route); - - label_SUBM_Method(SUBN_DIRECTED_ROUTE_header_item, &MadData, pinfo); - label_SUBM_Attribute(SUBN_DIRECTED_ROUTE_header_item, &MadData, pinfo); - - /* Place us at offset 4, the "D" Bit (Direction bit for Directed Route SMPs) */ - local_offset -= 20; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_d, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_smp_status, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_hop_pointer, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_hop_count, tvb, local_offset, 1, FALSE); local_offset +=1; - local_offset += 16; /* Skip over the rest of the Common MAD Header... It's already dissected by parse_MAD_Common */ - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_m_key, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_dr_slid, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_dr_dlid, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_reserved28, tvb, local_offset, 28, FALSE); local_offset +=28; - - /* Try to do the detail parse of the attribute. If there is an error, or the attribute is unknown, we'll just highlight the generic data. */ - if(!parse_SUBM_Attribute(SUBN_DIRECTED_ROUTE_header_tree, tvb, &local_offset, &MadData)) - { - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); local_offset +=64; - } - - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_initial_path, tvb, local_offset, 64, FALSE); local_offset +=64; - proto_tree_add_item(SUBN_DIRECTED_ROUTE_header_tree, hf_infiniband_return_path, tvb, local_offset, 64, FALSE); local_offset +=64; - *offset = local_offset; -} - -/* Parse Subnet Administration -* IN: parentTree to add the dissection to -* IN: pinfo - packet info from wireshark -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_SUBNADMN(proto_tree *parentTree, packet_info *pinfo, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_tree *SUBNADMN_header_tree = NULL; - proto_item *SUBNADMN_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - if(!parse_RMPP(parentTree, tvb, offset)) - { - /* TODO: Mark Corrupt Packet */ - return; - } - local_offset = *offset; - - SUBNADMN_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset - 36, 256, FALSE); - proto_item_set_text(SUBNADMN_header_item, "%s", "SMA"); - SUBNADMN_header_tree = proto_item_add_subtree(SUBNADMN_header_item, ett_subnadmin); - - proto_tree_add_item(SUBNADMN_header_tree, hf_infiniband_sm_key, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(SUBNADMN_header_tree, hf_infiniband_attribute_offset, tvb, local_offset, 2, FALSE); local_offset+=4; - proto_tree_add_item(SUBNADMN_header_tree, hf_infiniband_reserved16, tvb, local_offset, 2, FALSE); local_offset+=4; - proto_tree_add_item(SUBNADMN_header_tree, hf_infiniband_component_mask, tvb, local_offset, 8, FALSE); local_offset+=8; - - label_SUBA_Method(SUBNADMN_header_item, &MadData, pinfo); - label_SUBA_Attribute(SUBNADMN_header_item, &MadData, pinfo); - - if(!parse_SUBA_Attribute(SUBNADMN_header_tree, tvb, &local_offset, &MadData)) - { - proto_tree_add_item(SUBNADMN_header_tree, hf_infiniband_subnet_admin_data, tvb, local_offset, 200, FALSE); local_offset+=200; - } - *offset = local_offset; -} - -/* Parse Performance Management -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_PERF(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "PERF - Performance Management MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Baseboard Management -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_BM(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "BM - Baseboard Management MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Device Management -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_DEV_MGT(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "DEV_MGT - Device Management MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Communications Management -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_COM_MGT(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "COMM - Communication Management MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse SNMP Tunneling -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_SNMP(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "SNMP - SNMP Tunneling MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Vendor Specific Management Packets -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_VENDOR_MANAGEMENT(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "VENDOR - Vendor Specific Management MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Application Specific Management Packets -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_APPLICATION_MANAGEMENT(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "APP - Application Specific MAD (Dissector Not Implemented)"); - *offset = local_offset; -} - -/* Parse Reserved Management Packets. - -* This is an !ERROR CONDITION! -* It means that the Management Class value used was defined as a reserved value for furture use. -* This method is here since we will want to report this information directly to the UI without blowing up Wireshark. - -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static void parse_RESERVED_MANAGEMENT(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - /* Parse the Common MAD Header */ - MAD_Data MadData; - gint local_offset; - proto_item *PERF_header_item = NULL; - - if(!parse_MAD_Common(parentTree, tvb, offset, &MadData)) - { - /* TODO: Mark Corrupt Packet - Not enough bytes exist for at least the Common MAD header which is present in all MAD packets */ - return; - } - local_offset = *offset; - PERF_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 256, FALSE); local_offset += 256; - proto_item_set_text(PERF_header_item, "%s", "RESERVED - Reserved MAD Type (Possible Device Error)"); - *offset = local_offset; -} - -/* Parse the common MAD Header -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset -* IN/OUT: MadData - the data from the MAD header */ -static gboolean parse_MAD_Common(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_Data* MadData) -{ - gint local_offset = *offset; - proto_tree *MAD_header_tree = NULL; - proto_item *MAD_header_item = NULL; - - if(MadData == NULL) - return FALSE; - if(!tvb_bytes_exist(tvb, *offset, 256)) - return FALSE; - - /* Get the Management Class to decide between LID Routed and Direct Route */ - MadData->managementClass = tvb_get_guint8(tvb, local_offset + 1); - MadData->classVersion = tvb_get_guint8(tvb, local_offset + 2); - MadData->method = tvb_get_guint8(tvb, local_offset + 3); - MadData->status = tvb_get_guint8(tvb, local_offset + 4); - MadData->classSpecific = tvb_get_ntohs(tvb, local_offset + 6); - MadData->transactionID = tvb_get_ntoh64(tvb, local_offset + 8); - MadData->attributeID = tvb_get_ntohs(tvb, local_offset + 16); - MadData->attributeModifier = tvb_get_ntohl(tvb, local_offset + 20); - tvb_memcpy(tvb, MadData->data, local_offset + 24, 232); - - /* Populate the Dissector Tree */ - - MAD_header_item = proto_tree_add_item(parentTree, hf_infiniband_MAD, tvb, local_offset, 256, FALSE); - proto_item_set_text(MAD_header_item, "%s", "MAD Header - Common Management Datagram"); - MAD_header_tree = proto_item_add_subtree(MAD_header_item, ett_mad); - - proto_tree_add_item(MAD_header_tree, hf_infiniband_base_version, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MAD_header_tree, hf_infiniband_mgmt_class, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MAD_header_tree, hf_infiniband_class_version, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MAD_header_tree, hf_infiniband_method, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MAD_header_tree, hf_infiniband_status, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MAD_header_tree, hf_infiniband_class_specific, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MAD_header_tree, hf_infiniband_transaction_id, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(MAD_header_tree, hf_infiniband_attribute_id, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MAD_header_tree, hf_infiniband_reserved16, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MAD_header_tree, hf_infiniband_attribute_modifier, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(MAD_header_tree, hf_infiniband_data, tvb, local_offset, 232, FALSE); local_offset+=232; - *offset = (local_offset - 232); /* Move the offset back to the start of the Data field - this will be where the other parsers start. */ - - return TRUE; -} - -/* Parse the RMPP (Reliable Multi-Packet Transaction Protocol -* IN: parentTree to add the dissection to -* IN: tvb - the data buffer from wireshark -* IN/OUT: The current and updated offset */ -static gboolean parse_RMPP(proto_tree *parentTree, tvbuff_t *tvb, gint *offset) -{ - gint local_offset = *offset; - guint8 RMPP_Type = tvb_get_guint8(tvb, local_offset + 1); - proto_tree *RMPP_header_tree = NULL; - proto_item *RMPP_header_item = NULL; - - RMPP_header_item = proto_tree_add_item(parentTree, hf_infiniband_RMPP, tvb, local_offset, 12, FALSE); - proto_item_set_text(RMPP_header_item, "%s", val_to_str(RMPP_Type, RMPP_Packet_Types, "Reserved RMPP Type! (0x%02x)")); - RMPP_header_tree = proto_item_add_subtree(RMPP_header_item, ett_rmpp); - - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_version, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_type, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_r_resp_time, tvb, local_offset, 1, FALSE); - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_flags, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_status, tvb, local_offset, 1, FALSE); local_offset+=1; - switch(RMPP_Type) - { - case RMPP_ILLEGAL: - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_data1, tvb, local_offset, 32, FALSE); local_offset+=32; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_rmpp_data2, tvb, local_offset, 32, FALSE); local_offset+=32; - break; - case RMPP_DATA: - proto_tree_add_item(RMPP_header_tree, hf_infiniband_segment_number, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_payload_length32, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_transferred_data, tvb, local_offset, 220, FALSE); - break; - case RMPP_ACK: - proto_tree_add_item(RMPP_header_tree, hf_infiniband_segment_number, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_new_window_last, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_reserved220, tvb, local_offset, 220, FALSE); - break; - case RMPP_STOP: - case RMPP_ABORT: - proto_tree_add_item(RMPP_header_tree, hf_infiniband_reserved32, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_reserved32, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(RMPP_header_tree, hf_infiniband_optional_extended_error_data, tvb, local_offset, 220, FALSE); - break; - default: - break; - } - *offset = local_offset; - return TRUE; -} - -/* Parse the Method from the MAD Common Header. -* Simply used to generate the identifier. -* IN: SubMItem - the item to append the method label to. -* IN: MadHeader - the MadData structure that contains the information from the Common MAD header. -* IN: pinfo - packet info from wireshark. */ -static void label_SUBM_Method(proto_item *SubMItem, MAD_Data *MadHeader, packet_info *pinfo) -{ - const char *label = val_to_str(MadHeader->method, SUBM_Methods, "(Unknown SubManagement Method!)"); - - proto_item_append_text(SubMItem, "%s", label); - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_str(pinfo->cinfo, COL_INFO, label); -} - -/* Parse the SA Method from the MAD Common Header. -* Simply used to generate the identifier. -* IN: SubAItem - the item to append the method label to. -* IN: MadHeader - the MadData structure that contains the information from the Common MAD header. -* IN: pinfo - packet info from wireshark. */ -static void label_SUBA_Method(proto_item *SubAItem, MAD_Data *MadHeader, packet_info *pinfo) -{ - const char *label = val_to_str(MadHeader->method, SUBA_Methods, "(Unknown SubAdministration Method!)"); - - proto_item_append_text(SubAItem, "%s", label); - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_str(pinfo->cinfo, COL_INFO, label); -} - -/* Parse the Attribute from the MAD Common Header -* Simply used to generate the identifier. -* IN: SubMItem - the item to append the Attribute label to. -* IN: MadHeader - the MadData structure that contains the information from the Common MAD header. -* IN: pinfo - packet info from wireshark. */ -static void label_SUBM_Attribute(proto_item *SubMItem, MAD_Data *MadHeader, packet_info *pinfo) -{ - const char *label = val_to_str(MadHeader->attributeID, SUBM_Attributes, "(Unknown SubManagement Attribute!)"); - - proto_item_append_text(SubMItem, "%s", &label[11]); - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_str(pinfo->cinfo, COL_INFO, &label[11]); -} - -/* Parse the SA Attribute from the MAD Common Header -* Simply used to generate the identifier. -* IN: SubAItem - the item to append the Attribute label to. -* IN: MadHeader - the MadData structure that contains the information from the Common MAD header. -* IN: pinfo - packet info from wireshark. */ -static void label_SUBA_Attribute(proto_item *SubAItem, MAD_Data *MadHeader, packet_info *pinfo) -{ - const char *label = val_to_str(MadHeader->attributeID, SUBA_Attributes, "(Unknown SubAdministration Attribute!)"); - - proto_item_append_text(SubAItem, "%s", &label[11]); - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_str(pinfo->cinfo, COL_INFO, &label[11]); -} - -/* Parse the attribute from a Subnet Management Packet. -* IN: Parent Tree to add the item to in the dissection tree -* IN: tvbuff, offset - the data and where it is. -* IN: MAD_Data the data from the Common MAD Header that provides the information we need */ -static gboolean parse_SUBM_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_Data *MadHeader) -{ - guint16 attributeID = MadHeader->attributeID; - proto_tree *SUBM_Attribute_header_tree = NULL; - proto_item *SUBM_Attribute_header_item = NULL; - - SUBM_Attribute_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, *offset, 64, FALSE); - proto_item_set_text(SUBM_Attribute_header_item, "%s", val_to_str(attributeID, SUBM_Attributes, "Unknown Attribute Type! (0x%02x)")); - SUBM_Attribute_header_tree = proto_item_add_subtree(SUBM_Attribute_header_item, ett_subm_attribute); - - - switch(attributeID) - { - case 0x0002: - parse_NoticesAndTraps(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0010: - parse_NodeDescription(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0011: - parse_NodeInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0012: - parse_SwitchInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0014: - parse_GUIDInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0015: - parse_PortInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0016: - parse_P_KeyTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0017: - parse_SLtoVLMappingTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0018: - parse_VLArbitrationTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0019: - parse_LinearForwardingTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x001A: - parse_RandomForwardingTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x001B: - parse_MulticastForwardingTable(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x001C: - parse_SMInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0020: - parse_VendorDiag(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0030: - parse_LedInfo(SUBM_Attribute_header_tree , tvb, offset); - break; - case 0x0031: - parse_LinkSpeedWidthPairsTable(SUBM_Attribute_header_tree , tvb, offset); - break; - default: - break; - } - - - *offset += 64; - return TRUE; - -} -/* Parse the attribute from a Subnet Administration Packet. -* IN: Parent Tree to add the item to in the dissection tree -* IN: tvbuff, offset - the data and where it is. -* IN: MAD_Data the data from the Common MAD Header that provides the information we need */ -static gboolean parse_SUBA_Attribute(proto_tree *parentTree, tvbuff_t *tvb, gint *offset, MAD_Data *MadHeader) -{ - guint16 attributeID = MadHeader->attributeID; - proto_tree *SUBA_Attribute_header_tree = NULL; - proto_item *SUBA_Attribute_header_item = NULL; - - SUBA_Attribute_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, *offset, 200, FALSE); - proto_item_set_text(SUBA_Attribute_header_item, "%s", val_to_str(attributeID, SUBA_Attributes, "Unknown Attribute Type! (0x%02x)")); - SUBA_Attribute_header_tree = proto_item_add_subtree(SUBA_Attribute_header_item, ett_suba_attribute); - - /* Skim off the RID fields should they be present */ - parse_RID(SUBA_Attribute_header_tree, tvb, offset, MadHeader); - - /* Parse the rest of the attributes */ - switch(MadHeader->attributeID) - { - case 0x0001: /* (ClassPortInfo) */ - parse_PortInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0002: /* (Notice) */ - parse_NoticesAndTraps(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0003: /* (InformInfo) */ - parse_InformInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0011: /* (NodeRecord) */ - parse_NodeInfo(SUBA_Attribute_header_tree, tvb, offset); - *offset += 40; - parse_NodeDescription(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0012: /* (PortInfoRecord) */ - parse_PortInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0013: /* (SLtoVLMappingTableRecord) */ - parse_SLtoVLMappingTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0014: /* (SwitchInfoRecord) */ - parse_SwitchInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0015: /*(LinearForwardingTableRecord) */ - parse_LinearForwardingTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0016: /* (RandomForwardingTableRecord) */ - parse_RandomForwardingTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0017: /* (MulticastForwardingTableRecord) */ - parse_MulticastForwardingTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0018: /* (SMInfoRecord) */ - parse_SMInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0019: /* (LinkSpeedWidthPairsTableRecord) */ - parse_LinkSpeedWidthPairsTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x00F3: /*(InformInfoRecord) */ - parse_InformInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0020: /* (LinkRecord) */ - parse_LinkRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0030: /* (GuidInforecord) */ - parse_GUIDInfo(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0031: /*(ServiceRecord) */ - parse_ServiceRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0033: /* (P_KeyTableRecord) */ - parse_P_KeyTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0035: /* (PathRecord) */ - parse_PathRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0036: /* (VLArbitrationTableRecord) */ - parse_VLArbitrationTable(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0038: /* (MCMemberRecord) */ - parse_MCMemberRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x0039: /* (TraceRecord) */ - parse_TraceRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x003A: /* (MultiPathRecord) */ - parse_MultiPathRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - case 0x003B: /* (ServiceAssociationRecord) */ - parse_ServiceAssociationRecord(SUBA_Attribute_header_tree, tvb, offset); - break; - default: /* (Unknown SubAdministration Attribute!) */ - /* We've already labeled as unknown in item construction */ - break; - } - - *offset += 200; - return TRUE; -} - -/* Subnet Management Attribute Parsing Methods. -* Also Parsing for Attributes common to both SM/SA. -* The Subnet Admin Parsing methods will call some of these methods when an attribute is present within an SA MAD -*/ - - -/* Parse NoticeDataDetails Attribute Field -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* trapNumber - The Trap ID of the Trap Data being Dissected */ - -static void parse_NoticeDataDetails(proto_tree* parentTree, tvbuff_t* tvb, gint *offset, guint16 trapNumber) -{ - gint local_offset = *offset; - proto_tree *DataDetails_header_tree = NULL; - proto_item *DataDetails_header_item = NULL; - - if(!parentTree) - return; - - DataDetails_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 54, FALSE); - DataDetails_header_tree = proto_item_add_subtree(DataDetails_header_item, ett_datadetails); - - - switch(trapNumber) - { - case 64: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 64 DataDetails"); - local_offset +=6; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 65: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 65 DataDetails"); - local_offset +=6; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 66: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 66 DataDetails"); - local_offset +=6; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 67: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 67 DataDetails"); - local_offset +=6; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 68: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 68 DataDetails"); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_COMP_MASK, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_WAIT_FOR_REPATH, tvb, local_offset, 1, FALSE); - break; - case 69: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 69 DataDetails"); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_COMP_MASK, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_WAIT_FOR_REPATH, tvb, local_offset, 1, FALSE); - break; - case 128: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 128 DataDetails"); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - break; - case 129: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 129 DataDetails"); - local_offset += 2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_PORTNO, tvb, local_offset, 1, FALSE); local_offset+=1; - break; - case 130: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 130 DataDetails"); - local_offset += 2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_PORTNO, tvb, local_offset, 1, FALSE); local_offset+=1; - break; - case 131: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 131 DataDetails"); - local_offset += 2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_PORTNO, tvb, local_offset, 1, FALSE); local_offset+=1; - break; - case 144: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 144 DataDetails"); - local_offset +=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_OtherLocalChanges, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_CAPABILITYMASK, tvb, local_offset, 4, FALSE); local_offset+=4; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LinkSpeecEnabledChange, tvb, local_offset, 1, FALSE); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LinkWidthEnabledChange, tvb, local_offset, 1, FALSE); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_NodeDescriptionChange, tvb, local_offset, 1, FALSE); - break; - case 145: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 145 DataDetails"); - local_offset +=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset +=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_SYSTEMIMAGEGUID, tvb, local_offset, 8, FALSE); local_offset+=8; - break; - case 256: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 256 DataDetails"); - local_offset +=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DRSLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_METHOD, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_ATTRIBUTEID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_ATTRIBUTEMODIFIER, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_MKEY, tvb, local_offset, 8, FALSE); local_offset+=8; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DRNotice, tvb, local_offset, 1, FALSE); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DRPathTruncated, tvb, local_offset, 1, FALSE); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DRHopCount, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DRNoticeReturnPath, tvb, local_offset, 30, FALSE); local_offset+=30; - break; - case 257: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 257 DataDetails"); - local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR1, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR2, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_KEY, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_SL, tvb, local_offset, 1, FALSE); - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP1, tvb, local_offset, 3, FALSE); local_offset+=3; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP2, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR1, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR2, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 258: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 258 DataDetails"); - local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR1, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR2, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_KEY, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_SL, tvb, local_offset, 1, FALSE); - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP1, tvb, local_offset, 3, FALSE); local_offset+=3; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP2, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR1, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR2, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 259: - proto_item_set_text(DataDetails_header_item, "%s", "Trap 259 DataDetails"); - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_DataValid, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR1, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_LIDADDR2, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_PKEY, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_SL, tvb, local_offset, 1, FALSE); - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP1, tvb, local_offset, 3, FALSE); local_offset+=3; - local_offset +=1; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_QP2, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR1, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_GIDADDR2, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_SWLIDADDR, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(DataDetails_header_tree, hf_infiniband_Trap_PORTNO, tvb, local_offset, 1, FALSE); local_offset+=1; - break; - default: - proto_item_set_text(DataDetails_header_item, "%s", "Vendor Specific Subnet Management Trap"); local_offset +=54; - break; - } - -} - -/* Parse NoticesAndTraps Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_NoticesAndTraps(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *NoticesAndTraps_header_tree = NULL; - proto_item *NoticesAndTraps_header_item = NULL; - guint16 trapNumber = tvb_get_ntohs(tvb, local_offset + 4); - - if(!parentTree) - return; - - NoticesAndTraps_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(NoticesAndTraps_header_item, "%s", val_to_str(trapNumber, Trap_Description, "Unknown or Vendor Specific Trap Number! (0x%02x)")); - NoticesAndTraps_header_tree = proto_item_add_subtree(NoticesAndTraps_header_item, ett_noticestraps); - - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_IsGeneric, tvb, local_offset, 1, FALSE); - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_Type, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_ProducerTypeVendorID, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_TrapNumberDeviceID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_IssuerLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_NoticeToggle, tvb, local_offset, 1, FALSE); - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_NoticeCount, tvb, local_offset, 2, FALSE); local_offset+=2; - - parse_NoticeDataDetails(NoticesAndTraps_header_tree, tvb, &local_offset, trapNumber); - proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_DataDetails, tvb, local_offset, 54, FALSE); local_offset+=54; - - /* Only Defined For GMPs not SMPs which is not part of this dissector phase - *proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_IssuerGID, tvb, local_offset, 16, FALSE); local_offset+=16; - *proto_tree_add_item(NoticesAndTraps_header_tree, hf_infiniband_Notice_ClassTrapSpecificData, tvb, local_offset, 1, FALSE); local_offset+=1; */ - -} - -/* Parse NodeDescription Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_NodeDescription(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *NodeDescription_header_tree = NULL; - - if(!parentTree) - return; - - NodeDescription_header_tree = parentTree; - proto_tree_add_item(NodeDescription_header_tree, hf_infiniband_NodeDescription_NodeString, tvb, local_offset, 64, FALSE); -} - -/* Parse NodeInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_NodeInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *NodeInfo_header_tree = NULL; - - if(!parentTree) - return; - - NodeInfo_header_tree = parentTree; - - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_BaseVersion, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_ClassVersion, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_NodeType, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_NumPorts, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_SystemImageGUID, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_NodeGUID, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_PortGUID, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_PartitionCap, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_DeviceID, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_Revision, tvb, local_offset, 4, FALSE); local_offset +=4; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_LocalPortNum, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(NodeInfo_header_tree, hf_infiniband_NodeInfo_VendorID, tvb, local_offset, 3, FALSE); local_offset +=3; - -} - -/* Parse SwitchInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_SwitchInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *SwitchInfo_header_tree = NULL; - - if(!parentTree) - return; - - SwitchInfo_header_tree = parentTree; - - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_LinearFDBCap, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_RandomFDBCap, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_MulticastFDBCap, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_LinearFDBTop, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_DefaultPort, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_DefaultMulticastPrimaryPort, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_DefaultMulticastNotPrimaryPort, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_LifeTimeValue, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_PortStateChange, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_OptimizedSLtoVLMappingProgramming, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_LIDsPerPort, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_PartitionEnforcementCap, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_InboundEnforcementCap, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_OutboundEnforcementCap, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_FilterRawInboundCap, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_FilterRawOutboundCap, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SwitchInfo_header_tree, hf_infiniband_SwitchInfo_EnhancedPortZero, tvb, local_offset, 1, FALSE); local_offset +=1; -} - -/* Parse GUIDInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_GUIDInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *GUIDInfo_header_tree = NULL; - proto_item *tempItemLow = NULL; - gint i = 0; - - if(!parentTree) - return; - - GUIDInfo_header_tree = parentTree; - - for(i = 0; i < 8; i++) - { - proto_tree_add_item(GUIDInfo_header_tree, hf_infiniband_GUIDInfo_GUID, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_item_append_text(tempItemLow, "(%u)", i); - } - -} - -/* Parse PortInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_PortInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *PortInfo_header_tree = NULL; - proto_tree *PortInfo_CapabilityMask_tree = NULL; - proto_item *PortInfo_CapabilityMask_item = NULL; - proto_item *temp_item = NULL; - guint16 temp_val = 0; - - if(!parentTree) - return; - - PortInfo_header_tree = parentTree; - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_M_Key, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_GidPrefix, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LID, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_MasterSMLID, tvb, local_offset, 2, FALSE); local_offset +=2; - - /* Capability Mask Flags */ - PortInfo_CapabilityMask_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_CapabilityMask, tvb, local_offset, 4, FALSE); - PortInfo_CapabilityMask_tree = proto_item_add_subtree(PortInfo_CapabilityMask_item, ett_portinfo_capmask); - - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_SM, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_NoticeSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_TrapSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_OptionalPDSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_AutomaticMigrationSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_SLMappingSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_MKeyNVRAM, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_PKeyNVRAM, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_LEDInfoSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_SMdisabled, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_SystemImageGUIDSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_PKeySwitchExternalPortTrapSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_CommunicationsManagementSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_SNMPTunnelingSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_ReinitSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_DeviceManagementSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_VendorClassSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_DRNoticeSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_CapabilityMaskNoticeSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_BootManagementSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_LinkRoundTripLatencySupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_ClientRegistrationSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_OtherLocalChangesNoticeSupported, tvb, local_offset, 4, FALSE); - proto_tree_add_item(PortInfo_CapabilityMask_tree, hf_infiniband_PortInfo_CapabilityMask_LinkSpeedWIdthPairsTableSupported, tvb, local_offset, 4, FALSE); - local_offset+=4; - /* End Capability Mask Flags */ - - /* Diag Code */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_DiagCode, tvb, local_offset, 2, FALSE); - temp_val = tvb_get_ntohs(tvb, local_offset); - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, DiagCode, "Reserved DiagCode! Possible Error")); - local_offset +=2; - /* End Diag Code */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_M_KeyLeasePeriod, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LocalPortNum, tvb, local_offset, 1, FALSE); local_offset +=1; - - /* LinkWidthEnabled */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkWidthEnabled, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkWidthEnabled, "Reserved LinkWidthEnabled Value! Possible Error")); - local_offset +=1; - /* End LinkWidthEnabled */ - - /* LinkWidthSupported */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkWidthSupported, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkWidthSupported, "Reserved LinkWidthSupported Value! Possible Error")); - local_offset +=1; - /* End LinkWidthSupported */ - - /* LinkWidthActive */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkWidthActive, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkWidthActive, "Reserved LinkWidthActive Value! Possible Error")); - local_offset +=1; - /* End LinkWidthActive */ - - /* LinkSpeedSupported */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkSpeedSupported, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkSpeedSupported, "Reserved LinkWidthSupported Value! Possible Error")); - /* End LinkSpeedSupported */ - - /* PortState */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_PortState, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x000F; - /*temp_val = temp_val >> 4 */ - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, PortState, "Reserved PortState Value! Possible Error")); - local_offset +=1; - /* End PortState */ - - /* PortPhysicalState */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_PortPhysicalState, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, PortPhysicalState, "Reserved PortPhysicalState Value! Possible Error")); - /* End PortPhysicalState */ - - /* LinkDownDefaultState */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkDownDefaultState, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x000F; - /*temp_val = temp_val >> 4 */ - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkDownDefaultState, "Reserved LinkDownDefaultState Value! Possible Error")); - local_offset +=1; - /* End LinkDownDefaultState */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_M_KeyProtectBits, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LMC, tvb, local_offset, 1, FALSE); local_offset +=1; - - /* LinkSpeedActive */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkSpeedActive, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkSpeedActive, "Reserved LinkSpeedActive Value! Possible Error")); - /* End LinkSpeedActive */ - - /* LinkSpeedEnabled */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkSpeedEnabled, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x000F; - /*temp_val = temp_val >> 4 */ - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, LinkSpeedEnabled, "Reserved LinkSpeedEnabled Value! Possible Error")); - local_offset +=1; - /* End LinkSpeedEnabled */ - - /* NeighborMTU */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_NeighborMTU, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, NeighborMTU, "Reserved NeighborMTU Value! Possible Error")); - - /* End NeighborMTU */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_MasterSMSL, tvb, local_offset, 1, FALSE); local_offset +=1; - - /* VLCap */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_VLCap, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, VLCap, "Reserved VLCap Value! Possible Error")); - - /* End VLCap */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_InitType, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_VLHighLimit, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_VLArbitrationHighCap, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_VLArbitrationLowCap, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_InitTypeReply, tvb, local_offset, 1, FALSE); - - /* MTUCap */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_MTUCap, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x000F; - /*temp_val = temp_val >> 4 */ - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, MTUCap, "Reserved MTUCap Value! Possible Error")); - local_offset +=1; - /* End MTUCap */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_VLStallCount, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_HOQLife, tvb, local_offset, 1, FALSE); local_offset +=1; - - /* OperationalVLs */ - temp_item = proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_OperationalVLs, tvb, local_offset, 1, FALSE); - temp_val = (guint16)tvb_get_guint8(tvb, local_offset); - - /* 4 bit values = mask and shift */ - temp_val = temp_val & 0x00F0; - temp_val = temp_val >> 4; - - proto_item_append_text(temp_item, ", %s", val_to_str(temp_val, OperationalVLs, "Reserved OperationalVLs Value! Possible Error")); - /* End OperationalVLs */ - - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_PartitionEnforcementInbound, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_PartitionEnforcementOutbound, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_FilterRawInbound, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_FilterRawOutbound, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_M_KeyViolations, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_P_KeyViolations, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_Q_KeyViolations, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_GUIDCap, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_ClientReregister, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_SubnetTimeOut, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_RespTimeValue, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LocalPhyErrors, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_OverrunErrors, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_MaxCreditHint, tvb, local_offset, 2, FALSE); local_offset +=3; /* 2 + 1 Reserved */ - proto_tree_add_item(PortInfo_header_tree, hf_infiniband_PortInfo_LinkRoundTripLatency, tvb, local_offset, 3, FALSE); local_offset +=3; -} - -/* Parse P_KeyTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_P_KeyTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - gint i = 0; - proto_tree *P_KeyTable_header_tree = NULL; - proto_item *P_KeyTable_header_item = NULL; - proto_item *tempItemLow = NULL; - proto_item *tempItemHigh = NULL; - - if(!parentTree) - return; - - P_KeyTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_P_KeyTable_P_KeyTableBlock, tvb, local_offset, 64, FALSE); - proto_item_set_text(P_KeyTable_header_item, "%s", "P_KeyTable"); - P_KeyTable_header_tree = proto_item_add_subtree(P_KeyTable_header_item, ett_pkeytable); - - for(i = 0; i < 32; i++) - { - tempItemLow = proto_tree_add_item(P_KeyTable_header_tree, hf_infiniband_P_KeyTable_MembershipType, tvb, local_offset, 1, FALSE); - tempItemHigh = proto_tree_add_item(P_KeyTable_header_tree, hf_infiniband_P_KeyTable_P_KeyBase, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_item_append_text(tempItemLow, "(%u)", i); - proto_item_append_text(tempItemHigh,"(%u)", i+1); - } -} - -/* Parse SLtoVLMappingTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_SLtoVLMappingTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *SLtoVLMappingTable_header_tree = NULL; - proto_item *SLtoVLMappingTable_header_item = NULL; - proto_item *tempItemLow = NULL; - proto_item *tempItemHigh = NULL; - gint i = 0; - - if(!parentTree) - return; - - SLtoVLMappingTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(SLtoVLMappingTable_header_item, "%s", "SLtoVLMappingTable"); - SLtoVLMappingTable_header_tree = proto_item_add_subtree(SLtoVLMappingTable_header_item, ett_sltovlmapping); - - for(i = 0; i < 8; i++) - { - tempItemLow = proto_tree_add_item(SLtoVLMappingTable_header_tree, hf_infiniband_SLtoVLMappingTable_SLtoVL_HighBits, tvb, local_offset, 1, FALSE); - tempItemHigh = proto_tree_add_item(SLtoVLMappingTable_header_tree, hf_infiniband_SLtoVLMappingTable_SLtoVL_LowBits, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_item_append_text(tempItemLow, "(%u)", i); - proto_item_append_text(tempItemHigh,"(%u)", i+1); - } -} - -/* Parse VLArbitrationTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_VLArbitrationTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - gint i = 0; - proto_tree *VLArbitrationTable_header_tree = NULL; - proto_item *VLArbitrationTable_header_item = NULL; - proto_item *tempItemLow = NULL; - proto_item *tempItemHigh = NULL; - - if(!parentTree) - return; - - VLArbitrationTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(VLArbitrationTable_header_item, "%s", "VLArbitrationTable"); - VLArbitrationTable_header_tree = proto_item_add_subtree(VLArbitrationTable_header_item, ett_vlarbitrationtable); - - for(i = 0; i < 32; i++) - { - tempItemLow = proto_tree_add_item(VLArbitrationTable_header_tree, hf_infiniband_VLArbitrationTable_VL, tvb, local_offset, 1, FALSE); local_offset +=1; - tempItemHigh = proto_tree_add_item(VLArbitrationTable_header_tree, hf_infiniband_VLArbitrationTable_Weight, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_item_append_text(tempItemLow, "(%u)", i); - proto_item_append_text(tempItemHigh,"(%u)", i); - } -} - -/* Parse LinearForwardingTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_LinearForwardingTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint i = 0; - gint local_offset = *offset; - proto_tree *LinearForwardingTable_header_tree = NULL; - proto_item *LinearForwardingTable_header_item = NULL; - proto_item *tempItemLow = NULL; - - if(!parentTree) - return; - - LinearForwardingTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(LinearForwardingTable_header_item, "%s", "LinearForwardingTable"); - LinearForwardingTable_header_tree = proto_item_add_subtree(LinearForwardingTable_header_item, ett_linearforwardingtable); - - for(i = 0; i < 64; i++) - { - tempItemLow = proto_tree_add_item(LinearForwardingTable_header_tree, hf_infiniband_LinearForwardingTable_Port, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_item_append_text(tempItemLow, "(%u)", i); - } -} - -/* Parse RandomForwardingTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_RandomForwardingTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint i = 0; - gint local_offset = *offset; - proto_tree *RandomForwardingTable_header_tree = NULL; - proto_item *RandomForwardingTable_header_item = NULL; - proto_item *tempItemLow = NULL; - - if(!parentTree) - return; - - RandomForwardingTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(RandomForwardingTable_header_item, "%s", "RandomForwardingTable"); - RandomForwardingTable_header_tree = proto_item_add_subtree(RandomForwardingTable_header_item, ett_randomforwardingtable); - - for(i = 0; i < 16; i++) - { - tempItemLow = proto_tree_add_item(RandomForwardingTable_header_tree, hf_infiniband_RandomForwardingTable_LID, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_item_append_text(tempItemLow, "(%u)", i); - tempItemLow = proto_tree_add_item(RandomForwardingTable_header_tree, hf_infiniband_RandomForwardingTable_Valid, tvb, local_offset, 1, FALSE); - proto_item_append_text(tempItemLow, "(%u)", i); - tempItemLow = proto_tree_add_item(RandomForwardingTable_header_tree, hf_infiniband_RandomForwardingTable_LMC, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_item_append_text(tempItemLow, "(%u)", i); - tempItemLow = proto_tree_add_item(RandomForwardingTable_header_tree, hf_infiniband_RandomForwardingTable_Port, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_item_append_text(tempItemLow, "(%u)", i); - } -} - -/* Parse NoticesAndTraps Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_MulticastForwardingTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint i = 0; - gint local_offset = *offset; - proto_tree *MulticastForwardingTable_header_tree = NULL; - proto_item *MulticastForwardingTable_header_item = NULL; - proto_item *tempItemLow = NULL; - - if(!parentTree) - return; - - MulticastForwardingTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(MulticastForwardingTable_header_item, "%s", "MulticastForwardingTable"); - MulticastForwardingTable_header_tree = proto_item_add_subtree(MulticastForwardingTable_header_item, ett_multicastforwardingtable); - - for(i = 0; i < 16; i++) - { - tempItemLow = proto_tree_add_item(MulticastForwardingTable_header_tree, hf_infiniband_MulticastForwardingTable_PortMask, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_item_append_text(tempItemLow, "(%u)", i); - } - -} - -/* Parse SMInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_SMInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *SMInfo_header_tree = NULL; - proto_item *SMInfo_header_item = NULL; - - if(!parentTree) - return; - - SMInfo_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(SMInfo_header_item, "%s", "SMInfo"); - SMInfo_header_tree = proto_item_add_subtree(SMInfo_header_item, ett_sminfo); - - proto_tree_add_item(SMInfo_header_tree, hf_infiniband_SMInfo_GUID, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(SMInfo_header_tree, hf_infiniband_SMInfo_SM_Key, tvb, local_offset, 8, FALSE); local_offset +=8; - proto_tree_add_item(SMInfo_header_tree, hf_infiniband_SMInfo_ActCount, tvb, local_offset, 4, FALSE); local_offset +=4; - proto_tree_add_item(SMInfo_header_tree, hf_infiniband_SMInfo_Priority, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SMInfo_header_tree, hf_infiniband_SMInfo_SMState, tvb, local_offset, 1, FALSE); local_offset +=1; -} - -/* Parse VendorDiag Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_VendorDiag(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *VendorDiag_header_tree = NULL; - proto_item *VendorDiag_header_item = NULL; - - if(!parentTree) - return; - - VendorDiag_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(VendorDiag_header_item, "%s", "VendorDiag"); - VendorDiag_header_tree = proto_item_add_subtree(VendorDiag_header_item, ett_vendordiag); - - proto_tree_add_item(VendorDiag_header_tree, hf_infiniband_VendorDiag_NextIndex, tvb, local_offset, 2, FALSE); local_offset +=2; - proto_tree_add_item(VendorDiag_header_tree, hf_infiniband_VendorDiag_DiagData, tvb, local_offset, 62, FALSE); local_offset +=62; -} - -/* Parse LedInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_LedInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *LedInfo_header_tree = NULL; - proto_item *LedInfo_header_item = NULL; - - if(!parentTree) - return; - - LedInfo_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(LedInfo_header_item, "%s", "LedInfo"); - LedInfo_header_tree = proto_item_add_subtree(LedInfo_header_item, ett_ledinfo); - - proto_tree_add_item(LedInfo_header_tree, hf_infiniband_LedInfo_LedMask, tvb, local_offset, 1, FALSE); -} - -/* Parse LinkSpeedWidthPairsTable Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_LinkSpeedWidthPairsTable(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *LinkSpeedWidthPairsTable_header_tree = NULL; - proto_item *LinkSpeedWidthPairsTable_header_item = NULL; - - if(!parentTree) - return; - - LinkSpeedWidthPairsTable_header_item = proto_tree_add_item(parentTree, hf_infiniband_smp_data, tvb, local_offset, 64, FALSE); - proto_item_set_text(LinkSpeedWidthPairsTable_header_item, "%s", "LinkSpeedWidthPairsTable"); - LinkSpeedWidthPairsTable_header_tree = proto_item_add_subtree(LinkSpeedWidthPairsTable_header_item, ett_linkspeedwidthpairs); - - proto_tree_add_item(LinkSpeedWidthPairsTable_header_tree, hf_infiniband_LinkSpeedWidthPairsTable_NumTables, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(LinkSpeedWidthPairsTable_header_tree, hf_infiniband_LinkSpeedWidthPairsTable_PortMask, tvb, local_offset, 32, FALSE); local_offset +=32; - proto_tree_add_item(LinkSpeedWidthPairsTable_header_tree, hf_infiniband_LinkSpeedWidthPairsTable_SpeedTwoFive, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(LinkSpeedWidthPairsTable_header_tree, hf_infiniband_LinkSpeedWidthPairsTable_SpeedFive, tvb, local_offset, 1, FALSE); local_offset +=1; - proto_tree_add_item(LinkSpeedWidthPairsTable_header_tree, hf_infiniband_LinkSpeedWidthPairsTable_SpeedTen, tvb, local_offset, 1, FALSE); local_offset +=1; -} - -/* Parse RID Field from Subnet Administraiton Packets. -* IN: SA_header_tree - the dissection tree of the subnet admin attribute. -* tvb - the packet buffer -* MadHeader - the Common MAD header from this packet. -* IN/OUT: offset - the current and updated offset in the packet buffer */ -static void parse_RID(proto_tree* SA_header_tree, tvbuff_t* tvb, gint *offset, MAD_Data* MadHeader) -{ - gint local_offset = *offset; - if(!SA_header_tree) - { - return; - } - switch(MadHeader->attributeID) - { - case 0x0011: - /* NodeRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=2; /* Reserved bits */ - break; - case 0x0012: - /* PortInfoRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_EndportLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_PortNum, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=1; /* Reserved bits */ - break; - case 0x0013: - /* SLtoVLMappingTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_InputPortNum, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_OutputPortNum, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=4; /* Reserved bits */ - break; - case 0x0014: - /* SwitchInfoRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=2; /* Reserved bits */ - break; - case 0x0015: - /* LinearForwardingTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_SixteenBit, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=4; /* Reserved bits */ - break; - case 0x0016: - /* RandomForwardingTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_SixteenBit, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=4; /* Reserved bits */ - break; - case 0x0017: - /* MulticastForwardingTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_Position, tvb, local_offset, 1, FALSE); - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_NineBit, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=4; /* Reserved bits */ - break; - case 0x0036: - /*VLArbitrationTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_OutputPortNum, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_EightBit, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=4; /* Reserved bits */ - break; - case 0x0018: - /* SMInfoRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=2; /* Reserved bits */ - break; - case 0x0033: - /* P_KeyTableRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_SixteenBit, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_PortNum, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=3; /* Reserved bits */ - break; - case 0x00F3: - /* InformInfoRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_InformInfoRecord_SubscriberGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(SA_header_tree, hf_infiniband_InformInfoRecord_Enum, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=6; /* Reserved bits */ - break; - case 0x0020: - /* LinkRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_LinkRecord_FromLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_LinkRecord_FromPort, tvb, local_offset, 1, FALSE); local_offset+=1; - break; - case 0x0031: - /* ServiceRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_ServiceRecord_ServiceID, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(SA_header_tree, hf_infiniband_ServiceRecord_ServiceGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(SA_header_tree, hf_infiniband_ServiceRecord_ServiceP_Key, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=2; - break; - case 0x0038: - /* MCMemberRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_MCMemberRecord_MGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(SA_header_tree, hf_infiniband_MCMemberRecord_PortGID, tvb, local_offset, 16, FALSE); local_offset+=16; - break; - case 0x0030: - /* GuidInfoRecord */ - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_LID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(SA_header_tree, hf_infiniband_SA_BlockNum_EightBit, tvb, local_offset, 1, FALSE); local_offset+=2; - local_offset+=4; - break; - default: - break; - } - - *offset = local_offset; -} - -/* Parse InformInfo Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_InformInfo(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *InformInfo_header_tree = NULL; - proto_item *InformInfo_header_item = NULL; - if(!parentTree) - { - return; - } - InformInfo_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 36, FALSE); - proto_item_set_text(InformInfo_header_item, "%s", "InformInfo"); - InformInfo_header_tree = proto_item_add_subtree(InformInfo_header_item, ett_informinfo); - - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_GID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_LIDRangeBegin, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_LIDRangeEnd, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=2; /* Reserved Bits */ - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_IsGeneric, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_Subscribe, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_Type, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_TrapNumberDeviceID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_QPN, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_RespTimeValue, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=1; - proto_tree_add_item(InformInfo_header_tree, hf_infiniband_InformInfo_ProducerTypeVendorID, tvb, local_offset, 3, FALSE); local_offset+=3; - -} -/* Parse LinkRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_LinkRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *LinkRecord_header_tree = NULL; - proto_item *LinkRecord_header_item = NULL; - - if(!parentTree) - { - return; - } - - LinkRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 3, FALSE); - proto_item_set_text(LinkRecord_header_item, "%s", "LinkRecord"); - LinkRecord_header_tree = proto_item_add_subtree(LinkRecord_header_item, ett_linkrecord); - - proto_tree_add_item(LinkRecord_header_tree, hf_infiniband_LinkRecord_ToPort, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(LinkRecord_header_tree, hf_infiniband_LinkRecord_ToLID, tvb, local_offset, 2, FALSE); local_offset +=2; - -} -/* Parse ServiceRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_ServiceRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *ServiceRecord_header_tree = NULL; - proto_item *ServiceRecord_header_item = NULL; - proto_item *tempData = NULL; - - if(!parentTree) - { - return; - } - - ServiceRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 176, FALSE); - proto_item_set_text(ServiceRecord_header_item, "%s", "ServiceRecord"); - ServiceRecord_header_tree = proto_item_add_subtree(ServiceRecord_header_item, ett_servicerecord); - - proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceLease, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceKey, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceName, tvb, local_offset, 64, FALSE); local_offset+=64; - - tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceData, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_append_text(tempData, "%s", "(ServiceData 8.1, 8.16)"); - tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceData, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_append_text(tempData, "%s", "(ServiceData 16.1, 16.8)"); - tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceData, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_append_text(tempData, "%s", "(ServiceData 32.1, 32.4)"); - tempData = proto_tree_add_item(ServiceRecord_header_tree, hf_infiniband_ServiceRecord_ServiceData, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_append_text(tempData, "%s", "(ServiceData 64.1, 64.2)"); - -} -/* Parse PathRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_PathRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *PathRecord_header_tree = NULL; - proto_item *PathRecord_header_item = NULL; - - if(!parentTree) - { - return; - } - - PathRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 64, FALSE); - proto_item_set_text(PathRecord_header_item, "%s", "PathRecord"); - PathRecord_header_tree = proto_item_add_subtree(PathRecord_header_item, ett_pathrecord); - local_offset += 8; /* Reserved Bits */ - - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_DGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_SGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_DLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_SLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_RawTraffic, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_FlowLabel, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_HopLimit, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_TClass, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_Reversible, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_NumbPath, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_P_Key, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_SL, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_MTUSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_MTU, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_RateSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_Rate, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_PacketLifeTime, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(PathRecord_header_tree, hf_infiniband_PathRecord_Preference, tvb, local_offset, 1, FALSE); local_offset+=1; -} -/* Parse MCMemberRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_MCMemberRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *MCMemberRecord_header_tree = NULL; - proto_item *MCMemberRecord_header_item = NULL; - - if(!parentTree) - { - return; - } - - MCMemberRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 64, FALSE); - proto_item_set_text(MCMemberRecord_header_item, "%s", "MCMemberRecord"); - MCMemberRecord_header_tree = proto_item_add_subtree(MCMemberRecord_header_item, ett_mcmemberrecord); - - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_Q_Key, tvb, local_offset, 4, FALSE); local_offset+=4; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_MLID, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_MTUSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_MTU, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_TClass, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_P_Key, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_RateSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_Rate, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_PacketLifeTimeSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_PacketLifeTime, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_SL, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_FlowLabel, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_HopLimit, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_Scope, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_JoinState, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MCMemberRecord_header_tree, hf_infiniband_MCMemberRecord_ProxyJoin, tvb, local_offset, 1, FALSE); local_offset+=3; - -} -/* Parse TraceRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_TraceRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *TraceRecord_header_tree = NULL; - proto_item *TraceRecord_header_item = NULL; - - if(!parentTree) - { - return; - } - - TraceRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 46, FALSE); - proto_item_set_text(TraceRecord_header_item, "%s", "TraceRecord"); - TraceRecord_header_tree = proto_item_add_subtree(TraceRecord_header_item, ett_tracerecord); - - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_GIDPrefix, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_IDGeneration, tvb, local_offset, 2, FALSE); local_offset+=2; - local_offset+=1; /* Reserved Bits */ - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_NodeType, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_NodeID, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_ChassisID, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_EntryPortID, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_ExitPortID, tvb, local_offset, 8, FALSE); local_offset+=8; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_EntryPort, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(TraceRecord_header_tree, hf_infiniband_TraceRecord_ExitPort, tvb, local_offset, 1, FALSE); local_offset+=1; -} -/* Parse MultiPathRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_MultiPathRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *MultiPathRecord_header_tree = NULL; - proto_item *MultiPathRecord_header_item = NULL; - proto_item *SDGID = NULL; - guint8 SDGIDCount = 0; - guint8 DGIDCount = 0; - guint32 i = 0; - - if(!parentTree) - { - return; - } - - MultiPathRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 200, FALSE); - proto_item_set_text(MultiPathRecord_header_item, "%s", "MultiPathRecord"); - MultiPathRecord_header_tree = proto_item_add_subtree(MultiPathRecord_header_item, ett_multipathrecord); - - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_RawTraffic, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_FlowLabel, tvb, local_offset, 3, FALSE); local_offset+=3; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_HopLimit, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_TClass, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_Reversible, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_NumbPath, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_P_Key, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_SL, tvb, local_offset, 2, FALSE); local_offset+=2; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_MTUSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_MTU, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_RateSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_Rate, tvb, local_offset, 1, FALSE); local_offset+=1; - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_PacketLifeTimeSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_PacketLifeTime, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=1; /* Reserved Bits */ - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_IndependenceSelector, tvb, local_offset, 1, FALSE); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_GIDScope, tvb, local_offset, 1, FALSE); local_offset+=1; - - SDGIDCount = tvb_get_guint8(tvb, local_offset); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_SGIDCount, tvb, local_offset, 1, FALSE); local_offset+=1; - DGIDCount = tvb_get_guint8(tvb, local_offset); - proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_DGIDCount, tvb, local_offset, 1, FALSE); local_offset+=1; - local_offset+=7; /*Reserved Bits */ - - for(i = 0; i < SDGIDCount; i++) - { - SDGID = proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_SDGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_set_text(SDGID, "(%s%u)","SGID", i); - } - for(i = 0; i < DGIDCount; i++) - { - SDGID = proto_tree_add_item(MultiPathRecord_header_tree, hf_infiniband_MultiPathRecord_SDGID, tvb, local_offset, 16, FALSE); local_offset+=16; - proto_item_set_text(SDGID, "(%s%u)","DGID", i); - } -} -/* Parse ServiceAssociationRecord Attribute -* IN: parentTree - The tree to add the dissection to -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* MadHeader - The common MAD header of the current SMP/SMA */ -static void parse_ServiceAssociationRecord(proto_tree* parentTree, tvbuff_t* tvb, gint *offset) -{ - gint local_offset = *offset; - proto_tree *ServiceAssociationRecord_header_tree = NULL; - proto_item *ServiceAssociationRecord_header_item = NULL; - - if(!parentTree) - { - return; - } - - ServiceAssociationRecord_header_item = proto_tree_add_item(parentTree, hf_infiniband_SA, tvb, local_offset, 80, FALSE); - proto_item_set_text(ServiceAssociationRecord_header_item, "%s", "ServiceAssociationRecord"); - ServiceAssociationRecord_header_tree = proto_item_add_subtree(ServiceAssociationRecord_header_item, ett_serviceassocrecord); - - proto_tree_add_item(ServiceAssociationRecord_header_tree, hf_infiniband_ServiceAssociationRecord_ServiceKey, tvb, local_offset, 16, FALSE); local_offset +=16; - proto_tree_add_item(ServiceAssociationRecord_header_tree, hf_infiniband_ServiceAssociationRecord_ServiceName, tvb, local_offset, 64, FALSE); local_offset +=64; -} - -/* dissect_general_info -* Used to extract very few values from the packet in the case that full dissection is disabled by the user. -* IN: -* tvb - The tvbbuff of packet data -* offset - The offset in TVB where the attribute begins -* pinfo - The packet info structure with column information */ -static void dissect_general_info(tvbuff_t *tvb, gint offset, packet_info *pinfo) -{ - guint8 lnh_val = 0; /* The Link Next Header Value. Tells us which headers are coming */ - gboolean bthFollows = 0; /* Tracks if we are parsing a BTH. This is a significant decision point */ - guint8 virtualLane = 0; /* The Virtual Lane of the current Packet */ - guint8 opCode = 0; /* OpCode from BTH header. */ - gint32 nextHeaderSequence = -1; /* defined by this dissector. #define which indicates the upcoming header sequence from OpCode */ - guint8 nxtHdr = 0; /* that must be available for that header. */ - struct e_in6_addr SRCgid; /* Struct to display ipv6 Address */ - struct e_in6_addr DSTgid; /* Struct to display ipv6 Address */ - guint8 management_class = 0; - MAD_Data MadData; - - - virtualLane = tvb_get_guint8(tvb, offset); - virtualLane = virtualLane & 0xF0; - offset+=1; - - /* Save Link Next Header... This tells us what the next header is. */ - lnh_val = tvb_get_guint8(tvb, offset); - lnh_val = lnh_val & 0x03; - offset+=1; - - /* Set destination in packet view. */ - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_DST, "DLID: %s", tvb_bytes_to_str(tvb, offset, 2)); - } - offset+=4; - - /* Set Source in packet view. */ - if (check_col(pinfo->cinfo, COL_DEF_SRC)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_SRC, "SLID: %s", tvb_bytes_to_str(tvb, offset, 2)); - } - offset+=2; - - switch(lnh_val) - { - case IBA_GLOBAL: - offset +=6; - nxtHdr = tvb_get_guint8(tvb, offset); - offset += 2; - - tvb_get_ipv6(tvb, offset, &SRCgid); - if (check_col(pinfo->cinfo, COL_DEF_SRC)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_SRC, "SGID: %s", ip6_to_str(&SRCgid)); - } - offset += 16; - - tvb_get_ipv6(tvb, offset, &DSTgid); - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_add_fstr(pinfo->cinfo, COL_DEF_DST, "DGID: %s", ip6_to_str(&DSTgid)); - } - offset += 16; - - if(nxtHdr != 0x1B) - { - /* Some kind of packet being transported globally with IBA, but locally it is not IBA - no BTH following. */ - break; - } - /* else - * { - * Fall through switch and start parsing Local Headers and BTH - * } - */ - case IBA_LOCAL: - bthFollows = TRUE; - - /* Get the OpCode - this tells us what headers are following */ - opCode = tvb_get_guint8(tvb, offset); - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_str(pinfo->cinfo, COL_INFO, val_to_str((guint32)opCode, OpCodeMap, "Unknown OpCode")); - } - offset +=12; - break; - case IP_NON_IBA: - /* Raw IPv6 Packet */ - if (check_col(pinfo->cinfo, COL_DEF_DST)) - { - col_set_str(pinfo->cinfo, COL_DEF_DST, "IPv6 over IB Packet"); - col_set_fence(pinfo->cinfo, COL_DEF_DST); - } - break; - case RAW: - break; - default: - break; - } - - if(bthFollows) - { - /* Find our next header sequence based on the Opcode - * Since we're not doing dissection here, we just need the proper offsets to get our labels in packet view */ - - nextHeaderSequence = find_next_header_sequence((guint32) opCode); - switch(nextHeaderSequence) - { - case RDETH_DETH_PAYLD: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - break; - case RDETH_DETH_RETH_PAYLD: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - offset += 16; /* RETH */ - break; - case RDETH_DETH_IMMDT_PAYLD: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - offset += 4; /* IMMDT */ - break; - case RDETH_DETH_RETH_IMMDT_PAYLD: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - offset += 16; /* RETH */ - offset += 4; /* IMMDT */ - break; - case RDETH_DETH_RETH: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - offset += 16; /* RETH */ - break; - case RDETH_AETH_PAYLD: - offset += 4; /* RDETH */ - offset += 4; /* AETH */ - break; - case RDETH_PAYLD: - offset += 4; /* RDETH */ - break; - case RDETH_AETH: - offset += 4; /* RDETH */ - offset += 4; /* AETH */ - break; - case RDETH_AETH_ATOMICACKETH: - offset += 4; /* RDETH */ - offset += 4; /* AETH */ - offset += 8; /* AtomicAckETH */ - break; - case RDETH_DETH_ATOMICETH: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - offset += 28; /* AtomicETH */ - break; - case RDETH_DETH: - offset += 4; /* RDETH */ - offset += 8; /* DETH */ - break; - case DETH_PAYLD: - offset += 8; /* DETH */ - break; - case PAYLD: - break; - case IMMDT_PAYLD: - offset += 4; /* IMMDT */ - break; - case RETH_PAYLD: - offset += 16; /* RETH */ - break; - case RETH: - offset += 16; /* RETH */ - break; - case AETH_PAYLD: - offset += 4; /* AETH */ - break; - case AETH: - offset += 4; /* AETH */ - break; - case AETH_ATOMICACKETH: - offset += 4; /* AETH */ - offset += 8; /* AtomicAckETH */ - break; - case ATOMICETH: - offset += 28; /* AtomicETH */ - break; - case IETH_PAYLD: - offset += 4; /* IETH */ - break; - case DETH_IMMDT_PAYLD: - offset += 8; /* DETH */ - offset += 4; /* IMMDT */ - break; - default: - break; - } - } - if(virtualLane == 0xF0) - { - management_class = tvb_get_guint8(tvb, offset + 1); - if(((management_class >= (guint8)VENDOR_1_START) && (management_class <= (guint8)VENDOR_1_END)) - || ((management_class >= (guint8)VENDOR_2_START) && (management_class <= (guint8)VENDOR_2_END))) - { - return; - } - else if((management_class >= (guint8)APPLICATION_START) && (management_class <= (guint8)APPLICATION_END)) - { - return; - } - else if(((management_class == (guint8)0x00) || (management_class == (guint8)0x02)) - || ((management_class >= (guint8)0x50) && (management_class <= (guint8)0x80)) - || ((management_class >= (guint8)0x82))) - { - return; - } - else /* we have a normal management_class */ - { - parse_MAD_Common(NULL, tvb, &offset, &MadData); - label_SUBM_Method(NULL, &MadData, pinfo); - label_SUBM_Attribute(NULL, &MadData, pinfo); - } - } - - return; -} diff --git a/plugins/infiniband/packet-infiniband.h b/plugins/infiniband/packet-infiniband.h deleted file mode 100644 index 329c31abd1..0000000000 --- a/plugins/infiniband/packet-infiniband.h +++ /dev/null @@ -1,2571 +0,0 @@ -/* packet-infiniband.h - * Routines for Infiniband/ERF Dissection - * - * $Id$ - * - * Copyright 2008 Endace Technology Limited - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ -#ifndef __PACKET_INFINIBAND_H_ -#define __PACKET_INFINIBAND_H_ - -#define PROTO_TAG_INFINIBAND "Infiniband" - -#include <epan/etypes.h> - -/* Wireshark ID */ -static int proto_infiniband = -1; - -/* Variables to hold expansion values between packets */ -static gint ett_infiniband = -1; -static gint ett_all_headers = -1; -static gint ett_lrh = -1; -static gint ett_grh = -1; -static gint ett_bth = -1; -static gint ett_rwh = -1; -static gint ett_rawdata = -1; -static gint ett_rdeth = -1; -static gint ett_deth = -1; -static gint ett_reth = -1; -static gint ett_atomiceth = -1; -static gint ett_aeth = -1; -static gint ett_atomicacketh = -1; -static gint ett_immdt = -1; -static gint ett_ieth = -1; -static gint ett_payload = -1; -static gint ett_vendor = -1; -static gint ett_subn_lid_routed = -1; -static gint ett_subn_directed_route = -1; -static gint ett_subnadmin = -1; -static gint ett_mad = -1; -static gint ett_rmpp = -1; -static gint ett_subm_attribute = -1; -static gint ett_suba_attribute = -1; -static gint ett_datadetails = -1; -static gint ett_noticestraps = -1; -static gint ett_nodedesc = -1; -static gint ett_nodeinfo = -1; -static gint ett_switchinfo = -1; -static gint ett_guidinfo = -1; -static gint ett_portinfo = -1; -static gint ett_portinfo_capmask = -1; -static gint ett_pkeytable = -1; -static gint ett_sltovlmapping = -1; -static gint ett_vlarbitrationtable = -1; -static gint ett_linearforwardingtable = -1; -static gint ett_randomforwardingtable = -1; -static gint ett_multicastforwardingtable = -1; -static gint ett_sminfo = -1; -static gint ett_vendordiag = -1; -static gint ett_ledinfo = -1; -static gint ett_linkspeedwidthpairs = -1; -static gint ett_informinfo = -1; -static gint ett_linkrecord = -1; -static gint ett_servicerecord = -1; -static gint ett_pathrecord = -1; -static gint ett_mcmemberrecord = -1; -static gint ett_tracerecord = -1; -static gint ett_multipathrecord = -1; -static gint ett_serviceassocrecord = -1; - -/* Global ref to highest level tree should we find other protocols encapsulated in IB */ -static proto_tree *top_tree = NULL; - -/* MAD_Data -* Structure to hold information from the common MAD header. -* This is necessary because the MAD header contains information which significantly changes the dissection algorithm. */ -typedef struct { - guint8 managementClass; - guint8 classVersion; - guint8 method; - guint8 status; - guint16 classSpecific; - guint64 transactionID; - guint16 attributeID; - guint32 attributeModifier; - char data[232]; -} MAD_Data; - -/* Dissector Declarations */ -static dissector_handle_t ipv6_handle; -static dissector_handle_t data_handle; -static dissector_table_t ethertype_dissector_table; - -static void dissect_infiniband(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static gint32 find_next_header_sequence(guint32 OpCode); -static gboolean contains(guint32 value, guint32* arr, int length); -static void dissect_general_info(tvbuff_t *tvb, gint offset, packet_info *pinfo); - -/* Parsing Methods for specific IB headers. */ - -static void parse_VENDOR(proto_tree *, tvbuff_t *, gint *); -static void parse_PAYLOAD(proto_tree *, packet_info *, tvbuff_t *, gint *, gint length, guint8 virtualLane); -static void parse_IETH(proto_tree *, tvbuff_t *, gint *); -static void parse_IMMDT(proto_tree *, tvbuff_t *, gint *offset); -static void parse_ATOMICACKETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_AETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_ATOMICETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_RETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_DETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_RDETH(proto_tree *, tvbuff_t *, gint *offset); -static void parse_IPvSix(proto_tree *, tvbuff_t *, gint *offset, packet_info *); -static void parse_RWH(proto_tree *, tvbuff_t *, gint *offset, packet_info *); - -static void parse_SUBN_LID_ROUTED(proto_tree *, packet_info *, tvbuff_t *, gint *offset); -static void parse_SUBN_DIRECTED_ROUTE(proto_tree *, packet_info *, tvbuff_t *, gint *offset); -static void parse_SUBNADMN(proto_tree *, packet_info *, tvbuff_t *, gint *offset); -static void parse_PERF(proto_tree *, tvbuff_t *, gint *offset); -static void parse_BM(proto_tree *, tvbuff_t *, gint *offset); -static void parse_DEV_MGT(proto_tree *, tvbuff_t *, gint *offset); -static void parse_COM_MGT(proto_tree *, tvbuff_t *, gint *offset); -static void parse_SNMP(proto_tree *, tvbuff_t *, gint *offset); -static void parse_VENDOR_MANAGEMENT(proto_tree *, tvbuff_t *, gint *offset); -static void parse_APPLICATION_MANAGEMENT(proto_tree *, tvbuff_t *, gint *offset); -static void parse_RESERVED_MANAGEMENT(proto_tree *, tvbuff_t *, gint *offset); - -static gboolean parse_MAD_Common(proto_tree*, tvbuff_t*, gint *offset, MAD_Data*); -static gboolean parse_RMPP(proto_tree* , tvbuff_t* , gint *offset); -static void label_SUBM_Method(proto_item*, MAD_Data*, packet_info*); -static void label_SUBM_Attribute(proto_item*, MAD_Data*, packet_info*); -static void label_SUBA_Method(proto_item*, MAD_Data*, packet_info*); -static void label_SUBA_Attribute(proto_item*, MAD_Data*, packet_info*); - -/* Class Attribute Parsing Routines */ -static gboolean parse_SUBM_Attribute(proto_tree*, tvbuff_t*, gint *offset, MAD_Data*); -static gboolean parse_SUBA_Attribute(proto_tree*, tvbuff_t*, gint *offset, MAD_Data*); - -/* These methods parse individual attributes -* Naming convention FunctionHandle = "parse_" + [Attribute Name]; -* Where [Attribute Name] is the attribute identifier from chapter 14 of the IB Specification -* Subnet Management */ -static void parse_NoticesAndTraps(proto_tree*, tvbuff_t*, gint *offset); -static void parse_NodeDescription(proto_tree*, tvbuff_t*, gint *offset); -static void parse_NodeInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_SwitchInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_GUIDInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_PortInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_P_KeyTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_SLtoVLMappingTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_VLArbitrationTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_LinearForwardingTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_RandomForwardingTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_MulticastForwardingTable(proto_tree*, tvbuff_t*, gint *offset); -static void parse_SMInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_VendorDiag(proto_tree*, tvbuff_t*, gint *offset); -static void parse_LedInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_LinkSpeedWidthPairsTable(proto_tree*, tvbuff_t*, gint *offset); - -/* Subnet Administration */ -static void parse_InformInfo(proto_tree*, tvbuff_t*, gint *offset); -static void parse_LinkRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_ServiceRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_PathRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_MCMemberRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_TraceRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_MultiPathRecord(proto_tree*, tvbuff_t*, gint *offset); -static void parse_ServiceAssociationRecord(proto_tree*, tvbuff_t*, gint *offset); - -/* Subnet Administration */ -static void parse_RID(proto_tree*, tvbuff_t*, gint *offset, MAD_Data*); - -/* SM Methods */ -static const value_string SUBM_Methods[] = { - { 0x01, "SubnGet("}, - { 0x02, "SubnSet("}, - { 0x81, "SubnGetResp("}, - { 0x05, "SubnTrap("}, - { 0x07, "SubnTrapResp("}, - { 0, NULL} -}; -/* SM Attributes */ -static const value_string SUBM_Attributes[] = { - { 0x0001, "Attribute (ClassPortInfo)"}, - { 0x0002, "Attribute (Notice)"}, - { 0x0003, "Attribute (InformInfo)"}, - { 0x0010, "Attribute (NodeDescription)"}, - { 0x0011, "Attribute (NodeInfo)"}, - { 0x0012, "Attribute (SwitchInfo)"}, - { 0x0014, "Attribute (GUIDInfo)"}, - { 0x0015, "Attribute (PortInfo)"}, - { 0x0016, "Attribute (P_KeyTable)"}, - { 0x0017, "Attribute (SLtoVLMapptingTable)"}, - { 0x0018, "Attribute (VLArbitrationTable)"}, - { 0x0019, "Attribute (LinearForwardingTable)"}, - { 0x001A, "Attribute (RandomForwardingTable)"}, - { 0x001B, "Attribute (MulticastForwardingTable)"}, - { 0x001C, "Attribute (LinkSpeedWidthPairsTable)"}, - { 0x0020, "Attribute (SMInfo)"}, - { 0x0030, "Attribute (VendorDiag)"}, - { 0x0031, "Attribute (LedInfo)"}, - { 0, NULL} -}; - -/* SA Methods */ -static const value_string SUBA_Methods[] = { - { 0x01, "SubnAdmGet("}, - { 0x81, "SubnAdmGetResp("}, - { 0x02, "SubnAdmSet("}, - { 0x06, "SubnAdmReport("}, - { 0x86, "SubnAdmReportResp("}, - { 0x12, "SubnAdmGetTable("}, - { 0x92, "SubnAdmGetTableResp("}, - { 0x13, "SubnAdmGetTraceTable("}, - { 0x14, "SubnAdmGetMulti("}, - { 0x94, "SubnAdmGetMultiResp("}, - { 0x15, "SubnAdmDelete("}, - { 0x95, "SubnAdmDeleteResp("}, - { 0, NULL} -}; -/* SA Attributes */ -static const value_string SUBA_Attributes[] = { - { 0x0001, "Attribute (ClassPortInfo)"}, - { 0x0002, "Attribute (Notice)"}, - { 0x0003, "Attribute (InformInfo)"}, - { 0x0011, "Attribute (NodeRecord)"}, - { 0x0012, "Attribute (PortInfoRecord)"}, - { 0x0013, "Attribute (SLtoVLMappingTableRecord)"}, - { 0x0014, "Attribute (SwitchInfoRecord)"}, - { 0x0015, "Attribute (LinearForwardingTableRecord)"}, - { 0x0016, "Attribute (RandomForwardingTableRecord)"}, - { 0x0017, "Attribute (MulticastForwardingTableRecord)"}, - { 0x0018, "Attribute (SMInfoRecord)"}, - { 0x0019, "Attribute (LinkSpeedWidthPairsTableRecord)"}, - { 0x00F3, "Attribute (InformInfoRecord)"}, - { 0x0020, "Attribute (LinkRecord)"}, - { 0x0030, "Attribute (GuidInfoRecord)"}, - { 0x0031, "Attribute (ServiceRecord)"}, - { 0x0033, "Attribute (P_KeyTableRecord)"}, - { 0x0035, "Attribute (PathRecord)"}, - { 0x0036, "Attribute (VLArbitrationTableRecord)"}, - { 0x0038, "Attribute (MCMembersRecord)"}, - { 0x0039, "Attribute (TraceRecord)"}, - { 0x003A, "Attribute (MultiPathRecord)"}, - { 0x003B, "Attribute (ServiceAssociationRecord)"}, - { 0, NULL} -}; - - -/* RMPP Types */ -#define RMPP_ILLEGAL 0 -#define RMPP_DATA 1 -#define RMPP_ACK 2 -#define RMPP_STOP 3 -#define RMPP_ABORT 4 - -static const value_string RMPP_Packet_Types[] = { - { RMPP_ILLEGAL, " Illegal RMPP Type (0)! " }, - { RMPP_DATA, "RMPP (DATA)" }, - { RMPP_ACK, "RMPP (ACK)" }, - { RMPP_STOP, "RMPP (STOP)" }, - { RMPP_ABORT, "RMPP (ABORT)" }, - { 0, NULL} -}; - -static const value_string RMPP_Flags[] = { - { 3, " (Transmission Sequence - First Packet)"}, - { 5, " (Transmission Sequence - Last Packet)"}, - { 1, " (Transmission Sequence) " }, - { 0, NULL} -}; - -static const value_string RMPP_Status[]= { - { 0, " (Normal)"}, - { 1, " (Resources Exhausted)"}, - { 118, " (Total Time Too Long)"}, - { 119, " (Inconsistent Last and PayloadLength)"}, - { 120, " (Inconsistent First and Segment Number)"}, - { 121, " (Bad RMPPType)"}, - { 122, " (NewWindowLast Too Small)"}, - { 123, " (SegmentNumber Too Big)"}, - { 124, " (Illegal Status)"}, - { 125, " (Unsupported Version)"}, - { 126, " (Too Many Retries)"}, - { 127, " (Unspecified - Unknown Error Code on ABORT)"}, - { 0, NULL} -}; - -static const value_string DiagCode[]= { - {0x0000, "Function Ready"}, - {0x0001, "Performing Self Test"}, - {0x0002, "Initializing"}, - {0x0003, "Soft Error - Function has non-fatal error"}, - {0x0004, "Hard Error - Function has fatal error"}, - { 0, NULL} -}; -static const value_string LinkWidthEnabled[]= { - {0x0000, "No State Change"}, - {0x0001, "1x"}, - {0x0002, "4x"}, - {0x0003, "1x or 4x"}, - {0x0004, "8x"}, - {0x0005, "1x or 8x"}, - {0x0006, "4x or 8x"}, - {0x0007, "1x or 4x or 8x"}, - {0x0008, "12x"}, - {0x0009, "1x or 12x"}, - {0x000A, "4x or 12x"}, - {0x000B, "1x or 4x or 12x"}, - {0x000C, "8x or 12x"}, - {0x000D, "1x or 8x or 12x"}, - {0x000E, "4x or 8x or 12x"}, - {0x000E, "1x or 4x or 8x or 12x"}, - {0x00FF, "Set to LinkWidthSupported Value - Response contains actual LinkWidthSupported"}, - { 0, NULL} -}; - -static const value_string LinkWidthSupported[]= { - {0x0001, "1x"}, - {0x0003, "1x or 4x"}, - {0x0007, "1x or 4x or 8x"}, - {0x000B, "1x or 4x or 12x"}, - {0x000F, "1x or 4x or 8x or 12x"}, - { 0, NULL} -}; -static const value_string LinkWidthActive[]= { - {0x0001, "1x"}, - {0x0002, "4x"}, - {0x0004, "8x"}, - {0x0008, "12x"}, - { 0, NULL} -}; -static const value_string LinkSpeedSupported[]= { - {0x0001, "2.5 Gbps"}, - {0x0003, "2.5 or 5.0 Gbps"}, - {0x0005, "2.5 or 10.0 Gbps"}, - {0x0007, "2.5 or 5.0 or 10.0 Gbps"}, - { 0, NULL} -}; -static const value_string PortState[]= { - {0x0000, "No State Change"}, - {0x0001, "Down (includes failed links)"}, - {0x0002, "Initialized"}, - {0x0003, "Armed"}, - {0x0004, "Active"}, - { 0, NULL} -}; -static const value_string PortPhysicalState[]= { - {0x0000, "No State Change"}, - {0x0001, "Sleep"}, - {0x0002, "Polling"}, - {0x0003, "Disabled"}, - {0x0004, "PortConfigurationTraining"}, - {0x0005, "LinkUp"}, - {0x0006, "LinkErrorRecovery"}, - {0x0007, "Phy Test"}, - { 0, NULL} -}; -static const value_string LinkDownDefaultState[]= { - {0x0000, "No State Change"}, - {0x0001, "Sleep"}, - {0x0002, "Polling"}, - { 0, NULL} -}; -static const value_string LinkSpeedActive[]= { - {0x0001, "2.5 Gbps"}, - {0x0002, "5.0 Gbps"}, - {0x0004, "10.0 Gbps"}, - { 0, NULL} -}; -static const value_string LinkSpeedEnabled[]= { - {0x0000, "No State Change"}, - {0x0001, "2.5 Gbps"}, - {0x0003, "2.5 or 5.0 Gbps"}, - {0x0005, "2.5 or 10.0 Gbps"}, - {0x0007, "2.5 or 5.0 or 10.0 Gbps"}, - {0x000F, "Set to LinkSpeedSupported value - response contains actual LinkSpeedSupported"}, - { 0, NULL} -}; -static const value_string NeighborMTU[]= { - {0x0001, "256"}, - {0x0002, "512"}, - {0x0003, "1024"}, - {0x0004, "2048"}, - {0x0005, "4096"}, - { 0, NULL} -}; -static const value_string VLCap[]= { - {0x0001, "VL0"}, - {0x0002, "VL0, VL1"}, - {0x0003, "VL0 - VL3"}, - {0x0004, "VL0 - VL7"}, - {0x0005, "VL0 - VL14"}, - { 0, NULL} -}; -static const value_string MTUCap[]= { - {0x0001, "256"}, - {0x0002, "512"}, - {0x0003, "1024"}, - {0x0004, "2048"}, - {0x0005, "4096"}, - { 0, NULL} -}; -static const value_string OperationalVLs[]= { - {0x0000, "No State Change"}, - {0x0001, "VL0"}, - {0x0002, "VL0, VL1"}, - {0x0003, "VL0 - VL3"}, - {0x0004, "VL0 - VL7"}, - {0x0005, "VL0 - VL14"}, - { 0, NULL} -}; - -/* Local Route Header (LRH) */ -static int hf_infiniband_LRH = -1; -static int hf_infiniband_virtual_lane = -1; -static int hf_infiniband_link_version = -1; -static int hf_infiniband_service_level = -1; -static int hf_infiniband_reserved2 = -1; -static int hf_infiniband_link_next_header = -1; -static int hf_infiniband_destination_local_id = -1; -static int hf_infiniband_reserved5 = -1; -static int hf_infiniband_packet_length = -1; -static int hf_infiniband_source_local_id = -1; -/* Global Route Header (GRH) */ -static int hf_infiniband_GRH = -1; -static int hf_infiniband_ip_version = -1; -static int hf_infiniband_traffic_class = -1; -static int hf_infiniband_flow_label = -1; -static int hf_infiniband_payload_length = -1; -static int hf_infiniband_next_header = -1; -static int hf_infiniband_hop_limit = -1; -static int hf_infiniband_source_gid = -1; -static int hf_infiniband_destination_gid = -1; -/* Base Transport Header (BTH) */ -static int hf_infiniband_BTH = -1; -static int hf_infiniband_opcode = -1; -static int hf_infiniband_solicited_event = -1; -static int hf_infiniband_migreq = -1; -static int hf_infiniband_pad_count = -1; -static int hf_infiniband_transport_header_version = -1; -static int hf_infiniband_partition_key = -1; -static int hf_infiniband_reserved8 = -1; -static int hf_infiniband_destination_qp = -1; -static int hf_infiniband_acknowledge_request = -1; -static int hf_infiniband_reserved7 = -1; -static int hf_infiniband_packet_sequence_number = -1; -/* Raw Header (RWH) */ -static int hf_infiniband_RWH = -1; -static int hf_infiniband_reserved16_RWH = -1; -static int hf_infiniband_etype = -1; -/* Reliable Datagram Extended Transport Header (RDETH) */ -static int hf_infiniband_RDETH = -1; -static int hf_infiniband_reserved8_RDETH = -1; -static int hf_infiniband_ee_context = -1; -/* Datagram Extended Transport Header (DETH) */ -static int hf_infiniband_DETH = -1; -static int hf_infiniband_queue_key = -1; -static int hf_infiniband_reserved8_DETH = -1; -static int hf_infiniband_source_qp = -1; -/* RDMA Extended Transport Header (RETH) */ -static int hf_infiniband_RETH = -1; -static int hf_infiniband_virtual_address = -1; -static int hf_infiniband_remote_key = -1; -static int hf_infiniband_dma_length = -1; -/* Atomic Extended Transport Header (AtomicETH) */ -static int hf_infiniband_AtomicETH = -1; -static int hf_infiniband_virtual_address_AtomicETH = -1; -static int hf_infiniband_remote_key_AtomicETH = -1; -static int hf_infiniband_swap_or_add_data = -1; -static int hf_infiniband_compare_data = -1; -/* ACK Extended Transport Header (AETH) */ -static int hf_infiniband_AETH = -1; -static int hf_infiniband_syndrome = -1; -static int hf_infiniband_message_sequence_number = -1; -/* Atomic ACK Extended Transport Header (AtomicAckETH) */ -static int hf_infiniband_AtomicAckETH = -1; -static int hf_infiniband_original_remote_data = -1; -/* Immediate Extended Transport Header (ImmDt) */ -static int hf_infiniband_IMMDT = -1; -/* Invalidate Extended Transport Header (IETH) */ -static int hf_infiniband_IETH = -1; -/* Payload */ -static int hf_infiniband_payload = -1; -static int hf_infiniband_invariant_crc = -1; -static int hf_infiniband_variant_crc = -1; -/* Unknown or Vendor Specific */ -static int hf_infiniband_raw_data = -1; -static int hf_infiniband_vendor = -1; -/* MAD Base Header */ -static int hf_infiniband_MAD = -1; -static int hf_infiniband_base_version = -1; -static int hf_infiniband_mgmt_class = -1; -static int hf_infiniband_class_version = -1; -static int hf_infiniband_reserved1 = -1; -static int hf_infiniband_method = -1; -static int hf_infiniband_status = -1; -static int hf_infiniband_class_specific = -1; -static int hf_infiniband_transaction_id = -1; -static int hf_infiniband_attribute_id = -1; -static int hf_infiniband_reserved16 = -1; -static int hf_infiniband_attribute_modifier = -1; -static int hf_infiniband_data = -1; -/* RMPP Header */ -static int hf_infiniband_RMPP = -1; -static int hf_infiniband_rmpp_version = -1; -static int hf_infiniband_rmpp_type = -1; -static int hf_infiniband_r_resp_time = -1; -static int hf_infiniband_rmpp_flags = -1; -static int hf_infiniband_rmpp_status = -1; -static int hf_infiniband_rmpp_data1 = -1; -static int hf_infiniband_rmpp_data2 = -1; -/* RMPP Data */ -static int hf_infiniband_RMPP_DATA = -1; -static int hf_infiniband_segment_number = -1; -static int hf_infiniband_payload_length32 = -1; -static int hf_infiniband_transferred_data = -1; -/* RMPP ACK */ -static int hf_infiniband_new_window_last = -1; -static int hf_infiniband_reserved220 = -1; -/* RMPP ABORT and STOP */ -static int hf_infiniband_reserved32 = -1; -static int hf_infiniband_optional_extended_error_data = -1; -/* SMP Data LID Routed */ -static int hf_infiniband_SMP_LID = -1; -static int hf_infiniband_m_key = -1; -static int hf_infiniband_smp_data = -1; -static int hf_infiniband_reserved1024 = -1; -static int hf_infiniband_reserved256 = -1; -/* SMP Data Directed Route */ -static int hf_infiniband_SMP_DIRECTED = -1; -static int hf_infiniband_smp_status = -1; -static int hf_infiniband_hop_pointer = -1; -static int hf_infiniband_hop_count = -1; -static int hf_infiniband_dr_slid = -1; -static int hf_infiniband_dr_dlid = -1; -static int hf_infiniband_reserved28 = -1; -static int hf_infiniband_d = -1; -static int hf_infiniband_initial_path = -1; -static int hf_infiniband_return_path = -1; -/* SA MAD Header */ -static int hf_infiniband_SA = -1; -static int hf_infiniband_sm_key = -1; -static int hf_infiniband_attribute_offset = -1; -static int hf_infiniband_component_mask = -1; -static int hf_infiniband_subnet_admin_data = -1; - -/* Attributes -* Additional Structures for individuala attribute decoding. -* Since they are not headers the naming convention is slightly modified -* Convention: hf_infiniband_[attribute name]_[field] -* This was not entirely necessary but I felt the previous convention -* did not provide adequate readability for the granularity of attribute/attribute fields. */ - -/* NodeDescription */ -static int hf_infiniband_NodeDescription_NodeString = -1; -/* NodeInfo */ -static int hf_infiniband_NodeInfo_BaseVersion = -1; -static int hf_infiniband_NodeInfo_ClassVersion = -1; -static int hf_infiniband_NodeInfo_NodeType = -1; -static int hf_infiniband_NodeInfo_NumPorts = -1; -static int hf_infiniband_NodeInfo_SystemImageGUID = -1; -static int hf_infiniband_NodeInfo_NodeGUID = -1; -static int hf_infiniband_NodeInfo_PortGUID = -1; -static int hf_infiniband_NodeInfo_PartitionCap = -1; -static int hf_infiniband_NodeInfo_DeviceID = -1; -static int hf_infiniband_NodeInfo_Revision = -1; -static int hf_infiniband_NodeInfo_LocalPortNum = -1; -static int hf_infiniband_NodeInfo_VendorID = -1; -/* SwitchInfo */ -static int hf_infiniband_SwitchInfo_LinearFDBCap = -1; -static int hf_infiniband_SwitchInfo_RandomFDBCap = -1; -static int hf_infiniband_SwitchInfo_MulticastFDBCap = -1; -static int hf_infiniband_SwitchInfo_LinearFDBTop = -1; -static int hf_infiniband_SwitchInfo_DefaultPort = -1; -static int hf_infiniband_SwitchInfo_DefaultMulticastPrimaryPort = -1; -static int hf_infiniband_SwitchInfo_DefaultMulticastNotPrimaryPort = -1; -static int hf_infiniband_SwitchInfo_LifeTimeValue = -1; -static int hf_infiniband_SwitchInfo_PortStateChange = -1; -static int hf_infiniband_SwitchInfo_OptimizedSLtoVLMappingProgramming = -1; -static int hf_infiniband_SwitchInfo_LIDsPerPort = -1; -static int hf_infiniband_SwitchInfo_PartitionEnforcementCap = -1; -static int hf_infiniband_SwitchInfo_InboundEnforcementCap = -1; -static int hf_infiniband_SwitchInfo_OutboundEnforcementCap = -1; -static int hf_infiniband_SwitchInfo_FilterRawInboundCap = -1; -static int hf_infiniband_SwitchInfo_FilterRawOutboundCap = -1; -static int hf_infiniband_SwitchInfo_EnhancedPortZero = -1; -/* GUIDInfo */ -static int hf_infiniband_GUIDInfo_GUIDBlock = -1; -static int hf_infiniband_GUIDInfo_GUID = -1; -/* PortInfo */ -static int hf_infiniband_PortInfo_GidPrefix = -1; -static int hf_infiniband_PortInfo_LID = -1; -static int hf_infiniband_PortInfo_MasterSMLID = -1; -static int hf_infiniband_PortInfo_CapabilityMask = -1; - -/* Capability Mask Flags */ -static int hf_infiniband_PortInfo_CapabilityMask_SM; -static int hf_infiniband_PortInfo_CapabilityMask_NoticeSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_TrapSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_OptionalPDSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_AutomaticMigrationSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_SLMappingSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_MKeyNVRAM = -1; -static int hf_infiniband_PortInfo_CapabilityMask_PKeyNVRAM = -1; -static int hf_infiniband_PortInfo_CapabilityMask_LEDInfoSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_SMdisabled = -1; -static int hf_infiniband_PortInfo_CapabilityMask_SystemImageGUIDSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_PKeySwitchExternalPortTrapSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_CommunicationsManagementSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_SNMPTunnelingSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_ReinitSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_DeviceManagementSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_VendorClassSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_DRNoticeSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_CapabilityMaskNoticeSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_BootManagementSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_LinkRoundTripLatencySupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_ClientRegistrationSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_OtherLocalChangesNoticeSupported = -1; -static int hf_infiniband_PortInfo_CapabilityMask_LinkSpeedWIdthPairsTableSupported = -1; -/* End Capability Mask Flags */ - - -static int hf_infiniband_PortInfo_DiagCode = -1; -static int hf_infiniband_PortInfo_M_KeyLeasePeriod = -1; -static int hf_infiniband_PortInfo_LocalPortNum = -1; -static int hf_infiniband_PortInfo_LinkWidthEnabled = -1; -static int hf_infiniband_PortInfo_LinkWidthSupported = -1; -static int hf_infiniband_PortInfo_LinkWidthActive = -1; -static int hf_infiniband_PortInfo_LinkSpeedSupported = -1; -static int hf_infiniband_PortInfo_PortState = -1; -static int hf_infiniband_PortInfo_PortPhysicalState = -1; -static int hf_infiniband_PortInfo_LinkDownDefaultState = -1; -static int hf_infiniband_PortInfo_M_KeyProtectBits = -1; -static int hf_infiniband_PortInfo_LMC = -1; -static int hf_infiniband_PortInfo_LinkSpeedActive = -1; -static int hf_infiniband_PortInfo_LinkSpeedEnabled = -1; -static int hf_infiniband_PortInfo_NeighborMTU = -1; -static int hf_infiniband_PortInfo_MasterSMSL = -1; -static int hf_infiniband_PortInfo_VLCap = -1; -static int hf_infiniband_PortInfo_M_Key = -1; -static int hf_infiniband_PortInfo_InitType = -1; -static int hf_infiniband_PortInfo_VLHighLimit = -1; -static int hf_infiniband_PortInfo_VLArbitrationHighCap = -1; -static int hf_infiniband_PortInfo_VLArbitrationLowCap = -1; -static int hf_infiniband_PortInfo_InitTypeReply = -1; -static int hf_infiniband_PortInfo_MTUCap = -1; -static int hf_infiniband_PortInfo_VLStallCount = -1; -static int hf_infiniband_PortInfo_HOQLife = -1; -static int hf_infiniband_PortInfo_OperationalVLs = -1; -static int hf_infiniband_PortInfo_PartitionEnforcementInbound = -1; -static int hf_infiniband_PortInfo_PartitionEnforcementOutbound = -1; -static int hf_infiniband_PortInfo_FilterRawInbound = -1; -static int hf_infiniband_PortInfo_FilterRawOutbound = -1; -static int hf_infiniband_PortInfo_M_KeyViolations = -1; -static int hf_infiniband_PortInfo_P_KeyViolations = -1; -static int hf_infiniband_PortInfo_Q_KeyViolations = -1; -static int hf_infiniband_PortInfo_GUIDCap = -1; -static int hf_infiniband_PortInfo_ClientReregister = -1; -static int hf_infiniband_PortInfo_SubnetTimeOut = -1; -static int hf_infiniband_PortInfo_RespTimeValue = -1; -static int hf_infiniband_PortInfo_LocalPhyErrors = -1; -static int hf_infiniband_PortInfo_OverrunErrors = -1; -static int hf_infiniband_PortInfo_MaxCreditHint = -1; -static int hf_infiniband_PortInfo_LinkRoundTripLatency = -1; - -/* P_KeyTable */ -static int hf_infiniband_P_KeyTable_P_KeyTableBlock = -1; -static int hf_infiniband_P_KeyTable_MembershipType = -1; -static int hf_infiniband_P_KeyTable_P_KeyBase = -1; - -/* SLtoVLMappingTable */ -static int hf_infiniband_SLtoVLMappingTable_SLtoVL_HighBits = -1; -static int hf_infiniband_SLtoVLMappingTable_SLtoVL_LowBits = -1; - -/* VLArbitrationTable */ -static int hf_infiniband_VLArbitrationTable_VLWeightPairs = -1; -static int hf_infiniband_VLArbitrationTable_VL = -1; -static int hf_infiniband_VLArbitrationTable_Weight = -1; - -/* LinearForwardingTable */ -static int hf_infiniband_LinearForwardingTable_LinearForwardingTableBlock = -1; -static int hf_infiniband_LinearForwardingTable_Port = -1; - -/* RandomForwardingTable */ -static int hf_infiniband_RandomForwardingTable_RandomForwardingTableBlock = -1; -static int hf_infiniband_RandomForwardingTable_LID = -1; -static int hf_infiniband_RandomForwardingTable_Valid = -1; -static int hf_infiniband_RandomForwardingTable_LMC = -1; -static int hf_infiniband_RandomForwardingTable_Port = -1; - -/* MulticastForwardingTable */ -static int hf_infiniband_MulticastForwardingTable_MulticastForwardingTableBlock = -1; -static int hf_infiniband_MulticastForwardingTable_PortMask = -1; - -/* SMInfo */ -static int hf_infiniband_SMInfo_GUID = -1; -static int hf_infiniband_SMInfo_SM_Key = -1; -static int hf_infiniband_SMInfo_ActCount = -1; -static int hf_infiniband_SMInfo_Priority = -1; -static int hf_infiniband_SMInfo_SMState = -1; - -/* VendorDiag */ -static int hf_infiniband_VendorDiag_NextIndex = -1; -static int hf_infiniband_VendorDiag_DiagData = -1; - -/* LedInfo */ -static int hf_infiniband_LedInfo_LedMask = -1; - -/* LinkSpeedWidthPairsTable */ -static int hf_infiniband_LinkSpeedWidthPairsTable_NumTables = -1; -static int hf_infiniband_LinkSpeedWidthPairsTable_PortMask = -1; -static int hf_infiniband_LinkSpeedWidthPairsTable_SpeedTwoFive = -1; -static int hf_infiniband_LinkSpeedWidthPairsTable_SpeedFive = -1; -static int hf_infiniband_LinkSpeedWidthPairsTable_SpeedTen = -1; - -/* Attributes for Subnet Administration. -* Mostly we have "Records" here which are just structures of SM attributes. -* There are some unique attributes though that we will want to have a structure for. */ - -/* NodeRecord */ -/* PortInfoRecord */ -/* SLtoVLMappingTableRecord */ -/* SwitchInfoRecord */ -/* LinearForwardingTableRecord */ -/* RandomForwardingTableRecord */ -/* MulticastForwardingTableRecord */ -/* VLArbitrationTableRecord */ - -static int hf_infiniband_SA_LID = -1; -static int hf_infiniband_SA_EndportLID = -1; -static int hf_infiniband_SA_PortNum = -1; -static int hf_infiniband_SA_InputPortNum = -1; -static int hf_infiniband_SA_OutputPortNum = -1; -static int hf_infiniband_SA_BlockNum_EightBit = -1; -static int hf_infiniband_SA_BlockNum_NineBit = -1; -static int hf_infiniband_SA_BlockNum_SixteenBit = -1; -static int hf_infiniband_SA_Position = -1; -static int hf_infiniband_SA_Index = -1; - -/* InformInfoRecord */ -static int hf_infiniband_InformInfoRecord_SubscriberGID = -1; -static int hf_infiniband_InformInfoRecord_Enum = -1; - -/* InformInfo */ -static int hf_infiniband_InformInfo_GID = -1; -static int hf_infiniband_InformInfo_LIDRangeBegin = -1; -static int hf_infiniband_InformInfo_LIDRangeEnd = -1; -static int hf_infiniband_InformInfo_IsGeneric = -1; -static int hf_infiniband_InformInfo_Subscribe = -1; -static int hf_infiniband_InformInfo_Type = -1; -static int hf_infiniband_InformInfo_TrapNumberDeviceID = -1; -static int hf_infiniband_InformInfo_QPN = -1; -static int hf_infiniband_InformInfo_RespTimeValue = -1; -static int hf_infiniband_InformInfo_ProducerTypeVendorID = -1; - -/* LinkRecord */ -static int hf_infiniband_LinkRecord_FromLID = -1; -static int hf_infiniband_LinkRecord_FromPort = -1; -static int hf_infiniband_LinkRecord_ToPort = -1; -static int hf_infiniband_LinkRecord_ToLID = -1; - -/* ServiceRecord */ -static int hf_infiniband_ServiceRecord_ServiceID = -1; -static int hf_infiniband_ServiceRecord_ServiceGID = -1; -static int hf_infiniband_ServiceRecord_ServiceP_Key = -1; -static int hf_infiniband_ServiceRecord_ServiceLease = -1; -static int hf_infiniband_ServiceRecord_ServiceKey = -1; -static int hf_infiniband_ServiceRecord_ServiceName = -1; -static int hf_infiniband_ServiceRecord_ServiceData = -1; - -/* ServiceAssociationRecord */ -static int hf_infiniband_ServiceAssociationRecord_ServiceKey = -1; -static int hf_infiniband_ServiceAssociationRecord_ServiceName = -1; - -/* PathRecord */ -static int hf_infiniband_PathRecord_DGID = -1; -static int hf_infiniband_PathRecord_SGID = -1; -static int hf_infiniband_PathRecord_DLID = -1; -static int hf_infiniband_PathRecord_SLID = -1; -static int hf_infiniband_PathRecord_RawTraffic = -1; -static int hf_infiniband_PathRecord_FlowLabel = -1; -static int hf_infiniband_PathRecord_HopLimit = -1; -static int hf_infiniband_PathRecord_TClass = -1; -static int hf_infiniband_PathRecord_Reversible = -1; -static int hf_infiniband_PathRecord_NumbPath = -1; -static int hf_infiniband_PathRecord_P_Key = -1; -static int hf_infiniband_PathRecord_SL = -1; -static int hf_infiniband_PathRecord_MTUSelector = -1; -static int hf_infiniband_PathRecord_MTU = -1; -static int hf_infiniband_PathRecord_RateSelector = -1; -static int hf_infiniband_PathRecord_Rate = -1; -static int hf_infiniband_PathRecord_PacketLifeTimeSelector = -1; -static int hf_infiniband_PathRecord_PacketLifeTime = -1; -static int hf_infiniband_PathRecord_Preference = -1; - -/* MCMemberRecord */ -static int hf_infiniband_MCMemberRecord_MGID = -1; -static int hf_infiniband_MCMemberRecord_PortGID = -1; -static int hf_infiniband_MCMemberRecord_Q_Key = -1; -static int hf_infiniband_MCMemberRecord_MLID = -1; -static int hf_infiniband_MCMemberRecord_MTUSelector = -1; -static int hf_infiniband_MCMemberRecord_MTU = -1; -static int hf_infiniband_MCMemberRecord_TClass = -1; -static int hf_infiniband_MCMemberRecord_P_Key = -1; -static int hf_infiniband_MCMemberRecord_RateSelector = -1; -static int hf_infiniband_MCMemberRecord_Rate = -1; -static int hf_infiniband_MCMemberRecord_PacketLifeTimeSelector = -1; -static int hf_infiniband_MCMemberRecord_PacketLifeTime = -1; -static int hf_infiniband_MCMemberRecord_SL = -1; -static int hf_infiniband_MCMemberRecord_FlowLabel = -1; -static int hf_infiniband_MCMemberRecord_HopLimit = -1; -static int hf_infiniband_MCMemberRecord_Scope = -1; -static int hf_infiniband_MCMemberRecord_JoinState = -1; -static int hf_infiniband_MCMemberRecord_ProxyJoin = -1; - -/* TraceRecord */ -static int hf_infiniband_TraceRecord_GIDPrefix = -1; -static int hf_infiniband_TraceRecord_IDGeneration = -1; -static int hf_infiniband_TraceRecord_NodeType = -1; -static int hf_infiniband_TraceRecord_NodeID = -1; -static int hf_infiniband_TraceRecord_ChassisID = -1; -static int hf_infiniband_TraceRecord_EntryPortID = -1; -static int hf_infiniband_TraceRecord_ExitPortID = -1; -static int hf_infiniband_TraceRecord_EntryPort = -1; -static int hf_infiniband_TraceRecord_ExitPort = -1; - -/* MultiPathRecord */ -static int hf_infiniband_MultiPathRecord_RawTraffic = -1; -static int hf_infiniband_MultiPathRecord_FlowLabel = -1; -static int hf_infiniband_MultiPathRecord_HopLimit = -1; -static int hf_infiniband_MultiPathRecord_TClass = -1; -static int hf_infiniband_MultiPathRecord_Reversible = -1; -static int hf_infiniband_MultiPathRecord_NumbPath = -1; -static int hf_infiniband_MultiPathRecord_P_Key = -1; -static int hf_infiniband_MultiPathRecord_SL = -1; -static int hf_infiniband_MultiPathRecord_MTUSelector = -1; -static int hf_infiniband_MultiPathRecord_MTU = -1; -static int hf_infiniband_MultiPathRecord_RateSelector = -1; -static int hf_infiniband_MultiPathRecord_Rate = -1; -static int hf_infiniband_MultiPathRecord_PacketLifeTimeSelector = -1; -static int hf_infiniband_MultiPathRecord_PacketLifeTime = -1; -static int hf_infiniband_MultiPathRecord_IndependenceSelector = -1; -static int hf_infiniband_MultiPathRecord_GIDScope = -1; -static int hf_infiniband_MultiPathRecord_SGIDCount = -1; -static int hf_infiniband_MultiPathRecord_DGIDCount = -1; -static int hf_infiniband_MultiPathRecord_SDGID = -1; - -/* Notice */ -static int hf_infiniband_Notice_IsGeneric = -1; -static int hf_infiniband_Notice_Type = -1; -static int hf_infiniband_Notice_ProducerTypeVendorID = -1; -static int hf_infiniband_Notice_TrapNumberDeviceID = -1; -static int hf_infiniband_Notice_IssuerLID = -1; -static int hf_infiniband_Notice_NoticeToggle = -1; -static int hf_infiniband_Notice_NoticeCount = -1; -static int hf_infiniband_Notice_DataDetails = -1; -static int hf_infiniband_Notice_IssuerGID = -1; -static int hf_infiniband_Notice_ClassTrapSpecificData = -1; - -/* Notice DataDetails and ClassTrapSpecific Data for certain traps -* Note that traps reuse many fields, so they are only declared once under the first trap that they appear. -* There is no need to redeclare them for specific Traps (as with other SA Attributes) because they are uniform between Traps. */ - -/* Parse DataDetails for a given Trap */ -static void parse_NoticeDataDetails(proto_tree*, tvbuff_t*, gint *offset, guint16 trapNumber); - -/* Traps 64,65,66,67 */ -static int hf_infiniband_Trap_GIDADDR = -1; - -/* Traps 68,69 */ -/* DataDetails */ -static int hf_infiniband_Trap_COMP_MASK = -1; -static int hf_infiniband_Trap_WAIT_FOR_REPATH = -1; -/* ClassTrapSpecificData */ -static int hf_infiniband_Trap_PATH_REC = -1; - -/* Trap 128 */ -static int hf_infiniband_Trap_LIDADDR = -1; - -/* Trap 129, 130, 131 */ -static int hf_infiniband_Trap_PORTNO = -1; - -/* Trap 144 */ -static int hf_infiniband_Trap_OtherLocalChanges = -1; -static int hf_infiniband_Trap_CAPABILITYMASK = -1; -static int hf_infiniband_Trap_LinkSpeecEnabledChange = -1; -static int hf_infiniband_Trap_LinkWidthEnabledChange = -1; -static int hf_infiniband_Trap_NodeDescriptionChange = -1; - -/* Trap 145 */ -static int hf_infiniband_Trap_SYSTEMIMAGEGUID = -1; - -/* Trap 256 */ -static int hf_infiniband_Trap_DRSLID = -1; -static int hf_infiniband_Trap_METHOD = -1; -static int hf_infiniband_Trap_ATTRIBUTEID = -1; -static int hf_infiniband_Trap_ATTRIBUTEMODIFIER = -1; -static int hf_infiniband_Trap_MKEY = -1; -static int hf_infiniband_Trap_DRNotice = -1; -static int hf_infiniband_Trap_DRPathTruncated = -1; -static int hf_infiniband_Trap_DRHopCount = -1; -static int hf_infiniband_Trap_DRNoticeReturnPath = -1; - -/* Trap 257, 258 */ -static int hf_infiniband_Trap_LIDADDR1 = -1; -static int hf_infiniband_Trap_LIDADDR2 = -1; -static int hf_infiniband_Trap_KEY = -1; -static int hf_infiniband_Trap_SL = -1; -static int hf_infiniband_Trap_QP1 = -1; -static int hf_infiniband_Trap_QP2 = -1; -static int hf_infiniband_Trap_GIDADDR1 = -1; -static int hf_infiniband_Trap_GIDADDR2 = -1; - -/* Trap 259 */ -static int hf_infiniband_Trap_DataValid = -1; -static int hf_infiniband_Trap_PKEY = -1; -static int hf_infiniband_Trap_SWLIDADDR = -1; - -/* Trap Type/Descriptions for dissection */ -static const value_string Trap_Description[]= { - { 64, " (Informational) <GIDADDR> is now in service"}, - { 65, " (Informational) <GIDADDR> is out of service"}, - { 66, " (Informational) New Multicast Group with multicast address <GIDADDR> is now created"}, - { 67, " (Informational) Multicast Group with multicast address <GIDADDR> is now deleted"}, - { 68, " (Informational) Paths indicated by <PATH_REC> and <COMP_MASK> are no longer valid"}, - { 69, " (Informational) Paths indicated by <PATH_REC> and <COMP_MASK> have been recomputed"}, - { 128, " (Urgent) Link State of at least one port of switch at <LIDADDR> has changed"}, - { 129, " (Urgent) Local Link Integrity threshold reached at <LIDADDR><PORTNO>"}, - { 130, " (Urgent) Excessive Buffer OVerrun threshold reached at <LIDADDR><PORTNO>"}, - { 131, " (Urgent) Flow Control Update watchdog timer expired at <LIDADDR><PORTNO>"}, - { 144, " (Informational) CapMask, NodeDesc, LinkWidthEnabled or LinkSpeedEnabled at <LIDADDR> has been modified"}, - { 145, " (Informational) SystemImageGUID at <LIDADDR> has been modified. New value is <SYSTEMIMAGEGUID>"}, - { 256, " (Security) Bad M_Key, <M_KEY> from <LIDADDR> attempted <METHOD> with <ATTRIBUTEID> and <ATTRIBUTEMODIFIER>"}, - { 257, " (Security) Bad P_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL>"}, - { 258, " (Security) Bad Q_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL>"}, - { 259, " (Security) Bad P_Key, <KEY> from <LIDADDR1><GIDADDR1><QP1> to <LIDADDR2><GIDADDR2><QP2> on <SL> at switch <LIDADDR><PORTNO>"}, - { 0, NULL} -}; - - - - -/* MAD Management Classes -* Classes from the Common MAD Header -* -* Management Class Name Class Description -* ------------------------------------------------------------------------------------------------------------ */ -#define SUBN_LID_ROUTED 0x01 /* Subnet Management LID Route */ -#define SUBN_DIRECTED_ROUTE 0x81 /* Subnet Management Directed Route */ -#define SUBNADMN 0x03 /* Subnet Administration */ -#define PERF 0x04 /* Performance Management */ -#define BM 0x05 /* Baseboard Management (Tunneling of IB-ML commands through the IBA subnet) */ -#define DEV_MGT 0x06 /* Device Management */ -#define COM_MGT 0x07 /* Communications Management */ -#define SNMP 0x08 /* SNMP Tunneling (tunneling of the SNMP protocol through the IBA fabric) */ -#define VENDOR_1_START 0x09 /* Start of first Vendor Specific Range */ -#define VENDOR_1_END 0x0F /* End of first Vendor Specific Range */ -#define VENDOR_2_START 0x30 /* Start of second Vendor Specific Range */ -#define VENDOR_2_END 0x4F /* End of the second Vendor Specific Range */ -#define APPLICATION_START 0x10 /* Start of Application Specific Range */ -#define APPLICATION_END 0x2F /* End of Application Specific Range */ - -/* Link Next Header Values */ -#define IBA_GLOBAL 3 -#define IBA_LOCAL 2 -#define IP_NON_IBA 1 -#define RAW 0 - -/* OpCodeValues -* Code Bits [7-5] Connection Type -* [4-0] Message Type - -* Reliable Connection (RC) -* [7-5] = 000 */ -#define RC_SEND_FIRST 0 /*0x00000000 */ -#define RC_SEND_MIDDLE 1 /*0x00000001 */ -#define RC_SEND_LAST 2 /*0x00000010 */ -#define RC_SEND_LAST_IMM 3 /*0x00000011 */ -#define RC_SEND_ONLY 4 /*0x00000100 */ -#define RC_SEND_ONLY_IMM 5 /*0x00000101 */ -#define RC_RDMA_WRITE_FIRST 6 /*0x00000110 */ -#define RC_RDMA_WRITE_MIDDLE 7 /*0x00000111 */ -#define RC_RDMA_WRITE_LAST 8 /*0x00001000 */ -#define RC_RDMA_WRITE_LAST_IMM 9 /*0x00001001 */ -#define RC_RDMA_WRITE_ONLY 10 /*0x00001010 */ -#define RC_RDMA_WRITE_ONLY_IMM 11 /*0x00001011 */ -#define RC_RDMA_READ_REQUEST 12 /*0x00001100 */ -#define RC_RDMA_READ_RESPONSE_FIRST 13 /*0x00001101 */ -#define RC_RDMA_READ_RESPONSE_MIDDLE 14 /*0x00001110 */ -#define RC_RDMA_READ_RESPONSE_LAST 15 /*0x00001111 */ -#define RC_RDMA_READ_RESPONSE_ONLY 16 /*0x00010000 */ -#define RC_ACKNOWLEDGE 17 /*0x00010001 */ -#define RC_ATOMIC_ACKNOWLEDGE 18 /*0x00010010 */ -#define RC_CMP_SWAP 19 /*0x00010011 */ -#define RC_FETCH_ADD 20 /*0x00010100 */ -#define RC_SEND_LAST_INVAL 22 /*0x00010110 */ -#define RC_SEND_ONLY_INVAL 23 /*0x00010111 */ - -/* Reliable Datagram (RD) -* [7-5] = 010 */ -#define RD_SEND_FIRST 64 /*0x01000000 */ -#define RD_SEND_MIDDLE 65 /*0x01000001 */ -#define RD_SEND_LAST 66 /*0x01000010 */ -#define RD_SEND_LAST_IMM 67 /*0x01000011 */ -#define RD_SEND_ONLY 68 /*0x01000100 */ -#define RD_SEND_ONLY_IMM 69 /*0x01000101 */ -#define RD_RDMA_WRITE_FIRST 70 /*0x01000110 */ -#define RD_RDMA_WRITE_MIDDLE 71 /*0x01000111 */ -#define RD_RDMA_WRITE_LAST 72 /*0x01001000 */ -#define RD_RDMA_WRITE_LAST_IMM 73 /*0x01001001 */ -#define RD_RDMA_WRITE_ONLY 74 /*0x01001010 */ -#define RD_RDMA_WRITE_ONLY_IMM 75 /*0x01001011 */ -#define RD_RDMA_READ_REQUEST 76 /*0x01001100 */ -#define RD_RDMA_READ_RESPONSE_FIRST 77 /*0x01001101 */ -#define RD_RDMA_READ_RESPONSE_MIDDLE 78 /*0x01001110 */ -#define RD_RDMA_READ_RESPONSE_LAST 79 /*0x01001111 */ -#define RD_RDMA_READ_RESPONSE_ONLY 80 /*0x01010000 */ -#define RD_ACKNOWLEDGE 81 /*0x01010001 */ -#define RD_ATOMIC_ACKNOWLEDGE 82 /*0x01010010 */ -#define RD_CMP_SWAP 83 /*0x01010011 */ -#define RD_FETCH_ADD 84 /*0x01010100 */ -#define RD_RESYNC 85 /*0x01010101 */ - -/* Unreliable Datagram (UD) -* [7-5] = 011 */ -#define UD_SEND_ONLY 100 /*0x01100100 */ -#define UD_SEND_ONLY_IMM 101 /*0x01100101 */ - -/* Unreliable Connection (UC) -* [7-5] = 001 */ -#define UC_SEND_FIRST 32 /*0x00100000 */ -#define UC_SEND_MIDDLE 33 /*0x00100001 */ -#define UC_SEND_LAST 34 /*0x00100010 */ -#define UC_SEND_LAST_IMM 35 /*0x00100011 */ -#define UC_SEND_ONLY 36 /*0x00100100 */ -#define UC_SEND_ONLY_IMM 37 /*0x00100101 */ -#define UC_RDMA_WRITE_FIRST 38 /*0x00100110 */ -#define UC_RDMA_WRITE_MIDDLE 39 /*0x00100111 */ -#define UC_RDMA_WRITE_LAST 40 /*0x00101000 */ -#define UC_RDMA_WRITE_LAST_IMM 41 /*0x00101001 */ -#define UC_RDMA_WRITE_ONLY 42 /*0x00101010 */ -#define UC_RDMA_WRITE_ONLY_IMM 43 /*0x00101011 */ - -static value_string OpCodeMap[] = -{ - { RC_SEND_FIRST, "RC Send First " }, - { RC_SEND_MIDDLE, "RC Send Middle "}, - { RC_SEND_LAST, "RC Send Last " }, - { RC_SEND_LAST_IMM, "RC Send Last Immediate "}, - { RC_SEND_ONLY, "RC Send Only "}, - { RC_SEND_ONLY_IMM, "RC Send Only Immediate "}, - { RC_RDMA_WRITE_FIRST, "RC RDMA Write First " }, - { RC_RDMA_WRITE_MIDDLE, "RC RDMA Write Middle "}, - { RC_RDMA_WRITE_LAST, "RC RDMA Write Last "}, - { RC_RDMA_WRITE_LAST_IMM, "RC RDMA Write Last Immediate " }, - { RC_RDMA_WRITE_ONLY, "RC RDMA Write Only " }, - { RC_RDMA_WRITE_ONLY_IMM, "RC RDMA Write Only Immediate "}, - { RC_RDMA_READ_REQUEST, "RC RDMA Read Request " }, - { RC_RDMA_READ_RESPONSE_FIRST, "RC RDMA Read Response First " }, - { RC_RDMA_READ_RESPONSE_MIDDLE, "RC RDMA Read Response Middle "}, - { RC_RDMA_READ_RESPONSE_LAST, "RC RDMA Read Response Last " }, - { RC_RDMA_READ_RESPONSE_ONLY, "RC RDMA Read Response Only "}, - { RC_ACKNOWLEDGE, "RC Acknowledge " }, - { RC_ATOMIC_ACKNOWLEDGE, "RC Atomic Acknowledge " }, - { RC_CMP_SWAP, "RC Compare Swap " }, - { RC_FETCH_ADD, "RC Fetch Add "}, - { RC_SEND_LAST_INVAL, "RC Send Last Invalidate "}, - { RC_SEND_ONLY_INVAL, "RC Send Only Invalidate " }, - - - { RD_SEND_FIRST, "RD Send First "}, - { RD_SEND_MIDDLE,"RD Send Middle " }, - { RD_SEND_LAST, "RD Send Last "}, - { RD_SEND_LAST_IMM, "RD Last Immediate " }, - { RD_SEND_ONLY,"RD Send Only "}, - { RD_SEND_ONLY_IMM,"RD Send Only Immediate "}, - { RD_RDMA_WRITE_FIRST,"RD RDMA Write First "}, - { RD_RDMA_WRITE_MIDDLE, "RD RDMA Write Middle "}, - { RD_RDMA_WRITE_LAST,"RD RDMA Write Last "}, - { RD_RDMA_WRITE_LAST_IMM,"RD RDMA Write Last Immediate "}, - { RD_RDMA_WRITE_ONLY,"RD RDMA Write Only "}, - { RD_RDMA_WRITE_ONLY_IMM,"RD RDMA Write Only Immediate "}, - { RD_RDMA_READ_REQUEST,"RD RDMA Read Request "}, - { RD_RDMA_READ_RESPONSE_FIRST,"RD RDMA Read Response First "}, - { RD_RDMA_READ_RESPONSE_MIDDLE,"RD RDMA Read Response Middle "}, - { RD_RDMA_READ_RESPONSE_LAST,"RD RDMA Read Response Last "}, - { RD_RDMA_READ_RESPONSE_ONLY,"RD RDMA Read Response Only "}, - { RD_ACKNOWLEDGE,"RD Acknowledge "}, - { RD_ATOMIC_ACKNOWLEDGE,"RD Atomic Acknowledge "}, - { RD_CMP_SWAP,"RD Compare Swap "}, - { RD_FETCH_ADD, "RD Fetch Add "}, - { RD_RESYNC,"RD RESYNC "}, - - - { UD_SEND_ONLY, "UD Send Only "}, - { UD_SEND_ONLY_IMM, "UD Send Only Immediate "}, - - - { UC_SEND_FIRST,"UC Send First "}, - { UC_SEND_MIDDLE,"UC Send Middle "}, - { UC_SEND_LAST,"UC Send Last "}, - { UC_SEND_LAST_IMM,"UC Send Last Immediate "}, - { UC_SEND_ONLY,"UC Send Only "}, - { UC_SEND_ONLY_IMM,"UC Send Only Immediate "}, - { UC_RDMA_WRITE_FIRST,"UC RDMA Write First"}, - { UC_RDMA_WRITE_MIDDLE,"Unreliable Connection RDMA Write Middle "}, - { UC_RDMA_WRITE_LAST,"UC RDMA Write Last "}, - { UC_RDMA_WRITE_LAST_IMM,"UC RDMA Write Last Immediate "}, - { UC_RDMA_WRITE_ONLY,"UC RDMA Write Only "}, - { UC_RDMA_WRITE_ONLY_IMM,"UC RDMA Write Only Immediate "}, - { 0, NULL} - -}; - - - -/* Header Ordering Based on OPCODES -* These are simply an enumeration of the possible header combinations defined by the IB Spec. -* These enumerations -* #DEFINE [HEADER_ORDER] [ENUM] -* __________________________________ */ -#define RDETH_DETH_PAYLD 0 -/* __________________________________ */ -#define RDETH_DETH_RETH_PAYLD 1 -/* __________________________________ */ -#define RDETH_DETH_IMMDT_PAYLD 2 -/* __________________________________ */ -#define RDETH_DETH_RETH_IMMDT_PAYLD 3 -/* __________________________________ */ -#define RDETH_DETH_RETH 4 -/* __________________________________ */ -#define RDETH_AETH_PAYLD 5 -/* __________________________________ */ -#define RDETH_PAYLD 6 -/* __________________________________ */ -#define RDETH_AETH 7 -/* __________________________________ */ -#define RDETH_AETH_ATOMICACKETH 8 -/* __________________________________ */ -#define RDETH_DETH_ATOMICETH 9 -/* ___________________________________ */ -#define RDETH_DETH 10 -/* ___________________________________ */ -#define DETH_PAYLD 11 -/* ___________________________________ */ -#define DETH_IMMDT_PAYLD 12 -/* ___________________________________ */ -#define PAYLD 13 -/* ___________________________________ */ -#define IMMDT_PAYLD 14 -/* ___________________________________ */ -#define RETH_PAYLD 15 -/* ___________________________________ */ -#define RETH_IMMDT_PAYLD 16 -/* ___________________________________ */ -#define RETH 17 -/* ___________________________________ */ -#define AETH_PAYLD 18 -/* ___________________________________ */ -#define AETH 19 -/* ___________________________________ */ -#define AETH_ATOMICACKETH 20 -/* ___________________________________ */ -#define ATOMICETH 21 -/* ___________________________________ */ -#define IETH_PAYLD 22 -/* ___________________________________ */ - - -/* Array of all availavle OpCodes to make matching a bit easier. -* The OpCodes dictate the header sequence following in the packet. -* These arrays tell the dissector which headers must be decoded for the given OpCode. */ -static guint32 opCode_RDETH_DETH_ATOMICETH[] = { - RD_CMP_SWAP, - RD_FETCH_ADD -}; -static guint32 opCode_IETH_PAYLD[] = { - RC_SEND_LAST_INVAL, - RC_SEND_ONLY_INVAL -}; -static guint32 opCode_ATOMICETH[] = { - RC_CMP_SWAP, - RC_FETCH_ADD -}; -static guint32 opCode_RDETH_DETH_RETH_PAYLD[] = { - RD_RDMA_WRITE_FIRST, - RD_RDMA_WRITE_ONLY -}; -static guint32 opCode_RETH_IMMDT_PAYLD[] = { - RC_RDMA_WRITE_ONLY_IMM, - UC_RDMA_WRITE_ONLY_IMM -}; -static guint32 opCode_RDETH_DETH_IMMDT_PAYLD[] = { - RD_SEND_LAST_IMM, - RD_SEND_ONLY_IMM, - RD_RDMA_WRITE_LAST_IMM -}; - -static guint32 opCode_RDETH_AETH_PAYLD[] = { - RD_RDMA_READ_RESPONSE_FIRST, - RD_RDMA_READ_RESPONSE_LAST, - RD_RDMA_READ_RESPONSE_ONLY -}; -static guint32 opCode_AETH_PAYLD[] = { - RC_RDMA_READ_RESPONSE_FIRST, - RC_RDMA_READ_RESPONSE_LAST, - RC_RDMA_READ_RESPONSE_ONLY -}; -static guint32 opCode_RETH_PAYLD[] = { - RC_RDMA_WRITE_FIRST, - RC_RDMA_WRITE_ONLY, - UC_RDMA_WRITE_FIRST, - UC_RDMA_WRITE_ONLY -}; - -static guint32 opCode_RDETH_DETH_PAYLD[] = { - RD_SEND_FIRST, - RD_SEND_MIDDLE, - RD_SEND_LAST, - RD_SEND_ONLY, - RD_RDMA_WRITE_MIDDLE, - RD_RDMA_WRITE_LAST -}; - -static guint32 opCode_IMMDT_PAYLD[] = { - RC_SEND_LAST_IMM, - RC_SEND_ONLY_IMM, - RC_RDMA_WRITE_LAST_IMM, - UC_SEND_LAST_IMM, - UC_SEND_ONLY_IMM, - UC_RDMA_WRITE_LAST_IMM -}; - -static guint32 opCode_PAYLD[] = { - RC_SEND_FIRST, - RC_SEND_MIDDLE, - RC_SEND_LAST, - RC_SEND_ONLY, - RC_RDMA_WRITE_MIDDLE, - RC_RDMA_WRITE_LAST, - RC_RDMA_READ_RESPONSE_MIDDLE, - UC_SEND_FIRST, - UC_SEND_MIDDLE, - UC_SEND_LAST, - UC_SEND_ONLY, - UC_RDMA_WRITE_MIDDLE, - UC_RDMA_WRITE_LAST -}; - -/* It is not necessary to create arrays for these OpCodes since they indicate only one further header. -* We can just decode it directly - -* static guint32 opCode_DETH_IMMDT_PAYLD[] = { -* UD_SEND_ONLY_IMM -* }; -* static guint32 opCode_DETH_PAYLD[] = { -* UD_SEND_ONLY -* }; -* static guint32 opCode_RDETH_DETH[] = { -* RD_RESYNC -* }; -* static guint32 opCode_RDETH_DETH_RETH[] = { -* RD_RDMA_READ_REQUEST -* }; -* static guint32 opCode_RDETH_DETH_RETH_IMMDT_PAYLD[] = { -* RD_RDMA_WRITE_ONLY_IMM -* }; -* static guint32 opCode_RDETH_AETH_ATOMICACKETH[] = { -* RD_ATOMIC_ACKNOWLEDGE -* }; -* static guint32 opCode_RDETH_AETH[] = { -* RD_ACKNOWLEDGE -* }; -* static guint32 opCode_RDETH_PAYLD[] = { -* RD_RDMA_READ_RESPONSE_MIDDLE -* }; -* static guint32 opCode_AETH_ATOMICACKETH[] = { -* RC_ATOMIC_ACKNOWLEDGE -* }; -* static guint32 opCode_RETH[] = { -* RC_RDMA_READ_REQUEST -* }; -* static guint32 opCode_AETH[] = { -* RC_ACKNOWLEDGE -* }; */ - - -/* Field dissector structures. -* For reserved fields, reservedX denotes the reserved field is X bits in length. -* e.g. reserved2 is a reserved field 2 bits in length. -* The third parameter is a filter string associated for this field. -* So for instance, to filter packets for a given virtual lane, -* The filter (infiniband.LRH.vl == 3) or something similar would be used. */ - -static hf_register_info hf[] = { - - /* Local Route Header (LRH) */ - {&hf_infiniband_LRH, - {"Local Route Header", "infiniband.lrh", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_virtual_lane, - {"Virtual Lane", "infiniband.lrh.vl", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_link_version, - {"Link Version", "infiniband.lrh.lver", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_service_level, - {"Service Level", "infiniband.lrh.sl", FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_reserved2, - {"Reserved (2 bits)", "infiniband.lrh.reserved2", FT_UINT8, BASE_DEC, NULL, 0x0C, NULL, HFILL} - }, - {&hf_infiniband_link_next_header, - {"Link Next Header", "infiniband.lrh.lnh", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL} - }, - {&hf_infiniband_destination_local_id, - {"Destination Local ID", "infiniband.lrh.dlid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved5, - {"Reserved (5 bits)", "infiniband.lrh.reserved5", FT_UINT16, BASE_DEC, NULL, 0xF800, NULL, HFILL} - }, - {&hf_infiniband_packet_length, - {"Packet Length", "infiniband.lrh.pktlen", FT_UINT16, BASE_DEC, NULL, 0x07FF, NULL, HFILL} - }, - {&hf_infiniband_source_local_id, - {"Source Local ID", "infiniband.lrh.slid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Global Route Header (GRH) */ - {&hf_infiniband_GRH, - {"Global Route Header", "infiniband.grh", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ip_version, - {"IP Version", "infiniband.grh.ipver", FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_traffic_class, - {"Traffic Class", "infiniband.grh.tclass", FT_UINT16, BASE_DEC, NULL, 0x0FF0, NULL, HFILL} - }, - {&hf_infiniband_flow_label, - {"Flow Label", "infiniband.grh.flowlabel", FT_UINT32, BASE_DEC, NULL, 0x000FFFFF, NULL, HFILL} - }, - {&hf_infiniband_payload_length, - {"Payload Length", "infiniband.grh.paylen", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_next_header, - {"Next Header", "infiniband.grh.nxthdr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_hop_limit, - {"Hop Limit", "infiniband.grh.hoplmt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_source_gid, - {"Source GID", "infiniband.grh.sgid", FT_IPv6, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_destination_gid, - {"Destination GID", "infiniband.grh.dgid", FT_IPv6, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Base Transport Header (BTH) */ - {&hf_infiniband_BTH, - {"Base Transport Header", "infiniband.bth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_opcode, - {"Opcode", "infiniband.bth.opcode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_solicited_event, - {"Solicited Event", "infiniband.bth.se", FT_BOOLEAN, BASE_DEC, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_migreq, - {"MigReq", "infiniband.bth.m", FT_BOOLEAN, BASE_DEC, NULL, 0x40, NULL, HFILL} - }, - {&hf_infiniband_pad_count, - {"Pad Count", "infiniband.bth.padcnt", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL} - }, - {&hf_infiniband_transport_header_version, - {"Header Version", "infiniband.bth.tver", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_partition_key, - {"Partition Key", "infiniband.bth.p_key", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved8, - {"Reserved (8 bits)", "infiniband.bth.reserved8", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_destination_qp, - {"Destination Queue Pair", "infiniband.bth.destqp", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_acknowledge_request, - {"Acknowledge Request", "infiniband.bth.a", FT_BOOLEAN, BASE_DEC, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_reserved7, - {"Reserved (7 bits)", "infiniband.bth.reserved7", FT_UINT8, BASE_DEC, NULL, 0x7F, NULL, HFILL} - }, - {&hf_infiniband_packet_sequence_number, - {"Packet Sequence Number", "infiniband.bth.psn", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Raw Header (RWH) */ - {&hf_infiniband_RWH, - {"Raw Header", "infiniband.rwh", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved16_RWH, - {"Reserved (16 bits)", "infiniband.rwh.reserved", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_etype, - {"Ethertype", "infiniband.rwh.etype", FT_UINT16, BASE_HEX, NULL /*VALS(etype_vals)*/, 0x0, "Type", HFILL } - }, - - /* Reliable Datagram Extended Transport Header (RDETH) */ - {&hf_infiniband_RDETH, - {"Reliable Datagram Extended Transport Header", "infiniband.rdeth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved8_RDETH, - {"Reserved (8 bits)", "infiniband.rdeth.reserved8", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ee_context, - {"E2E Context", "infiniband.rdeth.eecnxt", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Datagram Extended Transport Header (DETH) */ - {&hf_infiniband_DETH, - {"Datagram Extended Transport Header", "infiniband.deth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_queue_key, - {"Queue Key", "infiniband.deth.q_key", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved8_DETH, - {"Reserved (8 bits)", "infiniband.deth.reserved8", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_source_qp, - {"Source Queue Pair", "infiniband.deth.srcqp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* RDMA Extended Transport Header (RETH) */ - {&hf_infiniband_RETH, - {"RDMA Extended Transport Header", "infiniband.reth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_virtual_address, - {"Virtual Address", "infiniband.reth.va", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_remote_key, - {"Remote Key", "infiniband.reth.r_key", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_dma_length, - {"DMA Length", "infiniband.reth.dmalen", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Atomic Extended Transport Header (AtomicETH) */ - {&hf_infiniband_AtomicETH, - {"Atomic Extended Transport Header", "infiniband.atomiceth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_virtual_address_AtomicETH, - {"Virtual Address", "infiniband.atomiceth.va", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_remote_key_AtomicETH, - {"Remote Key", "infiniband.atomiceth.r_key", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_swap_or_add_data, - {"Swap (Or Add) Data", "infiniband.atomiceth.swapdt", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_compare_data, - {"Compare Data", "infiniband.atomiceth.cmpdt", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* ACK Extended Transport Header (AETH) */ - {&hf_infiniband_AETH, - {"ACK Extended Transport Header", "infiniband.aeth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_syndrome, - {"Syndrome", "infiniband.aeth.syndrome", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_message_sequence_number, - {"Message Sequence Number", "infiniband.aeth.msn", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - - /* Atomic ACK Extended Transport Header (AtomicAckETH) */ - {&hf_infiniband_AtomicAckETH, - {"Atomic ACK Extended Transport Header", "infiniband.atomicacketh", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_original_remote_data, - {"Original Remote Data", "infiniband.atomicacketh.origremdt", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL} - }, - /* Immediate Extended Transport Header (ImmDT) */ - {&hf_infiniband_IMMDT, - {"Immediate Data", "infiniband.immdt", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - - /* Invalidate Extended Transport Header (IETH) */ - {&hf_infiniband_IETH, - {"RKey", "infiniband.ieth", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - - /* Payload */ - {&hf_infiniband_payload, - {"Payload", "infiniband.payload", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_invariant_crc, - {"Invariant CRC", "infiniband.invariant.crc", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_variant_crc, - {"Variant CRC", "infiniband.variant.crc", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_raw_data, - {"Raw Data", "infiniband.rawdata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Unknown or Vendor Specific */ - {&hf_infiniband_vendor, - {"Unknown/Vendor Specific Data", "infiniband.vendor", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - - /* MAD Base Header */ - {&hf_infiniband_MAD, - {"MAD (Management Datagram) Common Header", "infiniband.mad", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_base_version, - {"Base Version", "infiniband.mad.baseversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_mgmt_class, - {"Management Class", "infiniband.mad.mgmtclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_class_version, - {"Class Version", "infiniband.mad.classversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved1, - {"Reserved", "infiniband.mad.reserved1", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_method, - {"Method", "infiniband.mad.method", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL} - }, - {&hf_infiniband_status, - {"Status", "infiniband.mad.status", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_class_specific, - {"Class Specific", "infiniband.mad.classspecific", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_transaction_id, - {"Transaction ID", "infiniband.mad.transactionid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_attribute_id, - {"Attribute ID", "infiniband.mad.attributeid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved16, - {"Reserved", "infiniband.mad.reserved16", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_attribute_modifier, - {"Attribute Modifier", "infiniband.mad.attributemodifier", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_data, - {"MAD Data Payload", "infiniband.mad.data", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* RMPP Header */ - {&hf_infiniband_RMPP, - {"RMPP (Reliable Multi-Packet Transaction Protocol)", "infiniband.rmpp", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_rmpp_version, - {"RMPP Type", "infiniband.rmpp.rmppversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_rmpp_type, - {"RMPP Type", "infiniband.rmpp.rmpptype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_r_resp_time, - {"R Resp Time", "infiniband.rmpp.rresptime", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_rmpp_flags, - {"RMPP Flags", "infiniband.rmpp.rmppflags", FT_UINT8, BASE_HEX, VALS(RMPP_Flags), 0x0F, NULL, HFILL} - }, - {&hf_infiniband_rmpp_status, - {"RMPP Status", "infiniband.rmpp.rmppstatus", FT_UINT8, BASE_HEX, VALS(RMPP_Status), 0x0, NULL, HFILL} - }, - {&hf_infiniband_rmpp_data1, - {"RMPP Data 1", "infiniband.rmpp.data1", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_rmpp_data2, - {"RMPP Data 2", "infiniband.rmpp.data2", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* RMPP Data */ - {&hf_infiniband_RMPP_DATA, - {"RMPP Data (Reliable Multi-Packet Transaction Protocol)", "infiniband.rmpp.data", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_segment_number, - {"Segment Number", "infiniband.rmpp.segmentnumber", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_payload_length32, - {"Payload Length", "infiniband.rmpp.payloadlength", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_transferred_data, - {"Transferred Data", "infiniband.rmpp.transferreddata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* RMPP ACK */ - {&hf_infiniband_new_window_last, - {"New Window Last", "infiniband.rmpp.newwindowlast", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved220, - {"Segment Number", "infiniband.rmpp.reserved220", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* RMPP ABORT/STOP */ - {&hf_infiniband_optional_extended_error_data, - {"Optional Extended Error Data", "infiniband.rmpp.extendederrordata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* SMP Data (LID Routed) */ - {&hf_infiniband_SMP_LID, - {"Subnet Management Packet (LID Routed)", "infiniband.smplid", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_m_key, - {"M_Key", "infiniband.smplid.mkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_smp_data, - {"SMP Data", "infiniband.smplid.smpdata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved1024, - {"Reserved (1024 bits)", "infiniband.smplid.reserved1024", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved256, - {"Reserved (256 bits)", "infiniband.smplid.reserved256", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* SMP Data Directed Route */ - {&hf_infiniband_SMP_DIRECTED, - {"Subnet Management Packet (Directed Route)", "infiniband.smpdirected", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_smp_status, - {"Status", "infiniband.smpdirected.smpstatus", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_hop_pointer, - {"Hop Pointer", "infiniband.smpdirected.hoppointer", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_hop_count, - {"Hop Count", "infiniband.smpdirected.hopcount", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_dr_slid, - {"DrSLID", "infiniband.smpdirected.drslid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_dr_dlid, - {"DrDLID", "infiniband.smpdirected.drdlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_reserved28, - {"Reserved (224 bits)", "infiniband.smpdirected.reserved28", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_d, - {"D (Direction Bit)", "infiniband.smpdirected.d", FT_UINT64, BASE_HEX, NULL, 0x8000, NULL, HFILL} - }, - {&hf_infiniband_initial_path, - {"Initial Path", "infiniband.smpdirected.initialpath", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_return_path, - {"Return Path", "infiniband.smpdirected.returnpath", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* SA MAD Header */ - {&hf_infiniband_SA, - {"SA Packet (Subnet Administration)", "infiniband.sa.drdlid", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_sm_key, - {"SM_Key (Verification Key)", "infiniband.sa.smkey", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_attribute_offset, - {"Attribute Offset", "infiniband.sa.attributeoffset", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_component_mask, - {"Component Mask", "infiniband.sa.componentmask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_subnet_admin_data, - {"Subnet Admin Data", "infiniband.sa.subnetadmindata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* NodeDescription */ - {&hf_infiniband_NodeDescription_NodeString, - {"NodeString", "infiniband.nodedescription.nodestring", FT_STRING, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* NodeInfo */ - {&hf_infiniband_NodeInfo_BaseVersion, - {"BaseVersion", "infiniband.nodeinfo.baseversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_ClassVersion, - {"ClassVersion", "infiniband.nodeinfo.classversion", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_NodeType, - {"NodeType", "infiniband.nodeinfo.nodetype", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_NumPorts, - {"NumPorts", "infiniband.nodeinfo.numports", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_SystemImageGUID, - {"SystemImageGUID", "infiniband.nodeinfo.systemimageguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_NodeGUID, - {"NodeGUID", "infiniband.nodeinfo.nodeguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_PortGUID, - {"PortGUID", "infiniband.nodeinfo.portguid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_PartitionCap, - {"PartitionCap", "infiniband.nodeinfo.partitioncap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_DeviceID, - {"DeviceID", "infiniband.nodeinfo.deviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_Revision, - {"Revision", "infiniband.nodeinfo.revision", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_LocalPortNum, - {"LocalPortNum", "infiniband.nodeinfo.localportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_NodeInfo_VendorID, - {"VendorID", "infiniband.nodeinfo.vendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* SwitchInfo */ - {&hf_infiniband_SwitchInfo_LinearFDBCap, - {"LinearFDBCap", "infiniband.switchinfo.linearfdbcap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_RandomFDBCap, - {"RandomFDBCap", "infiniband.switchinfo.randomfdbcap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_MulticastFDBCap, - {"MulticastFDBCap", "infiniband.switchinfo.multicastfdbcap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_LinearFDBTop, - {"LinearFDBTop", "infiniband.switchinfo.linearfdbtop", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_DefaultPort, - {"DefaultPort", "infiniband.switchinfo.defaultport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_DefaultMulticastPrimaryPort, - {"DefaultMulticastPrimaryPort", "infiniband.switchinfo.defaultmulticastprimaryport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_DefaultMulticastNotPrimaryPort, - {"DefaultMulticastNotPrimaryPort", "infiniband.switchinfo.defaultmulticastnotprimaryport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_LifeTimeValue, - {"LifeTimeValue", "infiniband.switchinfo.lifetimevalue", FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_PortStateChange, - {"PortStateChange", "infiniband.switchinfo.portstatechange", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_OptimizedSLtoVLMappingProgramming, - {"OptimizedSLtoVLMappingProgramming", "infiniband.switchinfo.optimizedsltovlmappingprogramming", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_LIDsPerPort, - {"LIDsPerPort", "infiniband.switchinfo.lidsperport", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_PartitionEnforcementCap, - {"PartitionEnforcementCap", "infiniband.switchinfo.partitionenforcementcap", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_InboundEnforcementCap, - {"InboundEnforcementCap", "infiniband.switchinfo.inboundenforcementcap", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_OutboundEnforcementCap, - {"OutboundEnforcementCap", "infiniband.switchinfo.outboundenforcementcap", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_FilterRawInboundCap, - {"FilterRawInboundCap", "infiniband.switchinfo.filterrawinboundcap", FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_FilterRawOutboundCap, - {"FilterRawOutboundCap", "infiniband.switchinfo.filterrawoutboundcap", FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL} - }, - {&hf_infiniband_SwitchInfo_EnhancedPortZero, - {"EnhancedPortZero", "infiniband.switchinfo.enhancedportzero", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL} - }, - /* GUIDInfo */ - {&hf_infiniband_GUIDInfo_GUIDBlock, - {"GUIDBlock", "infiniband.switchinfo.guidblock", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_GUIDInfo_GUID, - {"GUID", "infiniband.switchinfo.guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* PortInfo */ - {&hf_infiniband_PortInfo_M_Key, - {"M_Key", "infiniband.portinfo.m_key", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_GidPrefix, - {"GidPrefix", "infiniband.portinfo.guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LID, - {"LID", "infiniband.portinfo.lid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_MasterSMLID, - {"MasterSMLID", "infiniband.portinfo.mastersmlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask, - {"CapabilityMask", "infiniband.portinfo.capabilitymask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - - /* Capability Mask Flags */ - {&hf_infiniband_PortInfo_CapabilityMask_SM, - {"SM", "infiniband.portinfo.capabilitymask.issm", FT_UINT32, BASE_HEX, NULL, 0x0000002, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_NoticeSupported, - {"NoticeSupported", "infiniband.portinfo.capabilitymask.noticesupported", FT_UINT32, BASE_HEX, NULL, 0x0000004, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_TrapSupported, - {"TrapSupported", "infiniband.portinfo.capabilitymask.trapsupported", FT_UINT32, BASE_HEX, NULL, 0x0000008, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_OptionalPDSupported, - {"OptionalPDSupported", "infiniband.portinfo.capabilitymask.optionalpdsupported", FT_UINT32, BASE_HEX, NULL, 0x0000010, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_AutomaticMigrationSupported, - {"AutomaticMigrationSupported", "infiniband.portinfo.capabilitymask.automaticmigrationsupported", FT_UINT32, BASE_HEX, NULL, 0x0000020, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_SLMappingSupported, - {"SLMappingSupported", "infiniband.portinfo.capabilitymask.slmappingsupported", FT_UINT32, BASE_HEX, NULL, 0x0000040, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_MKeyNVRAM, - {"MKeyNVRAM", "infiniband.portinfo.capabilitymask.mkeynvram", FT_UINT32, BASE_HEX, NULL, 0x0000080, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_PKeyNVRAM, - {"PKeyNVRAM", "infiniband.portinfo.capabilitymask.pkeynvram", FT_UINT32, BASE_HEX, NULL, 0x0000100, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_LEDInfoSupported, - {"LEDInfoSupported", "infiniband.portinfo.capabilitymask.ledinfosupported", FT_UINT32, BASE_HEX, NULL, 0x0000200, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_SMdisabled, - {"SMdisabled", "infiniband.portinfo.capabilitymask.smdisabled", FT_UINT32, BASE_HEX, NULL, 0x0000400, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_SystemImageGUIDSupported, - {"SystemImageGUIDSupported", "infiniband.portinfo.capabilitymask.systemimageguidsupported", FT_UINT32, BASE_HEX, NULL, 0x0000800, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_PKeySwitchExternalPortTrapSupported, - {"PKeySwitchExternalPortTrapSupported", "infiniband.portinfo.capabilitymask.pkeyswitchexternalporttrapsupported", FT_UINT32, BASE_HEX, NULL, 0x0001000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_CommunicationsManagementSupported, - {"CommunicationsManagementSupported", "infiniband.portinfo.capabilitymask.communicationsmanagementsupported", FT_UINT32, BASE_HEX, NULL, 0x0010000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_SNMPTunnelingSupported, - {"SNMPTunnelingSupported", "infiniband.portinfo.capabilitymask.snmptunnelingsupported", FT_UINT32, BASE_HEX, NULL, 0x0020000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_ReinitSupported, - {"ReinitSupported", "infiniband.portinfo.capabilitymask.reinitsupported", FT_UINT32, BASE_HEX, NULL, 0x0040000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_DeviceManagementSupported, - {"DeviceManagementSupported", "infiniband.portinfo.capabilitymask.devicemanagementsupported", FT_UINT32, BASE_HEX, NULL, 0x0080000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_VendorClassSupported, - {"VendorClassSupported", "infiniband.portinfo.capabilitymask.vendorclasssupported", FT_UINT32, BASE_HEX, NULL, 0x0100000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_DRNoticeSupported, - {"DRNoticeSupported", "infiniband.portinfo.capabilitymask.drnoticesupported", FT_UINT32, BASE_HEX, NULL, 0x0200000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_CapabilityMaskNoticeSupported, - {"CapabilityMaskNoticeSupported", "infiniband.portinfo.capabilitymask.capabilitymasknoticesupported", FT_UINT32, BASE_HEX, NULL, 0x0400000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_BootManagementSupported, - {"BootManagementSupported", "infiniband.portinfo.capabilitymask.bootmanagementsupported", FT_UINT32, BASE_HEX, NULL, 0x0800000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_LinkRoundTripLatencySupported, - {"LinkRoundTripLatencySupported", "infiniband.portinfo.capabilitymask.linkroundtriplatencysupported", FT_UINT32, BASE_HEX, NULL, 0x01000000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_ClientRegistrationSupported, - {"ClientRegistrationSupported", "infiniband.portinfo.capabilitymask.clientregistrationsupported", FT_UINT32, BASE_HEX, NULL, 0x02000000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_OtherLocalChangesNoticeSupported, - {"OtherLocalChangesNoticeSupported", "infiniband.portinfo.capabilitymask.otherlocalchangesnoticesupported", FT_UINT32, BASE_HEX, NULL, 0x04000000, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_CapabilityMask_LinkSpeedWIdthPairsTableSupported, - {"LinkSpeedWIdthPairsTableSupported", "infiniband.portinfo.capabilitymask.linkspeedwidthpairstablesupported", FT_UINT32, BASE_HEX, NULL, 0x08000000, NULL, HFILL} - }, - /* End Capability Mask Flags */ - - {&hf_infiniband_PortInfo_DiagCode, - {"DiagCode", "infiniband.portinfo.diagcode", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_M_KeyLeasePeriod, - {"M_KeyLeasePeriod", "infiniband.portinfo.m_keyleaseperiod", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LocalPortNum, - {"LocalPortNum", "infiniband.portinfo.localportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkWidthEnabled, - {"LinkWidthEnabled", "infiniband.portinfo.linkwidthenabled", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkWidthSupported, - {"LinkWidthSupported", "infiniband.portinfo.linkwidthsupported", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkWidthActive, - {"LinkWidthActive", "infiniband.portinfo.linkwidthactive", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkSpeedSupported, - {"LinkSpeedSupported", "infiniband.portinfo.linkspeedsupported", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_PortState, - {"PortState", "infiniband.portinfo.portstate", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_PortPhysicalState, - {"PortPhysicalState", "infiniband.portinfo.portphysicalstate", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkDownDefaultState, - {"LinkDownDefaultState", "infiniband.portinfo.linkdowndefaultstate", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_M_KeyProtectBits, - {"M_KeyProtectBits", "infiniband.portinfo.m_keyprotectbits", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LMC, - {"LMC", "infiniband.portinfo.lmc", FT_UINT8, BASE_HEX, NULL, 0x07, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkSpeedActive, - {"LinkSpeedActive", "infiniband.portinfo.linkspeedactive", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkSpeedEnabled, - {"LinkSpeedEnabled", "infiniband.portinfo.linkspeedenabled", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_NeighborMTU, - {"NeighborMTU", "infiniband.portinfo.neighbormtu", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_MasterSMSL, - {"MasterSMSL", "infiniband.portinfo.mastersmsl", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_VLCap, - {"VLCap", "infiniband.portinfo.vlcap", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_InitType, - {"InitType", "infiniband.portinfo.inittype", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_VLHighLimit, - {"VLHighLimit", "infiniband.portinfo.vlhighlimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_VLArbitrationHighCap, - {"VLArbitrationHighCap", "infiniband.portinfo.vlarbitrationhighcap", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_VLArbitrationLowCap, - {"VLArbitrationLowCap", "infiniband.portinfo.vlarbitrationlowcap", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_InitTypeReply, - {"InitTypeReply", "infiniband.portinfo.inittypereply", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_MTUCap, - {"MTUCap", "infiniband.portinfo.mtucap", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_VLStallCount, - {"VLStallCount", "infiniband.portinfo.vlstallcount", FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_HOQLife, - {"HOQLife", "infiniband.portinfo.hoqlife", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_OperationalVLs, - {"OperationalVLs", "infiniband.portinfo.operationalvls", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_PartitionEnforcementInbound, - {"PartitionEnforcementInbound", "infiniband.portinfo.partitionenforcementinbound", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_PartitionEnforcementOutbound, - {"PartitionEnforcementOutbound", "infiniband.portinfo.partitionenforcementoutbound", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_FilterRawInbound, - {"FilterRawInbound", "infiniband.portinfo.filterrawinbound", FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_FilterRawOutbound, - {"FilterRawOutbound", "infiniband.portinfo.filterrawoutbound", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_M_KeyViolations, - {"M_KeyViolations", "infiniband.portinfo.m_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_P_KeyViolations, - {"P_KeyViolations", "infiniband.portinfo.p_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_Q_KeyViolations, - {"Q_KeyViolations", "infiniband.portinfo.q_keyviolations", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_GUIDCap, - {"GUIDCap", "infiniband.portinfo.guidcap", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_ClientReregister, - {"ClientReregister", "infiniband.portinfo.clientreregister", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_SubnetTimeOut, - {"SubnetTimeOut", "infiniband.portinfo.subnettimeout", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_RespTimeValue, - {"RespTimeValue", "infiniband.portinfo.resptimevalue", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LocalPhyErrors, - {"LocalPhyErrors", "infiniband.portinfo.localphyerrors", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_OverrunErrors, - {"OverrunErrors", "infiniband.portinfo.overrunerrors", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_MaxCreditHint, - {"MaxCreditHint", "infiniband.portinfo.maxcredithint", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PortInfo_LinkRoundTripLatency, - {"LinkRoundTripLatency", "infiniband.portinfo.linkroundtriplatency", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* P_KeyTable */ - {&hf_infiniband_P_KeyTable_P_KeyTableBlock, - {"P_KeyTableBlock", "infiniband.p_keytable.p_keytableblock", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_P_KeyTable_MembershipType, - {"MembershipType", "infiniband.p_keytable.membershiptype", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_P_KeyTable_P_KeyBase, - {"P_KeyBase", "infiniband.p_keytable.p_keybase", FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL} - }, - /* SLtoVLMappingTable */ - {&hf_infiniband_SLtoVLMappingTable_SLtoVL_HighBits, - {"SL(x)toVL", "infiniband.sltovlmappingtable.sltovlhighbits", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_SLtoVLMappingTable_SLtoVL_LowBits, - {"SL(x)toVL", "infiniband.sltovlmappingtable.sltovllowbits", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - /* VLArbitrationTable */ - {&hf_infiniband_VLArbitrationTable_VLWeightPairs, - {"VLWeightPairs", "infiniband.vlarbitrationtable.vlweightpairs", FT_BYTES, BASE_HEX, NULL, 0x7FFF, NULL, HFILL} - }, - {&hf_infiniband_VLArbitrationTable_VL, - {"VL", "infiniband.vlarbitrationtable.vl", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_VLArbitrationTable_Weight, - {"Weight", "infiniband.vlarbitrationtable.weight", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* LinearForwardingTable */ - {&hf_infiniband_LinearForwardingTable_LinearForwardingTableBlock, - {"LinearForwardingTableBlock", "infiniband.linearforwardingtable.linearforwardingtableblock", FT_BYTES, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_LinearForwardingTable_Port, - {"Port", "infiniband.linearforwardingtable.port", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* RandomForwardingTable */ - {&hf_infiniband_RandomForwardingTable_RandomForwardingTableBlock, - {"RandomForwardingTableBlock", "infiniband.randomforwardingtable.randomforwardingtableblock", FT_BYTES, BASE_HEX, NULL, 0x7FFF, NULL, HFILL} - }, - {&hf_infiniband_RandomForwardingTable_LID, - {"LID", "infiniband.randomforwardingtable.lid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_RandomForwardingTable_Valid, - {"Valid", "infiniband.randomforwardingtable.valid", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_RandomForwardingTable_LMC, - {"LMC", "infiniband.randomforwardingtable.lmc", FT_UINT16, BASE_HEX, NULL, 0x70, NULL, HFILL} - }, - {&hf_infiniband_RandomForwardingTable_Port, - {"Port", "infiniband.randomforwardingtable.port", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* MulticastForwardingTable */ - {&hf_infiniband_MulticastForwardingTable_MulticastForwardingTableBlock , - {"MulticastForwardingTableBlock ", "infiniband.multicastforwardingtable.multicastforwardingtableblock", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MulticastForwardingTable_PortMask, - {"PortMask", "infiniband.multicastforwardingtable.portmask", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* SMInfo */ - {&hf_infiniband_SMInfo_GUID, - {"GUID", "infiniband.sminfo.guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SMInfo_SM_Key, - {"SM_Key", "infiniband.sminfo.sm_key", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SMInfo_ActCount, - {"ActCount", "infiniband.sminfo.actcount", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SMInfo_Priority, - {"Priority", "infiniband.sminfo.priority", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_SMInfo_SMState, - {"SMState", "infiniband.sminfo.smstate", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - /* VendorDiag */ - {&hf_infiniband_VendorDiag_NextIndex, - {"NextIndex", "infiniband.vendordiag.nextindex", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_VendorDiag_DiagData, - {"DiagData", "infiniband.vendordiag.diagdata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* LedInfo */ - {&hf_infiniband_LedInfo_LedMask, - {"LedMask", "infiniband.ledinfo.ledmask", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - /* LinkSpeedWidthPairsTable */ - {&hf_infiniband_LinkSpeedWidthPairsTable_NumTables, - {"NumTables", "infiniband.linkspeedwidthpairstable.numtables", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_LinkSpeedWidthPairsTable_PortMask, - {"PortMask", "infiniband.linkspeedwidthpairstable.portmask", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_LinkSpeedWidthPairsTable_SpeedTwoFive, - {"Speed 2.5 Gbps", "infiniband.linkspeedwidthpairstable.speedtwofive", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_LinkSpeedWidthPairsTable_SpeedFive, - {"Speed 5 Gbps", "infiniband.linkspeedwidthpairstable.speedfive", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_LinkSpeedWidthPairsTable_SpeedTen, - {"Speed 10 Gbps", "infiniband.linkspeedwidthpairstable.speedten", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - /* NodeRecord */ - /* PortInfoRecord */ - /* SLtoVLMappingTableRecord */ - /* SwitchInfoRecord */ - /* LinearForwardingTableRecord */ - /* RandomForwardingTableRecord */ - /* MulticastForwardingTableRecord */ - /* VLArbitrationTableRecord */ - {&hf_infiniband_SA_LID, - {"LID", "infiniband.sa.lid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_EndportLID, - {"EndportLID", "infiniband.sa.endportlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_PortNum, - {"PortNum", "infiniband.sa.portnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_InputPortNum , - {"InputPortNum ", "infiniband.sa.inputportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_OutputPortNum, - {"OutputPortNum", "infiniband.sa.outputportnum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_BlockNum_EightBit, - {"BlockNum_EightBit", "infiniband.sa.blocknum_eightbit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_BlockNum_NineBit, - {"BlockNum_NineBit", "infiniband.sa.blocknum_ninebit", FT_UINT16, BASE_HEX, NULL, 0x01FF, NULL, HFILL} - }, - {&hf_infiniband_SA_BlockNum_SixteenBit, - {"BlockNum_SixteenBit", "infiniband.sa.blocknum_sixteenbit", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_SA_Position, - {"Position", "infiniband.sa.position", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_SA_Index, - {"Index", "infiniband.sa.index", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* InformInfoRecord */ - {&hf_infiniband_InformInfoRecord_SubscriberGID, - {"SubscriberGID", "infiniband.informinforecord.subscribergid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfoRecord_Enum, - {"Enum", "infiniband.informinforecord.enum", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* InformInfo */ - {&hf_infiniband_InformInfo_GID, - {"GID", "infiniband.informinfo.gid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_LIDRangeBegin, - {"LIDRangeBegin", "infiniband.informinfo.lidrangebegin", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_LIDRangeEnd, - {"LIDRangeEnd", "infiniband.informinfo.lidrangeend", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_IsGeneric, - {"IsGeneric", "infiniband.informinfo.isgeneric", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_Subscribe, - {"Subscribe", "infiniband.informinfo.subscribe", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_Type, - {"Type", "infiniband.informinfo.type", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_TrapNumberDeviceID, - {"TrapNumberDeviceID", "infiniband.informinfo.trapnumberdeviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_QPN, - {"QPN", "infiniband.informinfo.qpn", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_RespTimeValue, - {"RespTimeValue", "infiniband.informinfo.resptimevalue", FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL} - }, - {&hf_infiniband_InformInfo_ProducerTypeVendorID, - {"ProducerTypeVendorID", "infiniband.informinfo.producertypevendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* LinkRecord */ - {&hf_infiniband_LinkRecord_FromLID, - {"FromLID", "infiniband.linkrecord.fromlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_LinkRecord_FromPort, - {"FromPort", "infiniband.linkrecord.fromport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_LinkRecord_ToPort, - {"ToPort", "infiniband.linkrecord.toport", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_LinkRecord_ToLID, - {"ToLID", "infiniband.linkrecord.tolid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* ServiceRecord */ - {&hf_infiniband_ServiceRecord_ServiceID, - {"ServiceID", "infiniband.linkrecord.serviceid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceGID, - {"ServiceGID", "infiniband.linkrecord.servicegid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceP_Key, - {"ServiceP_Key", "infiniband.linkrecord.servicep_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceLease, - {"ServiceLease", "infiniband.linkrecord.servicelease", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceKey, - {"ServiceKey", "infiniband.linkrecord.servicekey", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceName, - {"ServiceName", "infiniband.linkrecord.servicename", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceRecord_ServiceData, - {"ServiceData", "infiniband.linkrecord.servicedata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* ServiceAssociationRecord */ - {&hf_infiniband_ServiceAssociationRecord_ServiceKey, - {"ServiceKey", "infiniband.serviceassociationrecord.servicekey", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_ServiceAssociationRecord_ServiceName, - {"ServiceName", "infiniband.serviceassociationrecord.servicename", FT_STRING, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* PathRecord */ - {&hf_infiniband_PathRecord_DGID, - {"DGID", "infiniband.pathrecord.dgid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_SGID, - {"SGID", "infiniband.pathrecord.sgid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_DLID, - {"DLID", "infiniband.pathrecord.dlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_SLID, - {"SLID", "infiniband.pathrecord.slid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_RawTraffic, - {"RawTraffic", "infiniband.pathrecord.rawtraffic", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_FlowLabel, - {"FlowLabel", "infiniband.pathrecord.flowlabel", FT_UINT24, BASE_HEX, NULL, 0xFFFFF0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_HopLimit, - {"HopLimit", "infiniband.pathrecord.hoplimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_TClass, - {"TClass", "infiniband.pathrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_Reversible, - {"Reversible", "infiniband.pathrecord.reversible", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_NumbPath, - {"NumbPath", "infiniband.pathrecord.numbpath", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_P_Key, - {"P_Key", "infiniband.pathrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_SL, - {"SL", "infiniband.pathrecord.sl", FT_UINT16, BASE_HEX, NULL, 0x000F, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_MTUSelector, - {"MTUSelector", "infiniband.pathrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_MTU, - {"MTU", "infiniband.pathrecord.mtu", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_RateSelector, - {"RateSelector", "infiniband.pathrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_Rate, - {"Rate", "infiniband.pathrecord.rate", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_PacketLifeTimeSelector, - {"PacketLifeTimeSelector", "infiniband.pathrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_PacketLifeTime, - {"PacketLifeTime", "infiniband.pathrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL} - }, - {&hf_infiniband_PathRecord_Preference, - {"Preference", "infiniband.pathrecord.preference", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* MCMemberRecord */ - {&hf_infiniband_MCMemberRecord_MGID, - {"MGID", "infiniband.mcmemberrecord.mgid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_PortGID, - {"PortGID", "infiniband.mcmemberrecord.portgid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_Q_Key, - {"Q_Key", "infiniband.mcmemberrecord.q_key", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_MLID, - {"MLID", "infiniband.mcmemberrecord.mlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_MTUSelector, - {"MTUSelector", "infiniband.mcmemberrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_MTU, - {"MTU", "infiniband.mcmemberrecord.mtu", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_TClass, - {"TClass", "infiniband.mcmemberrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_P_Key, - {"P_Key", "infiniband.mcmemberrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_RateSelector, - {"RateSelector", "infiniband.mcmemberrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_Rate, - {"Rate", "infiniband.mcmemberrecord.rate", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_PacketLifeTimeSelector, - {"PacketLifeTimeSelector", "infiniband.mcmemberrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_PacketLifeTime, - {"PacketLifeTime", "infiniband.mcmemberrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_SL, - {"SL", "infiniband.mcmemberrecord.sl", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_FlowLabel, - {"FlowLabel", "infiniband.mcmemberrecord.flowlabel", FT_UINT24, BASE_HEX, NULL, 0x0FFFFF, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_HopLimit, - {"HopLimit", "infiniband.mcmemberrecord.hoplimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_Scope, - {"Scope", "infiniband.mcmemberrecord.scope", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_JoinState, - {"JoinState", "infiniband.mcmemberrecord.joinstate", FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL} - }, - {&hf_infiniband_MCMemberRecord_ProxyJoin, - {"ProxyJoin", "infiniband.mcmemberrecord.proxyjoin", FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL} - }, - /* MultiPathRecord */ - {&hf_infiniband_MultiPathRecord_RawTraffic, - {"RawTraffic", "infiniband.multipathrecord.rawtraffic", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_FlowLabel, - {"FlowLabel", "infiniband.multipathrecord.flowlabel", FT_UINT24, BASE_HEX, NULL, 0x0FFFFF, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_HopLimit, - {"HopLimit", "infiniband.multipathrecord.hoplimit", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_TClass, - {"TClass", "infiniband.multipathrecord.tclass", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_Reversible, - {"Reversible", "infiniband.multipathrecord.reversible", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_NumbPath, - {"NumbPath", "infiniband.multipathrecord.numbpath", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_P_Key, - {"P_Key", "infiniband.multipathrecord.p_key", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_SL, - {"SL", "infiniband.multipathrecord.sl", FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_MTUSelector, - {"MTUSelector", "infiniband.multipathrecord.mtuselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_MTU, - {"MTU", "infiniband.multipathrecord.mtu", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_RateSelector, - {"RateSelector", "infiniband.multipathrecord.rateselector", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_Rate, - {"Rate", "infiniband.multipathrecord.rate", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_PacketLifeTimeSelector, - {"PacketLifeTimeSelector", "infiniband.multipathrecord.packetlifetimeselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_PacketLifeTime, - {"PacketLifeTime", "infiniband.multipathrecord.packetlifetime", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_IndependenceSelector, - {"IndependenceSelector", "infiniband.multipathrecord.independenceselector", FT_UINT8, BASE_HEX, NULL, 0xC0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_GIDScope, - {"GIDScope", "infiniband.multipathrecord.gidscope", FT_UINT8, BASE_HEX, NULL, 0x3F, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_SGIDCount, - {"SGIDCount", "infiniband.multipathrecord.sgidcount", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_DGIDCount, - {"DGIDCount", "infiniband.multipathrecord.dgidcount", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_MultiPathRecord_SDGID, - {"SDGID", "infiniband.multipathrecord.sdgid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Notice */ - {&hf_infiniband_Notice_IsGeneric, - {"IsGeneric", "infiniband.notice.isgeneric", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_Notice_Type, - {"Type", "infiniband.notice.type", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL} - }, - {&hf_infiniband_Notice_ProducerTypeVendorID, - {"ProducerTypeVendorID", "infiniband.notice.producertypevendorid", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Notice_TrapNumberDeviceID, - {"TrapNumberDeviceID", "infiniband.notice.trapnumberdeviceid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Notice_IssuerLID, - {"IssuerLID", "infiniband.notice.issuerlid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Notice_NoticeToggle, - {"NoticeToggle", "infiniband.notice.noticetoggle", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_Notice_NoticeCount, - {"NoticeCount", "infiniband.notice.noticecount", FT_UINT16, BASE_HEX, NULL, 0x7FFF, NULL, HFILL} - }, - {&hf_infiniband_Notice_DataDetails, - {"DataDetails", "infiniband.notice.datadetails", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Notice_IssuerGID, - {"IssuerGID", "infiniband.notice.issuergid", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Notice_ClassTrapSpecificData, - {"ClassTrapSpecificData", "infiniband.notice.classtrapspecificdata", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Traps 64,65,66,67 */ - {&hf_infiniband_Trap_GIDADDR, - {"GIDADDR", "infiniband.trap.gidaddr", FT_IPv6, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Traps 68,69 */ - {&hf_infiniband_Trap_COMP_MASK, - {"COMP_MASK", "infiniband.trap.comp_mask", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Trap_WAIT_FOR_REPATH, - {"WAIT_FOR_REPATH", "infiniband.trap.wait_for_repath", FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL} - }, - {&hf_infiniband_Trap_PATH_REC, - {"PATH_REC", "infiniband.trap.path_rec", FT_BYTES, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Trap 128 */ - {&hf_infiniband_Trap_LIDADDR, - {"LIDADDR", "infiniband.trap.lidaddr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Trap 129, 130, 131 */ - {&hf_infiniband_Trap_PORTNO, - {"PORTNO", "infiniband.trap.portno", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - /* Trap 144 */ - {&hf_infiniband_Trap_OtherLocalChanges, - {"OtherLocalChanges", "infiniband.trap.otherlocalchanges", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_CAPABILITYMASK, - {"CAPABILITYMASK", "infiniband.trap.capabilitymask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL} - }, - {&hf_infiniband_Trap_LinkSpeecEnabledChange, - {"LinkSpeecEnabledChange", "infiniband.trap.linkspeecenabledchange", FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL} - }, - {&hf_infiniband_Trap_LinkWidthEnabledChange, - {"LinkWidthEnabledChange", "infiniband.trap.linkwidthenabledchange", FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL} - }, - {&hf_infiniband_Trap_NodeDescriptionChange, - {"NodeDescriptionChange", "infiniband.trap.nodedescriptionchange", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - /* Trap 145 */ - {&hf_infiniband_Trap_SYSTEMIMAGEGUID, - {"SYSTEMIMAGEGUID", "infiniband.trap.systemimageguid", FT_UINT64, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - /* Trap 256 */ - {&hf_infiniband_Trap_DRSLID, - {"DRSLID", "infiniband.trap.drslid", FT_UINT16, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_METHOD, - {"METHOD", "infiniband.trap.method", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_ATTRIBUTEID, - {"ATTRIBUTEID", "infiniband.trap.attributeid", FT_UINT16, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_ATTRIBUTEMODIFIER, - {"ATTRIBUTEMODIFIER", "infiniband.trap.attributemodifier", FT_UINT32, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_MKEY, - {"MKEY", "infiniband.trap.mkey", FT_UINT64, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_DRNotice, - {"DRNotice", "infiniband.trap.drnotice", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_DRPathTruncated, - {"DRPathTruncated", "infiniband.trap.drpathtruncated", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_DRHopCount, - {"DRHopCount", "infiniband.trap.drhopcount", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_DRNoticeReturnPath, - {"DRNoticeReturnPath", "infiniband.trap.drnoticereturnpath", FT_BYTES, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - /* Trap 257, 258 */ - {&hf_infiniband_Trap_LIDADDR1, - {"LIDADDR1", "infiniband.trap.lidaddr1", FT_UINT16, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_LIDADDR2, - {"LIDADDR2", "infiniband.trap.lidaddr2", FT_UINT16, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_KEY, - {"KEY", "infiniband.trap.key", FT_UINT32, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_SL, - {"SL", "infiniband.trap.sl", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_QP1, - {"QP1", "infiniband.trap.qp1", FT_UINT24, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_QP2, - {"QP2", "infiniband.trap.qp2", FT_UINT24, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_GIDADDR1, - {"GIDADDR1", "infiniband.trap.gidaddr1", FT_IPv6, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_GIDADDR2, - {"GIDADDR2", "infiniband.trap.gidaddr2", FT_IPv6, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - /* Trap 259 */ - {&hf_infiniband_Trap_DataValid, - {"DataValid", "infiniband.trap.datavalid", FT_IPv6, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_PKEY, - {"PKEY", "infiniband.trap.pkey", FT_IPv6, BASE_HEX, NULL, 0x01, NULL, HFILL} - }, - {&hf_infiniband_Trap_SWLIDADDR, - {"SWLIDADDR", "infiniband.trap.swlidaddr", FT_IPv6, BASE_HEX, NULL, 0x01, NULL, HFILL} - } -}; - -/* Array to hold expansion options between dissections */ -static gint *ett[] = { - &ett_infiniband, - &ett_all_headers, - &ett_lrh, - &ett_grh, - &ett_bth, - &ett_rwh, - &ett_rawdata, - &ett_rdeth, - &ett_deth, - &ett_reth, - &ett_atomiceth, - &ett_aeth, - &ett_atomicacketh, - &ett_immdt, - &ett_ieth, - &ett_payload, - &ett_vendor, - &ett_subn_lid_routed, - &ett_subn_directed_route, - &ett_subnadmin, - &ett_mad, - &ett_rmpp, - &ett_subm_attribute, - &ett_suba_attribute, - &ett_datadetails, - &ett_noticestraps, - &ett_nodedesc, - &ett_nodeinfo, - &ett_switchinfo, - &ett_guidinfo, - &ett_portinfo, - &ett_portinfo_capmask, - &ett_pkeytable, - &ett_sltovlmapping, - &ett_vlarbitrationtable, - &ett_linearforwardingtable, - &ett_randomforwardingtable, - &ett_multicastforwardingtable, - &ett_sminfo, - &ett_vendordiag, - &ett_ledinfo, - &ett_linkspeedwidthpairs, - &ett_informinfo, - &ett_linkrecord, - &ett_servicerecord, - &ett_pathrecord, - &ett_mcmemberrecord, - &ett_tracerecord, - &ett_multipathrecord, - &ett_serviceassocrecord -}; - - -#endif diff --git a/plugins/infiniband/plugin.rc.in b/plugins/infiniband/plugin.rc.in deleted file mode 100644 index 8cb960fe82..0000000000 --- a/plugins/infiniband/plugin.rc.in +++ /dev/null @@ -1,34 +0,0 @@ -#include "winver.h" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION @RC_MODULE_VERSION@ - PRODUCTVERSION @RC_VERSION@ - FILEFLAGSMASK 0x0L -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0 -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_DLL -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Endace Technology Limited, http://www.endace.com/\0" - VALUE "FileDescription", "@PACKAGE@ dissector\0" - VALUE "FileVersion", "@MODULE_VERSION@\0" - VALUE "InternalName", "@PACKAGE@ @MODULE_VERSION@\0" - VALUE "LegalCopyright", "Copyright © 2008 Endace Technology Limited\0" - VALUE "OriginalFilename", "@PLUGIN_NAME@.dll\0" - VALUE "ProductName", "Wireshark\0" - VALUE "ProductVersion", "@VERSION@\0" - VALUE "Comments", "Build with @MSVC_VARIANT@\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END |