Supporto di NVGRE in Checksum Offload
NDIS 6.30 (Windows Server 2012) introduce La virtualizzazione di rete usando l'incapsulamento generico (NVGRE). NDIS miniport, protocollo e driver di filtro e schede di interfaccia di rete che offload attività checksum devono eseguire in modo da supportare NVGRE.
Nota Questa pagina presuppone che si abbia familiarità con le informazioni in Offloading Checksum Tasks.
Se NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket è TRUE e le informazioni tcpIpChecksumNetBufferListInfo fuori banda (OOB) sono valide, questo indica che è necessario il supporto NVGRE e la scheda di interfaccia di rete deve calcolare il checksum per l'intestazione IP del tunnel (esterno), l'intestazione IP del trasporto (interno) e l'intestazione TCP o UDP.
I flag IsIPv4 e IsIPv6 nella struttura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO indicano la versione dell'intestazione IP del tunnel (esterno). La scheda di interfaccia di rete deve analizzare l'intestazione IP del trasporto (interno) per determinare la versione IP dell'intestazione. Poiché i pacchetti in modalità mista sono consentiti (vedere NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), la scheda di interfaccia di rete non deve presupporre che le intestazioni IP interne ed esterne avranno la stessa versione dell'intestazione IP.
Le schede di interfaccia di rete e i driver miniport possono usare i valori InnerFrameOffset, TransportIpHeaderRelativeOffset e TcpHeaderRelativeOffset forniti nella struttura NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . Il driver NIC o miniport può eseguire eventuali controlli di intestazione necessari sull'intestazione IP del tunnel (esterno) o sulle intestazioni successive per convalidare questi offset.
Si noti che quando NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket è TRUE, i campi di offset dell'intestazione esistenti, NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset e NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Trasmettere. TcpHeaderOffset, non avrà valori corretti e non deve essere usato dalla scheda di interfaccia di rete o dal driver.
I driver miniport devono gestire il caso in cui NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset può trovarsi in un elenco di raccolta a dispersione diverso rispetto all'inizio del pacchetto. Il driver di protocollo garantisce che tutte le intestazioni di incapsulamento prependato (ETH, IP, GRE) saranno fisicamente contigue e saranno nel primo MDL del pacchetto.
Convalida checksum
La convalida checksum per NVGRE è in gran parte uguale a quella in caso contrario.
Se un miniport riceve una richiesta OID OID_TCP_OFFLOAD_PARAMETERS e lo esegue per NDIS_ENCAPSULATION_TYPE_GRE_MAC (vedere NDIS_OFFLOAD_PARAMETERS), la scheda di interfaccia di rete deve eseguire la convalida checksum nell'intestazione IP del tunnel (esterno), l'intestazione IP di trasporto (interno) e l'intestazione TCP o UDP.
Per i pacchetti incapsulati con un'intestazione di tunnel IPv4 (esterna) e un'intestazione di trasporto IPv4 (interno), un driver miniport deve impostare il flag IpChecksumSucceeded nella struttura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO solo se entrambe le convalida del checksum dell'intestazione IP hanno avuto esito positivo. Per i pacchetti incapsulati con intestazione IPv4 (esterna) e un'intestazione IPv4 di trasporto (interno), il driver miniport deve impostare il flag IpChecksumFailed se una delle convalida dell'intestazione IP non è riuscita.