Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если установлен флаг NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET в элементе NblFlags структуры NET_BUFFER_LIST, это означает, что пакет является пакетом обратного цикла. Драйверы протокола и драйверы фильтров могут проверить этот флаг, чтобы определить, является ли пакет пакетом обратной передачи.
NDIS циклирует пакеты обратно, если выполнены все следующие три условия:
Базовый тип носителя адаптера мини-порта — NdisMedium802_3 или NdisMedium802_5.
Выполняется любое из следующих трех условий:
Привязка протокола задает параметр NDIS_PACKET_TYPE_PROMISCUOUS с OID_GEN_CURRENT_PACKET_FILTER OID, чтобы указать свой фильтр пакетов (и для Windows 8 и более поздних версий не устанавливал NDIS_PACKET_TYPE_NO_LOCAL в одном и том же OID), и одно из следующих значений имеет значение true:
- Существует несколько привязок к мини-адаптеру.
- Имеется модуль фильтра, подключенный к минипорт-адаптеру, и модуль фильтра зарегистрировал обработчик приема.
Привязка протокола задает параметр NDIS_PACKET_TYPE_ALL_LOCAL с OID_GEN_CURRENT_PACKET_FILTER OID, чтобы указать его фильтр пакетов, и любой из следующих значений имеет значение true.
- Существует несколько привязок к мини-адаптеру.
- Имеется модуль фильтра, подключенный к минипорт-адаптеру, и модуль фильтра зарегистрировал обработчик приема.
Вызывающий объект задает флаг NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK в параметре SendFlags функции NdisSendNetBufferLists.
Пакет допустим, как это определено набором фильтров пакетов с OID_GEN_CURRENT_PACKET_FILTER OID для минипорт-адаптера. Ниже приведены некоторые примеры.
- Если пакет является прямым пакетом, адрес назначения в пакете должен совпадать с MAC-адресом мини-адаптера.
- Если пакет является пакетом многоадресной рассылки, фильтр пакетов должен иметь установленным NDIS_PACKET_TYPE_ALL_MULTICAST или целевой адрес должен совпадать с одним из адресов многоадресной рассылки в списке адресов многоадресной рассылки минипорт-адаптера, и фильтр пакетов должен иметь установленным NDIS_PACKET_TYPE_MULTICAST.
- Если пакет является широковещательным, в фильтре пакетов минипорт-адаптера должен быть установлен NDIS_PACKET_TYPE_BROADCAST.
- Фильтр пакетов минипорт-адаптера имеет установлен NDIS_PACKET_TYPE_PROMISCUOUS или NDIS_PACKET_TYPE_ALL_LOCAL.
Привязка протокола получает пакеты обратного цикла, если выполняется одно из следующих условий:
Привязка протокола — это исходный отправитель пакета, а NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK задан.
Привязка протокола не задает NDIS_PACKET_TYPE_NO_LOCAL в фильтре пакетов.
Привязка протокола не будет получать пакеты обратной связи, если одно из следующих условий является истинным:
Привязка протокола задает NDIS_PACKET_TYPE_NO_LOCAL в фильтре пакетов и не является исходным отправителем пакета.
Привязка протокола выступает в качестве исходного отправителя, но флаг NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK не установлен в параметре SendFlags при вызове функции NdisSendNetBufferLists.
На следующем рисунке показан поток логики алгоритма обратного цикла.