Eliminate proto_tree_add_text from some dissectors.

Other minor cleanup while in the neighborhood.

Change-Id: If73a029f564219782c313d4154c24c7ce7458b52
Reviewed-on: https://code.wireshark.org/review/3574
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Michael Mann 2014-08-13 08:56:22 -04:00 committed by Anders Broman
parent f64421df3f
commit d68d0e88b4
35 changed files with 472 additions and 293 deletions

View File

@ -63,9 +63,9 @@ static int hf_k12_ts = -1;
static gint ett_k12 = -1;
static gint ett_port = -1;
static gint ett_stack_item = -1;
static expert_field ei_k12_unmatched_stk_file = EI_INIT;
static expert_field ei_k12_unmatched_info = EI_INIT;
static dissector_handle_t k12_handle;
static dissector_handle_t data_handle;
@ -261,14 +261,8 @@ dissect_k12(tvbuff_t* tvb,packet_info* pinfo,proto_tree* tree)
}
if (handles == data_handles) {
proto_tree* stack_tree = proto_item_add_subtree(stack_item, ett_stack_item);
proto_item* item;
expert_add_info(pinfo, stack_item, &ei_k12_unmatched_stk_file);
item = proto_tree_add_text(stack_tree,tvb,0,0,
"Info: You can edit the 'K12 Protocols' table from Preferences->Protocols->k12xx");
PROTO_ITEM_SET_GENERATED(item);
expert_add_info(pinfo, stack_item, &ei_k12_unmatched_info);
call_dissector(data_handle, tvb, pinfo, tree);
return;
@ -432,12 +426,12 @@ proto_register_k12(void)
static gint *ett[] = {
&ett_k12,
&ett_port,
&ett_stack_item
&ett_port
};
static ei_register_info ei[] = {
{ &ei_k12_unmatched_stk_file, { "k12.unmatched_stk_file", PI_UNDECODED, PI_WARN, "Warning: stk file not matched in the 'K12 Protocols' table", EXPFILL }},
{ &ei_k12_unmatched_info, { "k12.unmatched_info", PI_PROTOCOL, PI_NOTE, "You can edit the 'K12 Protocols' table from Preferences->Protocols->k12xx", EXPFILL }},
};
static uat_field_t uat_k12_flds[] = {

View File

@ -30,6 +30,7 @@
#include <epan/dissectors/packet-tcp.h>
#include <epan/conversation.h>
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/prefs.h>
#include <epan/wmem/wmem.h>
@ -88,6 +89,8 @@ static gint ett_kafka_request_partition = -1;
static gint ett_kafka_response_topic = -1;
static gint ett_kafka_response_partition = -1;
static expert_field ei_kafka_message_decompress = EI_INIT;
static guint kafka_port = 0;
#define KAFKA_PRODUCE 0
@ -245,7 +248,7 @@ kafka_get_bytes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int off
static int
dissect_kafka_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int start_offset)
{
proto_item *ti;
proto_item *ti, *decrypt_item;
proto_tree *subtree;
tvbuff_t *raw, *payload;
int offset = start_offset;
@ -277,9 +280,8 @@ dissect_kafka_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int s
add_new_data_source(pinfo, payload, "Uncompressed Message");
dissect_kafka_message_set(payload, pinfo, subtree, 0, FALSE);
} else {
/* TODO make this an expert item */
proto_tree_add_text(subtree, tvb, 0, tvb_length(raw), "[Failed to decompress message!]");
proto_tree_add_item(subtree, hf_kafka_message_value, raw, 0, -1, ENC_NA);
decrypt_item = proto_tree_add_item(subtree, hf_kafka_message_value, raw, 0, -1, ENC_NA);
expert_add_info(pinfo, decrypt_item, &ei_kafka_message_decompress);
}
offset += tvb_length(raw);
}
@ -1228,11 +1230,19 @@ proto_register_kafka(void)
&ett_kafka_response_partition
};
static ei_register_info ei[] = {
{ &ei_kafka_message_decompress, { "kafka.decompress_failed", PI_UNDECODED, PI_WARN, "Failed to decompress message", EXPFILL }},
};
expert_module_t* expert_kafka;
proto_kafka = proto_register_protocol("Kafka",
"Kafka", "kafka");
proto_register_field_array(proto_kafka, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_kafka = expert_register_protocol(proto_kafka);
expert_register_field_array(expert_kafka, ei, array_length(ei));
kafka_module = prefs_register_protocol(proto_kafka,
proto_reg_handoff_kafka);

View File

@ -51,6 +51,7 @@ static int hf_kingfisher_via = -1;
static int hf_kingfisher_message = -1;
static int hf_kingfisher_function = -1;
static int hf_kingfisher_checksum = -1;
static int hf_kingfisher_message_data = -1;
static dissector_handle_t kingfisher_conv_handle;
@ -183,7 +184,7 @@ static gboolean
dissect_kingfisher(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean is_conv_dissector)
{
kingfisher_packet_t kfp;
proto_tree *kingfisher_tree=NULL;
proto_tree *kingfisher_tree;
proto_item *item=NULL;
const char *func_string = NULL;
unsigned short checksum;
@ -269,10 +270,8 @@ dissect_kingfisher(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean
message = (kfp.message & 0x0f) | ((kfp.message & 0xf0) >> 4);
if(tree){
item = proto_tree_add_protocol_format(tree, proto_kingfisher, tvb, 0, -1, "Kingfisher Protocol, From RTU: %d, Target RTU: %d", kfp.from, kfp.target );
kingfisher_tree = proto_item_add_subtree( item, ett_kingfisher );
}
item = proto_tree_add_protocol_format(tree, proto_kingfisher, tvb, 0, -1, "Kingfisher Protocol, From RTU: %d, Target RTU: %d", kfp.from, kfp.target );
kingfisher_tree = proto_item_add_subtree( item, ett_kingfisher );
/* version */
proto_tree_add_uint(kingfisher_tree, hf_kingfisher_version, tvb, 6, 1, kfp.version);
@ -300,7 +299,7 @@ dissect_kingfisher(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean
/* message data */
if(kfp.length > ((kfp.version==3)?11:8)){
proto_tree_add_text(kingfisher_tree, tvb, ((kfp.version==3)?10:7), kfp.length - ((kfp.version==3)?11:8), "Message Data");
proto_tree_add_item(kingfisher_tree, hf_kingfisher_message_data, tvb, ((kfp.version==3)?10:7), kfp.length - ((kfp.version==3)?11:8), ENC_NA);
}
/* checksum */
@ -355,6 +354,7 @@ proto_register_kingfisher( void )
{ &hf_kingfisher_message, { "Message Number", "kingfisher.message", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_kingfisher_function, { "Function Code", "kingfisher.function", FT_UINT8, BASE_DEC, VALS( function_code_vals ), 0x0, NULL, HFILL } },
{ &hf_kingfisher_checksum, { "Checksum", "kingfisher.checksum", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_kingfisher_message_data, { "Message Data", "kingfisher.message_data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
};
static gint *ett[] = {

View File

@ -438,7 +438,7 @@ dissect_payload(tvbuff_t *buffer, int offset, int messageid, proto_tree *tree, i
break;
case DISCONNECT: /*No payload*/
case DISCONNECTACK: /*No payload*/
proto_tree_add_text(payload_tree, buffer, offset, 0, "No Payload");
proto_tree_add_bytes_format(payload_tree, hf_knet_payload, buffer, offset, 0, NULL, "No Payload");
break;
case CONNECTSYN: /*TODO: Not yet implemented, implement when available*/
case CONNECTSYNACK: /*TODO: Not yet implemented, implement when available*/

View File

@ -149,15 +149,9 @@ static gboolean dissect_lanforge(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
proto_tree_add_time(lanforge_tree, hf_lanforge_timestamp, tvb, offset - 8, 8, &tstamp);
#if 0
if(tvb_reported_length_remaining(tvb, offset) > 0) /* random data */
proto_tree_add_text(lanforge_tree, tvb, offset, -1, "Data (%u bytes)",
tvb_length_remaining(tvb, offset));
#else
if(tvb_reported_length_remaining(tvb, offset) > 0) /* random data */
call_dissector(data_handle, tvb_new_subset_remaining(tvb, offset), pinfo,
lanforge_tree);
#endif
}
return TRUE;

View File

@ -86,6 +86,7 @@ static int hf_lapdm_len = -1;
/*
* LAPDm fragment handling
*/
static int hf_lapdm_fragment_data = -1;
static int hf_lapdm_fragments = -1;
static int hf_lapdm_fragment = -1;
static int hf_lapdm_fragment_overlap = -1;
@ -322,9 +323,7 @@ dissect_lapdm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
else {
col_append_str(pinfo->cinfo, COL_INFO, " (Fragment)");
if (tree) {
proto_tree_add_text(lapdm_tree, payload, 0, -1, "Fragment Data");
}
proto_tree_add_item(lapdm_tree, hf_lapdm_fragment_data, payload, 0, -1, ENC_NA);
}
/* Now reset fragmentation information in pinfo
@ -425,6 +424,10 @@ proto_register_lapdm(void)
/* Fragment reassembly
*/
{ &hf_lapdm_fragment_data,
{ "Fragment Data", "lapdm.fragment_data", FT_NONE, BASE_NONE,
NULL, 0x00, NULL, HFILL }},
{ &hf_lapdm_fragments,
{ "Message fragments", "lapdm.fragments", FT_NONE, BASE_NONE,
NULL, 0x00, "LAPDm Message fragments", HFILL }},

View File

@ -79,6 +79,7 @@ static int hf_lapsat_payload_last_nibble = -1;
static int hf_lapsat_len = -1;
static int hf_lapsat_fragment_data = -1;
static int hf_lapsat_fragments = -1;
static int hf_lapsat_fragment = -1;
static int hf_lapsat_fragment_overlap = -1;
@ -558,7 +559,7 @@ dissect_lapsat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
} else {
/* No, just add infos */
col_append_str(pinfo->cinfo, COL_INFO, " (Fragment)");
proto_tree_add_text(lapsat_tree, payload, 0, -1, "Fragment Data");
proto_tree_add_item(lapsat_tree, hf_lapsat_fragment_data, payload, 0, -1, ENC_NA);
}
/* Now reset fragmentation information in pinfo */
@ -687,6 +688,11 @@ proto_register_lapsat(void)
},
/* Fragment reassembly */
{ &hf_lapsat_fragment_data,
{ "Fragment Data", "lapsat.fragment_data",
FT_BYTES, BASE_NONE, NULL, 0x00,
NULL, HFILL }
},
{ &hf_lapsat_fragments,
{ "Message fragments", "lapsat.fragments",
FT_NONE, BASE_NONE, NULL, 0x00,

View File

@ -11546,19 +11546,17 @@ int lbmc_dissect_lbmc_packet(tvbuff_t * tvb, int offset, packet_info * pinfo, pr
}
else
{
proto_item * pi = NULL;
proto_item * pi;
if (msg->reassembled_frame == 0)
{
expert_add_info(pinfo, NULL, &ei_lbmc_analysis_missing_reassembly_frame);
pi = proto_tree_add_text(subtree, data_tvb, 0, tvb_reported_length_remaining(data_tvb, 0),
"Message not reassembled - reassembly data missing from capture");
proto_tree_add_expert(subtree, pinfo, &ei_lbmc_analysis_missing_reassembly_frame, data_tvb, 0, -1);
}
else
{
pi = proto_tree_add_uint(subtree, hf_reassembly_frame, data_tvb, 0, tvb_reported_length_remaining(data_tvb, 0), msg->reassembled_frame);
PROTO_ITEM_SET_GENERATED(pi);
}
PROTO_ITEM_SET_GENERATED(pi);
}
}
@ -14316,7 +14314,7 @@ void proto_register_lbmc(void)
{ &ei_lbmc_analysis_invalid_value, { "lbmc.analysis.invalid_value", PI_MALFORMED, PI_ERROR, "Invalid value", EXPFILL } },
{ &ei_lbmc_analysis_no_reassembly, { "lbmc.analysis.no_reassembly", PI_PROTOCOL, PI_ERROR, "Reassembly not in progress but fragment_offset not zero", EXPFILL } },
{ &ei_lbmc_analysis_invalid_offset, { "lbmc.analysis.invalid_offset", PI_MALFORMED, PI_ERROR, "Message property offset exceeds data length", EXPFILL } },
{ &ei_lbmc_analysis_missing_reassembly_frame, { "lbmc.analysis.missing_reassembly_frame", PI_UNDECODED, PI_WARN, "Reassembly frame not found - perhaps missing packets?", EXPFILL } },
{ &ei_lbmc_analysis_missing_reassembly_frame, { "lbmc.analysis.missing_reassembly_frame", PI_UNDECODED, PI_WARN, "Message not reassembled - reassembly data missing from capture", EXPFILL } },
{ &ei_lbmc_analysis_invalid_fragment, { "lbmc.analysis.invalid_fragment", PI_MALFORMED, PI_ERROR, "Invalid fragment", EXPFILL } },
};
module_t * lbmc_module = NULL;

View File

@ -47,6 +47,7 @@
#include <epan/addr_resolv.h>
#include <epan/ipproto.h>
#include <epan/prefs.h>
#include <epan/expert.h>
#include <epan/strutil.h>
#include <epan/wmem/wmem.h>
#include <epan/dissectors/packet-tcp.h>
@ -204,6 +205,9 @@ static int ett_ldss_broadcast = -1;
static int ett_ldss_transfer = -1;
static int ett_ldss_transfer_req = -1;
static expert_field ei_ldss_unrecognized_line = EI_INIT;
static dissector_handle_t ldss_udp_handle;
static dissector_handle_t ldss_tcp_handle;
@ -458,7 +462,7 @@ dissect_ldss_transfer (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
conversation_t *transfer_conv;
ldss_transfer_info_t *transfer_info;
struct tcpinfo *transfer_tcpinfo;
proto_tree *ti, *line_tree = NULL, *ldss_tree = NULL;
proto_tree *ti, *line_tree = NULL, *ldss_tree = NULL;
nstime_t broadcast_response_time;
/* Reject the packet if data is NULL */
@ -587,11 +591,7 @@ dissect_ldss_transfer (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
}
}
else {
if (tree) {
ti = proto_tree_add_text(line_tree, tvb, offset, linelen,
"Unrecognized line ignored");
PROTO_ITEM_SET_GENERATED(ti);
}
proto_tree_add_expert(line_tree, pinfo, &ei_ldss_unrecognized_line, tvb, offset, linelen);
}
if (is_digest_line) {
@ -970,11 +970,18 @@ proto_register_ldss (void) {
static gint *ett[] = { &ett_ldss_broadcast, &ett_ldss_transfer, &ett_ldss_transfer_req };
static ei_register_info ei[] = {
{ &ei_ldss_unrecognized_line, { "ldss.unrecognized_line", PI_PROTOCOL, PI_WARN, "Unrecognized line ignored", EXPFILL }},
};
module_t *ldss_module;
expert_module_t* expert_ldss;
proto_ldss = proto_register_protocol("Local Download Sharing Service", "LDSS", "ldss");
proto_register_field_array(proto_ldss, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_ldss = expert_register_protocol(proto_ldss);
expert_register_field_array(expert_ldss, ei, array_length(ei));
ldss_module = prefs_register_protocol( proto_ldss, proto_reg_handoff_ldss);
prefs_register_uint_preference( ldss_module, "udp_port",

View File

@ -140,6 +140,7 @@ static int hf_lg8979_timebias_proctime = -1;
static int hf_lg8979_firmware_ver = -1;
static int hf_lg8979_exprpt_code = -1;
static int hf_lg8979_exprpt_parm = -1;
static int hf_lg8979_disallowed_func = -1;
static int hf_lg8979_crc16 = -1;
/* Initialize the subtree pointers */
@ -497,11 +498,11 @@ dissect_lg8979(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
{
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *lg8979_item, *lg8979_flags_item = NULL, *lg8979_point_item = NULL;
proto_item *lg8979_ts_item = NULL, *lg8979_slot_item = NULL, *lg8979_expparm_item = NULL;
proto_item *lg8979_slot_item = NULL;
proto_tree *lg8979_tree, *lg8979_flags_tree = NULL, *lg8979_fc_tree = NULL;
proto_tree *lg8979_point_tree = NULL, *lg8979_ts_tree = NULL;
int offset = 0;
guint8 rtu_addr, func, packet_type, data_len, ptnum8, tripclose, rl, exp_code, exp_parm;
guint8 rtu_addr, func, packet_type, data_len, ptnum8, tripclose, rl, exp_code;
guint8 ts_mon, ts_day, ts_hr, ts_min, ts_sec;
guint16 ptnum, ptval, ana12_val;
guint16 ts_ms;
@ -677,10 +678,9 @@ dissect_lg8979(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
ts_sec = tvb_get_guint8(tvb, offset+4);
ts_ms = tvb_get_letohs(tvb, offset+5);
lg8979_ts_item = proto_tree_add_text(lg8979_tree, tvb, offset, 7,
"Time-Sync Value: %02d/%02d %02d:%02d:%02d.%03d",
ts_mon, ts_day, ts_hr, ts_min, ts_sec, ts_ms);
lg8979_ts_tree = proto_item_add_subtree(lg8979_ts_item, ett_lg8979_ts);
lg8979_ts_tree = proto_tree_add_subtree_format(lg8979_tree, tvb, offset, 7, ett_lg8979_ts, NULL,
"Time-Sync Value: %02d/%02d %02d:%02d:%02d.%03d",
ts_mon, ts_day, ts_hr, ts_min, ts_sec, ts_ms);
proto_tree_add_item(lg8979_ts_tree, hf_lg8979_timesync_mon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item(lg8979_ts_tree, hf_lg8979_timesync_day, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
@ -1114,10 +1114,8 @@ dissect_lg8979(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
ts_sec = tvb_get_guint8(tvb, offset+4);
ts_ms = tvb_get_letohs(tvb, offset+5);
lg8979_ts_item = proto_tree_add_text(lg8979_point_tree, tvb, offset, 7,
"SOE Time Stamp: [%02d/%02d %02d:%02d:%02d.%03d]",
ts_mon, ts_day, ts_hr, ts_min, ts_sec, ts_ms);
lg8979_ts_tree = proto_item_add_subtree(lg8979_ts_item, ett_lg8979_ts);
lg8979_ts_tree = proto_tree_add_subtree_format(lg8979_point_tree, tvb, offset, 7, ett_lg8979_ts, NULL,
"SOE Time Stamp: [%02d/%02d %02d:%02d:%02d.%03d]", ts_mon, ts_day, ts_hr, ts_min, ts_sec, ts_ms);
proto_tree_add_item(lg8979_ts_tree, hf_lg8979_soe_logchg_mon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item(lg8979_ts_tree, hf_lg8979_soe_logchg_day, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
@ -1170,17 +1168,13 @@ dissect_lg8979(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
case LG8979_FC_EXP_RPT:
exp_code = tvb_get_guint8(tvb, offset);
exp_parm = tvb_get_guint8(tvb, offset+1);
proto_tree_add_item(lg8979_tree, hf_lg8979_exprpt_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
lg8979_expparm_item = proto_tree_add_item(lg8979_tree, hf_lg8979_exprpt_parm, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
proto_item_prepend_text(lg8979_expparm_item, "Parameter: %s, ",
val_to_str_const(exp_code, lg8979_exprpt_parm_vals, "Unknown Parameters"));
proto_tree_add_item(lg8979_tree, hf_lg8979_exprpt_parm, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
/* Function code lookup, if required */
if (exp_code == 14) {
proto_item *lg8979_dfc_item=NULL;
lg8979_dfc_item = proto_tree_add_text(lg8979_tree, tvb, offset+1, 1, "Disallowed Function Code: %s",
val_to_str_const(exp_parm, lg8979_funccode_vals, "Unknown Function Code"));
proto_item *lg8979_dfc_item;
lg8979_dfc_item = proto_tree_add_item(lg8979_tree, hf_lg8979_disallowed_func, tvb, offset+1, 1, ENC_NA);
PROTO_ITEM_SET_GENERATED(lg8979_dfc_item);
}
@ -1483,7 +1477,9 @@ proto_register_lg8979(void)
{ &hf_lg8979_exprpt_code,
{ "Exception Report Code", "lg8979.exprpt_code", FT_UINT8, BASE_DEC, VALS(lg8979_exprpt_code_vals), 0x0, NULL, HFILL }},
{ &hf_lg8979_exprpt_parm,
{ "Value", "lg8979.exprpt_parm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ "Value", "lg8979.exprpt_parm", FT_UINT8, BASE_DEC, VALS(lg8979_exprpt_parm_vals), 0x0, NULL, HFILL }},
{ &hf_lg8979_disallowed_func,
{ "Disallowed Function Code", "lg8979.disallowed_func", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &lg8979_funccode_vals_ext, 0x0, NULL, HFILL }},
{ &hf_lg8979_crc16,
{ "CRC-16", "lg8979.crc16", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},

View File

@ -39,10 +39,11 @@ static int proto_lge_monitor = -1;
static int hf_lge_monitor_dir = -1;
static int hf_lge_monitor_prot = -1;
static int hf_lge_monitor_length = -1;
static int hf_lge_monitor_data = -1;
/* Initialize the subtree pointers */
static int ett_lge_monitor = -1;
static int ett_lge_header = -1;
static guint LGEMonitorUDPPort = 0;
static dissector_handle_t mtp3_handle, m3ua_handle, sccp_handle, sctp_handle;
@ -70,6 +71,7 @@ dissect_lge_monitor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
int offset = 0;
guint32 lge_monitor_proto_id;
tvbuff_t* next_tvb = NULL;
proto_tree* header_tree;
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *ti;
@ -81,14 +83,14 @@ dissect_lge_monitor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
ti = proto_tree_add_item(tree, proto_lge_monitor, tvb, 0, LGEMON_PROTO_HEADER_LENGTH, ENC_NA);
lge_monitor_tree = proto_item_add_subtree(ti, ett_lge_monitor);
proto_tree_add_text(lge_monitor_tree, tvb, offset, LGEMON_PROTO_HEADER_LENGTH, "LGE Monitor PDU");
proto_tree_add_item(lge_monitor_tree, hf_lge_monitor_dir, tvb, offset, 4, ENC_BIG_ENDIAN);
offset = offset +4;
header_tree = proto_tree_add_subtree(lge_monitor_tree, tvb, offset, LGEMON_PROTO_HEADER_LENGTH, ett_lge_header, NULL, "LGE Monitor PDU");
proto_tree_add_item(header_tree, hf_lge_monitor_dir, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
lge_monitor_proto_id = tvb_get_ntohl(tvb,offset);
proto_tree_add_item(lge_monitor_tree, hf_lge_monitor_prot, tvb, offset, 4, ENC_BIG_ENDIAN);
offset = offset +4;
proto_tree_add_item(lge_monitor_tree, hf_lge_monitor_length, tvb, offset, 4, ENC_BIG_ENDIAN);
offset = offset +4;
proto_tree_add_item(header_tree, hf_lge_monitor_prot, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
proto_tree_add_item(header_tree, hf_lge_monitor_length, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
next_tvb = tvb_new_subset_remaining(tvb, offset);
@ -106,7 +108,7 @@ dissect_lge_monitor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
call_dissector(m3ua_handle, next_tvb, pinfo, tree);
return;
default:
proto_tree_add_text(lge_monitor_tree, tvb, offset, -1, "LGE Monitor data");
proto_tree_add_item(lge_monitor_tree, hf_lge_monitor_data, tvb, offset, -1, ENC_NA);
break;
}
return;
@ -164,11 +166,17 @@ proto_register_lge_monitor(void)
FT_UINT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_lge_monitor_data,
{ "LGE Monitor data", "lge_monitor.monitor_data",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_lge_monitor,
&ett_lge_header
};
/* Register the protocol name and description */

View File

@ -60,7 +60,9 @@ void proto_reg_handoff_llc(void);
static int proto_llc = -1;
static int hf_llc_dsap = -1;
static int hf_llc_ssap = -1;
static int hf_llc_dsap_sap = -1;
static int hf_llc_dsap_ig = -1;
static int hf_llc_ssap_sap = -1;
static int hf_llc_ssap_cr = -1;
static int hf_llc_ctrl = -1;
static int hf_llc_n_r = -1;
@ -216,25 +218,15 @@ static GHashTable *oui_info_table = NULL;
* proto_tree_add_... function to display the topmost 7 bits of the SAP
* value as a bitfield produces incorrect results (while the bitfield is
* displayed correctly, Wireshark uses the bitshifted value to display the
* associated name and for filtering purposes). This function calls the
* Wireshark routine to decode the SAP value as a bitfield into a given
* string without performing any bitshift of the original value.
*
* The string passed to this function must be of ITEM_LABEL_LENGTH size.
* The SAP value passed to this function must be complete (not masked).
*
* associated name and for filtering purposes). This function calls a
* BASE_CUSTOM routine to decode the SAP value as a bitfield
* counter-balancing the bitshift of the original value.
*/
static gchar *
decode_sap_value_as_bitfield(gchar *buffer, guint32 sap)
static void
llc_sap_value( gchar *result, guint32 sap )
{
char *p;
memset (buffer, '\0', ITEM_LABEL_LENGTH);
p = decode_bitfield_value (buffer, sap, SAP_MASK, 8);
g_snprintf(p, (gulong)(ITEM_LABEL_LENGTH-strlen(buffer)-1), "SAP: %s",
val_to_str_const(sap, sap_vals, "Unknown"));
return buffer;
g_snprintf( result, ITEM_LABEL_LENGTH, "%s", val_to_str_const(sap<<1, sap_vals, "Unknown"));
}
/*
@ -440,9 +432,9 @@ dissect_basicxid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
static void
dissect_llc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
proto_tree *llc_tree = NULL;
proto_tree *field_tree = NULL;
proto_item *ti = NULL;
proto_tree *llc_tree;
proto_tree *field_tree;
proto_item *ti, *sap_item;
int is_snap;
guint16 control;
int llc_header_len;
@ -453,32 +445,19 @@ dissect_llc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_clear(pinfo->cinfo, COL_INFO);
dsap = tvb_get_guint8(tvb, 0);
if (tree) {
proto_item *dsap_item;
gchar label[ITEM_LABEL_LENGTH];
ti = proto_tree_add_item(tree, proto_llc, tvb, 0, -1, ENC_NA);
llc_tree = proto_item_add_subtree(ti, ett_llc);
dsap_item = proto_tree_add_item(llc_tree, hf_llc_dsap, tvb, 0, 1, ENC_NA);
field_tree = proto_item_add_subtree(dsap_item, ett_llc_dsap);
proto_tree_add_text(field_tree, tvb, 0, 1, "%s",
decode_sap_value_as_bitfield(label, dsap));
proto_tree_add_item(field_tree, hf_llc_dsap_ig, tvb, 0, 1, ENC_NA);
} else
llc_tree = NULL;
ti = proto_tree_add_item(tree, proto_llc, tvb, 0, -1, ENC_NA);
llc_tree = proto_item_add_subtree(ti, ett_llc);
sap_item = proto_tree_add_item(llc_tree, hf_llc_dsap, tvb, 0, 1, ENC_NA);
field_tree = proto_item_add_subtree(sap_item, ett_llc_dsap);
proto_tree_add_item(field_tree, hf_llc_dsap_sap, tvb, 0, 1, ENC_NA);
proto_tree_add_item(field_tree, hf_llc_dsap_ig, tvb, 0, 1, ENC_NA);
ssap = tvb_get_guint8(tvb, 1);
if (tree) {
proto_item *ssap_item;
gchar label[ITEM_LABEL_LENGTH];
ssap_item = proto_tree_add_item(llc_tree, hf_llc_ssap, tvb, 1, 1, ENC_NA);
field_tree = proto_item_add_subtree(ssap_item, ett_llc_ssap);
proto_tree_add_text(field_tree, tvb, 1, 1, "%s",
decode_sap_value_as_bitfield(label, ssap));
proto_tree_add_item(field_tree, hf_llc_ssap_cr, tvb, 1, 1, ENC_NA);
} else
llc_tree = NULL;
sap_item = proto_tree_add_item(llc_tree, hf_llc_ssap, tvb, 1, 1, ENC_NA);
field_tree = proto_item_add_subtree(sap_item, ett_llc_ssap);
proto_tree_add_item(field_tree, hf_llc_ssap_sap, tvb, 1, 1, ENC_NA);
proto_tree_add_item(field_tree, hf_llc_ssap_cr, tvb, 1, 1, ENC_NA);
is_snap = (dsap == SAP_SNAP) && (ssap == SAP_SNAP);
llc_header_len = 2; /* DSAP + SSAP */
@ -783,6 +762,10 @@ proto_register_llc(void)
{ "DSAP", "llc.dsap", FT_UINT8, BASE_HEX,
VALS(sap_vals), 0x0, "Destination Service Access Point", HFILL }},
{ &hf_llc_dsap_sap,
{ "SAP", "llc.dsap.sap", FT_UINT8, BASE_CUSTOM,
llc_sap_value, 0xFE, "Service Access Point", HFILL }},
{ &hf_llc_dsap_ig,
{ "IG Bit", "llc.dsap.ig", FT_BOOLEAN, 8,
TFS(&ig_bit), DSAP_GI_BIT, "Individual/Group", HFILL }},
@ -791,6 +774,10 @@ proto_register_llc(void)
{ "SSAP", "llc.ssap", FT_UINT8, BASE_HEX,
VALS(sap_vals), 0x0, "Source Service Access Point", HFILL }},
{ &hf_llc_ssap_sap,
{ "SAP", "llc.ssap.sap", FT_UINT8, BASE_CUSTOM,
llc_sap_value, 0xFE, "Service Access Point", HFILL }},
{ &hf_llc_ssap_cr,
{ "CR Bit", "llc.ssap.cr", FT_BOOLEAN, 8,
TFS(&cr_bit), SSAP_CR_BIT, "Command/Response", HFILL }},

View File

@ -101,6 +101,7 @@ static int hf_dcbx_feature_flag_enabled = -1;
static int hf_dcbx_feature_flag_error = -1;
static int hf_dcbx_feature_flag_willing = -1;
static int hf_dcbx_feature_subtype = -1;
static int hf_dcbx_feature_pgid_reserved = -1;
static int hf_dcbx_feature_pgid_prio_0 = -1;
static int hf_dcbx_feature_pgid_prio_1 = -1;
static int hf_dcbx_feature_pgid_prio_2 = -1;
@ -172,6 +173,7 @@ static int hf_ieee_8021az_tsa_class6 = -1;
static int hf_ieee_8021az_tsa_class7 = -1;
static int hf_ieee_8021az_feature_flag_mbc = -1;
static int hf_ieee_8021az_pfc_numtcs = -1;
static int hf_ieee_8021az_app_reserved = -1;
static int hf_ieee_8021az_app_prio = -1;
static int hf_ieee_8021az_app_selector = -1;
static int hf_ieee_802_3_subtype = -1;
@ -1544,7 +1546,6 @@ dissect_dcbx_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint3
proto_tree *subtlv_tree = NULL;
proto_tree *apptlv_tree = NULL;
proto_item *tf = NULL;
proto_tree_add_item(tree, hf_dcbx_type, tvb, offset, 1, ENC_BIG_ENDIAN);
@ -1560,25 +1561,27 @@ dissect_dcbx_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint3
dataLen = TLV_INFO_LEN(tempShort);
/* Write out common header fields first */
tf = proto_tree_add_text(tree, tvb, offset, dataLen + 2, "%s TLV",
val_to_str_const(subType, dcbx_subtypes, "Unknown"));
switch (subType)
{
case 0x1: /* Control */
subtlv_tree = proto_item_add_subtree(tf, ett_org_spc_dcbx_cee_1);
subtlv_tree = proto_tree_add_subtree_format(tree, tvb, offset, dataLen + 2,
ett_org_spc_dcbx_cee_1, NULL, "%s TLV", val_to_str_const(subType, dcbx_subtypes, "Unknown"));
break;
case 0x2: /* Priority Groups */
subtlv_tree = proto_item_add_subtree(tf, ett_org_spc_dcbx_cee_2);
subtlv_tree = proto_tree_add_subtree_format(tree, tvb, offset, dataLen + 2,
ett_org_spc_dcbx_cee_2, NULL, "%s TLV", val_to_str_const(subType, dcbx_subtypes, "Unknown"));
break;
case 0x3: /* PFC */
subtlv_tree = proto_item_add_subtree(tf, ett_org_spc_dcbx_cee_3);
subtlv_tree = proto_tree_add_subtree_format(tree, tvb, offset, dataLen + 2,
ett_org_spc_dcbx_cee_3, NULL, "%s TLV", val_to_str_const(subType, dcbx_subtypes, "Unknown"));
break;
case 0x4: /* Application */
subtlv_tree = proto_item_add_subtree(tf, ett_org_spc_dcbx_cee_4);
subtlv_tree = proto_tree_add_subtree_format(tree, tvb, offset, dataLen + 2,
ett_org_spc_dcbx_cee_4, NULL, "%s TLV", val_to_str_const(subType, dcbx_subtypes, "Unknown"));
break;
case 0x6: /* Logical Link Down */
subtlv_tree = proto_item_add_subtree(tf, ett_org_spc_dcbx_cin_6);
subtlv_tree = proto_tree_add_subtree_format(tree, tvb, offset, dataLen + 2,
ett_org_spc_dcbx_cin_6, NULL, "%s TLV", val_to_str_const(subType, dcbx_subtypes, "Unknown"));
break;
}
proto_tree_add_item(subtlv_tree, hf_dcbx_tlv_type, tvb, offset, 2, ENC_BIG_ENDIAN);
@ -1948,9 +1951,7 @@ dissect_ieee_802_1_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
}
case 0xA: /* ETS Recommendation */
{
tempByte = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1, "Reserved 0x%X", tempByte);
proto_tree_add_item(tree, hf_dcbx_feature_pgid_reserved, tvb, offset, 1, ENC_NA);
offset++;
@ -2060,9 +2061,7 @@ dissect_ieee_802_1_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
}
case 0xC: /* Application Priority */
{
tempByte = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1, "Reserved 0x%X", tempByte);
proto_tree_add_item(tree, hf_ieee_8021az_app_reserved, tvb, offset, 1, ENC_NA);
offset++;
@ -3491,6 +3490,10 @@ proto_register_lldp(void)
{ "Subtype", "lldp.dcbx.feature.subtype", FT_UINT8, BASE_HEX,
NULL, 0, NULL, HFILL }
},
{ &hf_dcbx_feature_pgid_reserved,
{ "Reserved", "lldp.dcbx.feature.pg.reserved", FT_UINT8, BASE_HEX,
NULL, 0xF000, 0, HFILL }
},
{ &hf_dcbx_feature_pgid_prio_0,
{ "PGID for Prio 0", "lldp.dcbx.feature.pg.pgid_prio0", FT_UINT16, BASE_DEC,
NULL, 0xF000, 0, HFILL }
@ -3775,6 +3778,10 @@ proto_register_lldp(void)
{ "Max PFC Enabled Traffic Classes", "lldp.dcbx.ieee.pfc.numtcs", FT_UINT8, BASE_DEC,
NULL, 0xF, NULL, HFILL }
},
{ &hf_ieee_8021az_app_reserved,
{ "Reserved", "lldp.dcbx.ieee.app.reserved", FT_UINT8, BASE_HEX,
NULL, 0x0, NULL, HFILL }
},
{ &hf_ieee_8021az_app_prio,
{ "Application Priority", "lldp.dcbx.ieee.app.prio", FT_UINT8, BASE_DEC,
NULL, 0xE0, NULL, HFILL }

View File

@ -298,7 +298,7 @@ dissect_lon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
switch(dom_len)
{
case 0: /* Domain-wide */
proto_tree_add_text(lon_tree, tvb, offset, 0, "Domain wide addressing");
proto_tree_add_bytes_format(lon_tree, hf_lon_domain, tvb, offset, 0, NULL, "Domain wide addressing");
break;
case 1:
proto_tree_add_item(lon_tree, hf_lon_domain, tvb, offset, 1, ENC_NA);

View File

@ -36,6 +36,7 @@ void proto_reg_handoff_loop(void);
static int proto_loop = -1;
static int hf_loop_skipcount = -1;
static int hf_loop_function = -1;
static int hf_loop_relevant_function = -1;
static int hf_loop_receipt_number = -1;
static int hf_loop_forwarding_address = -1;
@ -82,25 +83,22 @@ dissect_loop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_add_str(pinfo->cinfo, COL_INFO,
val_to_str(function, function_vals, "Unknown function (%u)"));
proto_tree_add_text(loop_tree, tvb, offset, 2, "Relevant function:");
proto_tree_add_uint(loop_tree, hf_loop_relevant_function, tvb, offset, 2, function);
set_info = FALSE;
}
if (tree)
proto_tree_add_uint(loop_tree, hf_loop_function, tvb, offset, 2, function);
proto_tree_add_uint(loop_tree, hf_loop_function, tvb, offset, 2, function);
offset += 2;
switch (function) {
case FUNC_REPLY:
if (tree)
proto_tree_add_item(loop_tree, hf_loop_receipt_number, tvb, offset, 2,
proto_tree_add_item(loop_tree, hf_loop_receipt_number, tvb, offset, 2,
ENC_LITTLE_ENDIAN);
offset += 2;
more_function = FALSE;
break;
case FUNC_FORWARD_DATA:
if (tree)
proto_tree_add_item(loop_tree, hf_loop_forwarding_address, tvb, offset,
proto_tree_add_item(loop_tree, hf_loop_forwarding_address, tvb, offset,
6, ENC_NA);
offset += 6;
more_function = TRUE;
@ -129,23 +127,28 @@ proto_register_loop(void)
static hf_register_info hf[] = {
{ &hf_loop_skipcount,
{ "skipCount", "loop.skipcount",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
{ &hf_loop_function,
{ "Function", "loop.function",
FT_UINT16, BASE_DEC, VALS(function_vals), 0x0,
NULL, HFILL }},
FT_UINT16, BASE_DEC, VALS(function_vals), 0x0,
NULL, HFILL }},
{ &hf_loop_relevant_function,
{ "Relevant function", "loop.relevant_function",
FT_UINT16, BASE_DEC, VALS(function_vals), 0x0,
NULL, HFILL }},
{ &hf_loop_receipt_number,
{ "Receipt number", "loop.receipt_number",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
{ &hf_loop_forwarding_address,
{ "Forwarding address", "loop.forwarding_address",
FT_ETHER, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
FT_ETHER, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
};
static gint *ett[] = {
&ett_loop,

View File

@ -34,6 +34,9 @@ void proto_reg_handoff_lpd(void);
static int proto_lpd = -1;
static int hf_lpd_response = -1;
static int hf_lpd_request = -1;
static int hf_lpd_client_code = -1;
static int hf_lpd_printer_option = -1;
static int hf_lpd_response_code = -1;
static gint ett_lpd = -1;
@ -43,6 +46,28 @@ static gint find_printer_string(tvbuff_t *tvb, int offset);
static dissector_handle_t data_handle;
/* This information comes from the LPRng HOWTO, which also describes
RFC 1179. http://www.astart.com/lprng/LPRng-HOWTO.html */
static const value_string lpd_client_code[] = {
{ 1, "LPC: start print / jobcmd: abort" },
{ 2, "LPR: transfer a printer job / jobcmd: receive control file" },
{ 3, "LPQ: print short form of queue status / jobcmd: receive data file" },
{ 4, "LPQ: print long form of queue status" },
{ 5, "LPRM: remove jobs" },
{ 6, "LPRng lpc: do control operation" },
{ 7, "LPRng lpr: transfer a block format print job" },
{ 8, "LPRng lpc: secure command transfer" },
{ 9, "LPRng lpq: verbose status information" },
{ 0, NULL }
};
static const value_string lpd_server_code[] = {
{ 0, "Success: accepted, proceed" },
{ 1, "Queue not accepting jobs" },
{ 2, "Queue temporarily full, retry later" },
{ 3, "Bad job format, do not retry" },
{ 0, NULL }
};
static void
dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
@ -52,28 +77,6 @@ dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint8 code;
gint printer_len;
/* This information comes from the LPRng HOWTO, which also describes
RFC 1179. http://www.astart.com/lprng/LPRng-HOWTO.html */
static const value_string lpd_client_code[] = {
{ 1, "LPC: start print / jobcmd: abort" },
{ 2, "LPR: transfer a printer job / jobcmd: receive control file" },
{ 3, "LPQ: print short form of queue status / jobcmd: receive data file" },
{ 4, "LPQ: print long form of queue status" },
{ 5, "LPRM: remove jobs" },
{ 6, "LPRng lpc: do control operation" },
{ 7, "LPRng lpr: transfer a block format print job" },
{ 8, "LPRng lpc: secure command transfer" },
{ 9, "LPRng lpq: verbose status information" },
{ 0, NULL }
};
static const value_string lpd_server_code[] = {
{ 0, "Success: accepted, proceed" },
{ 1, "Queue not accepting jobs" },
{ 2, "Queue temporarily full, retry later" },
{ 3, "Bad job format, do not retry" },
{ 0, NULL }
};
col_set_str(pinfo->cinfo, COL_PROTOCOL, "LPD");
col_clear(pinfo->cinfo, COL_INFO);
@ -99,7 +102,6 @@ dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_set_str(pinfo->cinfo, COL_INFO, "LPD continuation");
}
if (tree) {
ti = proto_tree_add_item(tree, proto_lpd, tvb, 0, -1, ENC_NA);
lpd_tree = proto_item_add_subtree(ti, ett_lpd);
@ -116,11 +118,9 @@ dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
printer_len = find_printer_string(tvb, 1);
if (code <= 9 && printer_len != -1) {
proto_tree_add_text(lpd_tree, tvb, 0, 1, "%s",
val_to_str(code, lpd_client_code, "Unknown client code: %u"));
proto_tree_add_text(lpd_tree, tvb, 1, printer_len,
"Printer/options: %s",
tvb_format_text(tvb, 1, printer_len));
proto_tree_add_uint_format(lpd_tree, hf_lpd_client_code, tvb, 0, 1, code,
"%s", val_to_str(code, lpd_client_code, "Unknown client code: %u"));
proto_tree_add_item(lpd_tree, hf_lpd_printer_option, tvb, 1, printer_len, ENC_ASCII|ENC_NA);
}
else {
call_dissector(data_handle,tvb, pinfo, lpd_tree);
@ -128,8 +128,7 @@ dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
else if (lpr_packet_type == response) {
if (code <= 3) {
proto_tree_add_text(lpd_tree, tvb, 0, 1,
"Response: %s", val_to_str(code, lpd_server_code, "Unknown server code: %u"));
proto_tree_add_item(lpd_tree, hf_lpd_response_code, tvb, 0, 1, ENC_NA);
}
else {
call_dissector(data_handle,tvb, pinfo, lpd_tree);
@ -138,7 +137,6 @@ dissect_lpd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
else {
call_dissector(data_handle,tvb, pinfo, lpd_tree);
}
}
}
@ -163,13 +161,28 @@ proto_register_lpd(void)
static hf_register_info hf[] = {
{ &hf_lpd_response,
{ "Response", "lpd.response",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"TRUE if LPD response", HFILL }},
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"TRUE if LPD response", HFILL }},
{ &hf_lpd_request,
{ "Request", "lpd.request",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"TRUE if LPD request", HFILL }}
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"TRUE if LPD request", HFILL }},
{ &hf_lpd_client_code,
{ "Client code", "lpd.client_code",
FT_UINT8, BASE_DEC, VALS(lpd_client_code), 0x0,
NULL, HFILL }},
{ &hf_lpd_printer_option,
{ "Printer/options", "lpd.printer_option",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
{ &hf_lpd_response_code,
{ "Response", "lpd.response_code",
FT_UINT8, BASE_DEC, VALS(lpd_server_code), 0x0,
NULL, HFILL }},
};
static gint *ett[] = {
&ett_lpd,

View File

@ -137,11 +137,12 @@ static int hf_realnamelen = -1;
static int hf_realname = -1;
/* static int hf_a_record = -1; */
static int hf_a_record = -1;
static int hf_a_rec_len = -1;
static int hf_srv_prio = -1;
static int hf_srv_weight = -1;
static int hf_srv_port = -1;
static int hf_srv_dname = -1;
static int hf_adn_flags = -1;
static int hf_adn_addrtype = -1;
@ -157,6 +158,7 @@ static int hf_adn_family = -1;
static int hf_adn_addr_len = -1;
static int hf_adn_addr_addr = -1;
static int hf_ns_dname = -1;
static int ett_lwres = -1;
static int ett_rdata_req = -1;
@ -470,9 +472,7 @@ static void dissect_a_records(tvbuff_t* tvb, proto_tree* tree,guint32 nrec,int o
proto_tree_add_item(addr_tree, hf_a_rec_len, tvb, curr,
sizeof(guint16), ENC_BIG_ENDIAN);
proto_tree_add_text(addr_tree, tvb, curr + 2, 4, "Addr: %s",
addrs);
proto_tree_add_item(addr_tree, hf_a_record, tvb, curr + 2, 4, ENC_BIG_ENDIAN);
}
}
@ -529,11 +529,12 @@ static void dissect_srv_records(tvbuff_t* tvb, proto_tree* tree,guint32 nrec,int
port);
proto_tree_add_text(rec_tree,
proto_tree_add_string(rec_tree,
hf_srv_dname,
tvb,
curr + 8,
dlen,
"DNAME: %s", dname);
dname);
curr+=(int)((sizeof(short)*4) + dlen);
@ -576,11 +577,12 @@ static void dissect_mx_records(tvbuff_t* tvb, proto_tree* tree, guint32 nrec, in
2,
ENC_BIG_ENDIAN);
proto_tree_add_text(rec_tree,
proto_tree_add_string(rec_tree,
hf_srv_dname,
tvb,
curr + 4,
dlen,
"name: %s", dname);
dname);
curr+=(int)((sizeof(short)*2) + dlen);
@ -613,11 +615,12 @@ static void dissect_ns_records(tvbuff_t* tvb, proto_tree* tree, guint32 nrec, in
rec_tree = proto_tree_add_subtree_format(ns_rec_tree, tvb, curr,4, ett_ns_rec_item, NULL, "NS record: dname=%s",dname);
proto_tree_add_text(rec_tree,
proto_tree_add_string(rec_tree,
hf_ns_dname,
tvb,
curr + 2,
dlen,
"Name: %s", dname);
dname);
curr+=(int)(sizeof(short) + dlen);
}
@ -1032,11 +1035,9 @@ proto_register_lwres(void)
{ "Real doname name", "lwres.realname", FT_STRING, BASE_NONE, NULL, 0x0,
"lwres realname", HFILL }},
#if 0
{ &hf_a_record,
{ "IPv4 Address", "lwres.arecord", FT_UINT32, BASE_DEC, NULL, 0x0,
"lwres arecord", HFILL }},
#endif
{ &hf_a_rec_len,
{ "Length", "lwres.areclen", FT_UINT16, BASE_DEC, NULL, 0x0,
@ -1054,6 +1055,10 @@ proto_register_lwres(void)
{ "Port" , "lwres.srv.port", FT_UINT16, BASE_DEC, NULL, 0x0,
"lwres srv port", HFILL }},
{ &hf_srv_dname,
{ "DNAME" , "lwres.srv.dname", FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
{ &hf_adn_flags,
{ "Flags", "lwres.adn.flags", FT_UINT32, BASE_HEX, NULL, 0x0,
"lwres adn flags", HFILL }},
@ -1098,6 +1103,10 @@ proto_register_lwres(void)
{ "IP Address", "lwres.adn.addr.addr", FT_STRING, BASE_NONE, NULL, 0x0,
"lwres adn addr addr", HFILL }},
{ &hf_ns_dname,
{ "Name" , "lwres.ns.dname", FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
/* Add more fields here */
};

View File

@ -75,6 +75,7 @@ static gint ett_m2pa = -1;
static gint ett_m2pa_li = -1;
static expert_field ei_undecode_data = EI_INIT;
static expert_field ei_length = EI_INIT;
static dissector_handle_t mtp3_handle;
@ -386,9 +387,10 @@ dissect_v2_message_data(tvbuff_t *message_tvb, packet_info *pinfo, proto_item *m
message_data_length = (gint) tvb_get_ntohl(message_tvb, V2_LENGTH_OFFSET);
if ((gint) message_data_length < 1) {
if (m2pa_tree)
proto_tree_add_text(m2pa_tree, message_tvb, V2_LENGTH_OFFSET, 4,
proto_tree_add_expert_format(m2pa_tree, pinfo, &ei_length, message_tvb, V2_LENGTH_OFFSET, 4,
"Invalid message data length: %u", message_data_length);
/* XXX - is this really necessary? Can we just return since the expert info can
still find the "malformed" packet? */
THROW(ReportedBoundsError);
}
@ -418,9 +420,10 @@ dissect_v8_message_data(tvbuff_t *message_tvb, packet_info *pinfo, proto_item *m
message_data_length = tvb_get_ntohl(message_tvb, V8_LENGTH_OFFSET) - V8_HEADER_LENGTH;
if ((gint) message_data_length < 1) {
if (m2pa_tree)
proto_tree_add_text(m2pa_tree, message_tvb, V8_LENGTH_OFFSET, 4,
proto_tree_add_expert_format(m2pa_tree, pinfo, &ei_length, message_tvb, V8_LENGTH_OFFSET, 4,
"Invalid message data length: %u", message_data_length);
/* XXX - is this really necessary? Can we just return since the expert info can
still find the "malformed" packet? */
THROW(ReportedBoundsError);
}
message_data_tvb = tvb_new_subset_length(message_tvb, V8_MESSAGE_DATA_OFFSET, message_data_length);
@ -575,6 +578,7 @@ proto_register_m2pa(void)
static ei_register_info ei[] = {
{ &ei_undecode_data, { "m2pa.undecoded_data.expert", PI_MALFORMED, PI_WARN, "There are bytes of data which is greater than M2PA's length parameter", EXPFILL }},
{ &ei_length, { "m2pa.length.invalid", PI_MALFORMED, PI_ERROR, "Invalid message data length", EXPFILL }},
};
expert_module_t* expert_m2pa;

View File

@ -899,8 +899,8 @@ dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *tree,
PROTO_ITEM_SET_HIDDEN(hidden_item);
/* add tag and length to the m2ua tree */
proto_tree_add_text(parameter_tree, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH,
"Parameter Tag: Protocol data 1 (0x000e)");
proto_tree_add_uint_format_value(parameter_tree, hf_parameter_tag, parameter_tvb, PARAMETER_TAG_OFFSET, PARAMETER_TAG_LENGTH,
tag, "Protocol data 1 (0x000e)");
proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, ENC_BIG_ENDIAN);
tag = PROTOCOL_DATA_1_PARAMETER_TAG;

View File

@ -300,7 +300,7 @@ static int hf_registration_result_context = -1;
static int hf_v6_deregistration_result_status = -1;
static int hf_v6_deregistration_result_context = -1;
static int hf_li = -1;
static int hf_heuristic_standard = -1;
static int m3ua_tap = -1;
@ -1177,9 +1177,11 @@ dissect_protocol_data_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, pro
if (mtp3_heuristic_standard) {
heuristic_standard = m3ua_heur_mtp3_standard(payload_tvb, pinfo, opc, dpc, si);
if (heuristic_standard == HEURISTIC_FAILED_STANDARD) {
gen_item = proto_tree_add_text(tree, parameter_tvb, 0, 0, "Could not determine Heuristic using %s", val_to_str_const(mtp3_standard, mtp3_standard_vals, "unknown"));
gen_item = proto_tree_add_uint_format(tree, hf_heuristic_standard, parameter_tvb, 0, 0, heuristic_standard,
"Could not determine Heuristic using %s", val_to_str_const(mtp3_standard, mtp3_standard_vals, "unknown"));
} else {
gen_item = proto_tree_add_text(tree, parameter_tvb, 0, 0, "%s", val_to_str_const(heuristic_standard, mtp3_standard_vals, "unknown"));
gen_item = proto_tree_add_uint_format(tree, hf_heuristic_standard, parameter_tvb, 0, 0, heuristic_standard,
"%s", val_to_str_const(heuristic_standard, mtp3_standard_vals, "unknown"));
mtp3_standard = heuristic_standard;
@ -2109,6 +2111,7 @@ proto_register_m3ua(void)
{ &hf_registration_result_context, { "Routing context", "m3ua.registration_result_routing_context", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_v6_deregistration_result_status, { "De-Registration status", "m3ua.deregistration_results_status", FT_UINT32, BASE_DEC, VALS(v6_deregistration_result_status_values), 0x0, NULL, HFILL } },
{ &hf_v6_deregistration_result_context, { "Routing context", "m3ua.deregistration_result_routing_context", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_heuristic_standard, { "Heuristic standard", "m3ua.heuristic_standard", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
};
/* Setup protocol subtree array */

View File

@ -312,6 +312,7 @@ static expert_field ei_mac_lte_rar_timing_advance_not_zero_warn = EI_INIT;
static expert_field ei_mac_lte_dlsch_lcid = EI_INIT;
static expert_field ei_mac_lte_padding_data_before_control_subheader = EI_INIT;
static expert_field ei_mac_lte_rach_preamble_sent_warn = EI_INIT;
static expert_field ei_mac_lte_no_per_frame_data = EI_INIT;
/* Constants and value strings */
@ -5266,10 +5267,7 @@ int dissect_mac_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* d
/* Can't dissect anything without it... */
if (p_mac_lte_info == NULL) {
proto_item *tii =
proto_tree_add_text(mac_lte_tree, tvb, offset, -1,
"Can't dissect LTE MAC frame because no per-frame info was attached!");
PROTO_ITEM_SET_GENERATED(tii);
proto_tree_add_expert(mac_lte_tree, pinfo, &ei_mac_lte_no_per_frame_data, tvb, offset, -1);
return 0;
}
@ -7138,6 +7136,7 @@ void proto_register_mac_lte(void)
{ &ei_mac_lte_context_rnti_type, { "mac-lte.rnti-type.invalid", PI_MALFORMED, PI_ERROR, "RNTI indicated, but value is not correct", EXPFILL }},
{ &ei_mac_lte_ul_mac_frame_retx, { "mac-lte.ul-mac-frame-retx", PI_SEQUENCE, PI_WARN, "UL MAC frame ReTX", EXPFILL }},
{ &ei_mac_lte_context_crc_status, { "mac-lte.crc-status.error", PI_MALFORMED, PI_ERROR, "Frame has CRC error problem", EXPFILL }},
{ &ei_mac_lte_no_per_frame_data, { "mac-lte.no_per_frame_data", PI_UNDECODED, PI_WARN, "Can't dissect LTE MAC frame because no per-frame info was attached!", EXPFILL }},
};
static const enum_val_t show_info_col_vals[] = {

View File

@ -95,6 +95,7 @@ static int hf_mbtcp_len = -1;
static int hf_mbtcp_unitid = -1;
static int hf_mbtcp_functioncode = -1;
static int hf_modbus_reference = -1;
static int hf_modbus_padding = -1;
static int hf_modbus_lreference = -1;
static int hf_modbus_reftype = -1;
static int hf_modbus_readref = -1;
@ -121,6 +122,7 @@ static int hf_modbus_diag_return_slave_nak_count = -1;
static int hf_modbus_diag_return_slave_busy_count = -1;
static int hf_modbus_diag_return_bus_char_overrun_count = -1;
static int hf_modbus_status = -1;
static int hf_modbus_event = -1;
static int hf_modbus_event_count = -1;
static int hf_modbus_message_count = -1;
static int hf_modbus_event_recv_comm_err = -1;
@ -145,6 +147,7 @@ static int hf_modbus_conformity_level = -1;
static int hf_modbus_more_follows = -1;
static int hf_modbus_next_object_id = -1;
static int hf_modbus_object_str_value = -1;
static int hf_modbus_object_value = -1;
static int hf_modbus_reg_uint16 = -1;
static int hf_modbus_reg_uint32 = -1;
static int hf_modbus_reg_ieee_float = -1;
@ -936,12 +939,12 @@ dissect_modbus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
if (packet_type == QUERY_PACKET) {
proto_tree_add_item(modbus_tree, hf_modbus_reference, tvb, payload_start, 2, ENC_BIG_ENDIAN);
dissect_modbus_data(tvb, pinfo, modbus_tree, function_code, payload_start + 2, 1, register_format);
proto_tree_add_text(modbus_tree, tvb, payload_start + 3, 1, "Padding");
proto_tree_add_item(modbus_tree, hf_modbus_padding, tvb, payload_start + 3, 1, ENC_NA);
}
else if (packet_type == RESPONSE_PACKET) {
proto_tree_add_item(modbus_tree, hf_modbus_reference, tvb, payload_start, 2, ENC_BIG_ENDIAN);
dissect_modbus_data(tvb, pinfo, modbus_tree, function_code, payload_start + 2, 1, register_format);
proto_tree_add_text(modbus_tree, tvb, payload_start + 3, 1, "Padding");
proto_tree_add_item(modbus_tree, hf_modbus_padding, tvb, payload_start + 3, 1, ENC_NA);
}
break;
@ -1096,13 +1099,14 @@ dissect_modbus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
while (byte_cnt > 0) {
event_code = tvb_get_guint8(tvb, payload_start+7+event_index);
if (event_code == 0) {
proto_tree_add_text(event_tree, tvb, payload_start+7+event_index, 1, "Initiated Communication Restart");
proto_tree_add_uint_format(event_tree, hf_modbus_event, tvb, payload_start+7+event_index, 1, event_code, "Initiated Communication Restart");
}
else if (event_code == 4) {
proto_tree_add_text(event_tree, tvb, payload_start+7+event_index, 1, "Entered Listen Only Mode");
proto_tree_add_uint_format(event_tree, hf_modbus_event, tvb, payload_start+7+event_index, 1, event_code, "Entered Listen Only Mode");
}
else if (event_code & REMOTE_DEVICE_RECV_EVENT_MASK) {
mei = proto_tree_add_text(event_tree, tvb, payload_start+7+event_index, 1, "Receive Event: 0x%02X", event_code);
mei = proto_tree_add_uint_format(event_tree, hf_modbus_event, tvb, payload_start+7+event_index, 1,
event_code, "Receive Event: 0x%02X", event_code);
event_item_tree = proto_item_add_subtree(mei, ett_events_recv);
/* add subtrees to describe each event bit */
@ -1116,7 +1120,8 @@ dissect_modbus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
tvb, payload_start+7+event_index, 1, ENC_LITTLE_ENDIAN );
}
else if ((event_code & REMOTE_DEVICE_SEND_EVENT_MASK) == REMOTE_DEVICE_SEND_EVENT_VALUE) {
mei = proto_tree_add_text(event_tree, tvb, payload_start+7+event_index, 1, "Send Event: 0x%02X", event_code);
mei = proto_tree_add_uint_format(event_tree, hf_modbus_event, tvb, payload_start+7+event_index, 1,
event_code, "Send Event: 0x%02X", event_code);
event_item_tree = proto_item_add_subtree(mei, ett_events_send);
/* add subtrees to describe each event bit */
@ -1134,7 +1139,7 @@ dissect_modbus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
tvb, payload_start+7+event_index, 1, ENC_LITTLE_ENDIAN );
}
else {
proto_tree_add_text(event_tree, tvb, payload_start+7+event_index, 1, "Unknown Event");
proto_tree_add_uint_format(event_tree, hf_modbus_event, tvb, payload_start+7+event_index, 1, event_code, "Unknown Event");
}
byte_cnt--;
@ -1338,7 +1343,7 @@ dissect_modbus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
else
{
if (object_len > 0)
proto_tree_add_text(device_objects_item_tree, tvb, payload_start+6+object_index, object_len, "Object Value");
proto_tree_add_item(device_objects_item_tree, hf_modbus_object_value, tvb, payload_start+6+object_index, object_len, ENC_NA);
}
object_index += object_len;
}
@ -1424,6 +1429,11 @@ proto_register_modbus(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_padding,
{ "Padding", "modbus.padding",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_lreference,
{ "Reference Number (32 bit)", "modbus.reference_num_32",
FT_UINT32, BASE_DEC, NULL, 0x0,
@ -1554,8 +1564,13 @@ proto_register_modbus(void)
FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_event,
{ "Event", "modbus.event",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_event_count,
{ "Event Vount", "modbus.ev_count",
{ "Event Count", "modbus.ev_count",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
@ -1673,6 +1688,11 @@ proto_register_modbus(void)
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_object_value,
{ "Object Value", "modbus.object_value",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_reg_uint16,
{ "Register (UINT16)", "modbus.register.uint16",
FT_UINT16, BASE_DEC, NULL, 0x0,

View File

@ -90,6 +90,7 @@ static int hf_mdshdr_dstidx = -1;
static int hf_mdshdr_srcidx = -1;
static int hf_mdshdr_vsan = -1;
static int hf_mdshdr_eof = -1;
static int hf_mdshdr_no_trailer = -1;
static int hf_mdshdr_span = -1;
static int hf_mdshdr_fccrc = -1;
@ -224,7 +225,7 @@ dissect_mdshdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
trailer_start+2, MDSHDR_SIZE_INT32, ENC_BIG_ENDIAN);
}
else {
proto_tree_add_text(mdshdr_tree_main, tvb, 0, 0, "MDS Trailer: Not Found");
proto_tree_add_item(mdshdr_tree_main, hf_mdshdr_no_trailer, tvb, 0, 0, ENC_NA);
}
}
@ -271,6 +272,9 @@ proto_register_mdshdr(void)
{ &hf_mdshdr_eof,
{"EOF", "mdshdr.eof", FT_UINT8, BASE_DEC, VALS(eof_vals), 0x0, NULL, HFILL}},
{ &hf_mdshdr_no_trailer,
{"MDS Trailer: Not Found", "mdshdr.no_trailer", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
{ &hf_mdshdr_span,
{"SPAN Frame", "mdshdr.span", FT_UINT16, BASE_DEC, NULL, 0xF000, NULL, HFILL}},

View File

@ -37,6 +37,7 @@ void proto_register_media(void);
* print routines
*/
int proto_media = -1;
static gint hf_media_type = -1;
static gint ett_media = -1;
static heur_dissector_list_t heur_subdissector_list;
@ -63,14 +64,14 @@ dissect_media(tvbuff_t *tvb, packet_info *pinfo , proto_tree *tree, void* data)
if (pinfo->private_data) {
/* The media type has parameters */
proto_tree_add_text(media_tree, tvb, 0, bytes,
"Media Type: %s; %s (%d byte%s)",
proto_tree_add_bytes_format_value(media_tree, hf_media_type, tvb, 0, bytes,
NULL, "%s; %s (%d byte%s)",
pinfo->match_string, (char *)pinfo->private_data,
bytes, plurality(bytes, "", "s"));
} else {
/* The media type has no parameters */
proto_tree_add_text(media_tree, tvb, 0, bytes,
"Media Type: %s (%d byte%s)",
proto_tree_add_bytes_format_value(media_tree, hf_media_type, tvb, 0, bytes,
NULL, "%s (%d byte%s)",
pinfo->match_string ? pinfo->match_string : "",
bytes, plurality(bytes, "", "s"));
}
@ -83,6 +84,12 @@ dissect_media(tvbuff_t *tvb, packet_info *pinfo , proto_tree *tree, void* data)
void
proto_register_media(void)
{
static hf_register_info hf[] = {
{ &hf_media_type,
{ "Media type", "media.type",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
};
static gint *ett[] = {
&ett_media
};
@ -94,6 +101,7 @@ proto_register_media(void)
);
new_register_dissector("media", dissect_media, proto_media);
register_heur_dissector_list("media", &heur_subdissector_list);
proto_register_field_array(proto_media, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/*

View File

@ -29,6 +29,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/to_str.h>
#include <epan/sminmpec.h>
@ -132,6 +133,8 @@ static gint ett_mip_ext = -1;
static gint ett_mip_exts = -1;
static gint ett_mip_pmipv4_ext = -1;
static expert_field ei_mip_data_not_dissected = EI_INIT;
/* Port used for Mobile IP */
#define UDP_PORT_MIP 434
@ -487,7 +490,7 @@ dissect_mip_priv_ext_3gpp2(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
proto_tree_add_item(tree, hf_mip_nvse_3gpp2_type17_sec_dns, tvb, offset, 4, ENC_BIG_ENDIAN);
break;
default:
proto_tree_add_text(tree, tvb, offset, -1, " Data not dissected yet");
proto_tree_add_expert(tree, pinfo, &ei_mip_data_not_dissected, tvb, offset, -1);
break;
}
@ -1444,6 +1447,12 @@ void proto_register_mip(void)
&ett_mip_pmipv4_ext,
};
static ei_register_info ei[] = {
{ &ei_mip_data_not_dissected, { "mip.data_not_dissected", PI_UNDECODED, PI_WARN, "Data not dissected yet", EXPFILL }},
};
expert_module_t* expert_mip;
/* Register the protocol name and description */
proto_mip = proto_register_protocol("Mobile IP", "Mobile IP", "mip");
@ -1453,6 +1462,8 @@ void proto_register_mip(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_mip, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_mip = expert_register_protocol(proto_mip);
expert_register_field_array(expert_mip, ei, array_length(ei));
mip_nvse_ext_dissector_table = register_dissector_table("mip.nvse_ext",
"MIP Normal Vendor/Organization Specific Extension", FT_UINT32, BASE_DEC);

View File

@ -242,6 +242,9 @@ static int hf_mmse_prev_sent_by_address = -1;
static int hf_mmse_prev_sent_date = -1;
static int hf_mmse_prev_sent_date_fwd_count = -1;
static int hf_mmse_prev_sent_date_date = -1;
static int hf_mmse_header_uint = -1;
static int hf_mmse_header_string = -1;
static int hf_mmse_header_bytes = -1;
/*
* Initialize the subtree pointers
@ -1228,14 +1231,15 @@ dissect_mmse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 pdut,
guint8 peek = tvb_get_guint8(tvb, offset);
const char *hdr_name = val_to_str(field, vals_mm_header_names,
"Unknown field (0x%02x)");
const char *str;
DebugLog(("\t\tUndecoded well-known header: %s\n",
hdr_name));
if (peek & 0x80) { /* Well-known value */
length = 1;
if (tree) {
proto_tree_add_text(mmse_tree, tvb, offset - 1,
length + 1,
proto_tree_add_uint_format(mmse_tree, hf_mmse_header_uint, tvb, offset - 1,
length + 1, peek,
"%s: <Well-known value 0x%02x>"
" (not decoded)",
hdr_name, peek);
@ -1243,10 +1247,9 @@ dissect_mmse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 pdut,
} else if ((peek == 0) || (peek >= 0x20)) { /* Text */
length = get_text_string(tvb, offset, &strval);
if (tree) {
proto_tree_add_text(mmse_tree, tvb, offset - 1,
length + 1, "%s: %s (Not decoded)",
hdr_name,
format_text(strval, strlen(strval)));
str = format_text(strval, strlen(strval));
proto_tree_add_string_format(mmse_tree, hf_mmse_header_string, tvb, offset - 1,
length + 1, str, "%s: %s (Not decoded)", hdr_name, str);
}
} else { /* General form with length */
if (peek == 0x1F) { /* Value length in guintvar */
@ -1258,8 +1261,8 @@ dissect_mmse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 pdut,
length = 1 + tvb_get_guint8(tvb, offset);
}
if (tree) {
proto_tree_add_text(mmse_tree, tvb, offset - 1,
length + 1, "%s: "
proto_tree_add_bytes_format(mmse_tree, hf_mmse_header_bytes, tvb, offset - 1,
length + 1, NULL, "%s: "
"<Value in general form> (not decoded)",
hdr_name);
}
@ -1633,7 +1636,21 @@ proto_register_mmse(void)
HFILL
}
},
{ &hf_mmse_header_uint,
{ "Header Uint Value", "mmse.previously_sent_date.date",
FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL
}
},
{ &hf_mmse_header_string,
{ "Header String Value", "mmse.header.string",
FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL
}
},
{ &hf_mmse_header_bytes,
{ "Header Byte array", "mmse.header.bytes",
FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL
}
},
};

View File

@ -225,6 +225,8 @@ static int hf_msg_fragment_count = -1;
static int hf_msg_reassembled_in = -1;
static int hf_msg_reassembled_length = -1;
static int hf_msg_ts_packet_reassembled = -1;
static expert_field ei_mp2t_pointer = EI_INIT;
static expert_field ei_mp2t_cc_drop = EI_INIT;
@ -546,7 +548,7 @@ mp2t_fragment_handle(tvbuff_t *tvb, guint offset, packet_info *pinfo,
NULL, tree);
if (new_tvb) {
/* ti = */ proto_tree_add_text(tree, tvb, 0, 0, "MPEG TS Packet (reassembled)");
/* ti = */ proto_tree_add_item(tree, hf_msg_ts_packet_reassembled, tvb, 0, 0, ENC_NA);
mp2t_dissect_packet(new_tvb, pload_type, pinfo, tree);
}
@ -1501,7 +1503,11 @@ proto_register_mp2t(void)
{ &hf_msg_reassembled_length, {
"Reassembled MP2T length", "mp2t.msg.reassembled.length",
FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL
} }
} },
{ &hf_msg_ts_packet_reassembled, {
"MPEG TS Packet (reassembled)", "mp2t.ts_packet_reassembled",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL
} },
};
static gint *ett[] =

View File

@ -32,6 +32,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/asn1.h>
#include <epan/prefs.h>
@ -59,11 +60,16 @@ static int hf_mp4ves_is_object_layer_identifier = -1;
static int hf_mp4ves_aspect_ratio_info = -1;
static int hf_mp4ves_vol_control_parameters = -1;
static int hf_mp4ves_video_object_layer_shape = -1;
static int hf_mp4ves_user_data = -1;
static int hf_mp4ves_data = -1;
/* Initialize the subtree pointers */
static int ett_mp4ves = -1;
static int ett_mp4ves_config = -1;
static expert_field ei_mp4ves_config_too_short = EI_INIT;
static expert_field ei_mp4ves_not_dissected_bits = EI_INIT;
/* The dynamic payload type which will be dissected as MP4V-ES */
static guint global_dynamic_payload_type = 0;
@ -272,7 +278,7 @@ dissect_mp4ves_user_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
bit_offset+=8;
/* user_data 8 bits */
}
proto_tree_add_text(tree, tvb, start_bit_offset>>3, (bit_offset - start_bit_offset)>>2, "User data");
proto_tree_add_item(tree, hf_mp4ves_user_data, tvb, start_bit_offset>>3, (bit_offset - start_bit_offset)>>2, ENC_NA);
return bit_offset;
}
@ -481,7 +487,7 @@ dissect_mp4ves_VideoObjectLayer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
}
}
if(bit_offset-current_bit_offset > 0)
proto_tree_add_text(tree, tvb, current_bit_offset>>3, (bit_offset+7)>>3, "Not dissected bits");
proto_tree_add_expert(tree, pinfo, &ei_mp4ves_not_dissected_bits, tvb, current_bit_offset>>3, (bit_offset+7)>>3);
/* video_object_layer_shape 2 uimsbf */
video_object_layer_shape = tvb_get_bits8(tvb,bit_offset, 2);
proto_tree_add_bits_item(tree, hf_mp4ves_video_object_layer_shape, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
@ -542,7 +548,6 @@ VisualObject() {
static int
dissect_mp4ves_VisualObject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int bit_offset)
{
proto_item *item;
guint8 is_visual_object_identifier, visual_object_type;
guint32 dword;
guint8 octet;
@ -595,8 +600,7 @@ dissect_mp4ves_VisualObject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
proto_tree_add_bits_item(tree, hf_mp4ves_start_code, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
bit_offset+= 8;
if(tvb_length_remaining(tvb,(bit_offset>>3))<=0){
item = proto_tree_add_text(tree, tvb, 0, -1, "Config string too short");
PROTO_ITEM_SET_GENERATED(item);
proto_tree_add_expert(tree, pinfo, &ei_mp4ves_config_too_short, tvb, 0, -1);
return -1;
}
/*
@ -744,13 +748,13 @@ dissect_mp4ves(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
*/
if (tvb_length(tvb)< 4){
/* To short to be a start code */
proto_tree_add_text(mp4ves_tree, tvb, bit_offset>>3, -1, "Data");
proto_tree_add_item(mp4ves_tree, hf_mp4ves_data, tvb, bit_offset>>3, -1, ENC_NA);
return;
}
dword = tvb_get_bits32(tvb,bit_offset, 24, ENC_BIG_ENDIAN);
if (dword != 1){
/* if it's not 23 zeros followed by 1 it isn't a start code */
proto_tree_add_text(mp4ves_tree, tvb, bit_offset>>3, -1, "Data");
proto_tree_add_item(mp4ves_tree, hf_mp4ves_data, tvb, bit_offset>>3, -1, ENC_NA);
return;
}
dword = tvb_get_bits8(tvb,24, 8);
@ -978,6 +982,16 @@ proto_register_mp4ves(void)
FT_UINT8, BASE_DEC, VALS(mp4ves_video_object_layer_shape_vals), 0x0,
NULL, HFILL }
},
{ &hf_mp4ves_user_data,
{ "User data", "mp4ves.user_data",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_mp4ves_data,
{ "Data", "mp4ves.data",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
};
/* Setup protocol subtree array */
@ -986,7 +1000,13 @@ proto_register_mp4ves(void)
&ett_mp4ves_config,
};
static ei_register_info ei[] = {
{ &ei_mp4ves_config_too_short, { "mp4ves.config_too_short", PI_MALFORMED, PI_ERROR, "Config string too short", EXPFILL }},
{ &ei_mp4ves_not_dissected_bits, { "mp4ves.not_dissected_bits", PI_UNDECODED, PI_WARN, "Not dissected bits", EXPFILL }},
};
module_t *mp4ves_module;
expert_module_t* expert_mp4ves;
/* Register the protocol name and description */
proto_mp4ves = proto_register_protocol("MP4V-ES","MP4V-ES", "mp4v-es");
@ -994,6 +1014,8 @@ proto_register_mp4ves(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_mp4ves, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_mp4ves = expert_register_protocol(proto_mp4ves);
expert_register_field_array(expert_mp4ves, ei, array_length(ei));
/* Register a configuration option for port */
register_dissector("mp4ves", dissect_mp4ves, proto_mp4ves);

View File

@ -1750,7 +1750,7 @@ proto_mpeg_descriptor_dissect_local_time_offset(tvbuff_t *tvb, guint offset, gui
if (packet_mpeg_sect_mjd_to_utc_time(tvb, offset, &time_of_change) < 0) {
proto_tree_add_text(tree, tvb, offset, 5, "Time of Change : Unparseable time");
proto_tree_add_time_format_value(tree, hf_mpeg_descr_local_time_offset_time_of_change, tvb, offset, 5, &time_of_change, "Unparseable time");
} else {
proto_tree_add_time(tree, hf_mpeg_descr_local_time_offset_time_of_change, tvb, offset, 5, &time_of_change);
}
@ -2309,6 +2309,8 @@ static int hf_mpeg_descr_extension_supp_audio_ed_cla = -1;
static int hf_mpeg_descr_extension_supp_audio_lang_code_present = -1;
static int hf_mpeg_descr_extension_supp_audio_lang_code = -1;
static int hf_mpeg_descr_private_data = -1;
#define EXT_TAG_IMG_ICON 0x00
#define EXT_TAG_CPCM_DLV 0x01
#define EXT_TAG_CP 0x02
@ -2383,7 +2385,7 @@ proto_mpeg_descriptor_dissect_extension(tvbuff_t *tvb, guint offset, guint len,
}
already_dissected = offset-offset_start;
if (already_dissected<len)
proto_tree_add_text(tree, tvb, offset, len-already_dissected, "Private data");
proto_tree_add_item(tree, hf_mpeg_descr_private_data, tvb, offset, len-already_dissected, ENC_NA);
break;
default:
already_dissected = offset-offset_start;
@ -2675,7 +2677,7 @@ proto_mpeg_descriptor_dissect_private_ciplus(tvbuff_t *tvb, guint offset, proto_
remaining = offset_start+2+len - offset;
if (remaining > 0) {
proto_tree_add_text(descriptor_tree, tvb, offset, remaining, "Private data bytes");
proto_tree_add_item(descriptor_tree, hf_mpeg_descr_private_data, tvb, offset, remaining, ENC_NA);
offset += remaining;
}
}
@ -4080,6 +4082,11 @@ proto_register_mpeg_descriptor(void)
FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
} },
{ &hf_mpeg_descr_private_data, {
"Private data", "mpeg_descr.private_data",
FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
} },
/* 0xA2 Logon Initialize Descriptor */
{ &hf_mpeg_descr_logon_initialize_group_id, {
"Group ID", "mpeg_descr.logon_init.group_id",

View File

@ -33,6 +33,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/etypes.h>
void proto_register_mrp_msrp(void);
@ -273,7 +274,7 @@ static gint ett_attr_list = -1;
static gint ett_vect_attr = -1;
static gint ett_first_value = -1;
static expert_field ei_msrp_attribute_type = EI_INIT;
/**********************************************************/
/* Dissector starts here */
@ -616,7 +617,7 @@ dissect_msrp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
number_of_values);
break;
default:
proto_tree_add_text(first_value_tree, tvb, msg_offset + vect_offset, vect_attr_len, "Unknown Attribute");
proto_tree_add_expert(first_value_tree, pinfo, &ei_msrp_attribute_type, tvb, msg_offset + vect_offset, vect_attr_len);
break;
}
}
@ -766,6 +767,12 @@ proto_register_mrp_msrp(void)
&ett_priority_and_rank
};
static ei_register_info ei[] = {
{ &ei_msrp_attribute_type, { "mrp-msrp.attribute_type.unknown", PI_PROTOCOL, PI_WARN, "Malformed TCP/IP Status", EXPFILL }},
};
expert_module_t* expert_msrp;
/* Register the protocol name and description */
proto_msrp = proto_register_protocol("Multiple Stream Reservation Protocol",
"MRP-MSRP", "mrp-msrp");
@ -773,6 +780,8 @@ proto_register_mrp_msrp(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_msrp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_msrp = expert_register_protocol(proto_msrp);
expert_register_field_array(expert_msrp, ei, array_length(ei));
}
void

View File

@ -156,6 +156,10 @@ static int hf_msdp_not_res = -1;
static int hf_msdp_not_entry_count = -1;
static int hf_msdp_not_sprefix_len = -1;
static int hf_msdp_tlv_contents = -1;
static int hf_msdp_trailing_junk = -1;
static int hf_msdp_unknown_encap = -1;
static int hf_msdp_unknown_data = -1;
static gint ett_msdp = -1;
static gint ett_msdp_sa_entry = -1;
@ -219,15 +223,14 @@ dissect_msdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
break;
default:
if (length > 0)
proto_tree_add_text(msdp_tree, tvb, offset, length, "TLV contents");
proto_tree_add_item(msdp_tree, hf_msdp_tlv_contents, tvb, offset, length, ENC_NA);
offset += length;
break;
}
}
if (tvb_length_remaining(tvb, offset) > 0)
proto_tree_add_text(msdp_tree, tvb, offset,
-1, "Trailing junk");
proto_tree_add_item(msdp_tree, hf_msdp_trailing_junk, tvb, offset, -1, ENC_NA);
return;
}
@ -409,15 +412,11 @@ static void dissect_msdp_notification(tvbuff_t *tvb, packet_info *pinfo, proto_t
} else if (error_sub == 6) {
/* No break, causes fall through to next label */
} else if (error_sub == 7) {
proto_tree_add_text(tree, tvb, *offset, tlv_len - 5,
"Packet with unknown encapsulation: %u bytes",
tlv_len - 5);
proto_tree_add_item(tree, hf_msdp_unknown_encap, tvb, *offset, tlv_len - 5, ENC_NA);
*offset += tlv_len - 5;
break;
} else {
proto_tree_add_text(tree, tvb, *offset, tlv_len - 5,
"<Unknown data>: %u bytes",
tlv_len -5);
proto_tree_add_item(tree, hf_msdp_unknown_data, tvb, *offset, tlv_len - 5, ENC_NA);
*offset += tlv_len - 5;
break;
}
@ -439,9 +438,7 @@ static void dissect_msdp_notification(tvbuff_t *tvb, packet_info *pinfo, proto_t
break;
default:
if (tlv_len - 5 > 0)
proto_tree_add_text(tree, tvb, *offset, tlv_len - 5,
"<Unknown data>: %u bytes",
tlv_len -5);
proto_tree_add_item(tree, hf_msdp_unknown_data, tvb, *offset, tlv_len - 5, ENC_NA);
*offset += tlv_len - 5;
break;
}
@ -548,6 +545,26 @@ proto_register_msdp(void)
FT_UINT8, BASE_DEC, NULL, 0,
"Source prefix length in Notification messages", HFILL }
},
{ &hf_msdp_tlv_contents,
{ "TLV contents", "msdp.tlv_contents",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }
},
{ &hf_msdp_trailing_junk,
{ "Trailing junk", "msdp.trailing_junk",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }
},
{ &hf_msdp_unknown_encap,
{ "Packet with unknown encapsulation", "msdp.unknown_encap",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }
},
{ &hf_msdp_unknown_data,
{ "Unknown data", "msdp.unknown_data",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }
},
};
static gint *ett[] = {

View File

@ -58,6 +58,7 @@ static int hf_mtp2_spare = -1;
static int hf_mtp2_ext_spare = -1;
static int hf_mtp2_sf = -1;
static int hf_mtp2_sf_extra = -1;
static int hf_mtp2_fcs_16 = -1;
static expert_field ei_mtp2_checksum_error = EI_INIT;
@ -196,15 +197,12 @@ mtp2_decode_crc16(tvbuff_t *tvb, proto_tree *fh_tree, packet_info *pinfo)
rx_fcs_offset = proto_offset + len;
rx_fcs_exp = mtp2_fcs16(tvb);
rx_fcs_got = tvb_get_letohs(tvb, rx_fcs_offset);
cause=proto_tree_add_item(fh_tree, hf_mtp2_fcs_16, tvb, rx_fcs_offset, 2, ENC_LITTLE_ENDIAN);
if (rx_fcs_got != rx_fcs_exp) {
cause=proto_tree_add_text(fh_tree, tvb, rx_fcs_offset, 2,
"FCS 16: 0x%04x [incorrect, should be 0x%04x]",
rx_fcs_got, rx_fcs_exp);
proto_item_append_text(cause, " [incorrect, should be 0x%04x]", rx_fcs_exp);
expert_add_info(pinfo, cause, &ei_mtp2_checksum_error);
} else {
proto_tree_add_text(fh_tree, tvb, rx_fcs_offset, 2,
"FCS 16: 0x%04x [correct]",
rx_fcs_got);
proto_item_append_text(cause, " [correct]");
}
}
return next_tvb;
@ -385,7 +383,8 @@ proto_register_mtp2(void)
{ &hf_mtp2_spare, { "Spare", "mtp2.spare", FT_UINT8, BASE_DEC, NULL, SPARE_MASK, NULL, HFILL } },
{ &hf_mtp2_ext_spare, { "Spare", "mtp2.spare", FT_UINT16, BASE_DEC, NULL, EXTENDED_SPARE_MASK, NULL, HFILL } },
{ &hf_mtp2_sf, { "Status field", "mtp2.sf", FT_UINT8, BASE_DEC, VALS(status_field_vals), 0x0, NULL, HFILL } },
{ &hf_mtp2_sf_extra, { "Status field extra octet", "mtp2.sf_extra", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }
{ &hf_mtp2_sf_extra, { "Status field extra octet", "mtp2.sf_extra", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_mtp2_fcs_16, { "FCS 16", "mtp2.fcs_16", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
};
static gint *ett[] = {

View File

@ -94,6 +94,7 @@ static int hf_mtp3_japan_4_bit_sls = -1;
static int hf_mtp3_japan_4_bit_sls_spare = -1;
static int hf_mtp3_japan_5_bit_sls = -1;
static int hf_mtp3_japan_5_bit_sls_spare = -1;
static int hf_mtp3_heuristic_standard = -1;
/* Initialize the subtree pointers */
static gint ett_mtp3 = -1;
@ -711,9 +712,11 @@ dissect_mtp3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (mtp3_heuristic_standard) {
heuristic_standard = heur_mtp3_standard(tvb, pinfo, si);
if (heuristic_standard == HEURISTIC_FAILED_STANDARD) {
gen_item = proto_tree_add_text(tree, tvb, 0, 0, "Could not determine Heuristic using %s", val_to_str_const(mtp3_standard, mtp3_standard_vals, "unknown"));
gen_item = proto_tree_add_uint_format(tree, hf_mtp3_heuristic_standard, tvb, 0, 0, mtp3_standard,
"Could not determine Heuristic using %s", val_to_str_const(mtp3_standard, mtp3_standard_vals, "unknown"));
} else {
gen_item = proto_tree_add_text(tree, tvb, 0, 0, "%s", val_to_str_const(heuristic_standard, mtp3_standard_vals, "unknown"));
gen_item = proto_tree_add_uint_format(tree, hf_mtp3_heuristic_standard, tvb, 0, 0, heuristic_standard,
"%s", val_to_str_const(heuristic_standard, mtp3_standard_vals, "unknown"));
mtp3_standard = heuristic_standard;
/* Register a frame-end routine to ensure mtp3_standard is set
@ -805,7 +808,8 @@ proto_register_mtp3(void)
{ &hf_mtp3_japan_5_bit_sls_spare, { "SLS Spare", "mtp3.sls_spare", FT_UINT8, BASE_HEX, NULL, JAPAN_5_BIT_SLS_SPARE_MASK, NULL, HFILL }},
{ &hf_mtp3_ansi_5_bit_sls, { "Signalling Link Selector", "mtp3.sls", FT_UINT8, BASE_DEC, NULL, ANSI_5BIT_SLS_MASK, NULL, HFILL }},
{ &hf_mtp3_ansi_8_bit_sls, { "Signalling Link Selector", "mtp3.sls", FT_UINT8, BASE_DEC, NULL, ANSI_8BIT_SLS_MASK, NULL, HFILL }},
{ &hf_mtp3_chinese_itu_sls, { "Signalling Link Selector", "mtp3.sls", FT_UINT8, BASE_DEC, NULL, CHINESE_ITU_SLS_MASK, NULL, HFILL }}
{ &hf_mtp3_chinese_itu_sls, { "Signalling Link Selector", "mtp3.sls", FT_UINT8, BASE_DEC, NULL, CHINESE_ITU_SLS_MASK, NULL, HFILL }},
{ &hf_mtp3_heuristic_standard, { "Heuristic standard", "mtp3.heuristic_standard",FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
};
/* Setup protocol subtree array */

View File

@ -40,6 +40,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/expert.h>
#include <packet-mtp3.h>
@ -416,6 +417,7 @@ static int hf_mtp3mg_japan_test = -1;
static int hf_mtp3mg_japan_test_spare = -1;
static int hf_mtp3mg_japan_test_pattern = -1;
static int hf_mtp3mg_japan_spare = -1;
static int hf_mtp3mg_test_pattern = -1;
/* Initialize the subtree pointers */
static gint ett_mtp3mg = -1;
@ -424,13 +426,15 @@ static gint ett_mtp3mg_tfm_apc = -1;
static gint ett_mtp3mg_rsm_apc = -1;
static gint ett_mtp3mg_upu_apc = -1;
static expert_field ei_mtp3mg_unknown_message = EI_INIT;
static void
dissect_mtp3mg_unknown_message(tvbuff_t *tvb, proto_tree *tree)
dissect_mtp3mg_unknown_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint8 message_length;
message_length = tvb_length(tvb);
proto_tree_add_text(tree, tvb, 0, message_length,
proto_tree_add_expert_format(tree, pinfo, &ei_mtp3mg_unknown_message, tvb, 0, message_length,
"Unknown message (%u byte%s)", message_length,
plurality(message_length, "", "s"));
}
@ -490,7 +494,7 @@ dissect_mtp3mg_chm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -515,7 +519,7 @@ dissect_mtp3mg_ecm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -603,7 +607,7 @@ dissect_mtp3mg_fcm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -637,7 +641,7 @@ dissect_mtp3mg_tfm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
if (h1 == TFM_H1_TCP || h1 == TFM_H1_TCR || h1 == TFM_H1_TCA
|| h1 == TFM_H1_TFR)
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
proto_tree_add_item(tree, hf_mtp3mg_tfm_japan_count, tvb,
JAPAN_TFM_COUNT_OFFSET,
@ -665,7 +669,7 @@ dissect_mtp3mg_tfm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
} else /* ITU_STANDARD and CHINESE_ITU_STANDARD */ {
if (h1 == TFM_H1_TCP || h1 == TFM_H1_TCR || h1 == TFM_H1_TCA)
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
else if (mtp3_standard == ITU_STANDARD)
{
apc_item = proto_tree_add_item(tree, hf_mtp3mg_itu_apc,
@ -688,7 +692,7 @@ dissect_mtp3mg_tfm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -745,7 +749,7 @@ dissect_mtp3mg_rsm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
offset += JAPAN_PC_LENGTH;
}
} else
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
} else /* ITU_STANDARD and CHINESE_ITU_STANDARD */ {
@ -768,12 +772,12 @@ dissect_mtp3mg_rsm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
hf_mtp3mg_apc_cluster,
hf_mtp3mg_apc_member, 0, 0);
} else
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -803,7 +807,7 @@ dissect_mtp3mg_mim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -821,12 +825,12 @@ dissect_mtp3mg_trm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
case TRM_H1_TRW:
if (mtp3_standard != ANSI_STANDARD)
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
/* else: nothing to dissect */
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -858,7 +862,7 @@ dissect_mtp3mg_dlm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -927,7 +931,7 @@ dissect_mtp3mg_ufc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -954,13 +958,11 @@ dissect_mtp3mg_test(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
ENC_NA);
length = tvb_get_guint8(tvb, 0) >> TEST_LENGTH_SHIFT;
proto_tree_add_text(tree, tvb, TEST_PATTERN_OFFSET, length,
"Test pattern (%u byte%s)", length,
plurality(length, "", "s"));
proto_tree_add_item(tree, hf_mtp3mg_test_pattern, tvb, TEST_PATTERN_OFFSET, length, ENC_NA);
break;
default:
dissect_mtp3mg_unknown_message(tvb, tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, tree);
}
}
@ -1040,7 +1042,7 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
break;
default:
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
}
} else { /* not JAPAN */
@ -1063,7 +1065,7 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
default:
col_set_str(pinfo->cinfo, COL_INFO, "Unknown ");
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
} /* switch */
}
@ -1123,7 +1125,7 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
H0H1_LENGTH, ENC_NA);
dissect_mtp3mg_mim(payload_tvb, pinfo, mtp3mg_tree, h1);
} else
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
break;
case H0_TRM:
if (mtp3_standard != JAPAN_STANDARD)
@ -1132,7 +1134,7 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
H0H1_LENGTH, ENC_NA);
dissect_mtp3mg_trm(payload_tvb, pinfo, mtp3mg_tree, h1);
} else
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
break;
case H0_DLM:
if (mtp3_standard != JAPAN_STANDARD)
@ -1141,7 +1143,7 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
H0H1_LENGTH, ENC_NA);
dissect_mtp3mg_dlm(payload_tvb, pinfo, mtp3mg_tree, h1);
} else
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
break;
case H0_UFC:
if (mtp3_standard != JAPAN_STANDARD)
@ -1150,13 +1152,13 @@ dissect_mtp3mg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
H0H1_LENGTH, ENC_NA);
dissect_mtp3mg_ufc(payload_tvb, pinfo, mtp3mg_tree, h1);
} else
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
break;
default:
col_set_str(pinfo->cinfo, COL_INFO, "Unknown ");
dissect_mtp3mg_unknown_message(tvb, mtp3mg_tree);
dissect_mtp3mg_unknown_message(tvb, pinfo, mtp3mg_tree);
} /* switch */
} /* else */
@ -1371,7 +1373,11 @@ proto_register_mtp3mg(void)
{ &hf_mtp3mg_test_ansi_slc,
{ "Signalling Link Code", "mtp3mg.slc",
FT_UINT8, BASE_DEC, NULL, ANSI_TEST_SLC_MASK,
"SLC of affected link", HFILL }}
"SLC of affected link", HFILL }},
{ &hf_mtp3mg_test_pattern,
{ "Test pattern", "mtp3mg.test_pattern",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
};
/* Setup protocol subtree array */
@ -1383,6 +1389,12 @@ proto_register_mtp3mg(void)
&ett_mtp3mg_upu_apc
};
static ei_register_info ei[] = {
{ &ei_mtp3mg_unknown_message, { "mtp3mg.unknown_message", PI_PROTOCOL, PI_WARN, "Unknown message", EXPFILL }},
};
expert_module_t* expert_mtp3mg;
/* Register the protocol name and description */
proto_mtp3mg = proto_register_protocol("Message Transfer Part Level 3 Management",
"MTP3MG", "mtp3mg");
@ -1391,6 +1403,8 @@ proto_register_mtp3mg(void)
/* Required calls to register the header fields and subtrees used */
proto_register_field_array(proto_mtp3mg, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_mtp3mg = expert_register_protocol(proto_mtp3mg);
expert_register_field_array(expert_mtp3mg, ei, array_length(ei));
}

View File

@ -219,7 +219,7 @@ static void dissect_roofnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
roofnet_nlinks= tvb_get_guint8(tvb, ROOFNET_OFFSET_NLINKS);
/* Check that we do not have a malformed roofnet packet */
if ((roofnet_nlinks*6*4)+ROOFNET_HEADER_LENGTH > ROOFNET_MAX_LENGTH) {
expert_add_info_format(pinfo, it, &ei_roofnet_too_many_links, "Too many links (%u)\n", roofnet_nlinks);
expert_add_info_format(pinfo, it, &ei_roofnet_too_many_links, "Too many links (%u)", roofnet_nlinks);
return;
}