Transmission Control Protocol/Internet Protocol (TCP/IP) in Windows Millennium Edition will discard packets that are passed up from an intermediate NDIS driver over dial-up connections if NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA is not set in OID_GEN_MAC_OPTIONS. Intermediate drivers must support OID_GEN_MAC_OPTIONS and set NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA.
If the entire packet is passed up to TCP/IP, the unnecessary call to
NdisTransfer will result in an NDIS_PACKET whose buffer contains invalid data. TCP/IP will discard the packet because of a failed check sum. To verify this condition, connect to a remote host and perform a
PING to a known IP address. The
PING will time out. Run
NETSTAT -S from a command prompt. Internet Control Message Protocol (ICMP) receive errors will increment for each discarded packet (see the following output from NETSTAT.exe). User Datagram Protocol (UDP) receive errors may also indicate this condition.
NetStat -s
IP Statistics
Packets Received = 21
Received Header Errors = 0
[...]
Fragments Created = 0
ICMP Statistics
Received Sent
Messages 4 <--- 4
Errors 4 <--- 0
Destination Unreachable 0 0
Time Exceeded 0 0
[...]
Address Mask Replies 0 0
TCP Statistics
[...]
UDP Statistics
Datagrams Received = 0
No Ports = 0
Receive Errors = 17 <---
Datagrams Sent = 40
Another indication of this problem can be seen if you use the kernel debugger, load the debug version of TCPIP.sys, and set DbgSettingsZone to
ff ff ff ff and DbgSettingsLevel to
ff ff ff ff. The output below will be emitted to the debugger. The debug binary for TCPIP.sys can be obtained from the following Microsoft Knowledge Base article:
279356Â
(http://kbalertz.com/Feedback.aspx?kbNumber=279356/
)
NDIS debugging tips for Windows ME
This is the output emitted:
+ICMPRcv(..., ..., ...)
ICMPRcv: Packet dropped, invalid checksum.