Delen via


NDIS-pakketten terugsturen

Als de NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET vlag in de NblFlags lid van de NET_BUFFER_LIST structuur is ingesteld, is het pakket een loopbackpakket. Protocolstuurprogramma's en filterstuurprogramma's kunnen deze vlag controleren om te bepalen of een pakket een loopbackpakket is.

NDIS voert pakketten terug als aan alle volgende drie voorwaarden wordt voldaan:

  1. Het onderliggende mediatype van de miniportadapter is NdisMedium802_3 of NdisMedium802_5.

  2. Aan een van de volgende drie voorwaarden wordt voldaan:

    1. Een protocolbinding stelt de NDIS_PACKET_TYPE_PROMISCUOUS-instelling in met de OID_GEN_CURRENT_PACKET_FILTER OID om het pakketfilter op te geven (en voor Windows 8 en hoger is NDIS_PACKET_TYPE_NO_LOCAL niet ingesteld in dezelfde OID) en een van de volgende is waar:

      • Er is meer dan één binding met de minipoortadapter.
      • Er is een filtermodule gekoppeld aan de minipoortadapter en de filtermodule heeft een ontvangsthandler geregistreerd.
    2. Een protocolbinding stelt de NDIS_PACKET_TYPE_ALL_LOCAL-instelling in met de OID_GEN_CURRENT_PACKET_FILTER OID om het pakketfilter op te geven en een van de volgende is waar.

      • Er is meer dan één binding met de minipoortadapter.
      • Er is een filtermodule gekoppeld aan de minipoortadapter en de filtermodule heeft een ontvangsthandler geregistreerd.
    3. De aanroeper stelt de vlag NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK in de SendFlags parameter van de NdisSendNetBufferLists functie in.

  3. Het pakket is acceptabel zoals wordt bepaald door het pakketfilter dat is ingesteld met de OID_GEN_CURRENT_PACKET_FILTER OID voor de minipoortadapter. Hier volgen enkele voorbeelden:

    • Als het pakket een direct pakket is, moet het doeladres in het pakket overeenkomen met het MAC-adres van de minipoortadapter.
    • Als het pakket een multicastpakket is, moet het pakketfilter NDIS_PACKET_TYPE_ALL_MULTICAST ingesteld hebben of moet het doeladres overeenkomen met een van de multicast-adressen in de multicast-adreslijst van de minipoortadapter. Daarnaast moet het pakketfilter NDIS_PACKET_TYPE_MULTICAST hebben ingesteld.
    • Als het pakket een broadcastpakket is, moet het pakketfilter van de minipoortadapter NDIS_PACKET_TYPE_BROADCAST ingesteld zijn.
    • Het pakketfilter van de minipoortadapter is ingesteld op NDIS_PACKET_TYPE_PROMISCUOUS of NDIS_PACKET_TYPE_ALL_LOCAL.

Een protocolbinding ontvangt loopbackpakketten als een van de volgende waar is:

  1. De protocolbinding is de oorspronkelijke afzender van het pakket en NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK is ingesteld.

  2. De protocolbinding stelt geen NDIS_PACKET_TYPE_NO_LOCAL in het pakketfilter in.

Een protocolbinding ontvangt geen loopbackpakketten als een van de volgende waarden waar is:

  1. De protocolbinding stelt NDIS_PACKET_TYPE_NO_LOCAL in het pakketfilter in en het is niet de oorspronkelijke afzender voor het pakket.

  2. De protocolbinding is de oorspronkelijke afzender, maar NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK is niet ingesteld in de SendFlags-parameter in een aanroep naar de NdisSendNetBufferLists functie.

In de volgende afbeelding wordt de logische stroom van het loopback-algoritme getoond.

stroomdiagram waarin de logische stroom van het loopback-algoritme wordt weergegeven.