Enabling 802.1p Packet Priority
May Cause NDIS Miniports
To Return Bogus Values For
OID_GEN_MAXIMUM_TOTAL_SIZE Query

 

Knowledge Base ID

KB06010101
Category DOCUMENTATION, BUG?

Effected Product

NDIS Intermediate Drivers, NDIS Protocol Drivers

Effected Versions

Unknown
Effected Platforms Windows 2000, Windows XP

 

June 15, 2001

Further investigation indicates that this behavior may not be specifically related to enabling 802.1p Priority. Instead, it may be a more general problem possibly related to loopback of send packets.

An experiment on Windows NT 4.0 shows that if NdisSend is called to send an oversized packet (packet length greater than total size from OID_GEN_MAXIMUM_TOTAL_SIZE) the send is failed and nothing is sent on the wire.

HOWEVER, if the adapter miniport in in loopback mode (e.g., promiscuous mode enabled) the NDIS wrapper will loopback the failed packet. In this case the failed, oversize send packet was presented to the NDIS IM driver ReceiveHandler.

In any event, it is certainly possible for a NDIS IM driver to be presented with
receive indications with packet length
greater then the size reported
by OID_GEN_MAXIMUM_TOTAL_SIZE
.

Title and content of this KB Article to be changed soon...

Symptoms

Some NDIS Intermediate (IM) drivers and NDIS protocol drivers use the OID_GEN_MAXIMUM_TOTAL_SIZE NDIS query to determine the maximum size packet an underlying NIC driver can accommodate on the NIC that it manages. This value is then used to specify the size of virtual memory buffers pre-allocated by the NDIS IM or protocol driver to send or receive packet data.

Unfortunately, enabling 802.1p Packet Priority can cause the value returned from the OID_GEN_MAXIMUM_TOTAL_SIZE NDIS query to be incorrect.

This has been observed on the following adapter:

3Com Etherlink XL 10/100 PCI TX NIC (3C905B-TX)

The NIC driver is V5.0.2170.1, and is signed by Microsoft. This driver returns the following information:

 

802.1p Priority
Disabled

802.1p Priority
Enabled

OID_GEN_MAXIMUM_FRAME_SIZE

1500

1496

OID_GEN_MAXIMUM_TOTAL_SIZE

1514

1510

The values returned when 802.1p Packet Priority is enabled are bogus in the sense that unmarked packets (e.g., ICMP Echo packets) larger than the reported maximum total size can be sent or received.

Even though the NIC driver reports a maximum total size of 1510 bytes, the NIC driver does allow packet with a total size of 1514 bytes to be sent and indicated received packets of 1514 bytes in some cases - specifically ICMP Echo packets.

Buffers allocated by any driver that assumes that the value returned by the OID_GEN_MAXIMUM_TOTAL_SIZE is correct will certainly be overwritten and may cause a page fault.

 

Cause

This most likely should be called a Microsoft DDK documentation error. The effect of enabling 802.1p Packet Priority on the value returned by the OID_GEN_MAXIMUM_TOTAL_SIZE query should be clearly stated in the Microsoft DDK Help File.

The Microsoft DDK Help File already states that the value returned by the OID_GEN_MAXIMUM_FRAME_SIZE is influenced by enabling 802.1p Packet Priority.

Another rub is that there is no OID to query the media header size. In many samples the media header size is calculated by taking the difference between the maximum total size and the maximum frame size. The "bug" in the maximum total size does, at least, result in a correct calculation of the media header size.

June 11, 2001 - Microsoft reports that this condition (packets indicated with total length greater then reported by OID_GEN_MAXIMUM_TOTAL_SIZE) is an indication of an incorrectly configured network.

In particular, the MTU of all nodes on an 802.1p Priority-enabled network should be systematically adjusted to the smaller size that that excludes the 4-byte 802.1p Priority header.

 

Possible Fixes

The solution to this problem is to make one additional query: OID_GEN_MAC_OPTIONS. In most cases this query is already made for other purposes.

If the NDIS_MAC_OPTION_8021P_PRIORITY bit is set in the MAC options bitmap, then the NDIS IM driver should insure that the size of virtual memory buffers allocated of packet data is increased by at least the size of the 802.1p header (4 bytes).

Another alternative is to always allocate virtual memory buffers at least four bytes larger than reported by OID_GEN_MAXIMUM_TOTAL_SIZE.

 

Status

June 15, 2001 Added comment about loopback of failed, oversize, NdisSend packets.
June 11, 2001 Added Microsoft comment.
June 1, 2001 Information posted.

 

Comments

Please click the following link to send e-mail relating to this PCAUSA Knowledge Base topic:

<Send Mail To KB05050101 Technical Contact>

 

Keywords OID_GEN_MAXIMUM_TOTAL_SIZE, DOCUMENTATION,BUG?
Created June 1, 2001
Last Reviewed June 15, 2001

 
 

PCAUSA Home · Privacy Statement · Products · Ordering · Support · Utilities · Resources
Mailing Lists  · PCAUSA Newsletter · PCAUSA Discussion List
 
Rawether for Windows and WinDis 32 are trademarks of Printing Communications Assoc., Inc. (PCAUSA)
Microsoft, MS, Windows, Windows 95, Windows 98, Windows Millennium, Windows 2000, and Win32 are registered trademarks and Visual C++ and Windows NT are trademarks of the Microsoft Corporation.
Send mail to webmaster@pcausa.com with questions or comments about this web site.
Copyright © 1996-2008 Printing Communications Assoc., Inc. (PCAUSA)
Last modified: December 31, 2007