Partilhar via


Excluindo uma porta virtual

Um driver sobreposto emite uma solicitação de definição 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 sobreposto só pode eliminar um VPort que criou anteriormente ao emitir uma solicitação de método OID para OID_NIC_SWITCH_CREATE_VPORT.

O InformationBuffer membro da estrutura NDIS_OID_REQUEST contém um ponteiro para a estrutura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS.

Um driver sobreposto, tal como a pilha de virtualização, pode excluir um VPort não padrão que o próprio driver criou anteriormente. O controlador sobrejacente cria um VPort emitindo uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT.

Antes de emitir o pedido de definição do OID de OID_NIC_SWITCH_DELETE_VPORT, o driver subjacente deve fazer o seguinte:

  • Os drivers superiores devem limpar ou mover todos os filtros de recebimento que o driver definiu anteriormente no VPort antes de excluir o VPort. Os filtros de recebimento são definidos através de solicitações OID de OID_RECEIVE_FILTER_SET_FILTER e são movidos através de solicitações OID de OID_RECEIVE_FILTER_MOVE_FILTER.

  • O driver sobreposto define o membro VPortId da estrutura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS para o identificador do VPort não padrão que será eliminado.

    Observação O driver sobreposto não deve definir o membro VPortId como NDIS_DEFAULT_PORT_NUMBER. O identificador VPort está reservado para o VPort predefinido que está conectado à Função Física (PF) PCI Express (PCIe) no adaptador de rede. O VPort padrão sempre existe e não é excluído explicitamente através de uma solicitação de conjunto OID de OID_NIC_SWITCH_DELETE_VPORT.

O driver superior chama NdisOidRequest para emitir a solicitação de OID_NIC_SWITCH_DELETE_VPORT para o driver de miniporta PF subjacente. Quando o driver de miniporta recebe a solicitação de OID_NIC_SWITCH_DELETE_VPORT, o driver deve fazer o seguinte:

  • O driver deve liberar os recursos de hardware e software que foram alocados para o VPort especificado.

  • O driver deve separar o VPort especificado do PF ou de uma função virtual PCIe (VF).

    Se o VPort estiver conectado a um VF, a pilha de virtualização garante que o driver de miniporta VF executado no sistema operacional convidado tenha sido pausado e interrompido anteriormente. Como resultado, todos os pacotes de recebimento indicados anteriormente do VPort deveriam ter sido retornados ao driver de miniporta VF.

    Se o VPort estiver conectado ao PF, o driver da miniporta PF deverá parar qualquer DMA adicional à memória compartilhada associada ao VPort. O driver de miniporta PF deve certificar-se de que todos os pacotes de recebimento indicados anteriormente do VPort sejam retornados para a miniporta. O driver miniport PF não deve realizar indicações adicionais de receção ao NDIS que especifiquem o identificador do 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 ao VPort chamando NdisFreeSharedMemory.

À supressão de VPorts aplicam-se os seguintes pontos:

  • O driver de protocolo sobrejacente deve excluir todos os VPorts não padrão que ele criou antes de chamar NdisCloseAdapterEx.

  • O driver de filtro sobreposto deve excluir todos os VPorts que não são padrão, que ele criou dentro da sua função FilterDetach .

  • Antes que o NDIS emita uma solicitação definida de OID_NIC_SWITCH_DELETE_SWITCH para excluir um comutador NIC no adaptador de rede, ele garante que todos os VPorts não padrão sejam excluídos desse switch.

  • Somente VPorts não predefinidos podem ser explicitamente apagados, por meio de solicitações OID de OID_NIC_SWITCH_DELETE_SWITCH. O VPort padrão é implicitamente excluído quando o driver de miniporta PF exclui o switch NIC padrão. Para obter mais informações, consulte Eliminar um comutador NIC.