Convert remaining proto_item_set_expert_flags in dissector directory.

svn path=/trunk/; revision=51142
This commit is contained in:
Michael Mann 2013-08-05 01:54:15 +00:00
parent b67492bbc0
commit a22331bbd2
4 changed files with 67 additions and 49 deletions

View File

@ -279,6 +279,9 @@ static gint ett_diameter_avpinfo = -1;
static gint ett_unknown = -1;
static gint ett_err = -1;
static expert_field ei_diameter_reserved_bit_set = EI_INIT;
/* Tap for Diameter */
static int diameter_tap = -1;
@ -514,15 +517,15 @@ dissect_diameter_avp(diam_ctx_t *c, tvbuff_t *tvb, int offset)
proto_tree_add_item(flags_tree,hf_diameter_avp_flags_mandatory,tvb,offset,1,ENC_BIG_ENDIAN);
proto_tree_add_item(flags_tree,hf_diameter_avp_flags_protected,tvb,offset,1,ENC_BIG_ENDIAN);
pi = proto_tree_add_item(flags_tree,hf_diameter_avp_flags_reserved3,tvb,offset,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x10) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x10) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
pi = proto_tree_add_item(flags_tree,hf_diameter_avp_flags_reserved4,tvb,offset,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x08) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x08) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
pi = proto_tree_add_item(flags_tree,hf_diameter_avp_flags_reserved5,tvb,offset,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x04) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x04) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
proto_tree_add_item(flags_tree,hf_diameter_avp_flags_reserved6,tvb,offset,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x02) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x02) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
proto_tree_add_item(flags_tree,hf_diameter_avp_flags_reserved7,tvb,offset,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x01) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x01) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
}
offset += 1;
@ -943,13 +946,13 @@ dissect_diameter_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(pt,hf_diameter_flags_error,tvb,4,1,ENC_BIG_ENDIAN);
proto_tree_add_item(pt,hf_diameter_flags_T,tvb,4,1,ENC_BIG_ENDIAN);
proto_tree_add_item(pt,hf_diameter_flags_reserved4,tvb,4,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x08) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x08) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
pi = proto_tree_add_item(pt,hf_diameter_flags_reserved5,tvb,4,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x04) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x04) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
pi = proto_tree_add_item(pt,hf_diameter_flags_reserved6,tvb,4,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x02) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x02) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
pi = proto_tree_add_item(pt,hf_diameter_flags_reserved7,tvb,4,1,ENC_BIG_ENDIAN);
if(flags_bits & 0x01) proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
if(flags_bits & 0x01) expert_add_info(c->pinfo, pi, &ei_diameter_reserved_bit_set);
}
cmd_item = proto_tree_add_item(diam_tree,hf_diameter_code,tvb,5,3,ENC_BIG_ENDIAN);
@ -1731,6 +1734,7 @@ static void
real_proto_register_diameter(void)
{
module_t *diameter_module;
expert_module_t* expert_diameter;
guint i, ett_length;
hf_register_info hf_base[] = {
@ -1858,6 +1862,10 @@ real_proto_register_diameter(void)
&(unknown_avp.ett)
};
static ei_register_info ei[] = {
{ &ei_diameter_reserved_bit_set, { "diameter.reserved_bit_set", PI_MALFORMED, PI_WARN, "Reserved bit set", EXPFILL }},
};
wmem_array_append(build_dict.hf, hf_base, array_length(hf_base));
ett_length = array_length(ett_base);
for (i = 0; i < ett_length; i++) {
@ -1868,6 +1876,8 @@ real_proto_register_diameter(void)
proto_register_field_array(proto_diameter, (hf_register_info *)wmem_array_get_raw(build_dict.hf), wmem_array_get_count(build_dict.hf));
proto_register_subtree_array((gint **)build_dict.ett->pdata, build_dict.ett->len);
expert_diameter = expert_register_protocol(proto_diameter);
expert_register_field_array(expert_diameter, ei, array_length(ei));
g_ptr_array_free(build_dict.ett,TRUE);

View File

@ -149,6 +149,12 @@ static gint ett_payload_subflows = -1;
static expert_field ei_iuup_hdr_crc_bad = EI_INIT;
static expert_field ei_iuup_payload_crc_bad = EI_INIT;
static expert_field ei_iuup_payload_undecoded = EI_INIT;
static expert_field ei_iuup_error_response = EI_INIT;
static expert_field ei_iuup_ack_nack = EI_INIT;
static expert_field ei_iuup_time_align = EI_INIT;
static expert_field ei_iuup_procedure_indicator = EI_INIT;
static expert_field ei_iuup_pdu_type = EI_INIT;
static GHashTable* circuits = NULL;
@ -346,7 +352,7 @@ iuup_proto_tree_add_bits(proto_tree* tree, int hf, tvbuff_t* tvb, int offset, in
return pi;
}
static void dissect_iuup_payload(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, guint rfci_id _U_, int offset) {
static void dissect_iuup_payload(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, guint rfci_id _U_, int offset) {
iuup_circuit_t* iuup_circuit;
iuup_rfci_t *rfci;
int last_offset = tvb_length(tvb) - 1;
@ -359,7 +365,7 @@ static void dissect_iuup_payload(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tr
return;
} else if ( ! pinfo->circuit_id
|| ! ( iuup_circuit = (iuup_circuit_t *)g_hash_table_lookup(circuits,GUINT_TO_POINTER(pinfo->circuit_id)) ) ) {
proto_item_set_expert_flags(pi, PI_UNDECODED, PI_WARN);
expert_add_info(pinfo, pi, &ei_iuup_payload_undecoded);
return;
}
@ -368,7 +374,7 @@ static void dissect_iuup_payload(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tr
break;
if (!rfci) {
proto_item_set_expert_flags(pi, PI_UNDECODED, PI_WARN);
expert_add_info(pinfo, pi, &ei_iuup_payload_undecoded);
return;
}
@ -640,15 +646,14 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
case PDUTYPE_DATA_WITH_CRC:
col_append_fstr(pinfo->cinfo, COL_INFO,"FN: %x RFCI: %u", (guint)(first_octet & 0x0f) ,(guint)(second_octet & 0x3f));
if (!tree) return;
proto_tree_add_item(iuup_tree,hf_iuup_frame_number,tvb,0,1,ENC_BIG_ENDIAN);
pi = proto_tree_add_item(iuup_tree,hf_iuup_fqc,tvb,1,1,ENC_BIG_ENDIAN);
if (first_octet & FQC_MASK) {
proto_item_set_expert_flags(pi, PI_RESPONSE_CODE, PI_WARN);
proto_item_set_expert_flags(iuup_item, PI_RESPONSE_CODE, PI_WARN);
expert_add_info(pinfo, pi, &ei_iuup_error_response);
}
if (!tree) return;
proto_tree_add_item(iuup_tree,hf_iuup_rfci,tvb,1,1,ENC_BIG_ENDIAN);
add_hdr_crc(tvb, pinfo, iuup_tree, crccheck);
add_payload_crc(tvb, pinfo, iuup_tree);
@ -657,16 +662,15 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
case PDUTYPE_DATA_NO_CRC:
col_append_fstr(pinfo->cinfo, COL_INFO," RFCI %u", (guint)(second_octet & 0x3f));
if (!tree)
return;
proto_tree_add_item(iuup_tree,hf_iuup_frame_number,tvb,0,1,ENC_BIG_ENDIAN);
pi = proto_tree_add_item(iuup_tree,hf_iuup_fqc,tvb,1,1,ENC_BIG_ENDIAN);
if (first_octet & FQC_MASK) {
proto_item_set_expert_flags(pi, PI_RESPONSE_CODE, PI_WARN);
proto_item_set_expert_flags(iuup_item, PI_RESPONSE_CODE, PI_WARN);
expert_add_info(pinfo, pi, &ei_iuup_error_response);
}
if (!tree)
return;
proto_tree_add_item(iuup_tree,hf_iuup_rfci,tvb,1,1,ENC_BIG_ENDIAN);
add_hdr_crc(tvb, pinfo, iuup_tree, crccheck);
dissect_iuup_payload(tvb,pinfo,iuup_tree,second_octet & 0x3f,3);
@ -704,19 +708,16 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
case PROC_ERROR:
break;
default:
if (!tree) return;
proto_item_set_expert_flags(proc_item, PI_MALFORMED, PI_ERROR);
expert_add_info(pinfo, proc_item, &ei_iuup_procedure_indicator);
return;
}
break;
case ACKNACK_NACK:
if (!tree) return;
pi = proto_tree_add_item(iuup_tree,hf_iuup_error_cause_val,tvb,4,1,ENC_BIG_ENDIAN);
proto_item_set_expert_flags(pi, PI_RESPONSE_CODE, PI_ERROR);
expert_add_info(pinfo, pi, &ei_iuup_error_response);
return;
case ACKNACK_RESERVED:
if (!tree) return;
proto_item_set_expert_flags(ack_item, PI_MALFORMED, PI_ERROR);
expert_add_info(pinfo, ack_item, &ei_iuup_ack_nack);
return;
case ACKNACK_PROC:
break;
@ -737,8 +738,6 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
proto_tree* time_tree;
guint ta;
if (!tree) return;
ta = tvb_get_guint8(tvb,4);
pi = proto_tree_add_item(iuup_tree,hf_iuup_time_align,tvb,4,1,ENC_BIG_ENDIAN);
@ -755,7 +754,7 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
pi = proto_tree_add_float(time_tree,hf_iuup_delta,tvb,4,1,((gfloat)((gint)(-(((gint)ta)-128))) * 500)/(gfloat)1000000.0);
PROTO_ITEM_SET_GENERATED(pi);
} else {
proto_item_set_expert_flags(pi, PI_MALFORMED, PI_ERROR);
expert_add_info(pinfo, pi, &ei_iuup_time_align);
}
proto_tree_add_item(iuup_tree,hf_iuup_spare_bytes,tvb,5,-1,ENC_NA);
@ -764,21 +763,17 @@ static void dissect_iuup(tvbuff_t* tvb_in, packet_info* pinfo, proto_tree* tree)
case PROC_ERROR:
col_append_str(pinfo->cinfo, COL_INFO, val_to_str(tvb_get_guint8(tvb,4) & 0x3f,iuup_error_causes,"Unknown (%u)"));
if (!tree)
return;
proto_tree_add_item(iuup_tree,hf_iuup_error_distance,tvb,4,1,ENC_BIG_ENDIAN);
pi = proto_tree_add_item(iuup_tree,hf_iuup_errorevt_cause_val,tvb,4,1,ENC_BIG_ENDIAN);
proto_item_set_expert_flags(pi, PI_RESPONSE_CODE, PI_ERROR);
expert_add_info(pinfo, pi, &ei_iuup_error_response);
proto_tree_add_item(iuup_tree,hf_iuup_spare_bytes,tvb,5,-1,ENC_NA);
return;
default: /* bad */
if (!tree) return;
proto_item_set_expert_flags(proc_item, PI_MALFORMED, PI_ERROR);
expert_add_info(pinfo, proc_item, &ei_iuup_procedure_indicator);
return;
}
default:
if (!tree) return;
proto_item_set_expert_flags(pdutype_item, PI_MALFORMED, PI_ERROR);
expert_add_info(pinfo, pdutype_item, &ei_iuup_pdu_type);
return;
}
}
@ -976,6 +971,12 @@ void proto_register_iuup(void) {
static ei_register_info ei[] = {
{ &ei_iuup_hdr_crc_bad, { "iuup.hdr.crc.bad", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
{ &ei_iuup_payload_crc_bad, { "iuup.payload.crc.bad", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
{ &ei_iuup_payload_undecoded, { "iuup.payload.undecoded", PI_UNDECODED, PI_WARN, "Undecoded payload", EXPFILL }},
{ &ei_iuup_error_response, { "iuup.error_response", PI_RESPONSE_CODE, PI_ERROR, "Error response", EXPFILL }},
{ &ei_iuup_ack_nack, { "iuup.ack.malformed", PI_MALFORMED, PI_ERROR, "Malformed Ack/Nack", EXPFILL }},
{ &ei_iuup_time_align, { "iuup.time_align.malformed", PI_MALFORMED, PI_ERROR, "Malformed Time Align", EXPFILL }},
{ &ei_iuup_procedure_indicator, { "iuup.procedure.malformed", PI_MALFORMED, PI_ERROR, "Malformed Procedure", EXPFILL }},
{ &ei_iuup_pdu_type, { "iuup.pdu_type.malformed", PI_MALFORMED, PI_ERROR, "Malformed PDU Type", EXPFILL }},
};
module_t *iuup_module;

View File

@ -113,6 +113,7 @@ static gint ett_mpa_marker = -1;
static expert_field ei_mpa_res_field_not_set0 = EI_INIT;
static expert_field ei_mpa_rev_field_not_set1 = EI_INIT;
static expert_field ei_mpa_reject_bit_responder = EI_INIT;
static expert_field ei_mpa_bad_length = EI_INIT;
/* handles of our subdissectors */
static dissector_handle_t ddp_rdmap_handle = NULL;
@ -517,10 +518,8 @@ dissect_mpa_req_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* check whether the Private Data Length conforms to RFC 5044 */
pd_length = tvb_get_ntohs(tvb, offset);
if (pd_length > MPA_MAX_PD_LENGTH) {
bad_pd_length_pi = proto_tree_add_text(tree, tvb, offset, 2,
proto_tree_add_expert_format(tree, pinfo, &ei_mpa_bad_length, tvb, offset, 2,
"[PD length field indicates more 512 bytes of Private Data]");
proto_item_set_expert_flags(bad_pd_length_pi,
PI_MALFORMED, PI_ERROR);
return FALSE;
}
@ -723,11 +722,9 @@ dissect_mpa_fpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
*/
exp_ulpdu_length = expected_ulpdu_length(state, tcpinfo, endpoint);
if (!exp_ulpdu_length || exp_ulpdu_length != ulpdu_length) {
bad_ulpdu_length_pi = proto_tree_add_text(tree, tvb, offset,
proto_tree_add_expert_format(tree, pinfo, &ei_mpa_bad_length, tvb, offset,
MPA_ULPDU_LENGTH_LEN,
"[ULPDU length field does not contain the expected length]");
proto_item_set_expert_flags(bad_ulpdu_length_pi,
PI_MALFORMED, PI_ERROR);
return 0;
}
@ -963,6 +960,7 @@ void proto_register_mpa(void)
{ &ei_mpa_res_field_not_set0, { "iwarp_mpa.res.not_set0", PI_REQUEST_CODE, PI_WARN, "Res field is NOT set to zero as required by RFC 5044", EXPFILL }},
{ &ei_mpa_rev_field_not_set1, { "iwarp_mpa.rev.not_set1", PI_REQUEST_CODE, PI_WARN, "Rev field is NOT set to one as required by RFC 5044", EXPFILL }},
{ &ei_mpa_reject_bit_responder, { "iwarp_mpa.reject_bit_responder", PI_RESPONSE_CODE, PI_NOTE, "Reject bit set by Responder", EXPFILL }},
{ &ei_mpa_bad_length, { "iwarp_mpa.bad_length", PI_MALFORMED, PI_ERROR, "Bad length", EXPFILL }},
};
expert_module_t* expert_iwarp_mpa;

View File

@ -31,6 +31,7 @@
#include <epan/packet.h>
#include <epan/addr_resolv.h>
#include <epan/strutil.h>
#include <epan/expert.h>
#include <wiretap/tnef.h>
@ -164,6 +165,9 @@ static int ett_tnef_counted_items = -1;
static int ett_tnef_attribute_date = -1;
static int ett_tnef_attribute_address = -1;
static expert_field ei_tnef_expect_single_item = EI_INIT;
static expert_field ei_tnef_incorrect_signature = EI_INIT;
static const value_string tnef_Lvl_vals[] = {
{ 1, "LVL-MESSAGE" },
{ 2, "LVL-ATTACHMENT" },
@ -239,7 +243,7 @@ static const value_string tnef_Attribute_vals[] = {
{ 0, NULL }
};
static gint dissect_counted_values(tvbuff_t *tvb, gint offset, int hf_id, packet_info *pinfo _U_, proto_tree *tree, gboolean single, gboolean unicode, guint encoding)
static gint dissect_counted_values(tvbuff_t *tvb, gint offset, int hf_id, packet_info *pinfo, proto_tree *tree, gboolean single, gboolean unicode, guint encoding)
{
proto_item *item;
guint32 length, count, i;
@ -249,10 +253,8 @@ static gint dissect_counted_values(tvbuff_t *tvb, gint offset, int hf_id, packe
if(count > 1) {
if(single) {
item = proto_tree_add_text(tree, tvb, offset, 4,
item = proto_tree_add_expert_format(tree, pinfo, &ei_tnef_expect_single_item, tvb, offset, 4,
"Expecting a single item but found %d", count);
proto_item_set_expert_flags(item, PI_MALFORMED, PI_ERROR);
tree = proto_item_add_subtree(item, ett_tnef_counted_items);
}
}
@ -522,10 +524,8 @@ static void dissect_tnef(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* check the signature */
if(signature != TNEF_SIGNATURE) {
proto_item_append_text(item, " [Incorrect, should be 0x%x. No further dissection possible. Check any Content-Transfer-Encoding has been removed.]", TNEF_SIGNATURE);
proto_item_set_expert_flags(item, PI_MALFORMED, PI_WARN);
expert_add_info_format_text(pinfo, item, &ei_tnef_incorrect_signature,
" [Incorrect, should be 0x%x. No further dissection possible. Check any Content-Transfer-Encoding has been removed.]", TNEF_SIGNATURE);
return;
} else {
@ -814,10 +814,19 @@ proto_register_tnef(void)
&ett_tnef_attribute_address,
};
static ei_register_info ei[] = {
{ &ei_tnef_expect_single_item, { "tnef.expect_single_item", PI_MALFORMED, PI_ERROR, "Expected single item", EXPFILL }},
{ &ei_tnef_incorrect_signature, { "tnef.signature.incorrect", PI_MALFORMED, PI_WARN, "Incorrect signature", EXPFILL }},
};
expert_module_t* expert_tnef;
proto_tnef = proto_register_protocol(PNAME, PSNAME, PFNAME);
proto_register_field_array(proto_tnef, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_tnef = expert_register_protocol(proto_tnef);
expert_register_field_array(expert_tnef, ei, array_length(ei));
/* Allow dissector to find be found by name. */
register_dissector(PFNAME, dissect_tnef, proto_tnef);