Excluindo uma porta virtual
Um driver sobrejacente emite uma solicitação de conjunto de identificador de objeto (OID) de OID_NIC_SWITCH_DELETE_VPORT para excluir uma porta virtual não padrão (VPort) no switch NIC de um adaptador de rede. O driver sobrejacente só pode excluir uma VPort que ele tenha criado anteriormente emitindo uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT.
O membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para a estrutura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS.
Um driver sobrejacente, como a pilha de virtualização, pode excluir uma VPort não padrão que ele tenha criado anteriormente. O driver sobrejacente cria uma VPort emitindo uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT.
Antes de emitir a solicitação de conjunto OID de OID_NIC_SWITCH_DELETE_VPORT, o driver sobrejacente deve fazer o seguinte:
Os drivers sobrejacentes devem limpar ou mover todos os filtros de recebimento definidos anteriormente pelo driver na VPort antes de excluí-la. Os filtros de recebimento são definidos por meio de solicitações OID de OID_RECEIVE_FILTER_SET_FILTER e são movidos por meio de solicitações OID de OID_RECEIVE_FILTER_MOVE_FILTER.
O driver sobrejacente define o membro VPortId da estrutura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS como o identificador da VPort não padrão a ser excluída.
Observação O driver sobrejacente não deve definir o membro VPortId como NDIS_DEFAULT_PORT_NUMBER. Esse identificador de VPort é reservado para a VPort padrão conectada à função física (PF) PCI Express (PCIe) no adaptador de rede. A VPort padrão sempre existe e não é excluída explicitamente por meio de uma solicitação de conjunto OID de OID_NIC_SWITCH_DELETE_VPORT.
O driver sobrejacente chama NdisOidRequest para emitir a solicitação OID_NIC_SWITCH_DELETE_VPORT para o driver de miniporta PF subjacente. Quando o driver de miniporta recebe a solicitação OID_NIC_SWITCH_DELETE_VPORT, o driver deve fazer o seguinte:
O driver deve liberar os recursos de hardware e de software alocados para a VPort especificada.
O driver deve desconectar a VPort especificada da PF ou de uma função virtual (VF) PCIe.
Se a VPort estiver conectada a uma VF, a pilha de virtualização garantirá que o driver de miniporta VF executado no sistema operacional convidado já tenha sido pausado e interrompido. Como resultado, todos os pacotes de recebimento da VPort indicados anteriormente deveriam ter sido retornados ao driver de miniporta VF.
Se a VPort estiver conectada à PF, o driver de miniporta da PF deverá parar qualquer DMA adicional à memória compartilhada associada à VPort. O driver de miniporta PF deve se certificar de que todos os pacotes de recebimento da VPort indicados anteriormente sejam retornados para a miniporta. O driver de miniporta PF não deve fazer indicações de recebimento adicionais ao NDIS que especifiquem o identificador da VPort na estrutura NET_BUFFER_LIST do pacote. Depois que todos os pacotes de recebimento indicados do VPort forem retornados ao driver de miniporta PF, ele deverá liberar a memória compartilhada associada à VPort chamando NdisFreeSharedMemory.
Os seguintes pontos se aplicam à exclusão de VPorts:
O driver de protocolo sobrejacente deve excluir todas as VPorts não padrão que criou antes de chamar NdisCloseAdapterEx.
O driver de filtro sobrejacente deve excluir todas as VPorts não padrão que criou em sua função FilterDetach.
Antes de o NDIS emitir uma solicitação de conjunto de OID_NIC_SWITCH_DELETE_SWITCH para excluir um switch NIC no adaptador de rede, ele garante que todas as VPorts não padrão sejam excluídas desse switch.
Somente VPorts não padrão podem ser explicitamente excluídas por meio de solicitações OID de OID_NIC_SWITCH_DELETE_SWITCH. A VPort padrão é excluída implicitamente quando o driver de miniporta PF exclui o switch NIC padrão. Para obter mais informações, consulte Excluindo um switch NIC.