@@ -682,6 +682,8 @@ void parse_packet(
682682 return ;
683683 }
684684 Packet* pkt = &opt->pblock ->pkts [opt->pblock ->cnt ];
685+ // reset all packet data
686+ *pkt = Packet ();
685687 uint16_t data_offset = 0 ;
686688
687689 DEBUG_MSG (" ---------- packet parser #%u -------------\n " , ++s_total_pkts);
@@ -693,18 +695,6 @@ void parse_packet(
693695
694696 pkt->packet_len_wire = len;
695697 pkt->ts = ts;
696- pkt->src_port = 0 ;
697- pkt->dst_port = 0 ;
698- pkt->ip_proto = 0 ;
699- pkt->ip_ttl = 0 ;
700- pkt->ip_flags = 0 ;
701- pkt->ip_version = 0 ;
702- pkt->ip_payload_len = 0 ;
703- pkt->tcp_flags = 0 ;
704- pkt->tcp_window = 0 ;
705- pkt->tcp_options = 0 ;
706- pkt->tcp_mss = 0 ;
707- pkt->mplsTop = 0 ;
708698
709699 stats.seen_packets ++;
710700
@@ -758,12 +748,14 @@ void parse_packet(
758748 }
759749
760750 l4_hdr_offset = data_offset;
761- if (pkt->ip_proto == IPPROTO_TCP ) {
762- data_offset += parse_tcp_hdr (data + data_offset, caplen - data_offset, pkt, stats);
763- stats.tcp_packets ++;
764- } else if (pkt->ip_proto == IPPROTO_UDP ) {
765- data_offset += parse_udp_hdr (data + data_offset, caplen - data_offset, pkt, stats);
766- stats.udp_packets ++;
751+ if (pkt->frag_off == 0 ) {
752+ if (pkt->ip_proto == IPPROTO_TCP ) {
753+ data_offset += parse_tcp_hdr (data + data_offset, caplen - data_offset, pkt, stats);
754+ stats.tcp_packets ++;
755+ } else if (pkt->ip_proto == IPPROTO_UDP ) {
756+ data_offset += parse_udp_hdr (data + data_offset, caplen - data_offset, pkt, stats);
757+ stats.udp_packets ++;
758+ }
767759 }
768760 } catch (const char * err) {
769761 DEBUG_MSG (" %s\n " , err);
0 commit comments