|
|
Enabling 802.1p Packet Priority
|
|
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 Title and content of this KB Article to be changed soon... |
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 |
802.1p Priority |
|
| 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.
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. |
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.
| June 15, 2001 | Added comment about loopback of failed, oversize, NdisSend packets. |
| June 11, 2001 | Added Microsoft comment. |
| June 1, 2001 | Information posted. |
Please click the following link to send e-mail relating to this PCAUSA Knowledge Base topic:
![]()
| 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
|