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 NdisOffloadHandle membro 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 a pilha de host para encerrar o descarregamento de uma conexão TCP.

TcpIndicateAbort

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

TcpIndicateSendBacklogChange

Indica uma alteração no tamanho de backlog de envio preferencial.

[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.

Valor de retorno

Nenhum

Observações

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.
    Observação Quando o miniporto indicar o evento TcpIndicateAbort, a pilha TCP/IP do host encerrará o descarregamento da conexão. O destino de descarregamento é gratuito para indicar o evento TcpIndicateAbort assim que o segmento RST chegar.
     
  3. Conclua todas as solicitações de envio pendentes e desconecte solicitações na conexão com NDIS_STATUS_REQUEST_ABORTED. O destino de descarregamento grava esse valor de status no Status membro de cada estrutura NET_BUFFER_LIST na lista vinculada que ele passa para o função NdisTcpOffloadSendComplete ou para o função de 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 terminação 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 encerrar o descarregamento dessa conexão.

Evento/circunstância TCP_UPLOAD_REASON Terminação da pilha de host da conexão TCP
O estado de hardware usado para controlar 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. de 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. de Baixa Ativação 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 enviado, 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 do backlog de envio

O tamanho da lista de pendências de envio pode ser uma função do RTT (tempo 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 poderia, 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 que atualmente são postados 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
da Plataforma de Destino Universal
cabeçalho ndischimney.h (inclua Ndischimney.h)
IRQL DISPATCH_LEVEL

Consulte também

indicando eventos de Chimney-Specific TCP

miniportInitiateOffload

miniportTerminateOffload

NdisMOffloadEventIndicate

NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete

NdisTcpOffloadSendComplete

ProtocolTcpOffloadEvent

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