NDIS IM packet split: how to do it once the modified packet is larger than MTU? RRS feed

  • Question

  • Hi all.

    If I increase a packet size at NDIS IM driver, how it is expected from me to split the packet in two to fit under the MTU limit?

    After searching/posting on various forums, it seems that anyone says it should be a chained NDIS_PACKET/NDIS_BUFFER addition, but noone mentions that it worked out of the box.

    Also, does that LSO offload even worked for someone with NDIS IM driver? From my experience, it seems that a packet with MTU+few bytes size is never going to be sent  - regardless of offload settings, jumbo frames support etc.

    I want to know the default, plain, generic method that will just work OOBE; some of problematic points that come to my mind and aren't answered at mentioned forums are: various offload problems, window size/SEQ/ACK numbers synchronization at the stack (or the connection will break or come into retransmissions).

    Currently using a dirty hack based on lesser MTU value reported at OID_* code. It stinks.

    Sunday, March 18, 2012 3:40 AM

All replies

  • There are two approaches. The first should be plain to you.

    1.) If the data tobe sent is greated than what can fit in one packet - then you must fragment it into multiple packets.

    2.) Another aproach that may work is for your driver to report that it's MTU is smaller than the real MTU of your lower-level NDIS miniport. Spoof frame size, total sze etc. Having done this by the amount ot "extra" bytes that you want to add, then the max send size that the system should send on your miniport should leave enough room for you to add your header.

    Thomas F. Divine http://www.pcausa.com

    Sunday, March 18, 2012 7:43 PM