Eliminazione di una porta virtuale
Un driver che esegue eccessivamente una richiesta di set di identificatori di oggetto (OID) di OID_NIC_SWITCH_DELETE_VPORT per eliminare una porta virtuale (VPort) non predefinita nel commutatore NIC di una scheda di rete. Il driver overlying può eliminare solo un VPort creato in precedenza inviando una richiesta di metodo OID di OID_NIC_SWITCH_CREATE_VPORT.
Il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore alla struttura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS.
Un driver overlying, ad esempio lo stack di virtualizzazione, può eliminare un VPort non predefinito creato in precedenza. Il driver overlying crea un VPort inviando una richiesta di metodo OID di OID_NIC_SWITCH_CREATE_VPORT.
Prima di eseguire la richiesta di set OID di OID_NIC_SWITCH_DELETE_VPORT, il driver overlying deve eseguire le operazioni seguenti:
I driver overlying devono cancellare o spostare tutti i filtri di ricezione impostati in precedenza sul VPort prima di eliminare il VPort. I filtri di ricezione vengono impostati tramite richieste OID di OID_RECEIVE_FILTER_edizione Standard T_FILTER e vengono spostati tramite richieste OID di OID_RECEIVE_FILTER_MOVE_FILTER.
Il driver overlying imposta il membro VPortId della struttura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS sull'identificatore del VPort non predefinito da eliminare.
Nota Il driver overlying non deve impostare il membro VPortId su NDIS_DEFAULT_PORT_NUMBER. Questo identificatore VPort è riservato per il VPort predefinito collegato alla funzione fisica PCI Express (PCIe) nella scheda di rete. Il VPort predefinito esiste sempre e non viene eliminato in modo esplicito tramite una richiesta di set OID di OID_NIC_SWITCH_DELETE_VPORT.
Il driver overlying chiama NdisOidRequest per emettere la richiesta di OID_NIC_SWITCH_DELETE_VPORT al driver miniport PF sottostante. Quando il driver miniport riceve la richiesta di OID_NIC_SWITCH_DELETE_VPORT, il driver deve eseguire le operazioni seguenti:
Il driver deve liberare le risorse hardware e software allocate per il VPort specificato.
Il driver deve scollegare il VPort specificato dal pf o da una funzione virtuale PCIe (VF).
Se il VPort è collegato a un VF, lo stack di virtualizzazione garantisce che il driver miniport VF eseguito nel sistema operativo guest sia stato sospeso e arrestato in precedenza. Di conseguenza, tutti i pacchetti di ricezione indicati in precedenza dal VPort dovrebbero essere stati restituiti al driver miniport VF.
Se il VPort è collegato al pf, il driver miniport PF deve arrestare qualsiasi DMA aggiuntiva alla memoria condivisa associata a VPort. Il driver miniport PF deve assicurarsi che tutti i pacchetti di ricezione precedentemente indicati dal VPort vengano restituiti al miniport. Il driver miniport PF non deve fornire indicazioni aggiuntive di ricezione a NDIS che specificano l'identificatore del VPort nella struttura di NET_BUFFER_LIST del pacchetto. Dopo che tutti i pacchetti di ricezione indicati dal VPort vengono restituiti al driver miniport PF, è necessario liberare la memoria condivisa associata al VPort chiamando NdisFreeSharedMemory.
I punti seguenti si applicano all'eliminazione di VPorts:
Il driver del protocollo overlying deve eliminare tutti i VPort non predefiniti creati prima di chiamare NdisCloseAdapterEx.
Il driver di filtro overlying deve eliminare tutte le VPort non predefinite create all'interno della funzione FilterDetach.
Prima che NDIS rilascia una richiesta set di OID_NIC_SWITCH_DELETE_SWITCH per eliminare un commutatore NIC sulla scheda di rete, garantisce che tutte le VPort non predefinite vengano eliminate da tale commutatore.
Solo le VPort non predefinite possono essere eliminate in modo esplicito tramite richieste OID di OID_NIC_SWITCH_DELETE_SWITCH. Il VPort predefinito viene eliminato in modo implicito quando il driver miniport PF elimina l'opzione di scheda di interfaccia di rete predefinita. Per altre informazioni, vedere Eliminazione di un commutatore di scheda di interfaccia di rete.