NDIS_TCP_OFFLOAD_EVENT_INDICATE función de devolución de llamada (ndischimney.h)

[La característica de descarga de chimenea TCP está en desuso y no se debe usar.]

Un destino de descarga llama a la función NdisTcpOffloadEventHandler para indicar un evento que pertenece a una conexión TCP descargada.

Sintaxis

NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventIndicate;

void NdisTcpOffloadEventIndicate(
  [in] IN NDIS_HANDLE NdisOffloadHandle,
  [in] IN ULONG EventType,
  [in] IN ULONG EventSpecificInformation
)
{...}

Parámetros

[in] NdisOffloadHandle

Identificador que identifica la conexión TCP descargada en la que se realiza la indicación. Cuando se descargó la conexión, este identificador se proporcionó en el miembro NdisOffloadHandle del NDIS_MINIPORT_OFFLOAD_BLOCK_LIST estructura asociada al estado de conexión.

[in] EventType

Evento que se indica como uno de los siguientes valores de TCP_OFFLOAD_EVENT_TYPE :

TcpIndicateDisconnect

Indica que el host remoto ha iniciado una desconexión correcta mediante el envío de un segmento FIN en la conexión.

TcpIndicateRetrieve

Indica que el destino de descarga solicita la pila de hosts para finalizar la descarga de una conexión TCP.

TcpIndicateAbort

Indica que el host remoto ha iniciado una desconexión abortiva mediante el envío de un segmento RST aceptable en la conexión.

TcpIndicateSendBacklogChange

Indica un cambio en el tamaño de trabajo pendiente de envío preferido.

[in] EventSpecificInformation

Especifica información adicional sobre el evento que se indica de la siguiente manera:

TcpIndicateDisconnect

No tiene sentido.

TcpIndicateRetrieve

Indica el motivo de la solicitud de carga como un valor de TCP_UPLOAD_REASON . Vea la sección Comentarios para obtener más información.

TcpIndicateAbort

No tiene sentido.

TcpIndicateSendBacklogChange

Especifica el número óptimo de bytes de datos de envío que la pila de hosts debe tener pendiente en el destino de descarga.

Valor devuelto

None

Observaciones

Indica una desconexión correcta

Un destino de descarga debe indicar una desconexión correcta solo cuando:
  • Ha recibido un segmento FIN del host remoto.
  • La aplicación cliente ha consumido todos los datos recibidos en la conexión antes de la recepción del segmento FIN (es decir, no hay datos de recepción que se indiquen en la conexión).
El destino de descarga no debe liberar los recursos de la conexión hasta que la pila del host finalice la descarga de la conexión.

Tenga en cuenta que una desconexión correcta cierra solo la mitad de recepción de la conexión. No apaga la mitad de envío de la conexión.

Indica una desconexión abortiva

Cuando un destino de descarga recibe un segmento RST aceptable en una conexión TCP, debe:
  1. En su estado interno para la conexión, marque la conexión como anulada.
  2. Llame a la función NdisTcpOffloadEventHandler con un EventType de TcpIndicateAbort.
    Nota Cuando el miniporte indica el evento TcpIndicateAbort , la pila TCP/IP del host finalizará la descarga de la conexión. El destino de descarga es gratuito para indicar el evento TcpIndicateAbort en cuanto llega el segmento RST.
     
  3. Complete todas las solicitudes de envío pendientes y desconecte las solicitudes en la conexión con NDIS_STATUS_REQUEST_ABORTED. El destino de descarga escribe este valor de estado en el miembro Status de cada estructura de NET_BUFFER_LIST de la lista vinculada que pasa a . Función NdisTcpOffloadSendComplete o a Función NdisTcpOffloadDisconnectComplete .
El destino de descarga no debe liberar los recursos de la conexión hasta que la pila del host finalice la descarga de la conexión.

Solicitud de terminación de una conexión TCP

El destino de descarga especifica el motivo de la solicitud de finalización como un valor de TCP_UPLOAD_REASON en el parámetro EventSpecificInformation que pasa a la función NdisTcpOffloadEventHandler . En respuesta, la pila de hosts llama a la función MiniportTerminateOffload del destino de descarga.

El destino de descarga puede solicitar la finalización de solo una conexión TCP por llamada a NdisTcpOffloadEventHandler. El destino de descarga no puede solicitar la finalización de un objeto de estado vecino o un objeto de estado de ruta de acceso. Solo la pila de hosts puede iniciar la terminación de un objeto de estado vecino o de ruta de acceso.

En la tabla siguiente se describen los eventos o circunstancias que pueden provocar que un destino de descarga solicite la finalización de la descarga de una conexión TCP.

La columna más a la derecha indica, para cada TCP_UPLOAD_REASON, si la pila de hosts siempre carga la conexión (obligatoria) o puede o no cargar la conexión (opcional). En los casos obligatorios, un destino de descarga no continúa procesando la conexión descargada. En los casos opcionales, un destino de descarga debe poder seguir procesando la conexión descargada si la pila de hosts no finaliza la descarga de esa conexión.

Evento o circunstancia TCP_UPLOAD_REASON Terminación de la pila de hosts de la conexión TCP
El estado de hardware usado para realizar un seguimiento de la conexión está dañado. HardwareFailure Mandatory
El destino de descarga intentó enviar datos a una conexión TCP que depende de un objeto de estado invalidado. InvalidState Mandatory
El destino de descarga recibe un segmento con el bit URG establecido en el encabezado TCP. Tenga en cuenta que el destino de descarga no envía un ACK para confirmar los datos urgentes. ReceivedUrgentData Mandatory
Se ha agotado el tiempo de espera en la conexión TCP. TimeoutExpiration Mandatory
El destino de descarga solicita una carga por un motivo no especificado. UploadRequested Mandatory
El destino de descarga ha detectado que se quitan demasiados segmentos de transmisión en la conexión TCP. HighDropRate Opcionales
El destino de descarga ha detectado que se reciben demasiados fragmentos en la conexión TCP. HighFragmentation Opcionales
El destino de descarga ha recibido demasiados segmentos desordenados en la conexión TCP. HighOutofOrderPackets Opcionales
La actividad (envía o recibe) en la conexión TCP es demasiado baja. LowActivity Opcionales
No hay búferes de recepción prepostados para la conexión TCP. NoBufferProposting Opcionales
Los búferes recibidos publicados para la conexión TCP son demasiado pequeños. SmallIO Opcionales
 

El destino de descarga no debe iniciar la terminación de una conexión TCP media cerrada cuando esa conexión se encuentra en uno de los siguientes estados:

  • FIN_WAIT1: la pila de hosts local ha cerrado la conexión TCP, pero es posible que la conexión siga recibiendo datos del punto de conexión remoto.
  • FIN_WAIT2: el host local ha cerrado la conexión TCP y ha recibido una ACK para el segmento FIN que envió, pero es posible que la conexión descargada siga recibiendo datos del host remoto.
  • CLOSE_WAIT: es posible que el host local siga enviando datos.
Un destino de descarga puede solicitar la finalización de todas las conexiones TCP que se han descargado. Para obtener más información, vea NdisMOffloadEventIndicate.

Indica un cambio en el tamaño del trabajo pendiente de envío

El tamaño del trabajo pendiente de envío puede ser una función del tiempo de ida y vuelta (RTT) de la conexión, el ancho de banda de la interfaz y otros parámetros. Las variables y el algoritmo específicos que usa el destino de descarga para calcular el tamaño del trabajo pendiente de envío son específicos de la implementación. Un destino de descarga podría, por ejemplo, usar el mínimo del producto de retraso de ancho de banda y la ventana de recepción anunciada como algoritmo. Sin embargo, tenga en cuenta que el tamaño del trabajo pendiente de envío no varía según el número de bytes de datos que se publican actualmente para la transmisión en la conexión.

El destino de descarga debe implementar un mecanismo de limitación para asegurarse de que, si el valor de SendBacklogSize cambia con demasiada frecuencia o por una cantidad demasiado pequeña, el destino de descarga no indica un evento SendBacklogSize . Esto impedirá que se produzca una tormenta de indicaciones de evento.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ndischimney.h (incluya Ndischimney.h)
IRQL DISPATCH_LEVEL

Consulte también

Indicación de eventos de Chimney-Specific TCP

MiniportInitiateOffload

MiniportTerminateOffload

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent

Responder a la recepción de un segmento FIN o RST