Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Nadat een ontvangstwachtrij is toegewezen, kunnen overliggende stuurprogramma's filters instellen voor de ontvangstwachtrij. Alleen het stuurprogramma dat een ontvangstwachtrij heeft toegewezen, kan een filter voor die wachtrij instellen.
Opmerking Omdat de standaardwachtrij voor ontvangst (NDIS_DEFAULT_RECEIVE_QUEUE_ID) altijd bestaat, kunnen bovenliggende stuurprogramma's altijd een ontvangstfilter instellen voor de standaardwachtrij. Overliggende stuurprogramma's zijn niet de eigenaar van de standaardwachtrij. Daarom kunnen alle protocolstuurprogramma's die zijn gebonden aan een netwerkadapter de standaardwachtrij gebruiken.
Een filter instellen voor een ontvangstwachtrij
Als u een filter wilt instellen voor een ontvangstwachtrij met een eerste set configuratieparameters, doet een bovenliggende driver een OID_RECEIVE_FILTER_SET_FILTER methode-objectidentificator (OID) aanvraag. De InformationBuffer element van de NDIS_OID_REQUEST-structuur bevat aanvankelijk een pointer naar een NDIS_RECEIVE_FILTER_PARAMETERS structuur. Nadat de OID-methodeaanvraag is geretourneerd, bevat de InformationBuffer lid van de NDIS_OID_REQUEST-structuur een aanwijzer naar een NDIS_RECEIVE_FILTER_PARAMETERS-structuur met een nieuwe filter-id.
Het overliggende stuurprogramma initialiseert de NDIS_RECEIVE_FILTER_PARAMETERS structuur met de volgende filterconfiguratieparameters voor de ontvangstwachtrij:
Het filtertype dat is opgegeven via een NDIS_RECEIVE_FILTER_TYPE opsommingswaarde.
Opmerking Vanaf NDIS 6.20 worden alleen NdisReceiveFilterTypeVMQueue filtertypen ondersteund voor de VMQ-interface (virtual machine queue).
De wachtrij-id.
Een of meer veldtestparameters die zijn opgemaakt als NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structuren. Voor VMQ worden de volgende veldtestparameters gedefinieerd.
Het mac-adres (Destination Media Access Control) in het pakket is gelijk aan het opgegeven MAC-adres.
De VLAN-id (virtual LAN) in het pakket is gelijk aan de opgegeven VLAN-id.
De NDIS_RECEIVE_FILTER_PARAMETERS structuur wordt gebruikt met de OID_RECEIVE_FILTER_PARAMETERS OID en de OID_RECEIVE_FILTER_SET_FILTER OID om de configuratieparameters van een filter op te geven.
De FieldParametersArrayOffset, FieldParametersArrayNumElementsen FieldParametersArrayElementSize leden van de NDIS_RECEIVE_FILTER_PARAMETERS structuur definiëren een matrix van NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structuren. Elke NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-structuur in de array stelt het filtertestcriterium in voor één veld in een netwerkkoptekst.
De Vlaggen lid van de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structuur specificeert acties die moeten worden uitgevoerd voor het ontvangstfilter. De volgende punten zijn van toepassing op de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO vlag:
Als de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO vlag is ingesteld in het Vlaggenlid van de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structuur, moet de netwerkadapter alleen ontvangen pakketten aangeven die voldoen aan alle volgende testcriteria:
Een pakket met een overeenkomend MAC-adres.
Een pakket dat geen VLAN-tag heeft of een VLAN-id van nul heeft.
Als de vlag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO is ingesteld, mag de netwerkadapter geen pakketten aangeven met een overeenkomend MAC-adres en een niet-nul-VLAN-id.
Opmerking Als de Hyper-V uitbreidbare switch het MAC-adresfilter instelt en er geen VLAN-id-filter is geconfigureerd in OID_RECEIVE_FILTER_SET_FILTER, stelt de schakeloptie ook de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO vlag in.
Als de vlag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO niet is ingesteld en er geen VLAN-id-filter is geconfigureerd door een OID-setaanvraag van OID_RECEIVE_FILTER_SET_FILTER, moet het minipoortstuurprogramma een van de volgende handelingen uitvoeren:
Als het minipoortstuurprogramma NDIS 6.20 ondersteunt, moet deze een mislukte status retourneren voor de OID-aanvraag van OID_RECEIVE_FILTER_SET_FILTER.
Als het minipoortstuurprogramma NDIS 6.30 of nieuwere versies van NDIS ondersteunt, moet de netwerkadapter worden geconfigureerd om de opgegeven MAC-adresvelden te controleren en te filteren. Als een VLAN-tag aanwezig is in het ontvangen pakket, moet de netwerkadapter deze verwijderen uit de pakketgegevens. Het minipoortstuurprogramma moet de VLAN-tag in een NDIS_NET_BUFFER_LIST_8021Q_INFO plaatsen die is gekoppeld aan de NET_BUFFER_LIST structuur van het pakket.
Als een protocolstuurprogramma een MAC-adresfilter en een VLAN-id-filter instelt met de OID_RECEIVE_FILTER_SET_FILTER OID, stelt het de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO vlag niet in, in een van de filtervelden. In dit geval moet het minipoortstuurprogramma pakketten aangeven die overeenkomen met zowel het opgegeven MAC-adres als de VLAN-id. Dat wil zeggen, dat het minipoortstuurprogramma geen pakketten mag aangeven die een overeenkomend MAC-adres hebben en een VLAN-id van nul hebben of niet-gemarkeerde pakketten zijn.
De filter-id gebruiken
NDIS wijst een filter-id toe aan het FilterId veld van de NDIS_RECEIVE_FILTER_PARAMETERS structuur en geeft de OID-methode-aanroep van OID_RECEIVE_FILTER_SET_FILTER door aan het onderliggende miniportstuurprogramma. Elk filter dat in een ontvangstwachtrij is ingesteld, heeft een unieke filter-id voor een netwerkadapter. De filter-id's worden dus niet gedupliceerd in verschillende wachtrijen die door de netwerkadapter worden beheerd.
Het overliggende stuurprogramma moet de filter-id gebruiken die NDIS in latere OID-aanvragen verstrekt; Als u bijvoorbeeld de filterparameters wilt wijzigen of een filter wilt vrij maken.
Wanneer NDIS een OID-aanvraag ontvangt om een filter in te stellen voor een ontvangstwachtrij, worden de filterparameters gecontroleerd. Nadat NDIS de benodigde resources en de filter-id heeft toegewezen, wordt de OID-aanvraag verzonden naar de onderliggende netwerkadapter. Als de netwerkadapter de benodigde software- en hardwarebronnen voor het filter kan toewijzen, wordt de OID-aanvraag met NDIS_STATUS_SUCCESSvoltooid.
Het minipoortstuurprogramma moet de filter-id's voor de toegewezen ontvangstfilters bewaren. NDIS gebruikt de filter-id van een filter met latere OID-aanvragen om de ontvangstfilterparameters te wijzigen of het ontvangstfilter te wissen. Zie Vm-wachtrijparameters verkrijgen en bijwerken en een VMQ-filter wissenvoor meer informatie over het wijzigen van parameters en het wissen van filters.
Afhandeling van het filter in een ontvangstwachtrij
Het minipoortstuurprogramma programmeert de netwerkadapter op basis van de filters op de volgende manier:
Alle veldtestparameters voor een bepaald filter moeten overeenkomen om een pakket toe te wijzen aan de wachtrij.
Er kunnen meerdere filters worden ingesteld voor een wachtrij.
Pakketten moeten aan de ontvangstwachtrij worden toegewezen als een van de filters wordt geactiveerd.
De netwerkadapter combineert de resultaten van alle veldtests met een logische EN bewerking. Als een veldtest die is opgenomen in de matrix van NDIS_RECEIVE_FILTER_FIELD_PARAMETERS structuren mislukt, voldoet het netwerkpakket niet aan het opgegeven filtercriterium.
Wanneer een netwerkadapter een ontvangen pakket test op basis van deze filtercriteria, moet het alle velden in het pakket negeren waarvoor geen testcriteria zijn opgegeven.
Pakketten ontvangen van een ontvangstwachtrij
Nadat een minipoortstuurprogramma een OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE aanvraag ontvangt en filters heeft ingesteld in de wachtrij, bevindt de wachtrij zich in de status Actief. Terwijl de wachtrij zich in deze status bevindt, kan het minipoortstuurprogramma pakketten in de wachtrij aangeven. Zie Wachtrijstatussen en -bewerkingenvoor meer informatie over wachtrijstatussen.
Als het minipoortstuurprogramma een OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID-aanvraag voor een wachtrij heeft ontvangen, maar er geen filters zijn ingesteld voor de wachtrij, mag het minipoortstuurprogramma geen ontvangstpakketten in die wachtrij aangeven. Wanneer het minipoortstuurprogramma in dit geval een OID_RECEIVE_FILTER_SET_FILTER OID-aanvraag voor de wachtrij ontvangt en mogelijk voordat de OID-aanvraag is voltooid, kan het pakketten in die wachtrij aangeven. Als het minipoortstuurprogramma pakketten in een wachtrij aangeeft terwijl het een OID_RECEIVE_FILTER_SET_FILTER OID-aanvraag verwerkt, moet het minipoortstuurprogramma de OID_RECEIVE_FILTER_SET_FILTER aanvraag met een NDIS_STATUS_SUCCESS terugkeercode voltooien.