Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Depois de uma porta virtual (VPort) ser criada no comutador NIC do adaptador de rede, os drivers subjacentes podem configurar filtros de receção no VPort. Somente o driver que criou o VPort pode definir um filtro de recebimento nesse VPort
Este tópico contém as seguintes informações:
Definindo um filtro de recebimento em um VPort
Usando o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
Usando o identificador de filtro
Manipulação de Filtros de Receção num VPort
Para obter mais informações sobre como criar um VPort, consulte Criando uma porta virtual.
Nota Como o VPort padrão sempre existe e nunca é criado explicitamente, qualquer driver sobreposto pode definir um filtro de recebimento no VPort padrão. Os controladores sobrepostos não possuem o VPort predefinido. Portanto, todos os drivers de protocolo que estão vinculados a um adaptador de rede podem usar o VPort padrão. O VPort padrão tem um valor identificador de NDIS_DEFAULT_VPORT_ID.
Definindo um filtro de recebimento em um VPort
Para definir e configurar um filtro num VPort, um driver superjacente emite uma solicitação de método de identificador de objeto (OID) de OID_RECEIVE_FILTER_SET_FILTER. O membro InformationBuffer da estrutura NDIS_OID_REQUEST inicialmente contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_PARAMETERS.
Antes que o driver sobreposto emita essa solicitação de método OID, ele deve inicializar uma estrutura de NDIS_RECEIVE_FILTER_PARAMETERS. O condutor deve definir os membros desta estrutura da seguinte forma:
O membro FilterType deve ser definido para um valor de enumeração NDIS_RECEIVE_FILTER_TYPE.
Nota A partir do NDIS 6.30, apenas os tipos de filtro NdisReceiveFilterTypeVMQueue são suportados para a interface de virtualização de E/S de raiz única (SR-IOV).
O membro QueueId deve ser definido como NDIS_DEFAULT_RECEIVE_QUEUE_ID.
O membro VPortId deve ser definido para o identificador associado ao VPort. O driver sobrejacente obtém o identificador VPort através de uma das seguintes maneiras:
A partir de uma solicitação de método OID anterior de OID_NIC_SWITCH_CREATE_VPORT.
A partir de uma solicitação anterior do método OID de OID_NIC_SWITCH_ENUM_VPORTS.
O membro FilterId deve ser definido como NDIS_DEFAULT_RECEIVE_FILTER_ID.
Observação o NDIS atribui um identificador de filtro exclusivo neste membro antes de encaminhar a solicitação OID para o driver de miniporta para processamento.
Os FieldParametersArrayOffset, FieldParametersArrayNumElementse FieldParametersArrayElementSize membros da estrutura NDIS_RECEIVE_FILTER_PARAMETERS devem ser definidos adequadamente para definir uma matriz de estruturas NDIS_RECEIVE_FILTER_FIELD_PARAMETERS. Cada estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS na matriz define o critério de teste de filtro para um campo num cabeçalho de rede.
Para a interface SR-IOV, os seguintes parâmetros de teste de campo são definidos:
O endereço MAC (controle de acesso à mídia) de destino no pacote é igual ao endereço MAC especificado.
O identificador de LAN virtual (VLAN) no pacote é igual ao identificador de VLAN especificado.
Após um retorno bem-sucedido da solicitação do método OID, o InformationBuffer membro da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura NDIS_RECEIVE_FILTER_PARAMETERS com um novo identificador de filtro.
Utilização do sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
O membro Flags da estrutura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica as ações a serem executadas para o filtro de receção. Os seguintes pontos aplicam-se ao sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO:
Se o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO estiver ativado no membro de Flags, o adaptador de rede deverá indicar apenas os pacotes recebidos que correspondam a todos os seguintes critérios de teste:
Um pacote com um endereço MAC correspondente.
Um pacote que não tem nenhuma marca VLAN ou tem um identificador de VLAN de zero.
Se o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO estiver definido, o adaptador de rede não deve indicar pacotes que tenham um endereço MAC correspondente e um identificador VLAN não-zero.
Observação Se a pilha de virtualização definir o filtro de endereço MAC e não houver um filtro de identificador de VLAN configurado pela solicitação de definição de OID_RECEIVE_FILTER_SET_FILTER, o switch também definirá o flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO.
A partir do NDIS 6.30, se o flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO não estiver definido e não houver nenhum filtro de identificador de VLAN configurado pela solicitação do método OID_RECEIVE_FILTER_SET_FILTER, o driver de miniporta deve executar uma das seguintes ações:
O driver de miniporta deve retornar um status de falha para a solicitação de método OID_RECEIVE_FILTER_SET_FILTER.
O driver de miniporta deve configurar o adaptador de rede para inspecionar e filtrar os campos de endereço MAC especificados. Se uma tag VLAN estiver presente no pacote recebido, o adaptador de rede deverá removê-la dos dados do pacote. O driver de miniporta deve colocar a tag VLAN numa NDIS_NET_BUFFER_LIST_8021Q_INFO associada à estrutura NET_BUFFER_LIST do pacote.
Se um driver de protocolo definir um filtro de endereço MAC e um filtro de identificador de VLAN utilizando a solicitação de método OID_RECEIVE_FILTER_SET_FILTER, ele não definirá o sinalizador NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO em nenhum dos campos de filtro. Nesse caso, o driver de miniporta deve indicar pacotes que correspondam ao endereço MAC especificado e ao identificador VLAN. Ou seja, o driver de miniporta não deve indicar pacotes com um endereço MAC correspondente que tenham um identificador de VLAN zero ou sejam pacotes não marcados.
Usando o identificador de filtro
NDIS atribui um identificador de filtro no membro FilterId da estrutura NDIS_RECEIVE_FILTER_PARAMETERS e passa a solicitação do método OID de OID_RECEIVE_FILTER_SET_FILTER para o driver de miniporta subjacente. Cada filtro definido em um VPort tem um identificador de filtro exclusivo para um adaptador de rede. Ou seja, os identificadores de filtro não são duplicados em filas diferentes gerenciadas pelo adaptador de rede.
O driver sobreposto deve usar o identificador de filtro que o NDIS fornece em solicitações OID posteriores para alterar os parâmetros do filtro ou liberar um filtro.
Quando o NDIS recebe uma solicitação OID para definir um filtro em um VPort, ele verifica os parâmetros do filtro. Depois que o NDIS aloca os recursos necessários e o identificador de filtro, ele envia a solicitação OID para o adaptador de rede subjacente. Se o adaptador de rede puder alocar com êxito os recursos de software e hardware necessários para o filtro, ele concluirá a solicitação OID com NDIS_STATUS_SUCCESS.
O driver de miniport deve manter os identificadores de filtro para os filtros de receção alocados. O NDIS usa o identificador de filtro de um filtro em solicitações OID subsequentes para alterar os parâmetros de recepção do filtro ou remover o filtro de recepção. Para obter mais informações sobre como alterar parâmetros e limpar filtros, consulte Obtendo e atualizando parâmetros de fila de VM e Limpando um filtro VMQ.
Manipulando filtros de recebimento em um VPort
O driver de miniporta programa o adaptador de rede com base nos filtros da seguinte maneira:
Todos os parâmetros de teste de campo para um filtro específico devem corresponder para atribuir um pacote ao VPort.
Vários filtros podem ser definidos em um VPort.
Os pacotes devem ser atribuídos ao VPort se algum dos filtros passar.
O adaptador de rede combina os resultados de todos os testes de campo com uma operação lógica E. Ou seja, se qualquer teste de campo incluído na matriz de estruturas NDIS_RECEIVE_FILTER_FIELD_PARAMETERS falhar, o pacote de rede não atenderá ao critério de filtro especificado.
Quando um adaptador de rede testa um pacote recebido em relação a esses critérios de filtro, ele deve ignorar todos os campos no pacote que não têm critérios de teste especificados.