Indicando segmentos coalesced
Uma única unidade coalesced (SCU) é uma sequência de segmentos TCP que são unidos em um único segmento TCP de acordo com as regras definidas em Regras para Agrupar Segmentos TCP/IP. Esta seção descreve como indicar os segmentos agrupados resultantes.
Um SCU deve:
Seja indicado chamando NdisMIndicateReceiveNetBufferLists.
Parece um segmento TCP normal que é recebido pela transmissão.
Não seja maior que o comprimento máximo do datagrama de IP legal, conforme definido na seção 3.1 do RFC 791.
Nota Como os segmentos com cabeçalhos de extensão IPv6 não podem ser unidos (consulte Condições de exceção que encerram a união), o tamanho do SCU para datagramas IPv6 também é limitado pelo comprimento máximo do datagrama legal.
O driver NIC ou miniport deve recompor as somas de verificação TCP e IPv4, se aplicável, antes de indicar o segmento unido. Se o driver NIC ou miniport validar as somas de verificação TCP e IPv4, mas não as recompila para o segmento unido, ele deverá definir os sinalizadores TcpChecksumValueInvalid e IpChecksumValueInvalid na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO . Além disso, nesse caso, o driver NIC ou miniport pode, opcionalmente, zerado os valores de soma de verificação de cabeçalho TCP e IPv4 no segmento.
O driver NIC e miniport devem sempre definir os sinalizadores IpChecksumSucceeded e TcpChecksumSucceededed na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO antes de indicar o segmento unido.
Para obter mais informações sobre regras de união, consulte Regras para unir segmentos TCP/IP.
Para obter mais informações sobre exceções, consulte Condições de exceção que encerram a união.
Espera-se que a união seja executada com o melhor esforço. O hardware pode não ser capaz de se unir em alguns casos, por exemplo, devido à falta de recursos. Os requisitos declarados aqui são principalmente especificar quando não unir e como unir.
Em um alto nível, o driver NIC e miniport devem lidar com o recebimento de um segmento TCP pela transmissão da seguinte maneira:
Verifique se há uma exceção no segmento de entrada da seguinte maneira:
Se nenhuma exceção foi encontrada, marcar se o segmento pode ser unido com o último segmento que foi recebido para a mesma conexão TCP de acordo com as regras.
Se o segmento disparou uma exceção ou se não for possível unir com o segmento recebido anteriormente, indique o segmento individualmente.
O driver NIC e o miniportor não devem indicar segmentos unidos até que o driver de protocolo habilite o RSC, conforme descrito em Consulta e Alteração do estado do RSC.
Para uma determinada conexão TCP, uma indicação de dados do adaptador de miniporto para a pilha TCP/IP do host pode consistir em um ou mais segmentos unidos, separados por um ou mais segmentos individuais que não puderam ser unidos.
O driver NIC e o miniportor não devem atrasar a indicação de segmentos TCP, independentemente de serem unidos ou não. Especificamente, a NIC e o driver de miniporta não devem atrasar a indicação de segmentos de uma DPC (chamada de procedimento adiado) para a próxima para tentar unir os segmentos.
O driver NIC e o miniportor podem usar temporizadores para determinar o fim da união. No entanto, o tratamento de cargas de trabalho sensíveis à latência deve ser tão eficaz quanto o requisito de limite de DPC.