Create FT_FCWWN field type.

Also, convert the "string" hf_ entries that used tvb_fcwwn_to_str as a string to use proto_tree_add_item with FT_FCWWN type.

Change-Id: I4ca77870499fd8239584a70874998b5d194a7167
Reviewed-on: https://code.wireshark.org/review/6036
Petri-Dish: Michael Mann <mmann78@netscape.net>
Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
Michael Mann 2014-12-24 00:06:35 -05:00
parent 8965e90a25
commit 71c02b20eb
24 changed files with 381 additions and 310 deletions

View File

@ -106,7 +106,8 @@ FIELDTYPE FT_NONE, FT_BOOLEAN, FT_UINT8, FT_UINT16, FT_UINT24,
FT_RELATIVE_TIME, FT_STRING, FT_STRINGZ, FT_EUI64,
FT_UINT_STRING, FT_ETHER, FT_BYTES, FT_UINT_BYTES, FT_IPv4,
FT_IPv6, FT_IPXNET, FT_FRAMENUM, FT_PROTOCOL, FT_GUID, FT_OID,
FT_REL_OID
FT_REL_OID, FT_AX25, FT_VINES, FT_SYSTEM_ID, FT_FCWWN
FIELDDISPLAY --For FT_UINT{8,16,24,32,64} and FT_INT{8,16,24,32,64):
BASE_DEC, BASE_HEX, BASE_OCT, BASE_DEC_HEX, BASE_HEX_DEC,
@ -741,7 +742,11 @@ The type of value this field holds. The current field types are:
FT_GUID A Globally Unique Identifier
FT_OID An ASN.1 Object Identifier
FT_REL_OID An ASN.1 Relative Object Identifier
FT_EUI64 A EUI-64 Address
FT_EUI64 A EUI-64 Address
FT_AX25 A AX-25 Address
FT_VINES A Vines Address
FT_SYSTEM_ID An OSI System-ID
FT_FCWWN A Fibre Channel WWN Address
Some of these field types are still not handled in the display filter
routines, but the most common ones are. The FT_UINT* variables all
@ -1374,9 +1379,10 @@ proto_register_*() function) and a value. The value will be fetched
from the tvbuff by proto_tree_add_item(), based on the type of the field
and the encoding of the value as specified by the "encoding" argument.
For FT_NONE, FT_BYTES, FT_ETHER, FT_IPv6, FT_IPXNET, FT_OID, FT_REL_OID
fields, and 'protocol' fields the encoding is not relevant; the 'encoding'
argument should be ENC_NA (Not Applicable).
For FT_NONE, FT_BYTES, FT_ETHER, FT_IPv6, FT_IPXNET, FT_OID, FT_REL_OID,
FT_AX25, FT_VINES, FT_SYSTEM_ID, FT_FCWWN fields, and 'protocol' fields
the encoding is not relevant; the 'encoding' argument should be
ENC_NA (Not Applicable).
For integral, floating-point, Boolean, FT_GUID, and FT_EUI64 fields,
the encoding specifies the byte order of the value; the 'encoding'

View File

@ -46,6 +46,7 @@ typedef enum {
AT_OSI, /* OSI NSAP */
AT_ARCNET, /* ARCNET */
AT_FC, /* Fibre Channel */
AT_FCWWN, /* Fibre Channel WWN */
AT_SS7PC, /* SS7 Point Code */
AT_STRINGZ, /* null-terminated string */
AT_EUI64, /* IEEE EUI-64 */

View File

@ -380,52 +380,56 @@ tvb_fc_to_str(tvbuff_t *tvb, const gint offset)
#define FC_NH_NAA_CCITT_INDV 12 /* CCITT 60 bit individual address */
#define FC_NH_NAA_CCITT_GRP 14 /* CCITT 60 bit group address */
gchar *
fcwwn_to_str (const guint8 *ad)
static void
fcwwn_addr_to_str_buf(const guint8 *addrp, gchar *buf, int buf_len)
{
int fmt;
guint8 oui[6];
gchar *ethstr;
gchar *ethptr;
if (ad == NULL) return NULL;
ethstr=(gchar *)ep_alloc(512);
ethptr = bytes_to_hexstr_punct(ethstr, ad, 8, ':'); /* 23 bytes */
fmt = (ad[0] & 0xF0) >> 4;
if (buf_len < 200) { /* This is mostly for manufacturer name */
g_strlcpy(buf, BUF_TOO_SMALL_ERR, buf_len); /* Let the unexpected value alert user */
return;
}
ethptr = bytes_to_hexstr_punct(buf, addrp, 8, ':'); /* 23 bytes */
fmt = (addrp[0] & 0xF0) >> 4;
switch (fmt) {
case FC_NH_NAA_IEEE:
case FC_NH_NAA_IEEE_E:
memcpy (oui, &ad[2], 6);
memcpy (oui, &addrp[2], 6);
g_snprintf (ethptr, 512-23, " (%s)", get_manuf_name (oui));
g_snprintf (ethptr, buf_len-23, " (%s)", get_manuf_name (oui));
break;
case FC_NH_NAA_IEEE_R:
oui[0] = ((ad[0] & 0x0F) << 4) | ((ad[1] & 0xF0) >> 4);
oui[1] = ((ad[1] & 0x0F) << 4) | ((ad[2] & 0xF0) >> 4);
oui[2] = ((ad[2] & 0x0F) << 4) | ((ad[3] & 0xF0) >> 4);
oui[3] = ((ad[3] & 0x0F) << 4) | ((ad[4] & 0xF0) >> 4);
oui[4] = ((ad[4] & 0x0F) << 4) | ((ad[5] & 0xF0) >> 4);
oui[5] = ((ad[5] & 0x0F) << 4) | ((ad[6] & 0xF0) >> 4);
oui[0] = ((addrp[0] & 0x0F) << 4) | ((addrp[1] & 0xF0) >> 4);
oui[1] = ((addrp[1] & 0x0F) << 4) | ((addrp[2] & 0xF0) >> 4);
oui[2] = ((addrp[2] & 0x0F) << 4) | ((addrp[3] & 0xF0) >> 4);
oui[3] = ((addrp[3] & 0x0F) << 4) | ((addrp[4] & 0xF0) >> 4);
oui[4] = ((addrp[4] & 0x0F) << 4) | ((addrp[5] & 0xF0) >> 4);
oui[5] = ((addrp[5] & 0x0F) << 4) | ((addrp[6] & 0xF0) >> 4);
g_snprintf (ethptr, 512-23, " (%s)", get_manuf_name (oui));
g_snprintf (ethptr, buf_len-23, " (%s)", get_manuf_name (oui));
break;
default:
*ethptr = '\0';
break;
}
return (ethstr);
}
gchar *
tvb_fcwwn_to_str(tvbuff_t *tvb, const gint offset)
{
return fcwwn_to_str (tvb_get_ptr(tvb, offset, 8));
gchar *buf;
buf=(gchar *)ep_alloc(512);
fcwwn_addr_to_str_buf(tvb_get_ptr(tvb, offset, FCWWN_ADDR_LEN), buf, 512);
return buf;
}
/*XXX FIXME the code below may be called very very frequently in the future.
@ -516,6 +520,9 @@ address_to_str_buf(const address *addr, gchar *buf, int buf_len)
case AT_FC: /* 9 bytes */
tempptr = bytes_to_hexstr_punct(tempptr, (const guint8 *)addr->data, 3, '.'); /* 8 bytes */
break;
case AT_FCWWN:
fcwwn_addr_to_str_buf((const guint8 *)addr->data, buf, buf_len);
break;
case AT_SS7PC:
mtp3_addr_to_str_buf((const mtp3_addr_pc_t *)addr->data, buf, buf_len);
break;

View File

@ -82,10 +82,11 @@ compatible_ftypes(ftenum_t a, ftenum_t b)
case FT_OID:
case FT_AX25:
case FT_VINES:
case FT_FCWWN:
case FT_REL_OID:
case FT_SYSTEM_ID:
return (b == FT_ETHER || b == FT_BYTES || b == FT_UINT_BYTES || b == FT_GUID || b == FT_OID || b == FT_AX25 || b == FT_VINES || b == FT_REL_OID || b == FT_SYSTEM_ID);
return (b == FT_ETHER || b == FT_BYTES || b == FT_UINT_BYTES || b == FT_GUID || b == FT_OID || b == FT_AX25 || b == FT_VINES || b == FT_FCWWN || b == FT_REL_OID || b == FT_SYSTEM_ID);
case FT_BOOLEAN:
case FT_FRAMENUM:
@ -182,6 +183,7 @@ mk_fvalue_from_val_string(header_field_info *hfinfo, char *s)
case FT_IPXNET:
case FT_AX25:
case FT_VINES:
case FT_FCWWN:
case FT_ETHER:
case FT_BYTES:
case FT_UINT_BYTES:
@ -296,6 +298,7 @@ is_bytes_type(enum ftenum type)
switch(type) {
case FT_AX25:
case FT_VINES:
case FT_FCWWN:
case FT_ETHER:
case FT_BYTES:
case FT_UINT_BYTES:

View File

@ -1048,10 +1048,8 @@ dissect_fc_helper (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean
if (df_ctl & FC_DFCTL_NH) {
/* Yes - dissect it. */
if (tree) {
proto_tree_add_string (fc_tree, hf_fc_nh_da, tvb, next_offset, 8,
fcwwn_to_str (tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 8, ENC_ASCII)));
proto_tree_add_string (fc_tree, hf_fc_nh_sa, tvb, offset+8, 8,
fcwwn_to_str (tvb_get_string_enc(wmem_packet_scope(), tvb, offset+8, 8, ENC_ASCII)));
proto_tree_add_item(fc_tree, hf_fc_nh_da, tvb, next_offset, 8, ENC_NA);
proto_tree_add_item(fc_tree, hf_fc_nh_sa, tvb, next_offset+8, 8, ENC_NA);
}
next_offset += 16;
}
@ -1455,10 +1453,10 @@ proto_register_fc(void)
{"Reassembled Frame", "fc.reassembled", FT_BOOLEAN, BASE_NONE, NULL,
0x0, NULL, HFILL}},
{ &hf_fc_nh_da,
{"Network DA", "fc.nethdr.da", FT_STRING, BASE_NONE, NULL,
{"Network DA", "fc.nethdr.da", FT_FCWWN, BASE_NONE, NULL,
0x0, NULL, HFILL}},
{ &hf_fc_nh_sa,
{"Network SA", "fc.nethdr.sa", FT_STRING, BASE_NONE, NULL,
{"Network SA", "fc.nethdr.sa", FT_FCWWN, BASE_NONE, NULL,
0x0, NULL, HFILL}},
/* Basic Link Svc field definitions */

View File

@ -71,11 +71,11 @@ static header_field_info hfi_fcdns_req_portid FCDNS_HFI_INIT =
NULL, HFILL};
static header_field_info hfi_fcdns_rply_pname FCDNS_HFI_INIT =
{"Port Name", "fcdns.rply.pname", FT_STRING, BASE_NONE, NULL, 0x0, NULL,
{"Port Name", "fcdns.rply.pname", FT_FCWWN, BASE_NONE, NULL, 0x0, NULL,
HFILL};
static header_field_info hfi_fcdns_rply_nname FCDNS_HFI_INIT =
{"Node Name", "fcdns.rply.nname", FT_STRING, BASE_NONE, NULL, 0x0, NULL,
{"Node Name", "fcdns.rply.nname", FT_FCWWN, BASE_NONE, NULL, 0x0, NULL,
HFILL};
static header_field_info hfi_fcdns_rply_gft FCDNS_HFI_INIT =
@ -95,7 +95,7 @@ static header_field_info hfi_fcdns_rply_ptype FCDNS_HFI_INIT =
VALS (fc_dns_port_type_val), 0x0, NULL, HFILL};
static header_field_info hfi_fcdns_rply_fpname FCDNS_HFI_INIT =
{"Fabric Port Name", "fcdns.rply.fpname", FT_STRING, BASE_NONE, NULL,
{"Fabric Port Name", "fcdns.rply.fpname", FT_FCWWN, BASE_NONE, NULL,
0x0, NULL, HFILL};
static header_field_info hfi_fcdns_fc4type FCDNS_HFI_INIT =
@ -111,7 +111,7 @@ static header_field_info hfi_fcdns_rply_fc4desc FCDNS_HFI_INIT =
0x0, NULL, HFILL};
static header_field_info hfi_fcdns_req_pname FCDNS_HFI_INIT =
{"Port Name", "fcdns.req.portname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Port Name", "fcdns.req.portname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL};
static header_field_info hfi_fcdns_rply_portid FCDNS_HFI_INIT =
@ -119,7 +119,7 @@ static header_field_info hfi_fcdns_rply_portid FCDNS_HFI_INIT =
0x0, NULL, HFILL};
static header_field_info hfi_fcdns_req_nname FCDNS_HFI_INIT =
{"Node Name", "fcdns.req.nname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Node Name", "fcdns.req.nname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL};
static header_field_info hfi_fcdns_req_domainscope FCDNS_HFI_INIT =
@ -584,9 +584,8 @@ dissect_fcdns_ganxt (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_rply_portid, tvb,
offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_rply_pname, tvb,
offset+4, 8,
tvb_fcwwn_to_str (tvb, offset+4));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_pname, tvb,
offset+4, 8, ENC_NA);
len = tvb_get_guint8 (tvb, offset+12);
proto_tree_add_item (req_tree, &hfi_fcdns_rply_spnamelen, tvb,
offset+12, 1, ENC_BIG_ENDIAN);
@ -599,9 +598,8 @@ dissect_fcdns_ganxt (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
}
if (tvb_offset_exists (tvb, 292)) {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_nname, tvb,
offset+268, 8,
tvb_fcwwn_to_str (tvb, offset+268));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_nname, tvb,
offset+268, 8, ENC_NA);
}
if (tvb_offset_exists (tvb, 548)) {
len = tvb_get_guint8 (tvb, offset+276);
@ -631,9 +629,8 @@ dissect_fcdns_ganxt (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
offset+592, 16, ENC_NA);
}
if (tvb_offset_exists (tvb, 632)) {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_fpname, tvb,
offset+608, 8,
tvb_fcwwn_to_str (tvb, offset+608));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_fpname, tvb,
offset+608, 8, ENC_NA);
}
if (tvb_offset_exists (tvb, 635)) {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_hrdaddr, tvb,
@ -654,8 +651,8 @@ dissect_fcdns_gpnid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
dissect_fcdns_req_portid (tvb, req_tree, offset+1);
}
else {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_pname, tvb, offset,
8, tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_pname, tvb, offset,
8, ENC_NA);
}
}
}
@ -670,9 +667,8 @@ dissect_fcdns_gnnid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
dissect_fcdns_req_portid (tvb, req_tree, offset+1);
}
else {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_nname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_nname, tvb,
offset, 8, ENC_NA);
}
}
}
@ -753,9 +749,8 @@ dissect_fcdns_gfpnid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
dissect_fcdns_req_portid (tvb, req_tree, offset+1);
}
else {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_fpname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_fpname, tvb,
offset, 8, ENC_NA);
}
}
@ -809,9 +804,8 @@ dissect_fcdns_gidpn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_pname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_pname, tvb,
offset, 8, ENC_NA);
}
else {
proto_tree_add_string (req_tree, &hfi_fcdns_rply_portid, tvb,
@ -828,9 +822,8 @@ dissect_fcdns_gipppn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_pname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_pname, tvb,
offset, 8, ENC_NA);
}
else {
proto_tree_add_item (req_tree, &hfi_fcdns_rply_ipport, tvb, offset,
@ -847,9 +840,8 @@ dissect_fcdns_gidnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8, ENC_NA);
}
else {
do {
@ -870,9 +862,8 @@ dissect_fcdns_gipnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8, ENC_NA);
}
else {
proto_tree_add_item (req_tree, &hfi_fcdns_rply_ipnode, tvb, offset,
@ -889,9 +880,8 @@ dissect_fcdns_gpnnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8, ENC_NA);
}
else {
do {
@ -899,9 +889,8 @@ dissect_fcdns_gpnnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_rply_portid,
tvb, offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_rply_pname,
tvb, offset+8, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_pname,
tvb, offset+8, 8, ENC_NA);
offset += 16;
} while (!(islast & 0x80));
}
@ -916,9 +905,8 @@ dissect_fcdns_gsnnnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
if (req_tree) {
if (isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb,
offset, 8, ENC_NA);
}
else {
len = tvb_get_guint8 (tvb, offset);
@ -978,9 +966,8 @@ dissect_fcdns_gpnft (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_rply_portid,
tvb, offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_rply_pname,
tvb, offset+4, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_pname,
tvb, offset+4, 8, ENC_NA);
offset += 16;
} while (!(islast & 0x80));
}
@ -1008,9 +995,8 @@ dissect_fcdns_gnnft (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_rply_portid,
tvb, offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_rply_nname,
tvb, offset+4, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item (req_tree, &hfi_fcdns_rply_nname,
tvb, offset+4, 8, ENC_NA);
offset += 16;
} while (!(islast & 0x80));
}
@ -1103,9 +1089,8 @@ dissect_fcdns_rpnid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_req_portid,
tvb, offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_req_pname, tvb,
offset+4, 8,
tvb_fcwwn_to_str (tvb, offset+4));
proto_tree_add_item (req_tree, &hfi_fcdns_req_pname, tvb,
offset+4, 8, ENC_NA);
}
}
}
@ -1120,9 +1105,8 @@ dissect_fcdns_rnnid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
proto_tree_add_string (req_tree, &hfi_fcdns_req_portid,
tvb, offset+1, 3,
tvb_fc_to_str (tvb, offset+1));
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb,
offset+4, 8,
tvb_fcwwn_to_str (tvb, offset+4));
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb,
offset+4, 8, ENC_NA);
}
}
}
@ -1243,9 +1227,8 @@ dissect_fcdns_ripnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
{
int offset = 16; /* past the fc_ct header */
if (req_tree && isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
if (isreq) {
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8, ENC_NA);
proto_tree_add_item (req_tree, &hfi_fcdns_req_ip, tvb, offset+8, 16, ENC_NA);
}
}
@ -1256,9 +1239,8 @@ dissect_fcdns_rsnnnn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
int offset = 16; /* past the fc_ct header */
guint8 len;
if (req_tree && isreq) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
if (isreq) {
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8, ENC_NA);
len = tvb_get_guint8 (tvb, offset+8);
proto_tree_add_item (req_tree, &hfi_fcdns_req_snamelen, tvb, offset+8,
@ -1350,8 +1332,7 @@ dissect_fcdns_swils_entries (tvbuff_t *tvb, proto_tree *tree, int offset)
1, ENC_BIG_ENDIAN);
proto_tree_add_string (tree, &hfi_fcdns_rply_portid, tvb, offset+5, 3,
tvb_fc_to_str (tvb, offset+5));
proto_tree_add_string (tree, &hfi_fcdns_rply_pname, tvb, offset+8, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item (tree, &hfi_fcdns_rply_pname, tvb, offset+8, 8, ENC_NA);
offset += 16;
if (!(objfmt & 0x1)) {
len = tvb_get_guint8 (tvb, offset);
@ -1361,8 +1342,7 @@ dissect_fcdns_swils_entries (tvbuff_t *tvb, proto_tree *tree, int offset)
offset+1, len, ENC_ASCII|ENC_NA);
offset += 256;
}
proto_tree_add_string (tree, &hfi_fcdns_rply_nname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, &hfi_fcdns_rply_nname, tvb, offset, 8, ENC_NA);
offset += 8;
if (!(objfmt & 0x1)) {
len = tvb_get_guint8 (tvb, offset);
@ -1379,8 +1359,8 @@ dissect_fcdns_swils_entries (tvbuff_t *tvb, proto_tree *tree, int offset)
dissect_fc4type(tree, tvb, offset+28, &hfi_fcdns_rply_gft);
proto_tree_add_item (tree, &hfi_fcdns_rply_ipport, tvb, offset+60,
16, ENC_NA);
proto_tree_add_string (tree, &hfi_fcdns_rply_fpname, tvb, offset+76,
8, tvb_fcwwn_to_str (tvb, offset+76));
proto_tree_add_item (tree, &hfi_fcdns_rply_fpname, tvb, offset+76,
8, ENC_NA);
proto_tree_add_string (tree, &hfi_fcdns_rply_hrdaddr, tvb, offset+85,
3, tvb_fc_to_str (tvb, offset+85));
offset += 88;
@ -1428,10 +1408,7 @@ dissect_fcdns_gepn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
{
int offset = 16; /* past the fc_ct header */
if (isreq) {
if (req_tree) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_pname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
}
proto_tree_add_item(req_tree, &hfi_fcdns_req_pname, tvb, offset, 8, ENC_NA);
}
else {
dissect_fcdns_swils_entries (tvb, req_tree, offset);
@ -1444,10 +1421,7 @@ dissect_fcdns_genn (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
int offset = 16; /* past the fc_ct header */
if (isreq) {
if (req_tree) {
proto_tree_add_string (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
}
proto_tree_add_item (req_tree, &hfi_fcdns_req_nname, tvb, offset, 8, ENC_NA);
}
else {
dissect_fcdns_swils_entries (tvb, req_tree, offset);

View File

@ -1194,10 +1194,8 @@ dissect_fcels_logi (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item (cmnsvc_tree, hf_fcels_maxconseq, tvb, offset+12, 2, ENC_BIG_ENDIAN);
proto_tree_add_item (cmnsvc_tree, hf_fcels_reloffset, tvb, offset+14, 2, ENC_BIG_ENDIAN);
proto_tree_add_item (cmnsvc_tree, hf_fcels_edtov, tvb, offset+16, 4, ENC_BIG_ENDIAN);
proto_tree_add_string (cmnsvc_tree, hf_fcels_npname, tvb, offset+20, 8,
tvb_fcwwn_to_str (tvb, offset+20));
proto_tree_add_string (cmnsvc_tree, hf_fcels_fnname, tvb, offset+28, 8,
tvb_fcwwn_to_str (tvb, offset+28));
proto_tree_add_item (cmnsvc_tree, hf_fcels_npname, tvb, offset+20, 8, ENC_NA);
proto_tree_add_item (cmnsvc_tree, hf_fcels_fnname, tvb, offset+28, 8, ENC_NA);
/* Add subtree for class paramters */
offset = 36;
@ -1266,8 +1264,7 @@ dissect_fcels_logout (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_string (logo_tree, hf_fcels_nportid, tvb, offset, 3,
tvb_fc_to_str (tvb, offset));
proto_tree_add_string (logo_tree, hf_fcels_npname, tvb, offset+3, 6,
tvb_fcwwn_to_str (tvb, offset+3));
proto_tree_add_item (logo_tree, hf_fcels_npname, tvb, offset+3, 6, ENC_NA);
}
}
@ -1411,10 +1408,8 @@ dissect_fcels_adisc (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_string (adisc_tree, hf_fcels_hardaddr, tvb, offset, 3,
tvb_fc_to_str (tvb, offset));
proto_tree_add_string (adisc_tree, hf_fcels_npname, tvb, offset+3, 8,
tvb_fcwwn_to_str (tvb, offset+3));
proto_tree_add_string (adisc_tree, hf_fcels_fnname, tvb, offset+11, 8,
tvb_fcwwn_to_str (tvb, offset+11));
proto_tree_add_item (adisc_tree, hf_fcels_npname, tvb, offset+3, 8, ENC_NA);
proto_tree_add_item (adisc_tree, hf_fcels_fnname, tvb, offset+11, 8, ENC_NA);
proto_tree_add_string (adisc_tree, hf_fcels_nportid, tvb, offset+20, 3,
tvb_fc_to_str (tvb, offset+20));
}
@ -1441,14 +1436,12 @@ dissect_fcels_farp (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
offset+4, 1, ENC_BIG_ENDIAN);
proto_tree_add_string (farp_tree, hf_fcels_resportid, tvb, offset+5,
3, tvb_fc_to_str (tvb, offset+5));
proto_tree_add_string (farp_tree, hf_fcels_npname, tvb, offset+8,
8, tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_string (farp_tree, hf_fcels_fnname, tvb, offset+16,
8, tvb_fcwwn_to_str (tvb, offset+16));
proto_tree_add_string (farp_tree, hf_fcels_respname, tvb, offset+24,
8, tvb_fcwwn_to_str (tvb, offset+24));
proto_tree_add_string (farp_tree, hf_fcels_respnname, tvb, offset+32,
8, tvb_fcwwn_to_str (tvb, offset+32));
proto_tree_add_item (farp_tree, hf_fcels_npname, tvb, offset+8, 8, ENC_NA);
proto_tree_add_item (farp_tree, hf_fcels_fnname, tvb, offset+16, 8, ENC_NA);
proto_tree_add_item (farp_tree, hf_fcels_respname, tvb, offset+24,
8, ENC_NA);
proto_tree_add_item (farp_tree, hf_fcels_respnname, tvb, offset+32,
8, ENC_NA);
proto_tree_add_item (farp_tree, hf_fcels_reqipaddr, tvb, offset+40,
16, ENC_NA);
proto_tree_add_item (farp_tree, hf_fcels_respipaddr, tvb, offset+56,
@ -1490,8 +1483,7 @@ dissect_fcels_rps (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item (rps_tree, hf_fcels_opcode, tvb, offset-3, 1, ENC_BIG_ENDIAN);
if (flag & 0x2) {
proto_tree_add_string (rps_tree, hf_fcels_npname, tvb, offset+1,
8, tvb_fcwwn_to_str (tvb, offset+1));
proto_tree_add_item (rps_tree, hf_fcels_npname, tvb, offset+1, 8, ENC_NA);
}
else if (flag & 0x1) {
proto_tree_add_item (rps_tree, hf_fcels_rps_portnum, tvb,
@ -1555,7 +1547,7 @@ dissect_fcels_rpl (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item(pb_tree, hf_fcels_rpl_physical_port, tvb, offset, 4, ENC_BIG_ENDIAN);
proto_tree_add_string(pb_tree, hf_fcels_rpl_port_identifier, tvb, offset+5, 3, tvb_fc_to_str (tvb, offset+5));
proto_tree_add_string(pb_tree, hf_fcels_rpl_port_name, tvb, offset+8, 8, tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item(pb_tree, hf_fcels_rpl_port_name, tvb, offset+8, 8, ENC_NA);
offset += 16;
}
}
@ -1577,10 +1569,9 @@ dissect_fcels_fan (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_string (fan_tree, hf_fcels_fabricaddr, tvb, offset, 3,
tvb_fc_to_str (tvb, offset));
proto_tree_add_string (fan_tree, hf_fcels_fabricpname, tvb, offset+3,
8, tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_string (fan_tree, hf_fcels_fnname, tvb, offset+11, 8,
tvb_fcwwn_to_str (tvb, offset+11));
proto_tree_add_item (fan_tree, hf_fcels_fabricpname, tvb, offset+3,
8, ENC_NA);
proto_tree_add_item (fan_tree, hf_fcels_fnname, tvb, offset+11, 8, ENC_NA);
}
}
@ -1896,10 +1887,8 @@ dissect_fcels_cbind (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item (cbind_tree, hf_fcels_cbind_ifcp_version, tvb, offset+7, 1, ENC_BIG_ENDIAN);
proto_tree_add_item (cbind_tree, hf_fcels_cbind_userinfo, tvb, offset+8, 4, ENC_BIG_ENDIAN);
proto_tree_add_string (cbind_tree, hf_fcels_cbind_snpname, tvb, offset+12, 8,
tvb_fcwwn_to_str (tvb, offset+12));
proto_tree_add_string (cbind_tree, hf_fcels_cbind_dnpname, tvb, offset+20, 8,
tvb_fcwwn_to_str (tvb, offset+20));
proto_tree_add_item (cbind_tree, hf_fcels_cbind_snpname, tvb, offset+12, 8, ENC_NA);
proto_tree_add_item (cbind_tree, hf_fcels_cbind_dnpname, tvb, offset+20, 8, ENC_NA);
switch(tvb_reported_length(tvb)){
case 32: /* 28 byte Request + 4 bytes FC CRC */
@ -1970,12 +1959,10 @@ dissect_fcels_rnid (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item (rnid_tree, hf_fcels_spidlen, tvb, offset+7,
1, ENC_BIG_ENDIAN);
if (clen) {
proto_tree_add_string (rnid_tree, hf_fcels_npname, tvb,
offset+8, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_string (rnid_tree, hf_fcels_fnname, tvb,
offset+16, 8,
tvb_fcwwn_to_str (tvb, offset+16));
proto_tree_add_item (rnid_tree, hf_fcels_npname, tvb,
offset+8, 8, ENC_NA);
proto_tree_add_item (rnid_tree, hf_fcels_fnname, tvb,
offset+16, 8, ENC_NA);
}
if (tvb_get_guint8 (tvb, offset+4) == 0xDF) {
/* Decode the Specific Node ID Format as this is known */
@ -2358,10 +2345,10 @@ proto_register_fcels (void)
{ &hf_fcels_edtov,
{"E_D_TOV", "fcels.edtov", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
{ &hf_fcels_npname,
{"N_Port Port_Name", "fcels.npname", FT_STRING, BASE_NONE, NULL, 0x0,
{"N_Port Port_Name", "fcels.npname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_fcels_fnname,
{"Fabric/Node Name", "fcels.fnname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Fabric/Node Name", "fcels.fnname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
#if 0
{ &hf_fcels_cls1param,
@ -2412,7 +2399,7 @@ proto_register_fcels (void)
{"Fabric Address", "fcels.faddr", FT_STRING, BASE_NONE, NULL, 0x0, NULL,
HFILL}},
{ &hf_fcels_fabricpname,
{"Fabric Port Name", "fcels.fpname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Fabric Port Name", "fcels.fpname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_fcels_failedrcvr,
{"Failed Receiver AL_PA", "fcels.faildrcvr", FT_UINT8, BASE_HEX, NULL,
@ -2445,10 +2432,10 @@ proto_register_fcels (void)
{"Responding Port ID", "fcels.resportid", FT_STRING, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcels_respname,
{"Responding Port Name", "fcels.respname", FT_STRING, BASE_NONE,
{"Responding Port Name", "fcels.respname", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcels_respnname,
{"Responding Node Name", "fcels.respnname", FT_STRING, BASE_NONE,
{"Responding Node Name", "fcels.respnname", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcels_reqipaddr,
{"Requesting IP Address", "fcels.reqipaddr", FT_IPv6, BASE_NONE,
@ -2549,10 +2536,10 @@ proto_register_fcels (void)
{"UserInfo", "fcels.cbind.userinfo", FT_UINT32, BASE_HEX,
NULL, 0x0, "Userinfo token", HFILL}},
{ &hf_fcels_cbind_snpname,
{"Source N_Port Port_Name", "fcels.cbind.snpname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Source N_Port Port_Name", "fcels.cbind.snpname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_fcels_cbind_dnpname,
{"Destination N_Port Port_Name", "fcels.cbind.dnpname", FT_STRING, BASE_NONE, NULL, 0x0,
{"Destination N_Port Port_Name", "fcels.cbind.dnpname", FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_fcels_cbind_status,
{"Status", "fcels.cbind.status", FT_UINT16, BASE_DEC,
@ -2740,7 +2727,7 @@ proto_register_fcels (void)
{ &hf_fcels_rpl_index_of_i_port_block, { "Index of I Port Block", "fcels.rpl.index_of_i_port_block", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rpl_physical_port, { "Physical Port #", "fcels.rpl.physical_port", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rpl_port_identifier, { "Port Identifier", "fcels.rpl.port_identifier", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rpl_port_name, { "Port Name", "fcels.rpl.port_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rpl_port_name, { "Port Name", "fcels.rpl.port_name", FT_FCWWN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rscn_page_len, { "Page Len", "fcels.rscn.page_len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rscn_payload_len, { "Payload Len", "fcels.rscn.payload_len", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_fcels_rnft_max_size, { "Max Size", "fcels.rnft.max_size", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},

View File

@ -136,8 +136,7 @@ dissect_fcfcs_giel (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
numelem);
offset += 4;
for (i = 0; i < numelem; i++) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
proto_tree_add_item (tree, hf_fcs_ietype, tvb, offset+11, 1, ENC_BIG_ENDIAN);
offset += 12;
}
@ -151,8 +150,7 @@ dissect_fcfcs_giet (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_item (tree, hf_fcs_ietype, tvb, offset+3, 1, ENC_BIG_ENDIAN);
@ -167,8 +165,7 @@ dissect_fcfcs_gdid (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_item (tree, hf_fcs_iedomainid, tvb, offset+1, 1, ENC_BIG_ENDIAN);
@ -183,8 +180,7 @@ dissect_fcfcs_gmid (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_string (tree, hf_fcs_mgmtid, tvb, offset+1, 3,
@ -200,12 +196,10 @@ dissect_fcfcs_gfn (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_string (tree, hf_fcs_fabricname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_fabricname, tvb, offset, 8, ENC_NA);
}
}
}
@ -217,8 +211,7 @@ dissect_fcfcs_gieln (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_text (tree, tvb, offset, 1, "Name Length: %d",
@ -237,8 +230,7 @@ dissect_fcfcs_gmal (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
numelem = tvb_get_ntohl (tvb, offset);
@ -265,8 +257,7 @@ dissect_fcfcs_gieil (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
tot_len = tvb_get_guint8 (tvb, offset+3);
@ -309,8 +300,7 @@ dissect_fcfcs_gpl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
}
else {
numelem = tvb_get_ntohl (tvb, offset);
@ -320,8 +310,7 @@ dissect_fcfcs_gpl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
offset += 4;
for (i = 0; i < numelem; i++) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
proto_tree_add_item (tree, hf_fcs_portmodtype, tvb, offset+9,
1, ENC_BIG_ENDIAN);
proto_tree_add_item (tree, hf_fcs_porttxtype, tvb, offset+10,
@ -341,8 +330,7 @@ dissect_fcfcs_gpt (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_item (tree, hf_fcs_porttype, tvb, offset+3, 1, ENC_BIG_ENDIAN);
@ -357,8 +345,7 @@ dissect_fcfcs_gppn (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_item (tree, hf_fcs_physportnum, tvb, offset, 4, ENC_NA);
@ -374,8 +361,7 @@ dissect_fcfcs_gapnl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
}
else {
numelem = tvb_get_ntohl (tvb, offset);
@ -384,8 +370,7 @@ dissect_fcfcs_gapnl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
numelem);
offset += 4;
for (i = 0; i < numelem; i++) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
proto_tree_add_item (tree, hf_fcs_portflags, tvb, offset+10,
1, ENC_BIG_ENDIAN);
proto_tree_add_item (tree, hf_fcs_porttype, tvb, offset+11,
@ -403,8 +388,7 @@ dissect_fcfcs_gps (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_portname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_portname, tvb, offset, 8, ENC_NA);
}
else {
proto_tree_add_item (tree, hf_fcs_porttype, tvb, offset+3, 1, ENC_BIG_ENDIAN);
@ -433,8 +417,8 @@ dissect_fcfcs_gplnl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
numelem);
offset += 4;
for (i = 0; i < numelem; i++) {
proto_tree_add_string (tree, hf_fcs_platformnname, tvb, offset,
8, tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_platformnname, tvb, offset,
8, ENC_NA);
offset += 8;
}
}
@ -501,8 +485,7 @@ dissect_fcfcs_gnpl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_platformnname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_platformnname, tvb, offset, 8, ENC_NA);
}
else {
len = tvb_get_guint8 (tvb, offset);
@ -546,8 +529,7 @@ dissect_fcfcs_rieln (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_iename, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_iename, tvb, offset, 8, ENC_NA);
len = tvb_get_guint8 (tvb, offset+8);
proto_tree_add_text (tree, tvb, offset+8, 1,
"Logical Name Length: %d", len);
@ -589,8 +571,7 @@ dissect_fcfcs_rpl (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
numelem);
offset += 4;
for (i = 0; i < numelem; i++) {
proto_tree_add_string (tree, hf_fcs_platformnname, tvb, offset,
8, tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcs_platformnname, tvb, offset, 8, ENC_NA);
offset += 8;
}
}
@ -609,8 +590,8 @@ dissect_fcfcs_rpln (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
proto_tree_add_uint (tree, hf_fcs_platformname_len, tvb, offset, 1, len);
proto_tree_add_item (tree, hf_fcs_platformname, tvb, offset+1,
len, ENC_NA);
proto_tree_add_string (tree, hf_fcs_platformnname, tvb, offset+256,
8, tvb_fcwwn_to_str (tvb, offset+256));
proto_tree_add_item (tree, hf_fcs_platformnname, tvb, offset+256,
8, ENC_NA);
}
}
}
@ -677,8 +658,7 @@ dissect_fcfcs_dpln (tvbuff_t *tvb, proto_tree *tree, gboolean isreq)
if (tree) {
if (isreq) {
proto_tree_add_string (tree, hf_fcs_platformnname, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item(tree, hf_fcs_platformnname, tvb, offset, 8, ENC_NA);
}
}
}
@ -981,7 +961,7 @@ proto_register_fcfcs (void)
{"Opcode", "fcs.opcode", FT_UINT16, BASE_HEX,
VALS (fc_fcs_opcode_val), 0x0, NULL, HFILL}},
{ &hf_fcs_iename,
{"Interconnect Element Name", "fcs.ie.name", FT_STRING, BASE_NONE,
{"Interconnect Element Name", "fcs.ie.name", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcs_ietype,
{"Interconnect Element Type", "fcs.ie.type", FT_UINT8, BASE_HEX,
@ -993,7 +973,7 @@ proto_register_fcfcs (void)
{"Interconnect Element Mgmt. ID", "fcs.ie.mgmtid", FT_STRING,
BASE_NONE, NULL, 0x0, NULL, HFILL}},
{ &hf_fcs_fabricname,
{"Interconnect Element Fabric Name", "fcs.ie.fname", FT_STRING,
{"Interconnect Element Fabric Name", "fcs.ie.fname", FT_FCWWN,
BASE_NONE, NULL, 0x0, NULL, HFILL}},
{ &hf_fcs_mgmtaddr,
{"Interconnect Element Mgmt. Address", "fcs.ie.mgmtaddr", FT_STRING,
@ -1008,7 +988,7 @@ proto_register_fcfcs (void)
{"Model Name/Number", "fcs.modelname", FT_STRING, BASE_NONE, NULL,
0x0, NULL, HFILL}},
{ &hf_fcs_portname,
{"Port Name", "fcs.port.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL,
{"Port Name", "fcs.port.name", FT_FCWWN, BASE_NONE, NULL, 0x0, NULL,
HFILL}},
{ &hf_fcs_portmodtype,
{"Port Module Type", "fcs.port.moduletype", FT_UINT8, BASE_HEX,
@ -1035,7 +1015,7 @@ proto_register_fcfcs (void)
{"Platform Name", "fcs.platform.name", FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_fcs_platformnname,
{"Platform Node Name", "fcs.platform.nodename", FT_STRING, BASE_NONE,
{"Platform Node Name", "fcs.platform.nodename", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcs_platformtype,
{"Platform Type", "fcs.platform.type", FT_UINT8, BASE_HEX,

View File

@ -349,8 +349,7 @@ static void
dissect_fcip_sf (tvbuff_t *tvb, proto_tree *tree, gint offset)
{
if (tree) {
proto_tree_add_string (tree, hf_fcip_src_wwn, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_item (tree, hf_fcip_src_wwn, tvb, offset, 8, ENC_NA);
proto_tree_add_item (tree, hf_fcip_src_entity_id, tvb, offset+8, 8,
ENC_NA);
proto_tree_add_item (tree, hf_fcip_conn_nonce, tvb, offset+16, 8,
@ -358,8 +357,7 @@ dissect_fcip_sf (tvbuff_t *tvb, proto_tree *tree, gint offset)
/* XXX - break out these flags */
proto_tree_add_item (tree, hf_fcip_conn_flags, tvb, offset+24, 1, ENC_BIG_ENDIAN);
proto_tree_add_item (tree, hf_fcip_conn_code, tvb, offset+26, 2, ENC_BIG_ENDIAN);
proto_tree_add_string (tree, hf_fcip_dst_wwn, tvb, offset+30, 8,
tvb_fcwwn_to_str (tvb, offset+30));
proto_tree_add_item (tree, hf_fcip_dst_wwn, tvb, offset+30, 8, ENC_NA);
proto_tree_add_item (tree, hf_fcip_katov, tvb, offset+38, 4, ENC_BIG_ENDIAN);
}
}
@ -595,10 +593,10 @@ proto_register_fcip (void)
{"Pflags (1's Complement)", "fcip.pflagsc", FT_UINT8, BASE_HEX,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcip_src_wwn,
{"Source Fabric WWN", "fcip.srcwwn", FT_STRING, BASE_NONE,
{"Source Fabric WWN", "fcip.srcwwn", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcip_dst_wwn,
{"Destination Fabric WWN", "fcip.dstwwn", FT_STRING, BASE_NONE,
{"Destination Fabric WWN", "fcip.dstwwn", FT_FCWWN, BASE_NONE,
NULL, 0x0, NULL, HFILL}},
{ &hf_fcip_src_entity_id,
{"FC/FCIP Entity Id", "fcip.srcid", FT_BYTES, BASE_NONE,

View File

@ -233,8 +233,8 @@ static void dissect_fcsp_dhchap_challenge(tvbuff_t *tvb, proto_tree *tree)
name_len = tvb_get_ntohs(tvb, offset+2);
if (name_type == FC_AUTH_NAME_TYPE_WWN) {
proto_tree_add_string(tree, hf_auth_responder_wwn, tvb, offset+4,
8, tvb_fcwwn_to_str(tvb, offset+4));
proto_tree_add_item(tree, hf_auth_responder_wwn, tvb, offset+4,
8, ENC_NA);
}
else {
proto_tree_add_item(tree, hf_auth_responder_name, tvb, offset+4,
@ -322,8 +322,7 @@ static void dissect_fcsp_auth_negotiate(tvbuff_t *tvb, proto_tree *tree)
name_len = tvb_get_ntohs(tvb, offset+2);
if (name_type == FC_AUTH_NAME_TYPE_WWN) {
proto_tree_add_string(tree, hf_auth_initiator_wwn, tvb, offset+4, 8,
tvb_fcwwn_to_str(tvb, offset+4));
proto_tree_add_item(tree, hf_auth_initiator_wwn, tvb, offset+4, 8, ENC_NA);
}
else {
proto_tree_add_item(tree, hf_auth_initiator_name, tvb, offset+4,
@ -464,7 +463,7 @@ proto_register_fcsp(void)
{ &hf_auth_initiator_wwn,
{ "Initiator Name (WWN)", "fcsp.initwwn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_auth_initiator_name,
@ -499,7 +498,7 @@ proto_register_fcsp(void)
{ &hf_auth_responder_wwn,
{ "Responder Name (WWN)", "fcsp.rspwwn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_auth_responder_name,

View File

@ -720,39 +720,36 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
{
/* Set up structures needed to add the protocol subtree and manage it */
int offset = 0;
const gchar *flags;
fcswils_elp elp;
/* Response i.e. SW_ACC for an ELP has the same format as the request */
/* We skip the initial 4 bytes as we don't care about the opcode */
tvb_memcpy(tvb, (guint8 *)&elp, 4, FC_SWILS_ELP_SIZE);
elp.r_a_tov = g_ntohl(elp.r_a_tov);
elp.e_d_tov = g_ntohl(elp.e_d_tov);
elp.isl_flwctrl_mode = g_ntohs(elp.isl_flwctrl_mode);
elp.flw_ctrl_parmlen = g_ntohs(elp.flw_ctrl_parmlen);
int offset = 4;
const gchar *flags;
guint32 r_a_tov;
guint32 e_d_tov;
guint16 isl_flwctrl_mode;
guint8 clsf_svcparm[6], cls1_svcparm[2], cls2_svcparm[2], cls3_svcparm[2];
if (elp_tree) {
offset += 4;
proto_tree_add_item(elp_tree, hf_swils_elp_rev, tvb, offset++, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(elp_tree, hf_swils_elp_flags, tvb, offset, 2, ENC_NA);
offset += 3;
r_a_tov = tvb_get_ntohl(tvb, offset);
proto_tree_add_uint_format_value(elp_tree, hf_swils_elp_r_a_tov, tvb, offset, 4,
elp.r_a_tov, "%d msecs", elp.r_a_tov);
r_a_tov, "%d msecs", r_a_tov);
offset += 4;
e_d_tov = tvb_get_ntohl(tvb, offset);
proto_tree_add_uint_format_value(elp_tree, hf_swils_elp_e_d_tov, tvb, offset, 4,
elp.e_d_tov, "%d msecs", elp.e_d_tov);
e_d_tov, "%d msecs", e_d_tov);
offset += 4;
proto_tree_add_string(elp_tree, hf_swils_elp_req_epn, tvb, offset, 8,
fcwwn_to_str(elp.req_epname));
proto_tree_add_item(elp_tree, hf_swils_elp_req_epn, tvb, offset, 8, ENC_NA);
offset += 8;
proto_tree_add_string(elp_tree, hf_swils_elp_req_esn, tvb, offset, 8,
fcwwn_to_str(elp.req_sname));
proto_tree_add_item(elp_tree, hf_swils_elp_req_esn, tvb, offset, 8, ENC_NA);
offset += 8;
if (elp.clsf_svcparm[0] & 0x80) {
if (elp.clsf_svcparm[4] & 0x20) {
tvb_memcpy(tvb, clsf_svcparm, offset, 6);
if (clsf_svcparm[0] & 0x80) {
if (clsf_svcparm[4] & 0x20) {
flags="Class F Valid | X_ID Interlock";
} else {
flags="Class F Valid | No X_ID Interlk";
@ -761,7 +758,7 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
flags="Class F Invld";
}
proto_tree_add_bytes_format_value(elp_tree, hf_swils_elp_clsf_svcp, tvb, offset, 6,
&elp.clsf_svcparm[0], "(%s)", flags);
clsf_svcparm, "(%s)", flags);
offset += 6;
proto_tree_add_item(elp_tree, hf_swils_elp_clsf_rcvsz, tvb, offset, 2, ENC_BIG_ENDIAN);
@ -773,7 +770,8 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
proto_tree_add_item(elp_tree, hf_swils_elp_clsf_openseq, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 4;
if (elp.cls1_svcparm[0] & 0x80) {
tvb_memcpy(tvb, cls1_svcparm, offset, 2);
if (cls1_svcparm[0] & 0x80) {
#define MAX_FLAGS_LEN 40
char *flagsbuf;
gint stroff, returned_length;
@ -784,15 +782,15 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
returned_length = g_snprintf(flagsbuf+stroff, MAX_FLAGS_LEN-stroff,
"Class 1 Valid");
stroff += MIN(returned_length, MAX_FLAGS_LEN-stroff);
if (elp.cls1_svcparm[0] & 0x40) {
if (cls1_svcparm[0] & 0x40) {
returned_length = g_snprintf(flagsbuf+stroff, MAX_FLAGS_LEN-stroff, " | IMX");
stroff += MIN(returned_length, MAX_FLAGS_LEN-stroff);
}
if (elp.cls1_svcparm[0] & 0x20) {
if (cls1_svcparm[0] & 0x20) {
returned_length = g_snprintf(flagsbuf+stroff, MAX_FLAGS_LEN-stroff, " | IPS");
stroff += MIN(returned_length, MAX_FLAGS_LEN-stroff);
}
if (elp.cls1_svcparm[0] & 0x10) {
if (cls1_svcparm[0] & 0x10) {
/*returned_length =*/ g_snprintf(flagsbuf+stroff, MAX_FLAGS_LEN-stroff, " | LKS");
}
flags=flagsbuf;
@ -804,13 +802,14 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
proto_tree_add_bytes_format_value(elp_tree, hf_swils_elp_cls1_svcp, tvb, offset, 2,
NULL, "(%s)", flags);
offset += 2;
if (elp.cls1_svcparm[0] & 0x80) {
if (cls1_svcparm[0] & 0x80) {
proto_tree_add_item(elp_tree, hf_swils_elp_cls1_rcvsz, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
if (elp.cls2_svcparm[0] & 0x80) {
if (elp.cls2_svcparm[0] & 0x08) {
tvb_memcpy(tvb, cls2_svcparm, offset, 2);
if (cls2_svcparm[0] & 0x80) {
if (cls2_svcparm[0] & 0x08) {
flags="Class 2 Valid | Seq Delivery";
}
else {
@ -822,17 +821,18 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
}
proto_tree_add_bytes_format_value(elp_tree, hf_swils_elp_cls2_svcp, tvb, offset, 2,
&elp.cls2_svcparm[0],
cls2_svcparm,
"(%s)", flags);
offset += 2;
if (elp.cls2_svcparm[0] & 0x80) {
if (cls2_svcparm[0] & 0x80) {
proto_tree_add_item(elp_tree, hf_swils_elp_cls2_rcvsz, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
if (elp.cls3_svcparm[0] & 0x80) {
if (elp.cls3_svcparm[0] & 0x08) {
tvb_memcpy(tvb, cls3_svcparm, offset, 2);
if (cls3_svcparm[0] & 0x80) {
if (cls3_svcparm[0] & 0x08) {
flags="Class 3 Valid | Seq Delivery";
}
else {
@ -843,17 +843,18 @@ dissect_swils_elp(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *elp_tree, g
flags="Class 3 Invld";
}
proto_tree_add_bytes_format_value(elp_tree, hf_swils_elp_cls3_svcp, tvb, offset, 2,
&elp.cls3_svcparm[0],
cls3_svcparm,
"(%s)", flags);
offset += 2;
if (elp.cls3_svcparm[0] & 0x80) {
if (cls3_svcparm[0] & 0x80) {
proto_tree_add_item(elp_tree, hf_swils_elp_cls3_rcvsz, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 22;
isl_flwctrl_mode = tvb_get_ntohs(tvb, offset);
proto_tree_add_string(elp_tree, hf_swils_elp_isl_fc_mode, tvb, offset, 2,
val_to_str_const(elp.isl_flwctrl_mode, fcswils_elp_fc_val, "Vendor Unique"));
val_to_str_const(isl_flwctrl_mode, fcswils_elp_fc_val, "Vendor Unique"));
offset += 2;
proto_tree_add_item(elp_tree, hf_swils_elp_fcplen, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
@ -878,20 +879,20 @@ dissect_swils_efp(tvbuff_t *tvb, packet_info* pinfo, proto_tree *efp_tree, guint
proto_tree *lrec_tree;
proto_item *rec_item;
int num_listrec = 0;
int offset = 0;
fcswils_efp efp;
int offset = 1; /* Skip opcode */
guint8 reclen;
guint16 payload_len;
guint8 rec_type;
reclen = tvb_get_guint8(tvb, offset);
rec_item = proto_tree_add_uint(efp_tree, hf_swils_efp_record_len, tvb, offset, 1, reclen);
offset += 1;
efp.reclen = tvb_get_guint8(tvb, offset);
rec_item = proto_tree_add_uint(efp_tree, hf_swils_efp_record_len, tvb, offset, 1, efp.reclen);
offset += 1;
efp.payload_len = tvb_get_ntohs(tvb, offset);
if (efp.payload_len < FC_SWILS_EFP_SIZE) {
payload_len = tvb_get_ntohs(tvb, offset);
if (payload_len < FC_SWILS_EFP_SIZE) {
proto_tree_add_uint_format_value(efp_tree, hf_swils_efp_payload_len,
tvb, offset, 2, efp.payload_len,
tvb, offset, 2, payload_len,
"%u (bogus, must be >= %u)",
efp.payload_len, FC_SWILS_EFP_SIZE);
payload_len, FC_SWILS_EFP_SIZE);
return;
}
proto_tree_add_item(efp_tree, hf_swils_efp_payload_len, tvb, offset, 2, ENC_BIG_ENDIAN);
@ -899,18 +900,16 @@ dissect_swils_efp(tvbuff_t *tvb, packet_info* pinfo, proto_tree *efp_tree, guint
proto_tree_add_item(efp_tree, hf_swils_efp_pswitch_pri, tvb,
offset, 1, ENC_BIG_ENDIAN);
offset += 1;
tvb_memcpy(tvb, efp.pswitch_name, offset, 8);
proto_tree_add_string(efp_tree, hf_swils_efp_pswitch_name, tvb, offset,
8, fcwwn_to_str(efp.pswitch_name));
proto_tree_add_item(efp_tree, hf_swils_efp_pswitch_name, tvb, offset, 8, ENC_NA);
offset += 8;
if (efp.reclen == 0) {
if (reclen == 0) {
expert_add_info(pinfo, rec_item, &ei_swils_efp_record_len);
return;
}
/* Add List Records now */
if (efp_tree) {
num_listrec = (efp.payload_len - FC_SWILS_EFP_SIZE)/efp.reclen;
num_listrec = (payload_len - FC_SWILS_EFP_SIZE)/reclen;
while (num_listrec-- > 0) {
rec_type = tvb_get_guint8(tvb, offset);
lrec_tree = proto_tree_add_subtree(efp_tree, tvb, offset, -1,
@ -924,15 +923,14 @@ dissect_swils_efp(tvbuff_t *tvb, packet_info* pinfo, proto_tree *efp_tree, guint
case FC_SWILS_LRECTYPE_DOMAIN:
proto_tree_add_item(lrec_tree, hf_swils_efp_dom_id, tvb, offset+1, 1, ENC_BIG_ENDIAN);
proto_tree_add_string(lrec_tree, hf_swils_efp_switch_name, tvb, offset+8, 8,
tvb_fcwwn_to_str(tvb, offset+8));
proto_tree_add_item(lrec_tree, hf_swils_efp_switch_name, tvb, offset+8, 8, ENC_NA);
break;
case FC_SWILS_LRECTYPE_MCAST:
proto_tree_add_item(lrec_tree, hf_swils_efp_mcast_grpno, tvb, offset+1, 1, ENC_BIG_ENDIAN);
break;
}
offset += efp.reclen;
offset += reclen;
}
}
}
@ -944,8 +942,8 @@ dissect_swils_dia(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *dia_tree, g
int offset = 0;
if (dia_tree) {
proto_tree_add_string(dia_tree, hf_swils_dia_switch_name, tvb, offset+4,
8, tvb_fcwwn_to_str(tvb, offset+4));
proto_tree_add_item(dia_tree, hf_swils_dia_switch_name, tvb, offset+4,
8, ENC_NA);
}
}
@ -960,8 +958,7 @@ dissect_swils_rdi(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *rdi_tree, g
plen = tvb_get_ntohs(tvb, offset+2);
proto_tree_add_item(rdi_tree, hf_swils_rdi_payload_len, tvb, offset+2, 2, ENC_BIG_ENDIAN);
proto_tree_add_string(rdi_tree, hf_swils_rdi_req_sname, tvb, offset+4,
8, tvb_fcwwn_to_str(tvb, offset+4));
proto_tree_add_item(rdi_tree, hf_swils_rdi_req_sname, tvb, offset+4, 8, ENC_NA);
/* 12 is the length of the initial header and 4 is the size of each
* domain request record.
@ -1162,10 +1159,8 @@ dissect_swils_rscn(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *rscn_tree,
proto_tree_add_item(dev_tree, hf_swils_rscn_portstate, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_string(dev_tree, hf_swils_rscn_portid, tvb, offset+1, 3,
tvb_fc_to_str(tvb, offset+1));
proto_tree_add_string(dev_tree, hf_swils_rscn_pwwn, tvb, offset+4, 8,
tvb_fcwwn_to_str(tvb, offset+4));
proto_tree_add_string(dev_tree, hf_swils_rscn_nwwn, tvb, offset+12, 8,
tvb_fcwwn_to_str(tvb, offset+12));
proto_tree_add_item(dev_tree, hf_swils_rscn_pwwn, tvb, offset+4, 8, ENC_NA);
proto_tree_add_item(dev_tree, hf_swils_rscn_nwwn, tvb, offset+12, 8, ENC_NA);
offset += 20;
}
}
@ -1856,12 +1851,12 @@ proto_register_fcswils(void)
{ &hf_swils_elp_req_epn,
{"Req Eport Name", "swils.elp.reqepn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_elp_req_esn,
{"Req Switch Name", "swils.elp.reqesn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_elp_clsf_svcp,
@ -1966,7 +1961,7 @@ proto_register_fcswils(void)
{ &hf_swils_efp_switch_name,
{"Switch Name", "swils.efp.sname",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_efp_mcast_grpno,
@ -1998,12 +1993,12 @@ proto_register_fcswils(void)
{ &hf_swils_efp_pswitch_name,
{"Principal Switch Name", "swils.efp.psname",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_dia_switch_name,
{"Switch Name", "swils.dia.sname",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_rdi_payload_len,
@ -2013,7 +2008,7 @@ proto_register_fcswils(void)
{ &hf_swils_rdi_req_sname,
{"Req Switch Name", "swils.rdi.reqsn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
#if 0
@ -2150,12 +2145,12 @@ proto_register_fcswils(void)
{ &hf_swils_rscn_pwwn,
{"Port WWN", "swils.rscn.pwwn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_rscn_nwwn,
{"Node WWN", "swils.rscn.nwwn",
FT_STRING, BASE_NONE, NULL, 0x0,
FT_FCWWN, BASE_NONE, NULL, 0x0,
NULL, HFILL}},
{ &hf_swils_esc_swvendorid,

View File

@ -465,10 +465,8 @@ dissect_fip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
break;
case FIP_DT_NAME:
subtree = fip_desc_type_len(fip_tree, desc_tvb, dtype, ett_fip_dt_name, &item);
text = tvb_fcwwn_to_str(desc_tvb, 4);
proto_tree_add_string(subtree, hf_fip_desc_name,
desc_tvb, 4, 8, text);
proto_item_append_text(item, "%s", text);
proto_tree_add_item(subtree, hf_fip_desc_name, desc_tvb, 4, 8, ENC_NA);
proto_item_append_text(item, "%s", tvb_fcwwn_to_str(desc_tvb, 4));
break;
case FIP_DT_FAB:
subtree = fip_desc_type_len(fip_tree, desc_tvb, dtype, ett_fip_dt_fab, &item);
@ -477,10 +475,8 @@ dissect_fip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
text = tvb_fc_to_str(desc_tvb, 5);
proto_tree_add_string(subtree, hf_fip_desc_fab_map, desc_tvb,
5, 3, text);
text = tvb_fcwwn_to_str(desc_tvb, 8);
proto_tree_add_string(subtree, hf_fip_desc_fab_name,
desc_tvb, 8, 8, text);
proto_item_append_text(item, "%s", text);
proto_tree_add_item(subtree, hf_fip_desc_fab_name, desc_tvb, 8, 8, ENC_NA);
proto_item_append_text(item, "%s", tvb_fcwwn_to_str(desc_tvb, 8));
break;
case FIP_DT_FCOE_SIZE:
subtree = fip_desc_type_len(fip_tree, desc_tvb, dtype, ett_fip_dt_mdl, &item);
@ -507,9 +503,8 @@ dissect_fip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2, 6, ENC_NA);
proto_tree_add_item(subtree, hf_fip_desc_vn_fid, desc_tvb,
9, 3, ENC_BIG_ENDIAN);
text = tvb_fcwwn_to_str(desc_tvb, 12);
proto_tree_add_string(subtree, hf_fip_desc_vn_wwpn,
desc_tvb, 12, 8, text);
proto_tree_add_item(subtree, hf_fip_desc_vn_wwpn,
desc_tvb, 12, 8, ENC_NA);
proto_item_append_text(item, "MAC %s FC_ID %6.6x",
tvb_bytes_to_ep_str_punct(desc_tvb, 2, 6, ':'),
tvb_get_ntoh24(desc_tvb, 9));
@ -668,7 +663,7 @@ proto_register_fip(void)
{ &hf_fip_desc_name,
{ "Switch or Node Name", "fip.name",
FT_STRING, BASE_NONE, NULL, 0,
FT_FCWWN, BASE_NONE, NULL, 0,
NULL, HFILL}},
{ &hf_fip_desc_fab_vfid,
@ -683,7 +678,7 @@ proto_register_fip(void)
{ &hf_fip_desc_fab_name,
{ "Fabric Name", "fip.fab.name",
FT_STRING, BASE_NONE, NULL, 0,
FT_FCWWN, BASE_NONE, NULL, 0,
NULL, HFILL}},
{ &hf_fip_desc_fcoe_size,
@ -703,7 +698,7 @@ proto_register_fip(void)
{ &hf_fip_desc_vn_wwpn,
{ "Port Name", "fip.vn.pwwn",
FT_STRING, BASE_NONE, NULL, 0,
FT_FCWWN, BASE_NONE, NULL, 0,
NULL, HFILL}},
{ &hf_fip_desc_fka,

View File

@ -74,10 +74,8 @@ dissect_ipfc (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
"IP Over FC Network_Header");
ipfc_tree = proto_item_add_subtree (ti, ett_ipfc);
proto_tree_add_string (ipfc_tree, hf_ipfc_network_da, tvb, offset, 8,
tvb_fcwwn_to_str (tvb, offset));
proto_tree_add_string (ipfc_tree, hf_ipfc_network_sa, tvb, offset+8, 8,
tvb_fcwwn_to_str (tvb, offset+8));
proto_tree_add_item (ipfc_tree, hf_ipfc_network_da, tvb, offset, 8, ENC_NA);
proto_tree_add_item (ipfc_tree, hf_ipfc_network_sa, tvb, offset+8, 8, ENC_NA);
}
next_tvb = tvb_new_subset_remaining (tvb, 16);
@ -97,10 +95,10 @@ proto_register_ipfc (void)
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf[] = {
{ &hf_ipfc_network_da,
{"Network DA", "ipfc.nh.da", FT_STRING, BASE_NONE, NULL,
{"Network DA", "ipfc.nh.da", FT_FCWWN, BASE_NONE, NULL,
0x0, NULL, HFILL}},
{ &hf_ipfc_network_sa,
{"Network SA", "ipfc.nh.sa", FT_STRING, BASE_NONE, NULL,
{"Network SA", "ipfc.nh.sa", FT_FCWWN, BASE_NONE, NULL,
0x0, NULL, HFILL}},
};

View File

@ -2757,7 +2757,7 @@ dissect_scsi_evpd(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item(evpd_tree, hf_scsi_inq_evpd_devid_identifier_str, tvb, offset, idlen, ENC_NA|ENC_ASCII);
}
} else if (codeset == CODESET_BINARY && identifier_type == DEVID_TYPE_WWN) {
proto_tree_add_string(evpd_tree, hf_scsi_wwn, tvb, offset, plen, tvb_fcwwn_to_str(tvb, offset));
proto_tree_add_item(evpd_tree, hf_scsi_wwn, tvb, offset, plen, ENC_NA);
} else {
/*
* XXX - decode this based on the identifier type,
@ -3405,7 +3405,7 @@ dissect_spc_extcopy(tvbuff_t *tvb, packet_info *pinfo _U_,
offset += 1;
proto_tree_add_bytes_format(cscd_desc_tree, hf_scsi_designator, tvb, offset, 20, NULL, "Designator (20 bytes, zero padded, used length %u)", des_len);
if (code_set == CODESET_BINARY && des_type == DEVID_TYPE_WWN) { /* des_type 3 = WWN */
proto_tree_add_string(cscd_desc_tree, hf_scsi_wwn, tvb, offset, des_len, tvb_fcwwn_to_str(tvb, offset));
proto_tree_add_item(cscd_desc_tree, hf_scsi_wwn, tvb, offset, des_len, ENC_NA);
}
offset += 20;
dev_tree = proto_tree_add_subtree(cscd_tree, tvb, offset, 4, ett_scsi_xcopy_dev_params, NULL, "Device type specific parameters");
@ -7371,7 +7371,7 @@ proto_register_scsi(void)
{ &hf_scsi_recv_copy_inline_data_gran, { "Inline data granularity", "scsi.recv_copy.inline_data_gran", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_recv_copy_held_data_gran, { "Held data granularity", "scsi.recv_copy.held_data_gran", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_recv_copy_implemented_desc_list_len, { "Implemented description list length", "scsi.recv_copy.implemented_desc_list_len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_wwn, { "WWN", "scsi.wwn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_wwn, { "WWN", "scsi.wwn", FT_FCWWN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_designator, { "Designator", "scsi.designator", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_segment_descriptor_length, { "Segment descriptor length (bytes)", "scsi.segment_descriptor_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_scsi_inline_data, { "Inline data", "scsi.inline_data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},

View File

@ -185,6 +185,12 @@ ether_fvalue_set(fvalue_t *fv, const guint8 *value)
common_fvalue_set(fv, value, FT_ETHER_LEN);
}
static void
fcwwn_fvalue_set(fvalue_t *fv, const guint8 *value)
{
common_fvalue_set(fv, value, FT_FCWWN_LEN);
}
static void
oid_fvalue_set(fvalue_t *fv, GByteArray *value)
{
@ -453,12 +459,36 @@ system_id_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_valu
return TRUE;
}
/* XXX - need better validation of Vines address */
/* XXX - need better validation of OSI System-ID address */
logfunc("\"%s\" is not a valid OSI System-ID.", s);
return FALSE;
}
static gboolean
fcwwn_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc)
{
/*
* Don't log a message if this fails; we'll try looking it
* up as another way if it does, and if that fails,
* we'll log a message.
*/
if (bytes_from_unparsed(fv, s, TRUE, NULL)) {
if (fv->value.bytes->len > FT_FCWWN_LEN) {
logfunc("\"%s\" contains too many bytes to be a valid FCWWN.",
s);
return FALSE;
}
return TRUE;
}
/* XXX - need better validation of FCWWN address */
logfunc("\"%s\" is not a valid FCWWN.", s);
return FALSE;
}
static guint
len(fvalue_t *fv)
{
@ -1008,6 +1038,49 @@ ftype_register_bytes(void)
slice,
};
static ftype_t fcwwc_type = {
FT_FCWWN, /* ftype */
"FT_FCWWN", /* name */
"Fibre Channel WWN", /* pretty_name */
FT_FCWWN_LEN, /* wire_size */
bytes_fvalue_new, /* new_value */
bytes_fvalue_free, /* free_value */
fcwwn_from_unparsed, /* val_from_unparsed */
NULL, /* val_from_string */
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
fcwwn_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
NULL, /* set_value_string */
NULL, /* set_value_tvbuff */
NULL, /* set_value_uinteger */
NULL, /* set_value_sinteger */
NULL, /* set_value_integer64 */
NULL, /* set_value_floating */
value_get, /* get_value */
NULL, /* get_value_uinteger */
NULL, /* get_value_sinteger */
NULL, /* get_value_integer64 */
NULL, /* get_value_floating */
cmp_eq,
cmp_ne,
cmp_gt,
cmp_ge,
cmp_lt,
cmp_le,
cmp_bitwise_and,
cmp_contains,
CMP_MATCHES,
len,
slice,
};
ftype_register(FT_BYTES, &bytes_type);
ftype_register(FT_UINT_BYTES, &uint_bytes_type);
ftype_register(FT_AX25, &ax25_type);
@ -1016,4 +1089,5 @@ ftype_register_bytes(void)
ftype_register(FT_OID, &oid_type);
ftype_register(FT_REL_OID, &rel_oid_type);
ftype_register(FT_SYSTEM_ID, &system_id_type);
ftype_register(FT_FCWWN, &fcwwc_type);
}

View File

@ -34,6 +34,7 @@ ftype_register(enum ftenum ftype, ftype_t *ft);
* that I don't mind doing it by hand for now. */
void ftype_register_bytes(void);
void ftype_register_double(void);
void ftype_register_fc(void);
void ftype_register_integers(void);
void ftype_register_ipv4(void);
void ftype_register_ipv6(void);

View File

@ -69,6 +69,7 @@ enum ftenum {
FT_REL_OID, /* RELATIVE-OID */
FT_SYSTEM_ID,
FT_STRINGZPAD, /* for use with proto_tree_add_item() */
FT_FCWWN,
FT_NUM_TYPES /* last item number plus one */
};
@ -86,6 +87,7 @@ enum ftenum {
#define FT_EUI64_LEN 8
#define FT_AX25_ADDR_LEN 7
#define FT_VINES_ADDR_LEN 6
#define FT_FCWWN_LEN 8
typedef enum ftenum ftenum_t;

View File

@ -226,6 +226,8 @@ proto_tree_set_ipv6(field_info *fi, const guint8* value_ptr);
static void
proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length);
static void
proto_tree_set_fcwwn_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length);
static void
proto_tree_set_guid(field_info *fi, const e_guid_t *value_ptr);
static void
proto_tree_set_guid_tvb(field_info *fi, tvbuff_t *tvb, gint start, const guint encoding);
@ -1756,6 +1758,14 @@ proto_tree_new_item(field_info *new_fi, proto_tree *tree,
proto_tree_set_ipv6_tvb(new_fi, tvb, start, length);
break;
case FT_FCWWN:
if (length != FT_FCWWN_LEN) {
length_error = length < FT_FCWWN_LEN ? TRUE : FALSE;
report_type_length_mismatch(tree, "an FCWWN address", length, length_error);
}
proto_tree_set_fcwwn_tvb(new_fi, tvb, start, length);
break;
case FT_AX25:
if (length != 7) {
length_error = length < 7 ? TRUE : FALSE;
@ -2810,6 +2820,20 @@ proto_tree_set_ipv6_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length)
proto_tree_set_ipv6(fi, tvb_get_ptr(tvb, start, length));
}
/* Set the FT_FCWWN value */
static void
proto_tree_set_fcwwn(field_info *fi, const guint8* value_ptr)
{
DISSECTOR_ASSERT(value_ptr != NULL);
fvalue_set_bytes(&fi->value, value_ptr);
}
static void
proto_tree_set_fcwwn_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length)
{
proto_tree_set_fcwwn(fi, tvb_get_ptr(tvb, start, length));
}
/* Add a FT_GUID to a proto_tree */
proto_item *
proto_tree_add_guid(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
@ -4364,6 +4388,12 @@ proto_custom_set(proto_tree* tree, GSList *field_ids, gint occurrence,
offset_r = (int)strlen(result);
break;
case FT_FCWWN:
SET_ADDRESS (&addr, AT_FCWWN, FCWWN_ADDR_LEN, fvalue_get(&finfo->value));
address_to_str_buf(&addr, result+offset_r, size-offset_r);
offset_r = (int)strlen(result);
break;
case FT_ETHER:
offset_r += protoo_strlcpy(result+offset_r,
bytes_to_ep_str_punct((const guint8 *)fvalue_get(&finfo->value),
@ -6085,6 +6115,16 @@ proto_item_fill_label(field_info *fi, gchar *label_str)
ep_address_to_str(&addr));
break;
case FT_FCWWN:
addr.type = AT_FCWWN;
addr.len = FCWWN_ADDR_LEN;
addr.data = (guint8 *)fvalue_get(&fi->value);
g_snprintf(label_str, ITEM_LABEL_LENGTH,
"%s: %s", hfinfo->name,
ep_address_to_str( &addr ));
break;
case FT_GUID:
guid = (e_guid_t *)fvalue_get(&fi->value);
label_fill(label_str, 0, hfinfo, guid_to_ep_str(guid));

View File

@ -31,13 +31,14 @@
#include "ws_symbol_export.h"
#include "wmem/wmem.h"
#define GUID_STR_LEN 37
#define MAX_IP_STR_LEN 16
#define MAX_IP6_STR_LEN 40
#define GUID_STR_LEN 37
#define MAX_IP_STR_LEN 16
#define MAX_IP6_STR_LEN 40
#define MAX_ADDR_STR_LEN 256
#define VINES_ADDR_LEN 6
#define EUI64_STR_LEN 24
#define AX25_ADDR_LEN 7
#define VINES_ADDR_LEN 6
#define EUI64_STR_LEN 24
#define AX25_ADDR_LEN 7
#define FCWWN_ADDR_LEN 8
#ifdef __cplusplus
extern "C" {
@ -56,7 +57,6 @@ WS_DLL_PUBLIC void address_to_str_buf(const address *addr, gchar *buf, int b
WS_DLL_PUBLIC const gchar* tvb_ether_to_str(tvbuff_t *tvb, const gint offset);
WS_DLL_PUBLIC const gchar* tvb_ip_to_str(tvbuff_t *tvb, const gint offset);
void ip_to_str_buf(const guint8 *ad, gchar *buf, const int buf_len);
extern gchar* fcwwn_to_str (const guint8 *);
WS_DLL_PUBLIC const gchar* tvb_fc_to_str(tvbuff_t *tvb, const gint offset);
WS_DLL_PUBLIC gchar* tvb_fcwwn_to_str (tvbuff_t *tvb, const gint offset);

View File

@ -141,6 +141,14 @@ WSLUA_METAMETHOD FieldInfo__call(lua_State* L) {
pushAddress(L,ipv6);
return 1;
}
case FT_FCWWN: {
Address fcwwn = (Address)g_malloc(sizeof(address));
fcwwn->type = AT_FCWWN;
fcwwn->len = fi->ws_fi->length;
fcwwn->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
pushAddress(L,fcwwn);
return 1;
}
case FT_IPXNET:{
Address ipx = (Address)g_malloc(sizeof(address));
ipx->type = AT_IPX;

View File

@ -491,6 +491,7 @@ static const wslua_ft_types_t ftenums[] = {
{"ftypes.SYSTEM_ID", FT_SYSTEM_ID},
{"ftypes.REL_OID", FT_REL_OID},
{"ftypes.EUI64", FT_EUI64},
{"ftypes.FCWWN", FT_FCWWN},
{NULL, FT_NONE}
};
@ -849,6 +850,8 @@ WSLUA_CONSTRUCTOR ProtoField_new(lua_State* L) {
case FT_SYSTEM_ID:
case FT_REL_OID:
case FT_EUI64:
case FT_VINES:
case FT_FCWWN:
if (base != BASE_NONE) {
WSLUA_OPTARG_ERROR(ProtoField_new,BASE,"Base must be base.NONE");
return 0;

View File

@ -373,6 +373,8 @@ static int TreeItem_add_item_any(lua_State *L, gboolean little_endian) {
case FT_OID:
case FT_REL_OID:
case FT_SYSTEM_ID:
case FT_VINES:
case FT_FCWWN:
default:
luaL_error(L,"FT_ not yet supported");
return 0;

View File

@ -1466,7 +1466,6 @@ my @TvbPtrAPIs = (
'proto_tree_add_bytes_format_value',
'proto_tree_add_ether',
# Use the tvb_* version of these:
'fcwwn_to_str',
# Use tvb_bytes_to_str[_punct] instead of:
'bytes_to_str',
'bytes_to_str_punct',

View File

@ -641,9 +641,10 @@ not_supported:
FT_INT64, FT_UINT64, ; should work with FT_INT[8,16,24,32] code
FT_FLOAT, FT_DOUBLE,
FT_IPXNET, FT_IPv6, FT_ETHER,
FT_GUID, FT_OID, FT_SYSTEM_ID
FT_GUID, FT_OID, FT_SYSTEM_ID,
FT_UINT_STRING,
FT_ABSOLUTE_TIME, FT_RELATIVE_TIME
FT_ABSOLUTE_TIME, FT_RELATIVE_TIME,
FT_VINES, FT_FCWWN,
*/
fvalue_edit = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(fvalue_edit), "<not supported>");