2003-01-14 01:17:44 +00:00
/* packet-fcfcs.c
* Routines for FC Fabric Configuration Server
* Copyright 2001 , Dinesh G Dutt < ddutt @ andiamo . com >
*
2006-05-21 04:49:01 +00:00
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
2003-01-14 01:17:44 +00:00
* Copyright 1998 Gerald Combs
2010-10-11 19:00:55 +00:00
*
2003-01-14 01:17:44 +00:00
* 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 .
2010-10-11 19:00:55 +00:00
*
2003-01-14 01:17:44 +00:00
* 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 .
2010-10-11 19:00:55 +00:00
*
2003-01-14 01:17:44 +00:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 23:18:38 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2003-01-14 01:17:44 +00:00
*/
2012-09-20 02:03:38 +00:00
# include "config.h"
2003-01-14 01:17:44 +00:00
# include <epan/packet.h>
2013-11-09 13:41:10 +00:00
# include <epan/to_str.h>
2015-06-04 03:18:42 +00:00
# include <epan/expert.h>
2003-01-14 01:17:44 +00:00
# include "packet-fc.h"
# include "packet-fcct.h"
# include "packet-fcfcs.h"
2013-12-15 23:44:12 +00:00
void proto_register_fcfcs ( void ) ;
void proto_reg_handoff_fcfcs ( void ) ;
2004-12-31 20:35:55 +00:00
/*
* See the FC - GS3 specification .
*/
2003-01-14 01:17:44 +00:00
/* Initialize the protocol and registered fields */
static int proto_fcfcs = - 1 ;
static int hf_fcs_opcode = - 1 ;
static int hf_fcs_iename = - 1 ;
static int hf_fcs_ietype = - 1 ;
static int hf_fcs_iedomainid = - 1 ;
static int hf_fcs_mgmtid = - 1 ;
static int hf_fcs_fabricname = - 1 ;
static int hf_fcs_mgmtaddr = - 1 ;
static int hf_fcs_lname = - 1 ;
static int hf_fcs_vendorname = - 1 ;
static int hf_fcs_modelname = - 1 ;
static int hf_fcs_portname = - 1 ;
static int hf_fcs_portmodtype = - 1 ;
static int hf_fcs_porttxtype = - 1 ;
static int hf_fcs_porttype = - 1 ;
static int hf_fcs_physportnum = - 1 ;
static int hf_fcs_portflags = - 1 ;
static int hf_fcs_portstate = - 1 ;
2014-09-11 20:43:00 +00:00
static int hf_fcs_platformname_len = - 1 ;
2003-01-14 01:17:44 +00:00
static int hf_fcs_platformname = - 1 ;
static int hf_fcs_platformnname = - 1 ;
static int hf_fcs_platformtype = - 1 ;
static int hf_fcs_platformaddr = - 1 ;
static int hf_fcs_reason = - 1 ;
static int hf_fcs_rjtdetail = - 1 ;
static int hf_fcs_vendor = - 1 ;
static int hf_fcs_numcap = - 1 ;
static int hf_fcs_mgmt_subtype = - 1 ;
static int hf_fcs_unsmask = - 1 ;
static int hf_fcs_vnd_capmask = - 1 ;
static int hf_fcs_fcsmask = - 1 ;
static int hf_fcs_maxres_size = - 1 ;
static int hf_fcs_releasecode = - 1 ;
2015-06-04 03:18:42 +00:00
/* Generated from convert_proto_tree_add_text.pl */
static int hf_fcfcs_num_ie_entries = - 1 ;
static int hf_fcfcs_num_mgmt_addresses = - 1 ;
static int hf_fcfcs_list_length = - 1 ;
static int hf_fcfcs_vendor_specific_information = - 1 ;
static int hf_fcfcs_num_port_entries = - 1 ;
static int hf_fcfcs_num_attached_port_entries = - 1 ;
static int hf_fcfcs_num_platform_node_name_entries = - 1 ;
static int hf_fcfcs_num_mgmt_address_entries = - 1 ;
static int hf_fcfcs_num_platform_name_entries = - 1 ;
/* Generated from convert_proto_tree_add_text.pl */
static expert_field ei_fcfcs_no_record_of_exchange = EI_INIT ;
2003-01-14 01:17:44 +00:00
/* Initialize the subtree pointers */
static gint ett_fcfcs = - 1 ;
typedef struct _fcfcs_conv_key {
guint32 conv_idx ;
} fcfcs_conv_key_t ;
typedef struct _fcfcs_conv_data {
guint32 opcode ;
} fcfcs_conv_data_t ;
2010-10-11 19:00:55 +00:00
static GHashTable * fcfcs_req_hash = NULL ;
2003-01-14 01:17:44 +00:00
static dissector_handle_t data_handle ;
/*
* Hash Functions
*/
static gint
fcfcs_equal ( gconstpointer v , gconstpointer w )
{
2013-03-19 20:00:52 +00:00
const fcfcs_conv_key_t * v1 = ( const fcfcs_conv_key_t * ) v ;
const fcfcs_conv_key_t * v2 = ( const fcfcs_conv_key_t * ) w ;
2003-01-14 01:17:44 +00:00
return ( v1 - > conv_idx = = v2 - > conv_idx ) ;
}
static guint
fcfcs_hash ( gconstpointer v )
{
2013-03-19 20:00:52 +00:00
const fcfcs_conv_key_t * key = ( const fcfcs_conv_key_t * ) v ;
2010-10-11 19:00:55 +00:00
guint val ;
2003-01-14 01:17:44 +00:00
2010-10-11 19:00:55 +00:00
val = key - > conv_idx ;
2003-01-14 01:17:44 +00:00
2010-10-11 19:00:55 +00:00
return val ;
2003-01-14 01:17:44 +00:00
}
/*
* Protocol initialization
*/
static void
fcfcs_init_protocol ( void )
{
2010-10-11 19:00:55 +00:00
if ( fcfcs_req_hash )
g_hash_table_destroy ( fcfcs_req_hash ) ;
2003-01-14 01:17:44 +00:00
2010-10-11 19:00:55 +00:00
fcfcs_req_hash = g_hash_table_new ( fcfcs_hash , fcfcs_equal ) ;
2003-01-14 01:17:44 +00:00
}
/* Code to actually dissect the packets */
static void
dissect_fcfcs_giel ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the ct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i ;
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
if ( ! isreq & & tree ) {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_ie_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_ietype , tvb , offset + 11 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 12 ;
}
}
}
static void
dissect_fcfcs_giet ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_ietype , tvb , offset + 3 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gdid ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_iedomainid , tvb , offset + 1 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gmid ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-01-04 02:56:16 +00:00
proto_tree_add_item ( tree , hf_fcs_mgmtid , tvb , offset + 1 , 3 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gfn ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_fabricname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gieln ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_lname , tvb , offset ,
1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gmal ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_mgmt_addresses , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_mgmtaddr , tvb , offset , 1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 256 ;
}
}
}
}
static void
dissect_fcfcs_gieil ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-23 03:31:23 +00:00
guint len ;
2015-06-04 03:18:42 +00:00
guint32 tot_len , prevlen ;
2003-01-14 01:17:44 +00:00
2015-06-23 03:31:23 +00:00
if ( isreq ) {
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
}
else {
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_list_length , tvb , offset + 3 , 1 , ENC_NA , & tot_len ) ;
prevlen = 0 ;
len = tvb_strsize ( tvb , offset + 4 ) ;
proto_tree_add_item ( tree , hf_fcs_vendorname , tvb , offset + 4 ,
len , ENC_ASCII | ENC_NA ) ;
prevlen + = len ;
len = tvb_strsize ( tvb , offset + 4 + prevlen ) ;
proto_tree_add_item ( tree , hf_fcs_modelname , tvb , offset + 4 + prevlen ,
len , ENC_ASCII | ENC_NA ) ;
prevlen + = len ;
len = tvb_strsize ( tvb , offset + 4 + prevlen ) ;
proto_tree_add_item ( tree , hf_fcs_releasecode , tvb ,
offset + 4 + prevlen , len , ENC_ASCII | ENC_NA ) ;
prevlen + = len ;
offset + = ( 4 + prevlen ) ;
while ( tot_len > prevlen ) {
len = tvb_strsize ( tvb , offset ) ;
proto_tree_add_item ( tree , hf_fcfcs_vendor_specific_information , tvb , offset , len , ENC_NA | ENC_ASCII ) ;
2004-12-31 20:35:55 +00:00
prevlen + = len ;
2015-06-23 03:31:23 +00:00
offset + = len ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gpl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_port_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_portmodtype , tvb , offset + 9 ,
2011-10-06 03:35:44 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_porttxtype , tvb , offset + 10 ,
2011-10-06 03:35:44 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_porttype , tvb , offset + 11 ,
2011-10-06 03:35:44 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 12 ;
}
}
}
}
static void
dissect_fcfcs_gpt ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_porttype , tvb , offset + 3 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gppn ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2011-10-05 00:25:09 +00:00
proto_tree_add_item ( tree , hf_fcs_physportnum , tvb , offset , 4 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gapnl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_attached_port_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_portflags , tvb , offset + 10 ,
2011-10-10 00:39:31 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_porttype , tvb , offset + 11 ,
2011-10-06 03:35:44 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 12 ;
}
}
}
}
static void
dissect_fcfcs_gps ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_portname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_porttype , tvb , offset + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_fcs_portstate , tvb , offset + 7 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gplnl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i , len ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_platform_node_name_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_platformnname , tvb , offset ,
8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
offset + = 8 ;
}
}
}
}
static void
dissect_fcfcs_gplt ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
proto_tree_add_item ( tree , hf_fcs_platformtype , tvb , offset + 3 ,
2011-10-06 03:35:44 +00:00
1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gplml ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i , len ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_mgmt_address_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_platformaddr , tvb , offset , 1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 256 ;
}
}
}
}
static void
dissect_fcfcs_gnpl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
int len ;
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_platformnname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
else {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gpnl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fcct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i , len ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( ! isreq ) {
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_platform_name_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
offset + = 256 ;
}
}
}
}
static void
dissect_fcfcs_rieln ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_iename , tvb , offset , 8 , ENC_NA ) ;
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_lname , tvb , offset + 8 , 1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_rpl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
2015-06-04 03:18:42 +00:00
guint32 numelem , i , len ;
2003-01-14 01:17:44 +00:00
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2004-02-29 09:02:19 +00:00
proto_tree_add_item ( tree , hf_fcs_platformtype , tvb , offset + 256 , 4 ,
2011-10-06 03:35:44 +00:00
ENC_BIG_ENDIAN ) ;
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_mgmt_address_entries , tvb , offset + 260 , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 264 ;
for ( i = 0 ; i < numelem ; i + + ) {
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_mgmtaddr , tvb , offset , 1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 256 ;
}
2015-06-04 03:18:42 +00:00
proto_tree_add_item_ret_uint ( tree , hf_fcfcs_num_platform_node_name_entries , tvb , offset , 4 , ENC_BIG_ENDIAN , & numelem ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numelem ; i + + ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_platformnname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
offset + = 8 ;
}
}
}
}
static void
dissect_fcfcs_rpln ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_platformnname , tvb , offset + 256 ,
8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_rplt ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2004-02-29 09:02:19 +00:00
proto_tree_add_item ( tree , hf_fcs_platformtype , tvb , offset + 256 ,
2011-10-06 03:35:44 +00:00
4 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_rplm ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2015-06-04 03:18:42 +00:00
proto_tree_add_item ( tree , hf_fcs_platformaddr , tvb , offset + 256 ,
1 , ENC_ASCII | ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_dpl ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_dpln ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
if ( tree ) {
if ( isreq ) {
2014-12-24 05:06:35 +00:00
proto_tree_add_item ( tree , hf_fcs_platformnname , tvb , offset , 8 , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_dplml ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int len ;
if ( tree ) {
if ( isreq ) {
len = tvb_get_guint8 ( tvb , offset ) ;
2014-09-11 20:43:00 +00:00
proto_tree_add_uint ( tree , hf_fcs_platformname_len , tvb , offset , 1 , len ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_platformname , tvb , offset + 1 ,
2011-10-05 00:25:09 +00:00
len , ENC_NA ) ;
2003-01-14 01:17:44 +00:00
}
}
}
static void
dissect_fcfcs_gcap ( tvbuff_t * tvb , proto_tree * tree , gboolean isreq )
{
int offset = 16 ; /* past the fc_ct header */
int numrec , i ;
guint8 subtype ;
if ( tree ) {
if ( ! isreq ) {
numrec = tvb_get_ntohl ( tvb , offset ) ;
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_numcap , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
offset + = 4 ;
for ( i = 0 ; i < numrec ; i + + ) {
subtype = tvb_get_guint8 ( tvb , offset ) ;
2005-08-04 10:24:33 +00:00
proto_tree_add_uint ( tree , hf_fcs_mgmt_subtype , tvb , offset ,
1 , subtype ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_vnd_capmask , tvb , offset + 1 ,
2011-10-06 03:35:44 +00:00
3 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
if ( subtype = = FCCT_GSSUBTYPE_FCS ) {
proto_tree_add_item ( tree , hf_fcs_fcsmask , tvb , offset + 4 ,
2011-10-06 03:35:44 +00:00
4 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
else if ( subtype = = FCCT_GSSUBTYPE_UNS ) {
proto_tree_add_item ( tree , hf_fcs_unsmask , tvb , offset + 4 ,
2011-10-06 03:35:44 +00:00
4 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
2005-08-04 10:24:33 +00:00
offset + = 8 ;
2003-01-14 01:17:44 +00:00
}
}
}
}
static void
dissect_fcfcs_rjt ( tvbuff_t * tvb , proto_tree * tree )
{
int offset = 0 ;
if ( tree ) {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( tree , hf_fcs_reason , tvb , offset + 13 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( tree , hf_fcs_rjtdetail , tvb , offset + 14 , 1 ,
2011-10-06 03:35:44 +00:00
ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_fcs_vendor , tvb , offset + 15 , 1 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
}
2013-11-25 16:04:57 +00:00
static int
dissect_fcfcs ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data )
2003-01-14 01:17:44 +00:00
{
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
/* Set up structures needed to add the protocol subtree and manage it */
int offset = 0 ;
proto_item * ti ;
proto_tree * fcfcs_tree = NULL ;
fc_ct_preamble cthdr ;
gboolean isreq = 1 ;
conversation_t * conversation ;
fcfcs_conv_data_t * cdata ;
fcfcs_conv_key_t ckey , * req_key ;
int opcode ,
failed_opcode = 0 ;
2013-12-10 03:33:50 +00:00
fc_hdr * fchdr ;
/* Reject the packet if data is NULL */
if ( data = = NULL )
return 0 ;
fchdr = ( fc_hdr * ) data ;
2003-01-14 01:17:44 +00:00
/* Make entries in Protocol column and Info column on summary display */
2009-08-09 06:26:46 +00:00
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " FC-FCS " ) ;
2010-10-11 19:00:55 +00:00
2014-06-26 02:59:50 +00:00
ti = proto_tree_add_protocol_format ( tree , proto_fcfcs , tvb , 0 ,
tvb_reported_length ( tvb ) ,
" FCS " ) ;
fcfcs_tree = proto_item_add_subtree ( ti , ett_fcfcs ) ;
2003-01-14 01:17:44 +00:00
tvb_memcpy ( tvb , ( guint8 * ) & cthdr , offset , FCCT_PRMBL_SIZE ) ;
cthdr . revision = tvb_get_guint8 ( tvb , offset ) ;
cthdr . in_id = tvb_get_ntoh24 ( tvb , offset + 1 ) ;
2008-01-10 14:42:55 +00:00
cthdr . opcode = g_ntohs ( cthdr . opcode ) ;
2003-01-14 01:17:44 +00:00
opcode = tvb_get_ntohs ( tvb , offset + 8 ) ;
2008-01-10 14:42:55 +00:00
cthdr . maxres_size = g_ntohs ( cthdr . maxres_size ) ;
2003-01-14 01:17:44 +00:00
if ( ( opcode ! = FCCT_MSG_ACC ) & & ( opcode ! = FCCT_MSG_RJT ) ) {
2005-02-02 20:07:03 +00:00
conversation = find_conversation ( pinfo - > fd - > num , & pinfo - > src , & pinfo - > dst ,
2013-11-25 16:04:57 +00:00
pinfo - > ptype , fchdr - > oxid ,
fchdr - > rxid , NO_PORT2 ) ;
2003-01-14 01:17:44 +00:00
if ( ! conversation ) {
2005-02-02 20:07:03 +00:00
conversation = conversation_new ( pinfo - > fd - > num , & pinfo - > src , & pinfo - > dst ,
2013-11-25 16:04:57 +00:00
pinfo - > ptype , fchdr - > oxid ,
fchdr - > rxid , NO_PORT2 ) ;
2003-01-14 01:17:44 +00:00
}
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
ckey . conv_idx = conversation - > index ;
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
cdata = ( fcfcs_conv_data_t * ) g_hash_table_lookup ( fcfcs_req_hash ,
& ckey ) ;
if ( cdata ) {
/* Since we never free the memory used by an exchange, this maybe a
* case of another request using the same exchange as a previous
2010-10-11 19:00:55 +00:00
* req .
2003-01-14 01:17:44 +00:00
*/
cdata - > opcode = opcode ;
}
else {
2013-09-15 09:12:01 +00:00
req_key = wmem_new ( wmem_file_scope ( ) , fcfcs_conv_key_t ) ;
2003-01-14 01:17:44 +00:00
req_key - > conv_idx = conversation - > index ;
2010-10-11 19:00:55 +00:00
2013-09-15 09:12:01 +00:00
cdata = wmem_new ( wmem_file_scope ( ) , fcfcs_conv_data_t ) ;
2003-01-14 01:17:44 +00:00
cdata - > opcode = opcode ;
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
g_hash_table_insert ( fcfcs_req_hash , req_key , cdata ) ;
}
2013-06-14 01:02:11 +00:00
col_add_str ( pinfo - > cinfo , COL_INFO ,
2003-01-14 01:17:44 +00:00
val_to_str ( opcode , fc_fcs_opcode_abbrev_val , " 0x%x " ) ) ;
}
else {
/* Opcode is ACC or RJT */
2005-02-02 20:07:03 +00:00
conversation = find_conversation ( pinfo - > fd - > num , & pinfo - > src , & pinfo - > dst ,
2013-11-25 16:04:57 +00:00
pinfo - > ptype , fchdr - > oxid ,
fchdr - > rxid , NO_PORT2 ) ;
2003-01-14 01:17:44 +00:00
isreq = 0 ;
if ( ! conversation ) {
2013-06-14 01:02:11 +00:00
if ( opcode = = FCCT_MSG_ACC ) {
col_add_str ( pinfo - > cinfo , COL_INFO ,
2003-01-14 01:17:44 +00:00
val_to_str ( opcode , fc_fcs_opcode_abbrev_val ,
" 0x%x " ) ) ;
/* No record of what this accept is for. Can't decode */
2015-06-04 03:18:42 +00:00
proto_tree_add_expert ( fcfcs_tree , pinfo , & ei_fcfcs_no_record_of_exchange , tvb , 0 , - 1 ) ;
2013-11-25 16:04:57 +00:00
return 0 ;
2003-01-14 01:17:44 +00:00
}
}
else {
ckey . conv_idx = conversation - > index ;
cdata = ( fcfcs_conv_data_t * ) g_hash_table_lookup ( fcfcs_req_hash ,
& ckey ) ;
if ( cdata ! = NULL ) {
if ( opcode = = FCCT_MSG_ACC )
opcode = cdata - > opcode ;
else
failed_opcode = cdata - > opcode ;
}
2010-10-11 19:00:55 +00:00
2013-06-14 01:02:11 +00:00
if ( opcode ! = FCCT_MSG_RJT ) {
col_add_fstr ( pinfo - > cinfo , COL_INFO , " MSG_ACC (%s) " ,
val_to_str ( opcode , fc_fcs_opcode_abbrev_val ,
" 0x%x " ) ) ;
}
else {
col_add_fstr ( pinfo - > cinfo , COL_INFO , " MSG_RJT (%s) " ,
val_to_str ( failed_opcode ,
fc_fcs_opcode_abbrev_val ,
" 0x%x " ) ) ;
2003-01-14 01:17:44 +00:00
}
2010-10-11 19:00:55 +00:00
2015-06-04 03:18:42 +00:00
if ( ( cdata = = NULL ) & & ( opcode ! = FCCT_MSG_RJT ) ) {
/* No record of what this accept is for. Can't decode */
proto_tree_add_expert ( fcfcs_tree , pinfo , & ei_fcfcs_no_record_of_exchange , tvb , 0 , - 1 ) ;
return 0 ;
2003-01-14 01:17:44 +00:00
}
}
}
2010-10-11 19:00:55 +00:00
2003-01-14 01:17:44 +00:00
if ( tree ) {
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( fcfcs_tree , hf_fcs_opcode , tvb , offset + 8 , 2 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
proto_tree_add_item ( fcfcs_tree , hf_fcs_maxres_size , tvb , offset + 10 ,
2011-10-06 03:35:44 +00:00
2 , ENC_BIG_ENDIAN ) ;
2003-01-14 01:17:44 +00:00
}
switch ( opcode ) {
case FCCT_MSG_RJT :
dissect_fcfcs_rjt ( tvb , fcfcs_tree ) ;
break ;
case FCFCS_GIEL :
dissect_fcfcs_giel ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GIET :
dissect_fcfcs_giet ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GDID :
dissect_fcfcs_gdid ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GMID :
dissect_fcfcs_gmid ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GFN :
dissect_fcfcs_gfn ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GIELN :
dissect_fcfcs_gieln ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GMAL :
dissect_fcfcs_gmal ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GIEIL :
dissect_fcfcs_gieil ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPL :
dissect_fcfcs_gpl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPT :
dissect_fcfcs_gpt ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPPN :
dissect_fcfcs_gppn ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GAPNL :
dissect_fcfcs_gapnl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPS :
dissect_fcfcs_gps ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPLNL :
dissect_fcfcs_gplnl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPLT :
dissect_fcfcs_gplt ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPLML :
dissect_fcfcs_gplml ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GNPL :
dissect_fcfcs_gnpl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GPNL :
dissect_fcfcs_gpnl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_RIELN :
dissect_fcfcs_rieln ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_RPL :
dissect_fcfcs_rpl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_RPLN :
dissect_fcfcs_rpln ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_RPLT :
dissect_fcfcs_rplt ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_RPLM :
dissect_fcfcs_rplm ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_DPL :
dissect_fcfcs_dpl ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_DPLN :
dissect_fcfcs_dpln ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_DPLML :
dissect_fcfcs_dplml ( tvb , fcfcs_tree , isreq ) ;
break ;
case FCFCS_GCAP :
dissect_fcfcs_gcap ( tvb , fcfcs_tree , isreq ) ;
break ;
default :
call_dissector ( data_handle , tvb , pinfo , fcfcs_tree ) ;
break ;
}
2013-11-25 16:04:57 +00:00
2015-06-23 03:53:46 +00:00
return tvb_captured_length ( tvb ) ;
2003-01-14 01:17:44 +00:00
}
2006-05-21 04:49:01 +00:00
/* Register the protocol with Wireshark */
2003-01-14 01:17:44 +00:00
void
proto_register_fcfcs ( void )
2010-10-11 19:00:55 +00:00
{
2003-01-14 01:17:44 +00:00
static hf_register_info hf [ ] = {
{ & hf_fcs_opcode ,
{ " Opcode " , " fcs.opcode " , FT_UINT16 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_opcode_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_iename ,
2014-12-24 05:06:35 +00:00
{ " Interconnect Element Name " , " fcs.ie.name " , FT_FCWWN , BASE_NONE ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_ietype ,
{ " Interconnect Element Type " , " fcs.ie.type " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_ietype_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_iedomainid ,
{ " Interconnect Element Domain ID " , " fcs.ie.domainid " , FT_UINT8 ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_mgmtid ,
2015-01-04 02:56:16 +00:00
{ " Interconnect Element Mgmt. ID " , " fcs.ie.mgmtid " , FT_BYTES ,
2015-01-11 00:26:46 +00:00
SEP_DOT , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_fabricname ,
2014-12-24 05:06:35 +00:00
{ " Interconnect Element Fabric Name " , " fcs.ie.fname " , FT_FCWWN ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_mgmtaddr ,
2015-06-04 03:18:42 +00:00
{ " Interconnect Element Mgmt. Address " , " fcs.ie.mgmtaddr " , FT_UINT_STRING ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_lname ,
2015-06-04 03:18:42 +00:00
{ " Interconnect Element Logical Name " , " fcs.ie.logname " , FT_UINT_STRING ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_vendorname ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
{ " Vendor Name " , " fcs.vendorname " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL ,
2003-01-14 01:17:44 +00:00
HFILL } } ,
{ & hf_fcs_modelname ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
{ " Model Name/Number " , " fcs.modelname " , FT_STRING , BASE_NONE , NULL ,
0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_portname ,
2014-12-24 05:06:35 +00:00
{ " Port Name " , " fcs.port.name " , FT_FCWWN , BASE_NONE , NULL , 0x0 , NULL ,
2003-01-14 01:17:44 +00:00
HFILL } } ,
{ & hf_fcs_portmodtype ,
{ " Port Module Type " , " fcs.port.moduletype " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_port_modtype_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_porttxtype ,
{ " Port TX Type " , " fcs.port.txtype " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_port_txtype_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_porttype ,
{ " Port Type " , " fcs.port.type " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_port_type_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_physportnum ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
{ " Physical Port Number " , " fcs.port.physportnum " , FT_BYTES , BASE_NONE ,
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_portflags ,
{ " Port Flags " , " fcs.port.flags " , FT_BOOLEAN , BASE_NONE ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
TFS ( & fc_fcs_portflags_tfs ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_portstate ,
{ " Port State " , " fcs.port.state " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_port_state_val ) , 0x0 , NULL , HFILL } } ,
2014-09-11 20:43:00 +00:00
{ & hf_fcs_platformname_len ,
{ " Platform Name Length " , " fcs.platform.len " , FT_UINT8 , BASE_DEC ,
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_platformname ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
{ " Platform Name " , " fcs.platform.name " , FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_platformnname ,
2014-12-24 05:06:35 +00:00
{ " Platform Node Name " , " fcs.platform.nodename " , FT_FCWWN , BASE_NONE ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_platformtype ,
{ " Platform Type " , " fcs.platform.type " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_plat_type_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_platformaddr ,
2015-06-04 03:18:42 +00:00
{ " Management Address " , " fcs.platform.mgmtaddr " , FT_UINT_STRING , BASE_NONE ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_reason ,
{ " Reason Code " , " fcs.reason " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_ct_rjt_code_vals ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_rjtdetail ,
{ " Reason Code Explanantion " , " fcs.reasondet " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_rjt_code_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_vendor ,
{ " Vendor Unique Reject Code " , " fcs.err.vendor " , FT_UINT8 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_numcap ,
{ " Number of Capabilities " , " fcs.numcap " , FT_UINT32 , BASE_DEC , NULL ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_mgmt_subtype ,
{ " Management GS Subtype " , " fcs.gssubtype " , FT_UINT8 , BASE_HEX , NULL ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_vnd_capmask ,
{ " Vendor Unique Capability Bitmask " , " fcs.vbitmask " , FT_UINT24 ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_fcsmask ,
{ " Subtype Capability Bitmask " , " fcs.fcsmask " , FT_UINT32 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_fcsmask_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_unsmask ,
{ " Subtype Capability Bitmask " , " fcs.unsmask " , FT_UINT32 , BASE_HEX ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
VALS ( fc_fcs_unsmask_val ) , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_maxres_size ,
{ " Maximum/Residual Size " , " fcs.maxres_size " , FT_UINT16 , BASE_DEC ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
{ & hf_fcs_releasecode ,
From Kovarththanan Rajaratnam via bug 3548:
(1) Trailing/leading spaces are removed from 'name's/'blurb's
(2) Duplicate 'blurb's are replaced with NULL
(3) Empty ("") 'blurb's are replaced with NULL
(4) BASE_NONE, NULL, 0x0 are used for 'display', 'strings' and 'bitmask' fields
for FT_NONE, FT_BYTES, FT_IPv4, FT_IPv6, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_PROTOCOL, FT_STRING and FT_STRINGZ field types
(5) Only allow non-zero value for 'display' if 'bitmask' is non-zero
svn path=/trunk/; revision=28770
2009-06-18 21:30:42 +00:00
{ " Release Code " , " fcs.releasecode " , FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL } } ,
2015-06-04 03:18:42 +00:00
/* Generated from convert_proto_tree_add_text.pl */
{ & hf_fcfcs_num_ie_entries , { " Number of IE entries " , " fcfcs.num_ie_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_mgmt_addresses , { " Number of Mgmt. Addresses " , " fcfcs.num_mgmt_addresses " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_list_length , { " List Length " , " fcfcs.list_length " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_vendor_specific_information , { " Vendor-specific Information " , " fcfcs.vendor_specific_information " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_port_entries , { " Number of Port Entries " , " fcfcs.num_port_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_attached_port_entries , { " Number of Attached Port Entries " , " fcfcs.num_attached_port_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_platform_node_name_entries , { " Number of Platform Node Name Entries " , " fcfcs.num_platform_node_name_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_mgmt_address_entries , { " Number of Mgmt. Address Entries " , " fcfcs.num_mgmt_address_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_fcfcs_num_platform_name_entries , { " Number of Platform Name Entries " , " fcfcs.num_platform_name_entries " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
2003-01-14 01:17:44 +00:00
} ;
static gint * ett [ ] = {
& ett_fcfcs ,
} ;
2015-06-04 03:18:42 +00:00
static ei_register_info ei [ ] = {
/* Generated from convert_proto_tree_add_text.pl */
{ & ei_fcfcs_no_record_of_exchange , { " fcfcs.no_record_of_exchange " , PI_UNDECODED , PI_WARN , " No record of Exchg. Unable to decode MSG_ACC/RJT " , EXPFILL } } ,
} ;
expert_module_t * expert_fcfcs ;
2003-01-14 01:17:44 +00:00
proto_fcfcs = proto_register_protocol ( " FC Fabric Configuration Server " ,
" FC-FCS " , " fcs " ) ;
proto_register_field_array ( proto_fcfcs , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
2015-06-04 03:18:42 +00:00
expert_fcfcs = expert_register_protocol ( proto_fcfcs ) ;
expert_register_field_array ( expert_fcfcs , ei , array_length ( ei ) ) ;
2003-01-14 01:17:44 +00:00
register_init_routine ( & fcfcs_init_protocol ) ;
}
void
proto_reg_handoff_fcfcs ( void )
{
dissector_handle_t fcs_handle ;
2013-11-25 16:04:57 +00:00
fcs_handle = new_create_dissector_handle ( dissect_fcfcs , proto_fcfcs ) ;
2010-10-11 19:00:55 +00:00
2010-12-20 05:35:29 +00:00
dissector_add_uint ( " fcct.server " , FCCT_GSRVR_FCS , fcs_handle ) ;
2003-01-14 01:17:44 +00:00
data_handle = find_dissector ( " data " ) ;
}
2014-09-28 23:25:09 +00:00
/*
* Editor modelines - http : //www.wireshark.org/tools/modelines.html
*
* Local variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
* vi : set shiftwidth = 4 tabstop = 8 expandtab :
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/