tap: Add ability to reject/ignore "error" packets in tap
ICMP (and a few other protocols) can carry "error packets" as payloads in certain cases. In the same way that we don't (by default) call TCP reassembly code on TCP packets we know are out-of-order, we also shouldn't call tap code on frames carried in ICMP error packets. Bug: 11184 Change-Id: Ie83dbb505c8fdc15c5554705488c16fa0274a06a Reviewed-on: https://code.wireshark.org/review/8446 Petri-Dish: Evan Huus <eapache@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Evan Huus <eapache@gmail.com>
This commit is contained in:
parent
aa6466a7b5
commit
85f38f9f75
20
epan/tap.c
20
epan/tap.c
|
@ -322,15 +322,19 @@ tap_push_tapped_queue(epan_dissect_t *edt)
|
|||
for(i=0;i<tap_packet_index;i++){
|
||||
for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
|
||||
tp=&tap_packet_array[i];
|
||||
if(tp->tap_id==tl->tap_id){
|
||||
gboolean passed=TRUE;
|
||||
if(tl->code){
|
||||
passed=dfilter_apply_edt(tl->code, edt);
|
||||
/* Don't tap the packet if its an "error" unless the listener tells us to */
|
||||
if ((!tp->pinfo->flags.in_error_pkt) || (tl->flags & TL_REQUIRES_ERROR_PACKETS))
|
||||
{
|
||||
if(tp->tap_id==tl->tap_id){
|
||||
gboolean passed=TRUE;
|
||||
if(tl->code){
|
||||
passed=dfilter_apply_edt(tl->code, edt);
|
||||
}
|
||||
if(passed && tl->packet){
|
||||
tl->needs_redraw|=tl->packet(tl->tapdata, tp->pinfo, edt, tp->tap_specific_data);
|
||||
}
|
||||
}
|
||||
if(passed && tl->packet){
|
||||
tl->needs_redraw|=tl->packet(tl->tapdata, tp->pinfo, edt, tp->tap_specific_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,8 +40,9 @@ typedef void (*tap_draw_cb)(void *tapdata);
|
|||
#define TL_REQUIRES_NOTHING 0x00000000 /**< nothing */
|
||||
#define TL_REQUIRES_PROTO_TREE 0x00000001 /**< full protocol tree */
|
||||
#define TL_REQUIRES_COLUMNS 0x00000002 /**< columns */
|
||||
#define TL_REQUIRES_ERROR_PACKETS 0x00000004 /**< include packet even if pinfo->flags.in_error_pkt is set */
|
||||
/** Flags to indicate what the tap listener does */
|
||||
#define TL_IS_DISSECTOR_HELPER 0x00000004 /**< tap helps a dissector do work
|
||||
#define TL_IS_DISSECTOR_HELPER 0x00000008 /**< tap helps a dissector do work
|
||||
** but does not, itself, require dissection */
|
||||
|
||||
#ifdef HAVE_PLUGINS
|
||||
|
|
Loading…
Reference in New Issue