All -
Let me start by saying that when it comes to newbies doing Windows
driver development, I am about as new as they get. I did read the FAQ,
and searched the list archives with Google, but didn’t see anything that
seemed like it was the same issue. I also have a pretty healthy
background in x86 assembler code, and did a lot of lower level stuff
back in the days of DOS. I have also done some work with Linux drivers.
So I am not completely new to some of the hardware issues that can
exist. (Just to how they interact with Windows at a driver level.)
So hopefully this isn’t a repeat on something that has already been
discussed.
I am working on an 802.1X implementation (all open source, so I can
share code with anyone that can help me out), and started with the base
NDISprot driver. I ran in to some performance issues like many that
have been discussed on this list, so I made a small change to try to
filter out everything except the 0x888e frames that I need for 802.1X.
To do this, I added two small checks to the NdisProtReceive() function,
and the NdisProtReceivePacket() function. After doing some reading, and
a little trial and error, these seemed to be the functions that receive
the frames. The main difference being interfaces to older NDIS versions.
The change that I made is fairly simple, it boils down to :
// Existing ndisprot code section
if (HeaderBufferSize != sizeof(NDISPROT_ETH_HEADER))
{
Status = NDIS_STATUS_NOT_ACCEPTED;
break;
}
// new IF statement to check for 888e.
if (((PNDISPROT_ETH_HEADER)pHeaderBuffer)->EthType != 0x8e88)
{
// We don’t want it!
Status = NDIS_STATUS_NOT_ACCEPTED;
break;
}
This change solved the issues I was seeing where an authentication would
fail if a lot of data was going over the interface. But, now I am
seeing something else that is very strange.
For reasons that we can’t nail down, sometimes the frames don’t seem to
get forwarded up the stack. If we put a tap on the connection, and run
a sniff, we see the frame come in. But, the local machine doesn’t get
the frame via either Wireshark, or our modified NDISprot driver.
Since 802.1X is a lock-step protocol, it seem unlikely that this issue
would be the performance issue that has been already discussed on this
list. Also, since Wireshark doesn’t see it either, it seems like
something is gumming up the works in the stack.
To make matters more interesting, if we set the retransmit interval for
802.1X down to 15 seconds so that the authentication doesn’t time out,
we get the retransmission correctly.
So, my questions boil down to :
-
Is this the result of the filter modification I put in? (Was it done
wrong? If so, where can I look to figure out how to do it right?) -
Is this a known issue with NDISprot? (If so, has anyone fixed it?
And is the patch available?) -
If there are no good answers to question 1 & 2, are there any
pointers on where to start the debug process? I am going to load
DebugView on a machine, and watch the debug output to see if there are
any pointers. But any help on what to look for would be great!
(Remember, I am a newbie.)
Thanks in advance!