Implementazione di IPv6 NS Offload

Un driver del protocollo NDIS invia una richiesta di offload per una IPv6 neighbor solicitation (NS) come richiesta OID OID_PM_ADD_PROTOCOL_OFFLOAD. Per supportare queste richieste di offload NS, i miniport devono eseguire le operazioni seguenti.

Indica il numero di richieste di offload supportate dall'adattatore Miniport

Un driver miniport imposta il membro NumNSOffloadIPv6Addresses della struttura NDIS_PM_CAPABILITIES per indicare quante richieste di offload NS l'adattatore miniport è in grado di gestire.

Nota Nonostante il nome, il membro NumNSOffloadIPv6Addresses contiene il numero di richieste supportate, non il numero di indirizzi.

Nota alcuni requisiti di certificazione hardware Windows, ad esempio Device.Network.LAN.PM.PowMgmtNDIS e Device.Network.WLAN.WoWLAN.ImplementWakeOnWLAN, specificano che la scheda miniport deve supportare almeno 2 richieste di offload NS. In altre parole, per soddisfare questi requisiti, il valore di NumNSOffloadIPv6Addresses deve essere almeno 2. Per altre informazioni, vedere i requisiti di certificazione hardware Windows 8.

Ogni richiesta di offload NS può contenere 1 o 2 indirizzi di destinazione.

Sono inoltre disponibili 2 tipi di messaggi NS: unicast e multicast. I driver Miniport devono essere preparati a corrispondere a entrambi i tipi di messaggio NS per ogni indirizzo di destinazione.

Esempio

Se un driver miniport imposta il membro NDIS_PM_CAPABILITIES della struttura NumNSOffloadIPv6Addresses a 3, NDIS potrebbe inviare fino a 3 richieste OID_PM_ADD_PROTOCOL_OFFLOAD del tipo NdisPMProtocolOffloadIdIPv6NS. Ogni richiesta OID_PM_ADD_PROTOCOL_OFFLOAD può includere esattamente 1 o 2 indirizzi nel membro TargetIPv6Addresses della struttura NDIS_PM_PROTOCOL_OFFLOAD. Pertanto, il miniport deve supportare 3 x 2 = 6 indirizzi di destinazione.

Poiché il miniport deve corrispondere sia ai messaggi NS unicast che multicast per ogni indirizzo di destinazione, il miniport deve essere in grado di corrispondere a un totale di 6 x 2 = 12 modelli di messaggi NS.

Corrispondenza del messaggio NS

Il formato del messaggio NS viene specificato in RFC 4861 sezione 4.3, "Neighbor Solicitation Message Format". Il miniport deve corrispondere ai campi nella tabella seguente.

Campo Valore corrispondente Note
Ethernet.EtherType

0x86dd (IPv6)

Modificare in base alle esigenze per i tipi di supporti non Ethernet.

IPv6.Version

6

IPv6.NextHeader

58 (ICMPv6)

IPv6.HopLimit

255

IPv6.Destination

OID.TargetIPv6Addresses[x] o OID.SolicitedNodeIPv6Address

Il miniport deve corrispondere a entrambe le opzioni per questo campo: OID. TargetIPv6Addresses[x] e OID. SolicitedNodeIPv6Address.

Se questo campo è OID. TargetIPv6Addresses[x], il messaggio NS è un messaggio unicast.

Se questo campo è OID. SolicitedNodeIPv6Address, il messaggio NS è un messaggio multicast.

OID. TargetIPv6Addresses è una matrice che può contenere 1 o 2 indirizzi. Se contiene 2 indirizzi, il miniport deve corrispondere a entrambi. Se il secondo indirizzo è "0::0", deve essere ignorato e non deve essere creato un secondo modello di corrispondenza.

IPv6.ICMPv6.Type

135 (NS)

IPv6.ICMPv6.Code

0

IPv6.ICMPv6.TargetAddress

OID.TargetIPv6Addresses[x]

OID. TargetIPv6Addresses[x] è una matrice che può contenere 1 o 2 indirizzi.

IPv6.Source

OID.RemoteIPv6Address

Se OID. RemoteIPv6Address è "0::0", questo campo deve essere ignorato.

Invio del messaggio NA

Dopo aver ricevuto il messaggio NS, il firmware del dispositivo deve eseguire i passaggi di convalida indicati in RFC 4861 sezione 7.1, "Convalida dei messaggi", inclusa la convalida dei checksum. Se il messaggio NS in ingresso supera tutta la convalida, è necessario generare e inviare un messaggio NA come risposta. Il formato è specificato in RFC 4861 della sezione 4.4, "Neighbor Advertisement Message Format". Il miniport deve impostare i campi nella tabella seguente.

Campo Valore Note
Destinazione Ethernet Ethernet.Source

Copiare questo valore dal frame NS. Modificare in base alle esigenze per i tipi di supporti non Ethernet.

Ethernet.Source

Indirizzo MAC corrente del miniport

IPv6.HopLimit

255

IPv6.Source IPv6.ICMPv6.IndirizzoDiDestinazione

Copiare questo valore dal frame NS.

IPv6.Destination IPv6.Source

Copiare questo valore dal frame NS, a meno che il valore di IPv6.Source fosse "0::0". Se il valore di IPv6.Source è "0::0" impostare questo campo su "FF02::1".

IPv6.ICMPv6.Type

136 (ND)

IPv6.ICMPv6.Code

0

IPv6.ICMPv6.RouterFlag

0

IPv6.ICMPv6.SolicitedFlag

0

Se il valore di IPv6.Source nel frame NS è "0::0", impostare questo campo su 1.

IPv6.ICMPv6.OverrideFlag

1

IPv6.ICMPv6.TargetAddress IPv6.ICMPv6.TargetAddress

Copiare questo valore dal frame NS.

IPv6.ICMPv6.TLLAOption.Type

2 (indirizzo del livello di collegamento di destinazione)

IPv6.ICMPv6.TLLAOption.Length

1

IPv6.ICMPv6.TLLAOption.LinkLayerAddress OID.MacAddress