|
|
Workaround
|
|
Knowledge Base ID |
KB03080201 |
| Category | INFO |
|
Effected Product |
NDIS Protocol Drivers/NDIS Intermediate Driver Protocol Edge |
|
Effected Versions |
Unknown |
| Effected Platforms | All (Primarily seen on Windows 2000) |
![]()
The symptoms observed are various faults associated with the ProtocolReceive handler of NDIS protocol drivers or the lower protocol-edge of NDIS Intermediate (IM) drivers. The symptoms observed by PCAUSA are primarily related to Realtek-based (e.g., SMC) adapters on the Windows 2000 platform. However, there is no reason to believe that this is adapter or platform specific.
This is a frustrating problem because only some adapters exhibit the problem. For example, for the same basic adapter (e.g., SMC) the 10Base-T adapter may work file whereas the Combo driver may exhibit the fault.
The NDIS miniport drivers that exhibit this problem call the ProtocolReceive handler instead of the ProtocolReceivePacket handler. The parameters passed to ProtocolReceive indicate that the the indication is a "partial packet". That is,
LookAheadBufferSize < PacketSize
When this condition exists NDIS protocol drivers usually consume as much of the lookahead data as possible and then call NdisTransferData to fetch the residual data.
The NDIS miniport drivers that exhibit this problem are actually indicating a complete packet and do not have a MiniportTransferData handler, Calling the non-existent MiniportTransferData handler causes the fault.
The DDK says this about MiniportTransferData:
"The MiniportTransferData function is required in NIC drivers that do not indicate multipacket receives and/or media-specific information with NdisMIndicateReceivePacket and in those that do not support WAN media."
This means that NDIS miniport drivers that exhibit this behavior are faulty.
A workaround to accomodate this problem is to handle the NDIS_MAC_OPTION_TRANSFERS_NOT_PEND attribute of the lower miniport. NDIS MAC options are fetched by making the OID_GEN_MAC_OPTIONS query.
If the NDIS_MAC_OPTION_TRANSFERS_NOT_PENDoption is set, ignore LookAheadBufferSize and assume that a complete packet (PacketSize) is actually present at LookAheadBuffer.
A simple way to implement this check is to check the MAC option early on in the ProtocolReceive handler and set LookAheadBufferSize to be PacketSize if the option is set. Here is an example fragment:
if( pAdapter->MacOptions & NDIS_MAC_OPTION_TRANSFERS_NOT_PEND )
{
LookaheadBufferSize = PacketSize;
}
Please click the following link to send e-mail relating to this PCAUSA Knowledge Base topic:
![]()
| Keywords | ProtocolReceive, RealTek, SMC, INFO |
| Created | March 8, 2002 |
| Last Reviewed | March 10, 2002 |
![]()
|
PCAUSA Home ·
Privacy Statement ·
Products ·
Ordering ·
Support ·
Utilities ·
Resources
|