물리적 네트워크 어댑터에 OID 요청 전달

이 항목에서는 Hyper-V 확장 가능 스위치 확장이 Hyper-V 확장 가능한 스위치 제어 경로를 통해 기본 물리적 어댑터에 대한 OID(개체 식별자) 요청을 전달하는 방법에 대해 설명합니다. 이 확장은 이 항목에 설명된 방법에 따라 기본 실제 네트워크 어댑터에 대한 OID 요청을 발생시킬 수도 있습니다.

예를 들어 외부 네트워크 어댑터는 MUX(NDIS 멀티플렉서) 중간 드라이버의 가상 미니포트 에지에 바인딩할 수 있습니다. MUX 드라이버는 호스트에 있는 하나 이상의 물리적 네트워크 팀에 바인딩됩니다. 이 구성을 확장 가능한 스위치 팀이라고 합니다.

이 구성에서는 확장 가능한 스위치 확장이 팀의 모든 네트워크 어댑터에 노출됩니다. 이렇게 하면 확장에서 팀의 개별 네트워크 어댑터 구성 및 사용을 관리할 수 있습니다. 예를 들어 전달 확장은 나가는 패킷을 개별 어댑터에 전달하여 팀을 통해 LBFO(부하 분산 장애 조치( failover) 솔루션을 지원할 수 있습니다. 확장 가능한 스위치 팀을 관리하는 전달 확장을 팀 공급자라고 합니다. 팀 공급자에 대한 자세한 내용은 팀 공급자 확장을 참조 하세요.

다음 그림에서는 NDIS 6.40(Windows Server 2012 R2) 이상에 대한 확장 가능한 스위치 팀의 예를 보여 줍니다.

ndis 6.40의 oid 제어 경로 다이어그램

다음 그림에서는 NDIS 6.30(Windows Server 2012)에 대한 확장 가능한 스위치 팀의 예를 보여 줍니다.

ndis 6.30에 대한 확장 가능한 스위치 팀의 다이어그램

참고 Hyper-V 확장 가능한 스위치 인터페이스에서 NDIS 필터 드라이버를 확장 가능한 스위치 확장 이라고 하며 드라이버 스택을 확장 가능한 스위치 드라이버 스택이라고 합니다.

기본 물리적 네트워크 어댑터로 요청을 전달하려면 OID 요청을 캡슐화해야 합니다. OID 요청은 먼저 NDIS_SWITCH_NIC_OID_REQUEST 구조 내에 캡슐화됩니다. 그런 다음, OID 요청은 OID_SWITCH_NIC_REQUEST OID 집합 요청에 의해 확장 가능한 스위치 제어 경로를 통해 전달됩니다.

기본 물리적 어댑터에 대한 OID 요청은 다음을 통해 발급됩니다.

확장 가능한 스위치 인터페이스입니다.
하드웨어 오프로드 요청과 같은 OID 요청은 다음 중 하나에서 실행되는 프로토콜 또는 필터 드라이버를 과도하게 사용하여 발급됩니다.

  • Hyper-V 부모 파티션에서 실행되는 관리 운영 체제입니다.

  • Hyper-V 자식 파티션에서 실행되는 게스트 운영 체제입니다.

이러한 OID 요청이 확장 가능한 스위치에 의해 수신되면 확장 가능한 스위치 제어 경로를 통해 캡슐화되고 전달됩니다. 전달 확장이 캡슐화된 OID 요청을 받으면 기본 물리적 어댑터로 요청을 전달할 수 있습니다. 이 기능은 하드웨어 오프로드에 대한 확장 가능한 스위치 팀을 구성하는 데 특히 유용합니다.

예를 들어 MUX 드라이버는 확장 가능한 전체 스위치 팀의 공통 기능을 보급합니다. 그러나 전달 확장은 OID 요청을 실행하여 팀 내 어댑터의 개별 기능을 쿼리하거나 설정할 수 있습니다. 그런 다음, 전달 확장은 외부 네트워크 어댑터에서 NDIS 상태 표시를 시작하여 전체 팀에 적용되는 기능에 대해 지나치게 드라이버에게 알릴 수 있습니다. 이 절차에 대한 자세한 내용은 물리적 네트워크 어댑터의 원래 NDIS 상태 표시를 참조하세요.

전달 확장이 제어 경로를 통해 OID 요청을 전달하면 외부 네트워크 어댑터에서 수신됩니다. 이 시점에서 OID 요청은 캡슐화되어 지정된 실제 네트워크 어댑터로 전달됩니다.

참고 Windows Server 2012 시작하여 하드웨어 오프로드 OID 요청만 이러한 방식으로 캡슐화되고 전달됩니다. 예를 들어 VMQ(가상 머신 큐) 또는 IPsec(인터넷 프로토콜 보안)에 대한 오프로드 OID 요청은 확장 가능한 스위치 제어 경로를 통해 캡슐화되고 전달됩니다. 자세한 내용은 물리적 네트워크 어댑터에 대한 하드웨어 오프로드 OID 요청 관리를 참조하세요.

전달 확장입니다.
전달 확장은 캡슐화된 자체 OID 요청을 시작하고 기본 물리적 네트워크 어댑터로 전달할 수 있습니다. 전달 확장은 표준 NDIS OID 요청을 캡슐화할 수 있습니다. 전달 확장은 물리적 네트워크 어댑터에 대한 IHV(독립 하드웨어 공급업체)에서 정의한 프라이빗 OID 요청을 캡슐화할 수도 있습니다. 이렇게 하면 IHV에서 개발한 전달 확장이 팀의 개별 물리적 어댑터에서 독점 특성을 사용하거나 사용하지 않도록 설정할 수 있습니다.

또한 전달 확장은 캡슐화된 하드웨어 오프로드 OID 요청을 시작하여 지정된 Hyper-V 자식 파티션에 대한 리소스를 할당할 수 있습니다. 예를 들어 전달 확장은 지정된 자식 파티션에 대한 VMQ를 할당하기 위해 OID_RECEIVE_FILTER_ALLOCATE_QUEUE 캡슐화된 OID 요청을 발생시킬 수 있습니다. 이 경우 확장은 파티션과 연결된 확장 가능한 스위치 포트 및 네트워크 어댑터 연결에서 시작된 것으로 요청을 캡슐화합니다.

참고 전달 확장은 지나치게 드라이버에서 발급한 것과 동일한 OID 요청을 필터링하는 경우에만 캡슐화된 하드웨어 오프로드 OID 요청을 발생시킬 수 있습니다. 이 경우 확장은 원래 OID 요청을 전달해서는 안됩니다. 대신 NDIS가 FilterOidRequestComplete를 호출하여 원래 OID 요청을 완료할 때 확장이 NdisFOidRequestComplete를 호출하여 이 요청을 완료해야 합니다.

확장 필터링 또는 캡처
필터링 또는 캡처 확장은 자체 캡슐화된 OID 쿼리 요청을 시작하고 기본 실제 네트워크 어댑터로 전달할 수 있습니다. 이러한 확장은 물리적 네트워크 어댑터에 대한 IHV(독립 하드웨어 공급업체)에서 정의한 표준 NDIS OID 쿼리 요청 또는 프라이빗 OID 쿼리 요청을 캡슐화할 수 있습니다.

참고 전달 확장만 기본 물리적 어댑터에 캡슐화된 OID 집합 요청을 발생시킬 수 있습니다.

전달 확장은 기본 물리적 어댑터에 대한 캡슐화된 OID 요청을 전달, 리디렉션 또는 시작하는 경우 다음 단계를 따라야 합니다.

  1. 전달 확장이 OID 요청을 시작하는 경우 요청과 관련된 정보를 사용하여 확장 할당 NDIS_OID_REQUEST 구조를 초기화해야 합니다.

    확장이 OID 요청을 전달하는 경우 FilterOidRequest 함수의 OidRequest 매개 변수에서 참조하는 기존 NDIS_OID_REQUEST 구조를 변경하지 않아야 합니다. 대신, 확장은 NdisAllocateCloneOidRequest 를 호출하여 새 NDIS_OID_REQUEST 구조체에 대한 메모리를 할당하고 기존 NDIS_OID_REQUEST 구조체의 모든 정보를 복사해야 합니다.

  2. 확장은 확장 할당 NDIS_SWITCH_NIC_OID_REQUEST 구조체의 멤버를 다음 값으로 설정합니다.

    • DestinationPortId 멤버는 외부 네트워크 어댑터가 연결된 확장 가능한 스위치 포트의 식별자로 설정해야 합니다.

    • DestinationNicIndex 멤버는 기본 물리적 네트워크 어댑터의 0이 아닌 인덱스 값으로 설정해야 합니다.

      이러한 인덱스 값에 대한 자세한 내용은 네트워크 어댑터 인덱스 값을 참조하세요.

    • 전달 확장이 Hyper-V 자식 파티션에 대한 하드웨어 오프로드 OID 요청을 시작하는 경우 SourcePortId 멤버를 파티션에서 사용하는 포트의 식별자로 설정해야 합니다. 또한 SourceNicIndex 멤버는 해당 포트에 대한 네트워크 연결에 대한 네트워크 어댑터 인덱스로 설정해야 합니다.

      전달 확장이 고유한 용도로 표준 또는 프라이빗 OID 요청을 시작하는 경우 SourcePortIdSourceNicIndex 멤버를 0으로 설정해야 합니다.

      전달 확장이 하드웨어 오프로드 OID 요청을 전달하거나 리디렉션하는 경우 확장 가능한 스위치 인터페이스에서 설정한 SourcePortIdSourceNicIndex 멤버의 값을 유지해야 합니다.

    • OidRequest 멤버는 캡슐화된 OID 요청에 대해 초기화된 NDIS_OID_REQUEST 구조체에 대한 포인터로 설정해야 합니다. 전달 확장은 이 구조를 할당하고 초기화하거나 구조체의 복제된 복사본을 사용합니다.

  3. 확장은 확장 할당 NDIS_OID_REQUEST 구조체의 멤버를 다음 값으로 설정합니다.

    • Oid 멤버는 OID_SWITCH_NIC_REQUEST 설정해야 합니다.

    • InformationBuffer 멤버는 생성되거나 필터링된 OID 요청 데이터를 포함하는 버퍼에 대한 포인터를 포함해야 합니다.

    • InformationBufferLength 멤버는 생성되거나 필터링된 OID 요청 데이터를 포함하는 버퍼의 길이(바이트)를 포함해야 합니다.

    확장은 다른 멤버를 NDIS_OID_REQUEST 구조에 유효한 값으로 설정합니다.

  4. 확장은 ReferenceSwitchNic 를 호출하여 대상 물리적 네트워크 어댑터의 인덱스에 대한 참조 카운터를 증가합니다. 이렇게 하면 참조 카운터가 0이 아닌 동안 확장 가능한 스위치 인터페이스가 실제 네트워크 어댑터 연결을 삭제하지 않습니다.

    확장에서 ReferenceSwitchNic를 호출하면 SwitchPortId 매개 변수를 DestinationPortId 멤버에 대해 지정된 값으로 설정합니다. 또한 확장은 SwitchNicIndex 매개 변수를 DestinationNicIndex 멤버에 지정된 값으로 설정합니다.

    참고ReferenceSwitchNic 가 NDIS_STATUS_SUCCESS 반환하지 않으면 OID 요청을 대상 물리적 네트워크 어댑터로 전달할 수 없습니다.

  5. 전달 확장이 Hyper-V 자식 파티션에 대한 하드웨어 오프로드 OID 요청을 시작하는 경우 ReferenceSwitchNic 를 호출하여 파티션과 연결된 원본 네트워크 어댑터 연결의 인덱스에 대한 참조 카운터를 증가합니다. 이렇게 하면 참조 카운터가 0이 아닌 동안 확장 가능한 스위치 인터페이스가 실제 네트워크 어댑터 연결을 삭제하지 않습니다.

    확장이 ReferenceSwitchNic를 호출하면 SwitchPortId 매개 변수를 SourcePortId 멤버에 대해 지정된 값으로 설정합니다. 또한 확장은 SwitchNicIndex 매개 변수를 SourceNicIndex 멤버에 지정된 값으로 설정합니다.

    참고ReferenceSwitchNic 가 NDIS_STATUS_SUCCESS 반환하지 않으면 OID 요청을 대상 물리적 네트워크 어댑터로 전달할 수 없습니다.

  6. 확장은 NdisFOidRequest 를 호출하여 캡슐화된 OID 요청을 지정된 대상 확장 가능한 스위치 포트 및 네트워크 어댑터로 전달합니다.

    참고 확장이 필터링된 OID 요청을 전달하는 경우 FilterOidRequest 함수에 대한 호출 컨텍스트 내에서 NdisFOidRequest를 호출해야 합니다. 확장이 생성한 OID 요청을 전달하는 경우 실행 중, 다시 시작, 일시 중지일시 중지 상태인 동안 NdisFIndicateStatus를 호출합니다. 이러한 상태에 대한 자세한 내용은 모듈 상태 및 작업 필터링을 참조하세요.

  7. NDIS가 FilterOidRequestComplete 함수를 호출할 때 확장은 DereferenceSwitchNic 를 호출하여 대상 물리적 네트워크 어댑터의 인덱스에 대한 참조 카운터를 지웁니다.

    전달 확장이 Hyper-V 자식 파티션에 대한 하드웨어 오프로드 OID 요청을 시작한 경우 DereferenceSwitchNic 를 호출하여 어댑터에 대한 원본 네트워크 어댑터 연결의 인덱스에 대한 참조 카운터를 지웁니다.

    두 경우 모두 확장은 SwitchPortIdSwitchNicIndex 매개 변수를 ReferenceSwitchNic 호출에 사용한 것과 동일한 값으로 설정합니다.

확장에서 OID 요청을 발급하는 방법에 대한 자세한 내용은 NDIS 필터 드라이버에서 OID 요청 생성을 참조하세요.

MUX 드라이버에 대한 자세한 내용은 NDIS MUX 중간 드라이버를 참조하세요.