Guy Harris wrote:
Don't know if it's useful or the right way to do it but what about :Gigabit Ethernet interfaces (or even interfaces capable of gigabit speeds, even if they're not running at gigabit speeds) might do TCP checksum offloading, and some non-gigabit interfaces might do so as well; if so, then outgoing TCP segments delivered to the packet capture mechanism might not yet have had their checksum computed, and thus might have bad TCP checksums.
Index: packet-frame.c
===================================================================
RCS file: /cvsroot/ethereal/packet-frame.c,v
retrieving revision 1.34
diff -u -r1.34 packet-frame.c
--- packet-frame.c 31 Jan 2003 01:02:03 -0000 1.34
+++ packet-frame.c 12 Feb 2003 22:06:50 -0000
@@ -213,8 +213,8 @@
* but it wasn't in the fragment we dissected.
*/
if (check_col(pinfo->cinfo, COL_INFO))
- col_append_str(pinfo->cinfo, COL_INFO,
- "[Unreassembled Packet]");
+ col_append_fstr(pinfo->cinfo, COL_INFO,
+ "[Unreassembled Packet%s]", pinfo->current_error?pinfo->current_error:"");
proto_tree_add_protocol_format(tree, proto_unreassembled,
tvb, 0, 0, "[Unreassembled Packet: %s]",
pinfo->current_proto);
Index: packet-tcp.c
===================================================================
RCS file: /cvsroot/ethereal/packet-tcp.c,v
retrieving revision 1.171
diff -u -r1.171 packet-tcp.c
--- packet-tcp.c 28 Jan 2003 23:56:40 -0000 1.171
+++ packet-tcp.c 12 Feb 2003 22:06:52 -0000
@@ -1961,7 +1961,7 @@
* Assume, initially, that we can't desegment.
*/
pinfo->can_desegment = 0;
-
+ pinfo->current_error = "";
th_sum = tvb_get_ntohs(tvb, offset + 16);
if (!pinfo->fragmented && len >= reported_len) {
/* The packet isn't part of an un-reassembled fragmented datagram
@@ -2016,6 +2016,7 @@
/* Checksum is invalid, so we're not willing to desegment it. */
desegment_ok = FALSE;
+ pinfo->current_error = ", TCP bad checksum";
}
} else {
proto_tree_add_uint_format(tcp_tree, hf_tcp_checksum, tvb,
Index: epan/packet_info.h
===================================================================
RCS file: /cvsroot/ethereal/epan/packet_info.h,v
retrieving revision 1.29
diff -u -r1.29 packet_info.h
--- epan/packet_info.h 22 Jan 2003 06:26:36 -0000 1.29
+++ epan/packet_info.h 12 Feb 2003 22:06:52 -0000
@@ -116,6 +116,7 @@
typedef struct _packet_info {
const char *current_proto; /* name of protocol currently being dissected */
+ char *current_error; /* last decoding error */
column_info *cinfo; /* Column formatting information */
frame_data *fd;
union wtap_pseudo_header *pseudo_header;
Powered by MHonArc 2.6.10