Udostępnij przez


Zawracanie pakietów NDIS

Jeśli flaga NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET w NblFlags składowej struktury NET_BUFFER_LIST jest ustawiona, pakiet jest pakietem pętli zwrotnej. Sterowniki protokołów i sterowniki filtrów mogą sprawdzić tę flagę, aby określić, czy dany pakiet jest pakietem sprzężenia zwrotnego.

Kiedy spełnione są wszystkie z poniższych trzech warunków, NDIS przekazuje pakiety z powrotem.

  1. Podstawowy typ nośnika karty miniportu to NdisMedium802_3 lub NdisMedium802_5.

  2. Każdy z następujących trzech warunków jest spełniony:

    1. Powiązanie protokołu ustawiło ustawienie NDIS_PACKET_TYPE_PROMISCUOUS z identyfikatorem OID OID_GEN_CURRENT_PACKET_FILTER w celu określenia jego filtru pakietów (i dla systemu Windows 8 i nowszych nie ustawiono NDIS_PACKET_TYPE_NO_LOCAL w tym samym identyfikatorze OID), a jeden z następujących parametrów ma wartość true:

      • Istnieje więcej niż jedno powiązanie z kartą miniportu.
      • Do adaptera miniportu jest dołączony moduł filtrujący, a moduł filtrujący zarejestrował procedurę obsługi odbierania.
    2. Powiązanie protokołu ustawiło wartość NDIS_PACKET_TYPE_ALL_LOCAL przy użyciu identyfikatora OID OID_GEN_CURRENT_PACKET_FILTER, aby określić jego filtr pakietów, jeżeli którykolwiek z poniższych warunków jest spełniony.

      • Istnieje więcej niż jedno powiązanie z kartą miniportu.
      • Do adaptera miniportu jest dołączony moduł filtrujący, a moduł filtrujący zarejestrował procedurę obsługi odbierania.
    3. Obiekt wywołujący ustawia flagę NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK w SendFlags parametru NdisSendNetBufferLists.

  3. Pakiet jest akceptowalny zgodnie z ustawionym filtrem pakietów oznaczonym identyfikatorem OID OID_GEN_CURRENT_PACKET_FILTER dla karty miniport. Poniżej przedstawiono kilka przykładów:

    • Jeśli pakiet jest pakietem bezpośrednim, adres docelowy w pakiecie musi być zgodny z adresem MAC karty miniport.
    • Jeśli pakiet jest pakietem multicastowym, filtr pakietów musi mieć ustawiony NDIS_PACKET_TYPE_ALL_MULTICAST lub adres docelowy musi pasować do jednego z adresów multicastowych na liście adresów multicastowych adaptera miniportu, a filtr pakietów musi mieć ustawiony NDIS_PACKET_TYPE_MULTICAST.
    • Jeśli pakiet jest pakietem rozgłaszanym, filtr pakietów karty miniport musi mieć ustawiony NDIS_PACKET_TYPE_BROADCAST.
    • Filtr pakietów adaptera miniportu ma ustawiony NDIS_PACKET_TYPE_PROMISCUOUS lub NDIS_PACKET_TYPE_ALL_LOCAL.

Powiązanie protokołu odbiera pakiety pętli zwrotnej, jeśli spełniony jest co najmniej jeden z następujących warunków:

  1. Powiązanie protokołu jest oryginalnym nadawcą pakietu i ustawiono NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK.

  2. Powiązanie protokołu nie ustawia NDIS_PACKET_TYPE_NO_LOCAL w filtrze pakietów.

Powiązanie protokołu nie odbierze pakietów typu loopback, jeśli spełniony jest jeden z następujących warunków:

  1. Powiązanie protokołu ustawia NDIS_PACKET_TYPE_NO_LOCAL w filtrze pakietów i nie jest to oryginalny nadawca pakietu.

  2. Powiązanie protokołu jest oryginalnym nadawcą, ale parametr NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK nie jest ustawiony w SendFlags podczas wywołania funkcji NdisSendNetBufferLists.

Na poniższej ilustracji pokazano przepływ logiki algorytmu pętli zwrotnej.

schemat blokowy przedstawiający przepływ logiki algorytmu sprzężenia zwrotnego.