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).
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:- Em seu estado interno para a conexão, marque a conexão como anulada.
-
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.
- 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 .
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.
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
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete