one more bitfield properly dissected and some less strcpy()s

svn path=/trunk/; revision=16159
This commit is contained in:
Ronnie Sahlberg 2005-10-08 09:11:23 +00:00
parent f0b1d734c5
commit ef5b9193cd
1 changed files with 79 additions and 18 deletions

View File

@ -170,6 +170,11 @@ static int hf_fcels_fcpflags_initiator = -1;
static int hf_fcels_fcpflags_target = -1;
static int hf_fcels_fcpflags_rdxr = -1;
static int hf_fcels_fcpflags_wrxr = -1;
static int hf_fcels_tprloflags = -1;
static int hf_fcels_tprloflags_opav = -1;
static int hf_fcels_tprloflags_rpav = -1;
static int hf_fcels_tprloflags_npv = -1;
static int hf_fcels_tprloflags_gprlo = -1;
static gint ett_fcels = -1;
static gint ett_fcels_lsrjt = -1;
@ -206,6 +211,7 @@ static gint ett_fcels_clsflags = -1;
static gint ett_fcels_initctl = -1;
static gint ett_fcels_rcptctl = -1;
static gint ett_fcels_fcpflags = -1;
static gint ett_fcels_tprloflags = -1;
static const value_string fc_prli_fc4_val[] = {
{FC_TYPE_SCSI , "FCP"},
@ -620,6 +626,60 @@ dissect_fcp_flags (proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint32 f
flags&=(~( 0x0001 ));
}
static const true_false_string tfs_fc_fcels_tprloflags_opav = {
"3rd Party Orig PA Valid",
"3rd party orig pa is NOT valid"
};
static const true_false_string tfs_fc_fcels_tprloflags_rpav = {
"Resp PA Valid",
"Resp pa is NOT valid"
};
static const true_false_string tfs_fc_fcels_tprloflags_npv = {
"3rd Party N_Port Valid",
"3rd party n_port is NOT valid"
};
static const true_false_string tfs_fc_fcels_tprloflags_gprlo = {
"Global PRLO",
"NO global prlo"
};
static void
dissect_tprlo_flags (proto_tree *parent_tree, tvbuff_t *tvb, int offset, int flags)
{
proto_item *item=NULL;
proto_tree *tree=NULL;
if(parent_tree){
item=proto_tree_add_uint(parent_tree, hf_fcels_tprloflags,
tvb, offset, 1, flags);
tree=proto_item_add_subtree(item, ett_fcels_tprloflags);
}
proto_tree_add_boolean(tree, hf_fcels_tprloflags_opav, tvb, offset, 1, flags);
if (flags&0x80){
proto_item_append_text(item, " 3rd Party Orig PA Valid");
}
flags&=(~( 0x80 ));
proto_tree_add_boolean(tree, hf_fcels_tprloflags_rpav, tvb, offset, 1, flags);
if (flags&0x40){
proto_item_append_text(item, " Resp PA Valid");
}
flags&=(~( 0x40 ));
proto_tree_add_boolean(tree, hf_fcels_tprloflags_npv, tvb, offset, 1, flags);
if (flags&0x20){
proto_item_append_text(item, " 3rd Party N_Port Valid");
}
flags&=(~( 0x20 ));
proto_tree_add_boolean(tree, hf_fcels_tprloflags_gprlo, tvb, offset, 1, flags);
if (flags&0x10){
proto_item_append_text(item, " Global PRLO");
}
flags&=(~( 0x10 ));
}
static const value_string initial_pa_vals[] = {
{ 0, "Initial P_A Not Supported" },
{ 1, "Initial P_A Supported" },
@ -1415,28 +1475,13 @@ dissect_fcels_prlilo_payload (tvbuff_t *tvb, packet_info *pinfo _U_,
}
}
}
proto_tree_add_text (svcpg_tree, tvb, offset+2, 1,
"Flags: %s", flagstr);
}
else { /* Assuming opcode is TPRLO */
if (flag & 0x80) {
strcpy (flagstr, "3rd Party Orig PA Valid, ");
stroff += 25;
}
if (flag & 0x40) {
strcpy (&flagstr[stroff], "Resp PA Valid, ");
stroff += 15;
}
if (flag & 0x20) {
strcpy (&flagstr[stroff], "3rd Party N_Port Valid, ");
stroff += 24;
}
if (flag & 0x10) {
strcpy (&flagstr[stroff], "Global PRLO, ");
stroff += 13;
}
dissect_tprlo_flags (svcpg_tree, tvb, offset+2, flag);
}
proto_tree_add_text (svcpg_tree, tvb, offset+2, 1,
"Flags: %s", flagstr);
if (!isreq && (opcode != FC_ELS_TPRLO)) {
/* This is valid only for ACC */
proto_tree_add_text (svcpg_tree, tvb, offset+2, 1,
@ -2398,6 +2443,21 @@ proto_register_fcels (void)
{ &hf_fcels_fcpflags_wrxr,
{"Wr Xfer_Rdy Dis", "fcels.fcpflags.wrxr", FT_BOOLEAN, 32,
TFS(&tfs_fc_fcels_fcpflags_wrxr), 0x0001, "", HFILL}},
{ &hf_fcels_tprloflags,
{"TPRLO Flags", "fcels.tprloflags", FT_UINT8, BASE_HEX, NULL, 0x0, "",
HFILL}},
{ &hf_fcels_tprloflags_opav,
{"3rd Party Orig PA Valid", "fcels.tprloflags.opav", FT_BOOLEAN, 8,
TFS(&tfs_fc_fcels_tprloflags_opav), 0x80, "", HFILL}},
{ &hf_fcels_tprloflags_rpav,
{"Resp PA Valid", "fcels.tprloflags.rpav", FT_BOOLEAN, 8,
TFS(&tfs_fc_fcels_tprloflags_rpav), 0x40, "", HFILL}},
{ &hf_fcels_tprloflags_npv,
{"3rd Party N_Port Valid", "fcels.tprloflags.npv", FT_BOOLEAN, 8,
TFS(&tfs_fc_fcels_tprloflags_npv), 0x20, "", HFILL}},
{ &hf_fcels_tprloflags_gprlo,
{"Global PRLO", "fcels.tprloflags.gprlo", FT_BOOLEAN, 8,
TFS(&tfs_fc_fcels_tprloflags_gprlo), 0x10, "", HFILL}},
};
static gint *ett[] = {
@ -2437,6 +2497,7 @@ proto_register_fcels (void)
&ett_fcels_initctl,
&ett_fcels_rcptctl,
&ett_fcels_fcpflags,
&ett_fcels_tprloflags,
};
/* Register the protocol name and description */