Excluindo uma porta virtual

Um driver sobreposto emite uma solicitação de conjunto de OID (identificador de objeto) de OID_NIC_SWITCH_DELETE_VPORT para excluir uma porta virtual não padrão (VPort) no comutador NIC de um adaptador de rede. O driver sobreposto só pode excluir um VPort que ele criou 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 subjacente, como a pilha de virtualização, pode excluir um VPort não padrão que ele criou anteriormente. O driver sobreposto cria um VPort emitindo uma solicitação de método OID de OID_NIC_SWITCH_CREATE_VPORT.

Antes de emitir a solicitação de conjunto de OID de OID_NIC_SWITCH_DELETE_VPORT, o driver sobreposto deve fazer o seguinte:

  • Os drivers overlying 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 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 sobreposto define o membro VPortId da estrutura NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS como o identificador do VPort não padrão a ser excluído.

    Nota O driver sobreposto não deve definir o membro VPortId como NDIS_DEFAULT_PORT_NUMBER. Esse identificador VPort é reservado para o VPort padrão anexado à PF (Função Física) PCI Express (PCIe) no adaptador de rede. O VPort padrão sempre existe e não é excluído explicitamente, embora uma solicitação de conjunto de OID de OID_NIC_SWITCH_DELETE_VPORT.

O driver sobressociente chama NdisOidRequest para emitir a solicitação OID_NIC_SWITCH_DELETE_VPORT para o driver de miniporto PF subjacente. Quando o driver de miniporto recebe a solicitação 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 desanexar o VPort especificado do PF ou de uma VF (Função Virtual PCIe).

    Se o VPort estiver anexado a um VF, a pilha de virtualização garantirá que o driver de miniporto VF executado no sistema operacional convidado tenha sido pausado e interrompido anteriormente. Como resultado, todos os pacotes de recebimento previamente dedicados do VPort devem ter sido retornados para o driver de miniporto VF.

    Se o VPort estiver anexado ao PF, o driver de miniporto PF deverá interromper qualquer DMA adicional à memória compartilhada associada ao VPort. O driver de miniporto PF deve garantir que todos os pacotes de recebimento previamente dedicados do VPort sejam retornados para o miniporto. O driver de miniporto PF não deve fazer nenhuma indicação de recebimento adicional para o NDIS que especifique o identificador do VPort na estrutura NET_BUFFER_LIST do pacote. Depois que todos os pacotes de recebimento indicados do VPort forem retornados para o driver de miniporto PF, ele deverá liberar a memória compartilhada associada ao VPort chamando NdisFreeSharedMemory.

Os seguintes pontos se aplicam à exclusão de VPorts:

  • O driver de protocolo sobreposto deve excluir todas as VPorts não padrão que ele criou antes de chamar NdisCloseAdapterEx.

  • O driver de filtro sobressoante deve excluir todas as VPorts não padrão que ele criou em 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 todas as VPorts não padrão sejam excluídas desse comutador.

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