Impostazione di un filtro di ricezione su una porta virtuale

Dopo aver creato una porta virtuale (VPort) nel commutatore della scheda di rete della scheda di rete, i driver eccessivamente in grado di impostare i filtri di ricezione nel VPort. Solo il driver che ha creato il VPort può impostare un filtro di ricezione su tale VPort

In questo argomento sono contenute le informazioni indicate di seguito.

Impostazione di un filtro di ricezione su un VPort

Uso del flag di NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO

Uso dell'identificatore di filtro

Gestione dei filtri di ricezione in un VPort

Per altre informazioni su come creare un VPort, vedere Creazione di una porta virtuale.

Nota Poiché il VPort predefinito esiste sempre e non viene mai creato in modo esplicito, qualsiasi driver overlying può impostare un filtro di ricezione sul VPort predefinito. I driver eccessivamente non sono proprietari del VPort predefinito. Pertanto, tutti i driver di protocollo associati a una scheda di rete possono usare il VPort predefinito. Il valore predefinito di VPort è NDIS_DEFAULT_VPORT_ID.

Impostazione di un filtro di ricezione su un VPort

Per impostare e configurare un filtro su un VPort, un driver che esegue eccessivamente una richiesta di metodo OID (Object Identifier) di OID_RECEIVE_FILTER_SET_FILTER. Il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene inizialmente un puntatore a una struttura NDIS_RECEIVE_FILTER_PARAMETERS .

Prima che il driver overlying eseva questa richiesta di metodo OID, deve inizializzare una struttura NDIS_RECEIVE_FILTER_PARAMETERS . Il driver deve impostare i membri di questa struttura nel modo seguente:

  • Il membro FilterType deve essere impostato su un valore di enumerazione NDIS_RECEIVE_FILTER_TYPE .

    Nota A partire da NDIS 6.30, solo i tipi di filtro NdisReceiveFilterTypeVMQueue sono supportati per l'interfaccia SR-IOV (Single Root I/O Virtualization).

  • Il membro QueueId deve essere impostato su NDIS_DEFAULT_RECEIVE_QUEUE_ID.

  • Il membro VPortId deve essere impostato sull'identificatore associato al VPort. Il driver overlying ottiene l'identificatore VPort tramite uno dei modi seguenti:

  • Il membro FilterId deve essere impostato su NDIS_DEFAULT_RECEIVE_FILTER_ID.

    Nota NDIS assegna un identificatore di filtro univoco in questo membro prima di inoltrare la richiesta OID al driver miniport per l'elaborazione.

  • I membri FieldParametersArrayOffset, FieldParametersArrayNumElements e FieldParametersArrayElementSize della struttura NDIS_RECEIVE_FILTER_PARAMETERS devono essere impostati in modo appropriato per definire una matrice di strutture NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . Ogni struttura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS nella matrice imposta il criterio di test del filtro per un campo in un'intestazione di rete.

    Per l'interfaccia SR-IOV, vengono definiti i parametri di test dei campi seguenti:

    • L'indirizzo MAC (Media Access Control) di destinazione nel pacchetto è uguale all'indirizzo MAC specificato.

    • L'identificatore VLAN (Virtual LAN) nel pacchetto è uguale all'identificatore VLAN specificato.

Dopo aver restituito correttamente la richiesta del metodo OID, il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore a una struttura NDIS_RECEIVE_FILTER_PARAMETERS con un nuovo identificatore di filtro.

Uso del flag di NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO

Il membro Flags della struttura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS specificare le azioni da eseguire per il filtro di ricezione. I punti seguenti si applicano al flag di NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO :

  • Se il flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO è impostato nel membro Flags , la scheda di rete deve indicare solo i pacchetti ricevuti che corrispondono a tutti i criteri di test seguenti:

    • Pacchetto con un indirizzo MAC corrispondente.

    • Un pacchetto che non ha alcun tag VLAN o ha un identificatore VLAN pari a zero.

    Se il flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO è impostato, la scheda di rete non deve indicare pacchetti con un indirizzo MAC corrispondente e un identificatore VLAN diverso da zero.

    Nota Se lo stack di virtualizzazione imposta il filtro di indirizzi MAC e non è configurato alcun filtro identificatore VLAN dalla richiesta impostata OID_RECEIVE_FILTER_SET_FILTER , l'opzione imposta anche il flag di NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO .

  • A partire da NDIS 6.30, se il flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO non è impostato e non esiste alcun filtro identificatore VLAN configurato dalla richiesta del metodo OID_RECEIVE_FILTER_SET_FILTER , il driver miniport deve eseguire una delle operazioni seguenti:

    • Il driver miniport deve restituire uno stato non riuscito per la richiesta del metodo OID_RECEIVE_FILTER_SET_FILTER .

    • Il driver miniport deve configurare la scheda di rete per controllare e filtrare i campi di indirizzo MAC specificati. Se nel pacchetto ricevuto è presente un tag VLAN, la scheda di rete deve rimuoverla dai dati del pacchetto. Il driver miniport deve inserire il tag VLAN in un NDIS_NET_BUFFER_LIST_8021Q_INFO associato alla struttura NET_BUFFER_LIST del pacchetto.

  • Se un driver di protocollo imposta un filtro di indirizzi MAC e un filtro identificatore VLAN con la richiesta del metodo OID_RECEIVE_FILTER_SET_FILTER , non imposta il flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO in uno dei campi del filtro. In questo caso, il driver miniport deve indicare pacchetti che corrispondono sia all'indirizzo MAC specificato che all'identificatore VLAN. Ovvero, il driver miniport non deve indicare pacchetti con un indirizzo MAC corrispondente con un identificatore VLAN zero o pacchetti senza tag.

Uso dell'identificatore di filtro

NDIS assegna un identificatore di filtro nel membro FilterId della struttura NDIS_RECEIVE_FILTER_PARAMETERS e passa la richiesta del metodo OID di OID_RECEIVE_FILTER_SET_FILTER al driver miniport sottostante. Ogni filtro impostato in un VPort ha un identificatore di filtro univoco per una scheda di rete. Ovvero, gli identificatori di filtro non vengono duplicati in code diverse gestite dalla scheda di rete.

Il driver overlying deve usare l'identificatore di filtro fornito da NDIS nelle richieste OID successive per modificare i parametri del filtro o per liberare un filtro.

Quando NDIS riceve una richiesta OID per impostare un filtro su un VPort, verifica i parametri del filtro. Dopo che NDIS alloca le risorse necessarie e l'identificatore di filtro, invia la richiesta OID alla scheda di rete sottostante. Se la scheda di rete può allocare correttamente le risorse software e hardware necessarie per il filtro, completa la richiesta OID con NDIS_STATUS_SUCCESS.

Il driver miniport deve mantenere gli identificatori di filtro per i filtri di ricezione allocati. NDIS usa l'identificatore di filtro di un filtro con richieste OID successive per modificare i parametri del filtro di ricezione o cancellare il filtro di ricezione. Per altre informazioni su come modificare i parametri e cancellare i filtri, vedere Recupero e aggiornamento dei parametri della coda di macchine virtuali e cancellazione di un filtro VMQ.

Gestione dei filtri di ricezione in un VPort

Il driver miniport programma la scheda di rete in base ai filtri nel modo seguente:

  • Tutti i parametri di test dei campi per un determinato filtro devono corrispondere per assegnare un pacchetto al VPort.

  • È possibile impostare più filtri su un VPort.

  • I pacchetti devono essere assegnati al VPort se uno dei filtri passa.

La scheda di rete combina i risultati di tutti i test di campo con un'operazione AND logica. Ovvero, se un test di campo incluso nella matrice di strutture di NDIS_RECEIVE_FILTER_FIELD_PARAMETERS ha esito negativo, il pacchetto di rete non soddisfa il criterio di filtro specificato.

Quando una scheda di rete testa un pacchetto ricevuto in base a questi criteri di filtro, deve ignorare tutti i campi del pacchetto che non hanno criteri di test specificati.