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).
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.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.
- 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.
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.
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
NdisTcpOffloadDisconnectComplete NdisTcpOffloadReceiveComplete