Compartir a través de


Bucle de paquetes NDIS

Si se establece la marca NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET en el miembro NblFlags de la estructura NET_BUFFER_LIST , el paquete es un paquete de bucle invertido. Los controladores de protocolo y los controladores de filtro pueden comprobar esta marca para determinar si un paquete es un paquete de bucle invertido.

NDIS vuelve a recorrer los paquetes si se cumplen las tres condiciones siguientes:

  1. El tipo de medio del adaptador de miniporte subyacente es NdisMedium802_3 o NdisMedium802_5.

  2. Se cumple cualquiera de las tres condiciones siguientes:

    1. Un enlace de protocolo establece la configuración de NDIS_PACKET_TYPE_PROMISCUOUS con el OID de OID_GEN_CURRENT_PACKET_FILTER para especificar su filtro de paquetes (y, para Windows 8 y versiones posteriores, no estableció NDIS_PACKET_TYPE_NO_LOCAL en el mismo OID) y se cumple cualquiera de las siguientes condiciones:

      • Hay más de un enlace al adaptador de minipuerto.
      • Hay un módulo de filtro conectado al adaptador de minipuerto y el módulo de filtro registró un controlador de recepción.
    2. Un enlace de protocolo establece el valor de NDIS_PACKET_TYPE_ALL_LOCAL con el OID de OID_GEN_CURRENT_PACKET_FILTER para especificar su filtro de paquetes y cualquiera de los siguientes valores es true.

      • Hay más de un enlace al adaptador de minipuerto.
      • Hay un módulo de filtro conectado al adaptador de minipuerto y el módulo de filtro registró un controlador de recepción.
    3. El llamador establece la marca NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK en el parámetro SendFlags de la función NdisSendNetBufferLists .

  3. El paquete es aceptable según lo determinado por el conjunto de filtros de paquetes con el OID de OID_GEN_CURRENT_PACKET_FILTER para el adaptador de minipuerto. A continuación se muestran algunos ejemplos.

    • Si el paquete es un paquete directo, la dirección de destino del paquete debe coincidir con la dirección MAC del adaptador de miniport.
    • Si el paquete es un paquete de multidifusión, el filtro de paquetes debe tener establecido NDIS_PACKET_TYPE_ALL_MULTICAST o la dirección de destino coincide con una de las direcciones de multidifusión en la lista de direcciones de multidifusión del adaptador de miniporte y el filtro de paquetes tiene NDIS_PACKET_TYPE_MULTICAST establecido.
    • Si el paquete es un paquete de difusión, el filtro de paquetes del adaptador de minipuerto debe tener NDIS_PACKET_TYPE_BROADCAST establecido.
    • El filtro de paquetes del adaptador de minipuerto tiene NDIS_PACKET_TYPE_PROMISCUOUS o NDIS_PACKET_TYPE_ALL_LOCAL establecido.

Un enlace de protocolo recibe paquetes de bucle invertido si se cumple alguna de las siguientes condiciones:

  1. El enlace de protocolo es el remitente original del paquete y se establece NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK.

  2. El enlace de protocolo no establece NDIS_PACKET_TYPE_NO_LOCAL en el filtro de paquetes.

Un enlace de protocolo no recibirá paquetes de bucle invertido si se cumple alguna de las siguientes condiciones:

  1. El enlace de protocolo establece NDIS_PACKET_TYPE_NO_LOCAL en el filtro de paquetes y no es el remitente original del paquete.

  2. El enlace de protocolo es el remitente original, pero NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK no se establece en el parámetro SendFlags en una llamada a la función NdisSendNetBufferLists .

En la ilustración siguiente se muestra el flujo de lógica del algoritmo de bucle invertido.

Diagrama de flujo que muestra el flujo de lógica del algoritmo de bucle invertido.