Supporto di NVGRE in UDP Segmentation Offload (USO)
NDIS 6.85 introduce La virtualizzazione di rete usando Generic Routing Encapsulation (NVGRE) con offload di segmentazione UDP (USO). Miniport, protocollo e driver di filtro di NDIS, nonché schede di interfaccia di rete che eseguono USO, devono supportare l'incapsulamento NVGRE e VXLAN.
Nota: questo articolo presuppone che si abbia familiarità con le informazioni in UDP Segmentation Offload (USO).
Se NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket è TRUE e le informazioni UDPSegmentationOffloadInfo out-of-band (OOB) sono valide, NVGRE e VXLAN sono necessarie. La scheda di interfaccia di rete deve eseguire l'offload USO nel pacchetto NVGRE/VXLAN-encapsulated con la condizione seguente:
- NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO.Trasmettere. Il membro UdpHeaderOffset non ha il valore di offset corretto e non deve essere usato dal driver NIC o miniport.
Per supportare NVGRE in USO, i driver di protocollo e filtro devono:
- Modificare i valori InnerFrameOffset, TransportIpHeaderRelativeOffset e TcpHeaderRelativeOffset nella struttura NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO per tenere conto dell'intestazione di incapsulazione. TcpHeaderRelativeOffset fa riferimento all'intestazione UDP.
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.
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 del protocollo garantisce che tutte le intestazioni di incapsulamento prependato (ETH, IP, GRE/VXLAN) saranno fisicamente contigue e saranno presenti nella prima MDL del pacchetto.
I driver di protocollo e filtro non garantiscono che la lunghezza totale del payload UDP sia un multiplo esatto del valore MSS ridotto quando UdpSegmentation.SubMssFinalSegmentSupported è impostato nelle funzionalità di NDIS_OFFLOAD . Per questo motivo, i driver miniport e le schede di interfaccia di rete con SubMssFinalSegmentSupported devono aggiornare l'intestazione IP del tunnel (esterno). Le schede di interfaccia di rete devono generare il maggior numero possibile di segmenti di dimensioni complete in base al valore MSS ridotto nella NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Trasmettere Informazioni OOB. È possibile generare un solo segmento sub-MSS per l'invio LSOv2.
I driver miniport devono:
- Calcolare il checksum per l'intestazione IP del tunnel (esterno).
- Incrementare il valore DELL'IDENTIFICAZIONE IP (ID IP) dell'intestazione IP del tunnel (esterno) per ogni pacchetto. Il primo pacchetto deve usare l'ID IP nell'intestazione IP del tunnel originale (esterno).
- Incrementare l'ID IP dell'intestazione IP di trasporto (interno) per ogni pacchetto. Il primo pacchetto deve usare l'ID IP nell'intestazione IP del trasporto originale (interno).
- Calcolare il checksum per l'intestazione UDP e l'intestazione IP di trasporto (interno).
- Assicurarsi che le intestazioni complete, incluse le intestazioni di incapsulamento (esterno) vengano aggiunte a ogni pacchetto generato.