Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 |