Partilhar via


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.