Ethereal-dev: [Ethereal-dev] Re: Improving filter speed
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: didier <dgautheron@xxxxxxxx>
Date: Mon, 04 Apr 2005 19:25:24 +0000
ronnie sahlberg wrote:
New patch, faking of fields can be controlled by a #define . I have checked in a patch for ncp to make it still work even when this patch is applied.
Ok.Statistic --> Protocol --> Hierarchy is broken (it was one of the reasons for the protocol add_item done on the caller tree).
And two unrelated patches. no_col.diff: setting col info is slow. proto_by_id.diff again find_proto_by_id is slow. I make register_field_array return a protocol_t * rather than void. I've only changed the 'obvious' dissectors. Didier
Index: gtk/sctp_assoc_analyse.c =================================================================== --- gtk/sctp_assoc_analyse.c (revision 14013) +++ gtk/sctp_assoc_analyse.c (working copy) @@ -742,7 +742,7 @@ edt = epan_dissect_new(TRUE, FALSE); epan_dissect_prime_dfilter(edt, sfcode); - epan_dissect_run(edt, &cf->pseudo_header, cf->pd, fdata, &cf->cinfo); + epan_dissect_run(edt, &cf->pseudo_header, cf->pd, fdata, NULL); frame_matched = dfilter_apply_edt(sfcode, edt); /* if it is not an sctp frame, show the dialog */ Index: gtk/rtp_analysis.c =================================================================== --- gtk/rtp_analysis.c (revision 14013) +++ gtk/rtp_analysis.c (working copy) @@ -3549,7 +3549,7 @@ } edt = epan_dissect_new(TRUE, FALSE); epan_dissect_prime_dfilter(edt, sfcode); - epan_dissect_run(edt, &cf->pseudo_header, cf->pd, fdata, &cf->cinfo); + epan_dissect_run(edt, &cf->pseudo_header, cf->pd, fdata, NULL); frame_matched = dfilter_apply_edt(sfcode, edt); /* if it is not an rtp frame, show the rtpstream dialog */ Index: proto_hier_stats.c =================================================================== --- proto_hier_stats.c (revision 14013) +++ proto_hier_stats.c (working copy) @@ -145,7 +145,7 @@ return FALSE; /* failure */ } - /* Dissect the frame */ + /* Dissect the frame tree not visible */ edt = epan_dissect_new(TRUE, FALSE); epan_dissect_run(edt, &phdr, pd, frame, cinfo); @@ -253,8 +253,9 @@ ps->first_time = cur_time; ps->last_time = cur_time; } - - if (!process_frame(frame, &cfile.cinfo, ps)) { + + /* we don't care about colinfo */ + if (!process_frame(frame, NULL, ps)) { /* * Give up, and set "stop_flag" so we * just abort rather than popping up
Index: epan/proto.c =================================================================== --- epan/proto.c (revision 14013) +++ epan/proto.c (working copy) @@ -2592,6 +2715,14 @@ return protocol->filter_name; } +char * +proto_get_protocol_filter_name_by_handle(protocol_t *protocol) +{ + if (protocol == NULL) + return ""; + return protocol->filter_name; +} + gboolean proto_is_protocol_enabled(protocol_t *protocol) { @@ -2628,7 +2759,7 @@ /* for use with static arrays only, since we don't allocate our own copies of the header_field_info struct contained within the hf_register_info struct */ -void +protocol_t * proto_register_field_array(int parent, hf_register_info *hf, int num_records) { int field_id, i; @@ -2659,6 +2790,7 @@ field_id = proto_register_field_init(&ptr->hfinfo, parent); *ptr->p_id = field_id; } + return proto; } static int Index: epan/proto.h =================================================================== --- epan/proto.h (revision 14013) +++ epan/proto.h (working copy) @@ -907,8 +928,10 @@ /** Register a header_field array. @param parent the protocol handle from proto_register_protocol() @param hf the hf_register_info array - @param num_records the number of records in hf */ -extern void + @param num_records the number of records in hf + @return the "protocol_t" structure for the given protocol's item number. + */ +extern protocol_t * proto_register_field_array(int parent, hf_register_info *hf, int num_records); /** Register a protocol subtree (ett) array. @@ -1007,6 +1030,10 @@ @return its filter name. */ extern char *proto_get_protocol_filter_name(int proto_id); +/** Get the protocol's filter name, , for the given protocol's "protocol_t". + @return its filter name. */ +extern char *proto_get_protocol_filter_name_by_handle(protocol_t *protocol); + /** Enable / Disable protocol of the given item number. @param proto_id protocol id (0-indexed) @param enabled enable / disable the protocol */ Index: epan/packet.c =================================================================== --- epan/packet.c (revision 14013) +++ epan/packet.c (working copy) @@ -462,7 +462,7 @@ if (pinfo->layer_names->len > 0) g_string_append(pinfo->layer_names, ":"); g_string_append(pinfo->layer_names, - proto_get_protocol_filter_name(proto_get_id(handle->protocol))); + proto_get_protocol_filter_name_by_handle(handle->protocol)); } } @@ -1518,7 +1518,7 @@ if (pinfo->layer_names->len > 0) g_string_append(pinfo->layer_names, ":"); g_string_append(pinfo->layer_names, - proto_get_protocol_filter_name(proto_get_id(dtbl_entry->protocol))); + proto_get_protocol_filter_name_by_handle(dtbl_entry->protocol)); } if ((*dtbl_entry->dissector)(tvb, pinfo, tree)) { Index: epan/dissectors/packet-msnip.c =================================================================== --- epan/dissectors/packet-msnip.c (revision 14013) +++ epan/dissectors/packet-msnip.c (working copy) @@ -49,6 +49,7 @@ static int proto_msnip = -1; +static protocol_t *proto_msnip_ptr; static int hf_checksum = -1; static int hf_checksum_bad = -1; static int hf_type = -1; @@ -222,7 +223,7 @@ proto_item *item; guint8 type; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_msnip))) { + if (!proto_is_protocol_enabled(proto_msnip_ptr)) { /* we are not enabled, skip entire packet to be nice to the igmp layer. (so clicking on IGMP will display the data) */ @@ -328,7 +329,7 @@ proto_msnip = proto_register_protocol("MSNIP: Multicast Source Notification of Interest Protocol", "MSNIP", "msnip"); - proto_register_field_array(proto_msnip, hf, array_length(hf)); + proto_msnip_ptr = proto_register_field_array(proto_msnip, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-clnp.c =================================================================== --- epan/dissectors/packet-clnp.c (revision 14013) +++ epan/dissectors/packet-clnp.c (working copy) @@ -71,6 +71,7 @@ static int hf_clnp_reassembled_in = -1; static int proto_cotp = -1; +static protocol_t *proto_cotp_ptr; static gint ett_cotp = -1; static gint ett_cotp_segments = -1; static gint ett_cotp_segment = -1; @@ -1697,7 +1698,7 @@ gboolean is_cltp = FALSE; gboolean subdissector_found = FALSE; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_cotp))) + if (!proto_is_protocol_enabled(proto_cotp_ptr)) return FALSE; /* COTP has been disabled */ /* XXX - what about CLTP? */ @@ -2373,7 +2374,7 @@ module_t *cotp_module; proto_cotp = proto_register_protocol(PROTO_STRING_COTP, "COTP", "cotp"); - proto_register_field_array(proto_cotp, hf, array_length(hf)); + proto_cotp_ptr = proto_register_field_array(proto_cotp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); cotp_module = prefs_register_protocol(proto_cotp, NULL); Index: epan/dissectors/packet-igap.c =================================================================== --- epan/dissectors/packet-igap.c (revision 14013) +++ epan/dissectors/packet-igap.c (working copy) @@ -54,6 +54,7 @@ static int proto_igap = -1; +static protocol_t *proto_igap_ptr; static int hf_type = -1; static int hf_max_resp = -1; static int hf_checksum = -1; @@ -136,7 +137,7 @@ guint8 type, tsecs, subtype, asize, msize; guchar account[ACCOUNT_SIZE+1], message[MESSAGE_SIZE+1]; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_igap))) { + if (!proto_is_protocol_enabled(proto_igap_ptr)) { /* we are not enabled, skip entire packet to be nice to the igmp layer. (so clicking on IGMP will display the data) */ @@ -325,6 +326,6 @@ proto_igap = proto_register_protocol ("Internet Group membership Authentication Protocol", "IGAP", "igap"); - proto_register_field_array(proto_igap, hf, array_length(hf)); + proto_igap_ptr = proto_register_field_array(proto_igap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-pim.c =================================================================== --- epan/dissectors/packet-pim.c (revision 14013) +++ epan/dissectors/packet-pim.c (working copy) @@ -49,6 +49,7 @@ }; static int proto_pim = -1; +static protocol_t *proto_pim_ptr; static int hf_pim_version = -1; static int hf_pim_type = -1; static int hf_pim_code = -1; @@ -113,7 +114,7 @@ proto_tree *pimopt_tree = NULL; proto_item *tiopt; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_pim))) { + if (!proto_is_protocol_enabled(proto_pim_ptr)) { /* * We are not enabled; skip entire packet to be nice to the * IGMP layer (so clicking on IGMP will display the data). @@ -1190,7 +1191,7 @@ proto_pim = proto_register_protocol("Protocol Independent Multicast", "PIM", "pim"); - proto_register_field_array(proto_pim, hf, array_length(hf)); + proto_pim_ptr = proto_register_field_array(proto_pim, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-tpkt.c =================================================================== --- epan/dissectors/packet-tpkt.c (revision 14013) +++ epan/dissectors/packet-tpkt.c (working copy) @@ -373,8 +373,7 @@ module_t *tpkt_module; proto_tpkt = proto_register_protocol("TPKT", "TPKT", "tpkt"); - proto_tpkt_ptr = find_protocol_by_id(proto_tpkt); - proto_register_field_array(proto_tpkt, hf, array_length(hf)); + proto_tpkt_ptr = proto_register_field_array(proto_tpkt, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); tpkt_module = prefs_register_protocol(proto_tpkt, NULL); Index: epan/dissectors/packet-mrdisc.c =================================================================== --- epan/dissectors/packet-mrdisc.c (revision 14013) +++ epan/dissectors/packet-mrdisc.c (working copy) @@ -50,6 +50,7 @@ static int proto_mrdisc = -1; +static protocol_t *proto_mrdisc_ptr; static int hf_checksum = -1; static int hf_checksum_bad = -1; static int hf_type = -1; @@ -188,7 +189,7 @@ proto_item *item; guint8 type; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_mrdisc))) { + if (!proto_is_protocol_enabled(proto_mrdisc_ptr)) { /* we are not enabled, skip entire packet to be nice to the igmp layer. (so clicking on IGMP will display the data) */ @@ -288,6 +289,6 @@ proto_mrdisc = proto_register_protocol("Multicast Router DISCovery protocol", "MRDISC", "mrdisc"); - proto_register_field_array(proto_mrdisc, hf, array_length(hf)); + proto_mrdisc_ptr = proto_register_field_array(proto_mrdisc, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-atalk.c =================================================================== --- epan/dissectors/packet-atalk.c (revision 14013) +++ epan/dissectors/packet-atalk.c (working copy) @@ -60,6 +60,8 @@ static int hf_llap_type = -1; static int proto_ddp = -1; +static protocol_t *proto_ddp_ptr; + static int hf_ddp_hopcount = -1; static int hf_ddp_len = -1; static int hf_ddp_checksum = -1; @@ -1701,7 +1703,7 @@ switch (type) { case 0x01: - if (proto_is_protocol_enabled(find_protocol_by_id(proto_ddp))) { + if (proto_is_protocol_enabled(proto_ddp_ptr)) { pinfo->current_proto = "DDP"; dissect_ddp_short(new_tvb, pinfo, dnode, snode, tree); return; @@ -2228,7 +2230,7 @@ proto_register_field_array(proto_llap, hf_llap, array_length(hf_llap)); proto_ddp = proto_register_protocol("Datagram Delivery Protocol", "DDP", "ddp"); - proto_register_field_array(proto_ddp, hf_ddp, array_length(hf_ddp)); + proto_ddp_ptr = proto_register_field_array(proto_ddp, hf_ddp, array_length(hf_ddp)); proto_nbp = proto_register_protocol("Name Binding Protocol", "NBP", "nbp"); proto_register_field_array(proto_nbp, hf_nbp, array_length(hf_nbp)); Index: epan/dissectors/packet-smb-mailslot.c =================================================================== --- epan/dissectors/packet-smb-mailslot.c (revision 14013) +++ epan/dissectors/packet-smb-mailslot.c (working copy) @@ -40,6 +40,7 @@ #include "packet-smb-pipe.h" static int proto_smb_msp = -1; +static protocol_t *proto_smb_msp_ptr; static int hf_opcode = -1; static int hf_priority = -1; static int hf_class = -1; @@ -94,7 +95,7 @@ int offset = 0; int len; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_smb_msp))) { + if (!proto_is_protocol_enabled(proto_smb_msp_ptr)) { return FALSE; } pinfo->current_proto = "SMB Mailslot"; @@ -255,7 +256,7 @@ proto_smb_msp = proto_register_protocol( "SMB MailSlot Protocol", "SMB Mailslot", "mailslot"); - proto_register_field_array(proto_smb_msp, hf, array_length(hf)); + proto_smb_msp_ptr = proto_register_field_array(proto_smb_msp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-dvmrp.c =================================================================== --- epan/dissectors/packet-dvmrp.c (revision 14013) +++ epan/dissectors/packet-dvmrp.c (working copy) @@ -65,6 +65,7 @@ #include "packet-dvmrp.h" static int proto_dvmrp = -1; +static protocol_t *proto_dvmrp_ptr; static int hf_version = -1; static int hf_type = -1; static int hf_code_v1 = -1; @@ -621,7 +622,7 @@ proto_tree *tree; proto_item *item; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_dvmrp))) { + if (!proto_is_protocol_enabled(proto_dvmrp_ptr)) { /* we are not enabled, skip entire packet to be nice to the igmp layer. (so clicking on IGMP will display the data) */ @@ -796,6 +797,6 @@ proto_dvmrp = proto_register_protocol("Distance Vector Multicast Routing Protocol", "DVMRP", "dvmrp"); - proto_register_field_array(proto_dvmrp, hf, array_length(hf)); + proto_dvmrp_ptr = proto_register_field_array(proto_dvmrp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } Index: epan/dissectors/packet-smb-pipe.c =================================================================== --- epan/dissectors/packet-smb-pipe.c (revision 14013) +++ epan/dissectors/packet-smb-pipe.c (working copy) @@ -51,6 +51,7 @@ #include <epan/reassemble.h> static int proto_smb_pipe = -1; +static protocol_t *proto_smb_pipe_ptr; static int hf_pipe_function = -1; static int hf_pipe_priority = -1; static int hf_pipe_peek_available = -1; @@ -92,6 +93,7 @@ }; static int proto_smb_lanman = -1; +static protocol_t *proto_smb_lanman_ptr; static int hf_function_code = -1; static int hf_param_desc = -1; static int hf_return_desc = -1; @@ -2624,7 +2626,7 @@ proto_item *data_item; proto_tree *data_tree; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_smb_lanman))) + if (!proto_is_protocol_enabled(proto_smb_lanman_ptr)) return FALSE; if (smb_info->request && p_tvb == NULL) { /* @@ -3220,7 +3222,7 @@ proto_smb_lanman = proto_register_protocol( "Microsoft Windows Lanman Remote API Protocol", "LANMAN", "lanman"); - proto_register_field_array(proto_smb_lanman, hf, array_length(hf)); + proto_smb_lanman_ptr = proto_register_field_array(proto_smb_lanman, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); } @@ -3519,7 +3521,7 @@ int fid = -1; guint16 info_level; - if (!proto_is_protocol_enabled(find_protocol_by_id(proto_smb_pipe))) + if (!proto_is_protocol_enabled(proto_smb_pipe_ptr)) return FALSE; pinfo->current_proto = "SMB Pipe"; @@ -3916,8 +3918,7 @@ proto_smb_pipe = proto_register_protocol( "SMB Pipe Protocol", "SMB Pipe", "pipe"); - - proto_register_field_array(proto_smb_pipe, hf, array_length(hf)); + proto_smb_pipe_ptr = proto_register_field_array(proto_smb_pipe, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); }
- Follow-Ups:
- [Ethereal-dev] Re: Improving filter speed
- From: ronnie sahlberg
- [Ethereal-dev] Re: Improving filter speed
- From: ronnie sahlberg
- [Ethereal-dev] Re: Improving filter speed
- References:
- [Ethereal-dev] Re: Improving filter speed
- From: ronnie sahlberg
- [Ethereal-dev] Re: Improving filter speed
- Prev by Date: [Ethereal-dev] Re: packet-rtp.c: Tap up to 4 RTP packets
- Next by Date: [Ethereal-dev] Author/Copyright Update
- Previous by thread: [Ethereal-dev] Re: Improving filter speed
- Next by thread: [Ethereal-dev] Re: Improving filter speed
- Index(es):