Hyper-V 확장 가능한 스위치 Run-Time 데이터 관리

이 항목에서는 Hyper-V 확장 가능한 스위치 확장에 대한 저장 및 복원 작업에 대해 설명합니다. 이러한 작업을 통해 확장은 개별 확장 가능한 스위치 NIC(네트워크 어댑터)에 대한 런타임 데이터를 저장하고 복원할 수 있습니다. 이러한 작업은 확장 가능한 스위치 포트에 대한 네트워크 어댑터 연결이 있는 Hyper-V 자식 파티션이 중지되거나 시작될 때 수행됩니다.

Hyper-V 확장 가능한 스위치 Run-Time 데이터 저장

이 섹션에서는 Hyper-V 확장 확장이 개별 NIC(네트워크 어댑터)에 대한 런타임 데이터를 저장할 수 있는 작업에 대해 설명합니다. 이 작업은 확장 가능한 스위치 포트에 대한 네트워크 어댑터 연결이 있는 Hyper-V 자식 파티션이 중지되거나 해당 상태가 저장될 때 수행됩니다.

OID_SWITCH_NIC_SAVE 요청 처리

확장 가능한 스위치 포트에 대한 네트워크 어댑터 연결이 있는 Hyper-V 자식 파티션이 중지되거나 상태가 저장되면 Hyper-V 확장 가능한 스위치 인터페이스에 알림이 표시됩니다. 이로 인해 확장 가능한 스위치의 프로토콜 에지가 확장 가능한 스위치 드라이버 스택 아래로 OID_SWITCH_NIC_SAVE OID(개체 식별자) 메서드 요청을 실행합니다. 확장 가능한 스위치 확장이 이 OID 요청을 받으면 자식 파티션에 연결된 지정된 네트워크 어댑터 연결에 대한 런타임 데이터를 저장할 수 있습니다.

OID_SWITCH_NIC_SAVE 요청에 대한 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버는 NDIS_SWITCH_NIC_SAVE_STATE 구조 체에 대한 포인터를 포함합니다. 이 구조체는 확장 가능한 스위치의 프로토콜 에지에 의해 할당되고 다음과 같은 방식으로 초기화됩니다.

  • 헤더 멤버는 NDIS_SWITCH_NIC_SAVE_STATE 구조체의 현재 형식인 revision을 포함하도록 초기화됩니다. 크기는 전체 버퍼 크기로 설정됩니다.

  • PortId 멤버에는 저장 작업이 수행되는 확장 가능한 스위치 포트의 고유 식별자가 포함됩니다.

OID_SWITCH_NIC_SAVE 메서드 요청을 받으면 확장은 다음을 수행합니다.

  1. 확장은 NDIS_SWITCH_NIC_SAVE_STATE 구조체의 PortId 멤버를 읽습니다.

  2. 확장에 지정된 NIC에 대해 저장할 런타임 데이터가 있는 경우 구조체의 시작부터 SaveDataOffset 바이트로 시작하는 NDIS_SWITCH_NIC_SAVE_STATE 구조 내에 해당 데이터를 저장합니다. 확장은 NDIS_STATUS_SUCCESS 사용하여 OID 메서드 요청을 완료합니다.

  3. NDIS_SWITCH_NIC_SAVE_STATE 구조체가 런타임 상태를 유지하기에 충분한 버퍼를 제공하지 않는 경우 확장은 메서드 구조의 BytesNeeded 필드를 NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 및 저장 데이터를 저장하는 데 필요한 버퍼 양을 설정하고 NDIS_STATUS_BUFFER_TOO_SHORT 사용하여 OID를 완료합니다. 필요한 크기로 OID가 다시 발급됩니다.

  4. 확장에 지정된 NIC에 대해 저장할 런타임 데이터가 없는 경우 NdisFOidRequest를 호출해야 합니다. 이렇게 하면 확장 가능한 스위치 드라이버 스택의 기본 드라이버에 OID 메서드 요청이 전달됩니다. 이 절차에 대한 자세한 내용은 NDIS 필터 드라이버에서 OID 요청 필터링을 참조하세요.

확장에 저장할 런타임 포트 데이터가 있는 경우 런타임 포트 데이터를 NDIS_SWITCH_NIC_SAVE_STATE 구조 내에 저장할 때 다음 지침을 따라야 합니다.

  1. 확장은 ExtensionId 멤버를 드라이버를 고유하게 식별하는 GUID 값으로 설정합니다.

  2. 확장은 ExtensionFriendlyName 멤버를 드라이버 이름으로 설정합니다.

    참고 NDIS_SWITCH_EXTENSION_FRIENDLYNAME 데이터 형식은 IF_COUNTED_STRING 구조체에 의해 형식으로 정의됩니다. 이 구조체에 의해 정의된 문자열은 null로 종료될 필요가 없습니다. 그러나 문자열의 길이는 이 구조체의 Length 멤버에서 설정해야 합니다. 문자열이 NULL로 끝나는 경우 Length 멤버는 종료되는 NULL 문자를 포함하지 않아야 합니다.

  3. 기능 클래스가 저장된 런타임 데이터와 연결된 경우 확장은 클래스를 고유하게 식별하는 GUID를 사용하여 FeatureClassId 를 설정합니다.

    참고 기능 클래스가 저장된 런타임 데이터와 연결되지 않은 경우 확장은 FeatureClassId 를 0으로 설정합니다.

  4. 확장은 런타임 데이터를 SaveData 멤버에 복사하고 SaveDataSize 멤버를 런타임 데이터의 크기(바이트)로 설정합니다.

참고 확장은 NDIS_SWITCH_NIC_SAVE_STATE 구조체의 Header 또는 PortId 멤버를 변경하지 않아야 합니다.

OID_SWITCH_NIC_SAVE OID 메서드 요청은 궁극적으로 확장 가능한 스위치의 기본 미니포트 에지에 의해 처리됩니다. 이 OID 메서드 요청이 확장 가능한 스위치 드라이버 스택을 통해 미니포트 드라이버에 전달되면 미니포트 드라이버는 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다. 확장 가능한 스위치 드라이버 스택의 모든 확장이 런타임 포트 데이터에 대해 쿼리되었음을 확장 가능한 스위치의 프로토콜 에지에 알릴 수 있습니다. 그런 다음 확장 가능한 스위치의 프로토콜 에지가 OID_SWITCH_NIC_SAVE_COMPLETE OID 집합 요청을 실행하여 저장 작업을 완료합니다.

OID_SWITCH_NIC_SAVE_COMPLETE 요청 처리

확장 가능한 스위치 포트에 대한 네트워크 어댑터 연결이 있는 Hyper-V 자식 파티션이 일시 중지되거나 해당 상태가 저장되면 Hyper-V 확장 가능한 스위치 인터페이스에 알림이 표시됩니다. 이로 인해 확장 가능한 스위치의 프로토콜 에지가 확장 가능한 스위치 드라이버 스택 아래로 OID_SWITCH_NIC_SAVE OID(개체 식별자) 메서드 요청을 실행합니다.

모든 Hyper-V 확장 가능 스위치 확장에서 런타임 데이터를 저장한 경우 확장 가능 스위치의 프로토콜 에지는 저장 작업이 완료되었음을 기본 확장에 알릴 수 있습니다. 프로토콜 에지는 확장 가능한 스위치 드라이버 스택 아래로 OID_SWITCH_NIC_SAVE_COMPLETE OID 집합 요청을 실행하여 이 작업을 수행합니다.

참고 확장 가능한 스위치 네트워크 어댑터 연결에 대한 런타임 저장 작업이 시작되면 OID_SWITCH_NIC_SAVE_COMPLETE 요청이 실행될 때까지 동일한 네트워크 어댑터 연결에 대한 다른 저장 작업이 수행되지 않습니다. 그러나 이 시간 동안 다른 네트워크 어댑터 연결에 대한 저장 작업이 발생할 수 있습니다.

OID_SWITCH_NIC_SAVE_COMPLETE 요청에 대한 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버는 NDIS_SWITCH_NIC_SAVE_STATE 구조 체에 대한 포인터를 포함합니다. 이 구조체는 확장 가능한 스위치의 프로토콜 에지에 의해 할당됩니다.

OID_SWITCH_NIC_SAVE_COMPLETE OID 집합 요청을 받으면 확장은 다음 지침을 따라야 합니다.

  • 확장은 OID 요청과 연결된 NDIS_SWITCH_NIC_SAVE_STATE 구조를 수정해서는 안됩니다.

  • 확장은 확장 가능한 스위치 확장 스택을 통해 이 OID 요청을 전달하려면 NdisFOidRequest 를 호출해야 합니다. 확장이 OID 요청에 실패하면 안됩니다.

    참고 확장은 이 OID 요청의 완료 상태 모니터링해야 합니다. 확장은 저장 작업이 성공적으로 완료되었는지 여부를 감지하기 위해 이 작업을 수행합니다.

OID_SWITCH_NIC_SAVE_COMPLETE OID 메서드 요청은 궁극적으로 확장 가능한 스위치의 기본 미니포트 에지에 의해 처리됩니다. 미니포트 에지에서 이 OID 메서드 요청을 받으면 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다. 확장 가능한 스위치 드라이버 스택의 모든 확장이 저장 작업을 완료했음을 확장 가능한 스위치의 프로토콜 에지에 알렸습니다.

Hyper-V 확장 가능한 스위치 Run-Time 데이터 복원

확장 가능한 스위치 포트에 대한 네트워크 어댑터 연결이 있는 Hyper-V 자식 파티션이 일시 중지에서 다시 시작되면 Hyper-V 확장 가능 스위치 인터페이스에 알림이 표시됩니다. 이로 인해 확장 가능한 스위치의 프로토콜 에지가 확장 가능한 스위치 드라이버 스택 아래로 OID_SWITCH_NIC_RESTORE OID(개체 식별자) 집합 요청을 실행합니다. 확장이 이 OID 요청을 받으면 자식 파티션에서 사용되는 확장 가능한 스위치 포트에 대한 런타임 데이터를 복원할 수 있습니다.

OID_SWITCH_NIC_RESTORE 요청에 대한 NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버는 NDIS_SWITCH_NIC_SAVE_STATE 구조 체에 대한 포인터를 포함합니다. 이 구조체는 확장 가능한 스위치의 프로토콜 에지에 의해 할당됩니다.

OID_SWITCH_NIC_RESTORE OID 집합 요청을 받으면 확장 가능한 스위치 확장이 런타임 데이터를 소유하는지 여부를 먼저 결정해야 합니다. 확장은 NDIS_SWITCH_NIC_SAVE_STATE 구조체의 ExtensionId 멤버 값을 확장에서 자신을 식별하는 데 사용하는 GUID 값과 비교하여 이 작업을 수행합니다.

확장이 확장 가능한 스위치 NIC에 대한 런타임 데이터를 소유하는 경우 다음과 같은 방식으로 이 데이터를 복원합니다.

  1. 확장은 SaveData 멤버의 런타임 데이터를 드라이버 할당 스토리지에 복사합니다.

    참고NDIS_SWITCH_NIC_SAVE_STATE 구조체의 PortId 멤버 값은 런타임 데이터가 저장되었을 때의 PortId 값과 다를 수 있습니다. 이 문제는 실시간 마이그레이션 중에 런타임 데이터를 한 호스트에서 다른 호스트로 저장한 경우에 발생할 수 있습니다. 그러나 확장 가능한 스위치 NIC의 구성은 실시간 마이그레이션 중에 유지됩니다. 이렇게 하면 확장에서 새 PortId 값을 사용하여 런타임 데이터를 확장 가능한 스위치 NIC로 복원할 수 있습니다.

  2. 확장은 NDIS_STATUS_SUCCESS 사용하여 OID 집합 요청을 완료합니다.

확장이 저장할 지정된 런타임 데이터를 소유하지 않는 경우 확장은 NdisFOidRequest를 호출합니다. 이렇게 하면 확장 가능한 스위치 드라이버 스택의 기본 드라이버에 OID 집합 요청이 전달됩니다. 이 경우 확장은 OID 요청과 연결된 NDIS_SWITCH_NIC_SAVE_STATE 구조를 수정해서는 안됩니다. OID 요청을 전달하는 방법에 대한 자세한 내용은 NDIS 필터 드라이버에서 OID 요청 필터링을 참조하세요.

OID_SWITCH_NIC_RESTORE OID 집합 요청이 NDIS_STATUS_SUCCESS 완료된 경우 확장 가능한 스위치의 프로토콜 에지가 다른 OID 집합 요청을 실행합니다. 이 새 OID 집합 요청을 받으면 확장은 다음 중 하나를 수행할 수 있습니다.

  • 새 OID 요청에서 런타임 데이터를 소유하는 경우 확장은 NDIS_SWITCH_NIC_SAVE_STATE 구조 내에서 추가 런타임 데이터를 복원합니다. 확장은 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다.

  • 새 OID 요청에서 런타임 데이터를 소유하지 않는 경우 확장은 NdisFOidRequest 를 호출하여 이 OID 집합 요청을 기본 드라이버로 전달합니다.

OID_SWITCH_NIC_RESTORE_COMPLETE
확장 가능한 스위치 인터페이스는 확장 가능한 switchnetwork 어댑터에 대한 런타임 데이터의 복원 작업이 완료될 때 이 OID를 실행하도록 확장 가능한 스위치의 프로토콜 에지를 신호로 보냅니다.

이 OID 요청은 지정된 확장 가능한 스위치 NIC에 대해서만 복원 작업이 완료되었음을 확장에 알렸습니다.

이 OID 요청에 대한 자세한 내용은 OID_SWITCH_NIC_RESTORE_COMPLETE 참조하세요.

참고 확장 가능한 스위치의 미니포트 에지에서 OID_SWITCH_NIC_RESTORE 집합 요청을 받으면 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다. 확장 가능 스위치의 프로토콜 에지에 런타임 데이터를 소유하는 확장이 없음을 알릴 수 있습니다. 이 경우 확장 가능한 스위치 인터페이스는 원래 런타임 포트 데이터를 저장한 확장에 대한 ExtensionIdPortId 멤버 값을 문서화하는 이벤트를 기록합니다.