Compartilhar via


NDIS_TCP_OFFLOAD_EVENT_INDICATE função de retorno de chamada (ndischimney.h)

[O recurso de descarregamento de chaminé TCP foi preterido e não deve ser usado.]

Um destino de descarregamento chama a função NdisTcpOffloadEventHandler para indicar um evento que pertence a uma conexão TCP descarregada.

Sintaxe

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

Um identificador que identifica a conexão TCP descarregada na qual a indicação está sendo feita. Quando a conexão foi descarregada, esse identificador foi fornecido no membro NdisOffloadHandle do NDIS_MINIPORT_OFFLOAD_BLOCK_LIST estrutura associada ao estado da conexão.

[in] EventType

O evento que está sendo indicado como um dos seguintes valores de TCP_OFFLOAD_EVENT_TYPE :

TcpIndicateDisconnect

Indica que o host remoto iniciou uma desconexão normal enviando um segmento FIN na conexão.

TcpIndicateRetrieve

Indica que o destino de descarregamento está solicitando que a pilha de host encerre o descarregamento de uma conexão TCP.

TcpIndicateAbort

Indica que o host remoto iniciou uma desconexão abortiva enviando um segmento RST aceitável na conexão.

TcpIndicateSendBacklogChange

Indica uma alteração no tamanho preferencial da lista de pendências de envio.

[in] EventSpecificInformation

Especifica informações adicionais sobre o evento que está sendo indicado da seguinte maneira:

TcpIndicateDisconnect

Não é significativo.

TcpIndicateRetrieve

Indica o motivo da solicitação de upload como um valor TCP_UPLOAD_REASON . Consulte a seção Comentários para obter mais informações.

TcpIndicateAbort

Não é significativo.

TcpIndicateSendBacklogChange

Especifica o número ideal de bytes de dados de envio que a pilha de host deve ter pendente no destino de descarregamento.

Retornar valor

Nenhum

Comentários

Indicando uma desconexão normal

Um destino de descarregamento deve indicar uma desconexão normal somente quando:
  • Ele recebeu um segmento FIN do host remoto.
  • Todos os dados recebidos na conexão antes da recepção do segmento FIN foram consumidos pelo aplicativo cliente (ou seja, não há dados de recebimento a serem indicados na conexão).
O destino de descarregamento não deve liberar os recursos para a conexão até que a pilha de host encerre o descarregamento da conexão.

Observe que uma desconexão normal desliga apenas a metade de recebimento da conexão. Ele não desliga a metade de envio da conexão.

Indicando uma desconexão anulativa

Quando um destino de descarregamento recebe um segmento RST aceitável em uma conexão TCP, ele deve:
  1. Em seu estado interno para a conexão, marque a conexão como anulada.
  2. Chame a função NdisTcpOffloadEventHandler com um EventType de TcpIndicateAbort.
    Nota Quando o miniporto indicar o evento TcpIndicateAbort , a pilha TCP/IP do host encerrará o descarregamento da conexão. O destino de descarregamento é livre para indicar o evento TcpIndicateAbort assim que o segmento RST chega.
     
  3. Conclua todas as solicitações de envio pendentes e desconecte as solicitações na conexão com NDIS_STATUS_REQUEST_ABORTED. O destino de descarregamento grava esse valor status no membro Status de cada estrutura NET_BUFFER_LIST na lista vinculada que ele passa para o Função NdisTcpOffloadSendComplete ou para o Função NdisTcpOffloadDisconnectComplete .
O destino de descarregamento não deve liberar os recursos para a conexão até que a pilha de host encerre o descarregamento da conexão.

Solicitando o encerramento de uma conexão TCP

O destino de descarregamento especifica o motivo da solicitação de encerramento como um valor TCP_UPLOAD_REASON no parâmetro EventSpecificInformation que ele passa para a função NdisTcpOffloadEventHandler . Em resposta, a pilha de host chama a função MiniportTerminateOffload do destino de descarregamento.

O destino de descarregamento pode solicitar o encerramento de apenas uma conexão TCP por chamada para NdisTcpOffloadEventHandler. O destino de descarregamento não pode solicitar o encerramento de um objeto de estado vizinho ou de um objeto de estado de caminho. Somente a pilha de host pode iniciar o encerramento de um objeto de estado de caminho ou vizinho.

A tabela a seguir descreve eventos ou circunstâncias que podem fazer com que um destino de descarregamento solicite o encerramento do descarregamento de uma conexão TCP.

A coluna mais à direita indica, para cada TCP_UPLOAD_REASON, se a pilha de host sempre carrega a conexão (obrigatória) ou pode ou não carregar a conexão (opcional). Nos casos obrigatórios, um destino de descarregamento não continua processando a conexão descarregada. Nos casos opcionais, um destino de descarregamento deve ser capaz de continuar o processamento na conexão descarregada se a pilha de host não terminar o descarregamento dessa conexão.

Evento/circunstância TCP_UPLOAD_REASON Término da conexão TCP da pilha de host
O estado de hardware usado para rastrear a conexão está corrompido. HardwareFailure Obrigatório
O destino de descarregamento tentou enviar dados em uma conexão TCP que depende de um objeto de estado invalidado. InvalidState Obrigatório
O destino de descarregamento recebe um segmento com o bit URG definido no cabeçalho TCP. Observe que o destino de descarregamento não envia um ACK para reconhecer os dados urgentes. ReceivedUrgentData Obrigatório
Ocorreu um tempo limite na conexão TCP. TimeoutExpiration Obrigatório
O destino de descarregamento está solicitando um upload por um motivo não especificado. UploadRequested Obrigatório
O destino de descarregamento detectou que muitos segmentos de transmissão estão sendo descartados na conexão TCP. HighDropRate Opcional
O destino de descarregamento detectou que muitos fragmentos estão sendo recebidos na conexão TCP. HighFragmentation Opcional
O destino de descarregamento recebeu muitos segmentos fora de ordem na conexão TCP. HighOutofOrderPackets Opcional
A atividade (envios/recebimentos) na conexão TCP é muito baixa. LowActivity Opcional
Não há buffers de recebimento prepostos para a conexão TCP. NoBufferProposting Opcional
Os buffers recebidos postados para a conexão TCP são muito pequenos. SmallIO Opcional
 

O destino de descarregamento não deve iniciar o encerramento de uma conexão TCP semi-fechada quando essa conexão estiver em um dos seguintes estados:

  • FIN_WAIT1– A pilha de host local fechou a conexão TCP, mas a conexão ainda pode estar recebendo dados do ponto de extremidade remoto.
  • FIN_WAIT2-- O host local fechou a conexão TCP e recebeu um ACK para o segmento FIN que ele enviou, mas a conexão descarregada ainda pode estar recebendo dados do host remoto.
  • CLOSE_WAIT– O host local ainda pode estar enviando dados.
Um destino de descarregamento pode solicitar o encerramento de todas as conexões TCP que foram descarregadas para ele. Para obter mais informações, consulte NdisMOffloadEventIndicate.

Indicando uma alteração no tamanho da lista de pendências de envio

O tamanho da lista de pendências de envio pode ser uma função do RTT (tempo de viagem de ida e volta) para a conexão, a largura de banda da interface e outros parâmetros. As variáveis e o algoritmo específicos que o destino de descarregamento usa para calcular o tamanho da lista de pendências de envio são específicos da implementação. Um destino de descarregamento pode, por exemplo, usar o mínimo do produto de atraso de largura de banda e a janela de recebimento anunciada como o algoritmo. No entanto, observe que o tamanho da lista de pendências de envio não varia de acordo com o número de bytes de dados publicados atualmente para transmissão na conexão.

O destino de descarregamento deve implementar um mecanismo de limitação para garantir que, se o valor de SendBacklogSize for alterado com muita frequência ou por uma quantidade muito pequena, o destino de descarregamento não indicará um evento SendBacklogSize . Isso impedirá que uma tempestade de indicações de eventos ocorra.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho ndischimney.h (inclua Ndischimney.h)
IRQL DISPATCH_LEVEL

Confira também

Indicando eventos de Chimney-Specific TCP

MiniportInitiateOffload

MiniportTerminateOffload

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent

Respondendo à recepção de um segmento FIN ou RST