다음을 통해 공유


가상 포트에서 수신 필터 설정

네트워크 어댑터의 NIC 스위치에서 VPort(가상 포트)를 만든 후 오버리딩 드라이버는 VPort에서 수신 필터를 설정할 수 있습니다. VPort를 만든 드라이버만 해당 VPort에서 수신 필터를 설정할 수 있습니다.

이 항목에는 다음과 같은 정보가 포함되어 있습니다.

VPort에서 수신 필터 설정

NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그 사용

필터 식별자 사용

VPort에서 수신 필터 처리

VPort를 만드는 방법에 대한 자세한 내용은 가상 포트 만들기를 참조하세요.

참고 기본 VPort는 항상 존재하며 명시적으로 만들어지지 않으므로 모든 오버리싱 드라이버는 기본 VPort에서 수신 필터를 설정할 수 있습니다. 오버리싱 드라이버는 기본 VPort를 소유하지 않습니다. 따라서 네트워크 어댑터에 바인딩된 모든 프로토콜 드라이버는 기본 VPort를 사용할 수 있습니다. 기본 VPort의 식별자 값은 NDIS_DEFAULT_VPORT_ID.

VPort에서 수신 필터 설정

VPort에서 필터를 설정하고 구성하기 위해 오버리싱 드라이버는 OID_RECEIVE_FILTER_SET_FILTER OID(개체 식별자) 메서드 요청을 발급합니다. NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버는 처음에 NDIS_RECEIVE_FILTER_PARAMETERS 구조체에 대한 포인터를 포함합니다.

오버리싱 드라이버가 이 OID 메서드 요청을 발급하기 전에 NDIS_RECEIVE_FILTER_PARAMETERS 구조를 초기화해야 합니다. 드라이버는 다음과 같은 방식으로 이 구조체의 멤버를 설정해야 합니다.

  • FilterType 멤버를 NDIS_RECEIVE_FILTER_TYPE 열거형 값으로 설정해야 합니다.

    참고 NDIS 6.30부터 SR-IOV(단일 루트 I/O 가상화) 인터페이스에는 NdisReceiveFilterTypeVMQueue 필터 형식만 지원됩니다.

  • QueueId 멤버는 NDIS_DEFAULT_RECEIVE_QUEUE_ID 설정해야 합니다.

  • VPortId 멤버는 VPort와 연결된 식별자로 설정해야 합니다. 오버리싱 드라이버는 다음 방법 중 하나를 통해 VPort 식별자를 가져옵니다.

  • FilterId 멤버를 NDIS_DEFAULT_RECEIVE_FILTER_ID 설정해야 합니다.

    참고 NDIS는 처리를 위해 미니포트 드라이버에 OID 요청을 전달하기 전에 이 멤버에 고유한 필터 식별자를 할당합니다.

  • NDIS_RECEIVE_FILTER_PARAMETERS 구조체의 FieldParametersArrayOffset, FieldParametersArrayNumElementsFieldParametersArrayElementSize 멤버를 적절하게 설정하여 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체의 배열을 정의해야 합니다. 배열의 각 NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체는 네트워크 헤더의 한 필드에 대한 필터 테스트 조건을 설정합니다.

    SR-IOV 인터페이스의 경우 다음 필드 테스트 매개 변수가 정의됩니다.

    • 패킷의 MAC(대상 미디어 액세스 제어) 주소는 지정된 MAC 주소와 같습니다.

    • 패킷의 VLAN(가상 LAN) 식별자는 지정된 VLAN 식별자와 같습니다.

OID 메서드 요청에서 성공적으로 반환된 후 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는 새 필터 식별자가 있는 NDIS_RECEIVE_FILTER_PARAMETERS 구조체에 대한 포인터가 포함됩니다.

NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그 사용

NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조체의 Flags 멤버는 수신 필터에 대해 수행할 작업을 지정합니다. 다음 점은 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그에 적용됩니다.

  • NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 Flags 멤버에 설정된 경우 네트워크 어댑터는 다음 모든 테스트 조건과 일치하는 수신된 패킷만 표시해야 합니다.

    • 일치하는 MAC 주소가 있는 패킷입니다.

    • VLAN 태그가 없거나 VLAN 식별자가 0인 패킷입니다.

    NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 설정된 경우 네트워크 어댑터는 일치하는 MAC 주소와 0이 아닌 VLAN 식별자가 있는 패킷을 나타내면 안 됩니다.

    참고 가상화 스택이 MAC 주소 필터를 설정하고 OID_RECEIVE_FILTER_SET_FILTER 집합 요청에 의해 VLAN 식별자 필터가 구성되지 않은 경우 스위치는 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그도 설정합니다.

  • NDIS 6.30부터 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그가 설정되지 않고 OID_RECEIVE_FILTER_SET_FILTER 메서드 요청으로 구성된 VLAN 식별자 필터가 없는 경우 미니포트 드라이버는 다음 중 하나를 수행해야 합니다.

    • 미니포트 드라이버는 OID_RECEIVE_FILTER_SET_FILTER 메서드 요청에 대해 실패한 상태 반환해야 합니다.

    • 미니포트 드라이버는 지정된 MAC 주소 필드를 검사하고 필터링하도록 네트워크 어댑터를 구성해야 합니다. VLAN 태그가 수신된 패킷에 있는 경우 네트워크 어댑터는 패킷 데이터에서 제거해야 합니다. 미니포트 드라이버는 패킷의 NET_BUFFER_LIST 구조와 연결된 NDIS_NET_BUFFER_LIST_8021Q_INFO VLAN 태그를 배치해야 합니다.

  • 프로토콜 드라이버가 OID_RECEIVE_FILTER_SET_FILTER 메서드 요청을 사용하여 MAC 주소 필터 및 VLAN 식별자 필터를 설정하는 경우 필터 필드 중 하나에서 NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 플래그를 설정하지 않습니다. 이 경우 미니포트 드라이버는 지정된 MAC 주소와 VLAN 식별자와 일치하는 패킷을 나타내야 합니다. 즉, 미니포트 드라이버는 VLAN 식별자가 없거나 태그가 지정되지 않은 MAC 주소가 일치하는 패킷을 나타내면 안 됩니다.

필터 식별자 사용

NDIS는 NDIS_RECEIVE_FILTER_PARAMETERS 구조체의 FilterId 멤버에 필터 식별자를 할당하고 OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청을 기본 미니포트 드라이버에 전달합니다. VPort에 설정된 각 필터에는 네트워크 어댑터에 대한 고유한 필터 식별자가 있습니다. 즉, 필터 식별자는 네트워크 어댑터가 관리하는 다른 큐에서 중복되지 않습니다.

오버리싱 드라이버는 NDIS가 이후 OID 요청에서 제공하는 필터 식별자를 사용하여 필터 매개 변수를 변경하거나 필터를 해제해야 합니다.

NDIS가 VPort에서 필터를 설정하는 OID 요청을 받으면 필터 매개 변수를 확인합니다. NDIS는 필요한 리소스와 필터 식별자를 할당한 후 기본 네트워크 어댑터에 OID 요청을 제출합니다. 네트워크 어댑터가 필터에 필요한 소프트웨어 및 하드웨어 리소스를 성공적으로 할당할 수 있는 경우 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다.

미니포트 드라이버는 할당된 수신 필터에 대한 필터 식별자를 유지해야 합니다. NDIS는 이후 OID 요청이 있는 필터의 필터 식별자를 사용하여 수신 필터 매개 변수를 변경하거나 수신 필터를 지웁니다. 매개 변수를 변경하고 필터를 지우는 방법에 대한 자세한 내용은 VM 큐 매개 변수 가져오기 및 업데이트 및 VMQ필터 지우기를 참조하세요.

VPort에서 수신 필터 처리

미니포트 드라이버는 다음과 같은 방식으로 필터를 기반으로 네트워크 어댑터를 프로그래밍합니다.

  • VPort에 패킷을 할당하려면 특정 필터에 대한 모든 필드 테스트 매개 변수가 일치해야 합니다.

  • VPort에서 여러 필터를 설정할 수 있습니다.

  • 필터가 전달되는 경우 패킷을 VPort에 할당해야 합니다.

네트워크 어댑터는 모든 필드 테스트의 결과를 논리 AND 작업과 결합합니다. 즉, NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 구조의 배열에 포함된 필드 테스트가 실패하면 네트워크 패킷이 지정된 필터 조건을 충족하지 않습니다.

네트워크 어댑터가 이러한 필터 조건에 대해 수신된 패킷을 테스트하는 경우 지정된 테스트 조건이 없는 패킷의 모든 필드를 무시해야 합니다.