NDIS MINIPORT MiniPortSend() not called after ASSOC

Discussion in 'Windows Vista Drivers' started by Mai Kee Reiss, Jul 15, 2008.

  1. Hi folks,

    in my own WLAN Miniport Driver, NDIS sometimes does not start
    transmitting the 1st data packet (usually the 1st key of the WPA/PSK
    EAPOL 4-way-handshake).

    I have absolutely no idea, why

    What I have is:
    After getting the interrupt from WLAN Chip, which is reporting "okay
    from 802.11 ASSOC", I send to NDIS:

    NdisMIndicateStatus ( Adapter->MyAdapterHdl,
    NDIS_STATUS_MEDIA_DISCONNECT,
    NULL, 0 );
    NdisMIndicateStatusComplete ( Adapter->MyAdapterHdl );

    Is this _not_ enought to force NDIS the start of Tx/Rx?
    The last status was _not_ NDIS_STATUS_RESSOURCES, so NdisMSendComplete()
    could also not be the reason, right?
    in fact, I get this problems right after rebooting the device, so the
    Miniport can not be in NDIS_STATUS_RESSOURCES state, I assume...


    BTW:
    the driver is currently build for WinCE5.0, which is NDIS 5.1.
    The port for WinXP is long time not maintained and the hardware is also
    no longer avail for desktop. Thus, I cannot check if I have the same
    problems under any WinNT.

    Any help is highly appreciated!
     
    Mai Kee Reiss, Jul 15, 2008
    #1
    1. Advertisements

  2. Mai Kee Reiss

    Pavel A. Guest

    So, you've indicated NDIS_STATUS_MEDIA_*DIS*CONNECT and
    wonder why you don't get any sends, right?

    --PA
     
    Pavel A., Jul 15, 2008
    #2
    1. Advertisements

  3. Mai Kee Reiss

    Peter Guest

    You need to make an NDIS_STATUS_MEDIA_CONNECT indication (not
    NDIS_STATUS_MEDIA_DISCONNECT) before you see your MiniportSendPackets
    function get called.
     
    Peter, Jul 15, 2008
    #3
  4. Hi Pavel, Peter,

    I'm sorry for the confusion - of course I am indicating "CONNECT", not
    "DISCONNECT". It was a typo. My mistake. Please apologize for the
    inconvinience!

    What I _exactly_ do is:

    1st)
    after MiniportInitialize() is finished, I force the next call to
    MiniportSetInformation() or MiniportQueryInformation() to call my so
    called "Deferred Disconnect Indicator" once. Since NdisMIndicateStatus()
    is forbidden in MiniportInitialize(), I shifted the Disconnect-
    indication just into the next call. It looks mostly like:

    if( Adapter->NotYetDeferredDSC ){
    if( Adapter->NotYetReportedDSC )
    {
    NdisMIndicateStatus ( Adapter->MyAdapterHdl,
    NDIS_STATUS_MEDIA_DISCONNECT,
    NULL, 0 );
    NdisMIndicateStatusComplete ( Adapter->MyAdapterHdl );
    Adapter->NotYetReportedDSC = FALSE;
    Adapter->NotYetDeferredDSC = FALSE;
    }}


    2nd)
    when starting the Assoc - right after a "Specific Scan" which again
    takes place because of a MiniportSetInformation( OID_802_11_SSID ) - I
    start an episodic 10.000ms timer, which will also do this

    if( Adapter->NotYetReportedDSC )
    {
    NdisMIndicateStatus ( Adapter->MyAdapterHdl,
    NDIS_STATUS_MEDIA_DISCONNECT,
    NULL, 0 );
    NdisMIndicateStatusComplete ( Adapter->MyAdapterHdl );
    Adapter->NotYetReportedDSC = FALSE;
    }

    but only, if I do not cancel the timer before that 10s.

    3rd)
    when getting positive ASSOC response (in my case, it's an interrupt with
    a hardware specific response code), I cancel the timer and instead of
    the timers DISCONNECT, I indicate

    NdisMIndicateStatus ( Adapter->MyAdapterHdl,
    NDIS_STATUS_MEDIA_CONNECT,
    NULL, 0 );
    NdisMIndicateStatusComplete ( Adapter->MyAdapterHdl );
    Adapter->NotYetReportedDSC = TRUE;

    (3b)
    when _not_ getting positive ASSOC, the timer ist still running,
    so I have time left to retry the scan and the assoc, multiple times.

    Am I on the right way till here?

    in normal cases (positive ASSOC response), the WZC supplicant will now
    transmit the 1st EAPOL packet of the well known 4-way-handshake and the
    rest runs fine.
    But _very_ often, I don't get any call for MiniportSend().

    this occurs:
    - just after 1st soft-reset (in wince it is a little bit like ctrl-alt-
    del), i need to do it to get my driver loaded
    - then after each 2nd soft-reset
    - or after each 2nd suspend/resume.

    I tracked all cases where I use NdisMIndicateStatusXxxx() with
    RETAILMSG, there is never a "stacked" DISCONNECT, but sometimes a
    "stacked" CONNECT - later is specified to be required in the MSDN for
    some roaming cases (in my eyes, the way I read the
    <http://msdn.microsoft.com/en-us/library/aa913036.aspx> "Media Status
    Indications for Infrastructure Networks" document).

    or, is MicroSoft documentation wrong and the stacked CONNECT is a
    failure?

    Or does anything other control the TX too? Since I not returned
    NDIS_STATUS_RESSOURCES until here, it cannot be
    NdisMSendRessourcesAvailable(), right?

    what the h*** is it?

    Any idea?
     
    Mai Kee Reiss, Jul 17, 2008
    #4
  5. Mai Kee Reiss

    Pavel A. Guest

    Yes, all this looks ok more or less
    Hope your question applies now only to your WinXP port. Sorry I don't
    exactly remember how it worked in WinCE.
    no, the documentation is correct.
    Yes there may be some other reasons why TX won't occur.
    Does your driver work well in unsecure mode (without supplicant, 4 way, etc)
    ?

    Regards,
    --PA

     
    Pavel A., Jul 19, 2008
    #5
  6. Hi Pavel,

    I have completely rewritten the CONNECT/DISCONNECT signalling, regarding
    the MSDN papers. Now it works most times. Have still some problems unter
    WinCE500, but /very/ rare now.

    Thank you for your hints!

    As far as I can see, other chipsets and other driver authors suffering
    the same problems with the same frequency - so there may be a bug in the
    WinCE CoreOS or in the MSDN Papers. It's a pitty to not having the NDIS
    source code within WinCE600...

    I still have some problems with the first ASSOC on the Marvel 88w8385.
    But this is out of topic here.

    B.T.W.:
    does anybody know a good group/area/board/echo/list/net/blog/forum for
    the Marvel chipset?
    I can read all inclusive god old FidoNet here...
     
    Mai Kee Reiss, Jul 23, 2008
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.