가상 포트 만들기
VPort(가상 포트)는 SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터의 NIC 스위치에 있는 내부 포트를 나타내는 데이터 개체입니다. 각 NIC 스위치에는 네트워크 연결을 위한 다음 포트가 있습니다.
외부 물리적 네트워크에 연결하기 위한 하나의 외부 물리적 포트입니다.
PCI Express(PCIe) PF(물리적 함수) 또는 VF(가상 함수)에 연결된 하나 이상의 내부 VPort입니다.
PF는 Hyper-V 부모 파티션에 연결되며 해당 파티션에서 실행되는 관리 운영 체제에서 가상 네트워크 어댑터로 노출됩니다.
VF는 Hyper-V 자식 파티션에 연결되며 해당 파티션에서 실행되는 게스트 운영 체제에서 가상 네트워크 어댑터로 노출됩니다.
VPort에는 두 가지 유형이 있습니다.
기본 VPort
기본 VPort는 관리 운영 체제에서 실행되는 네트워킹 구성 요소에 대한 네트워크 연결을 제공합니다. 기본 VPort에는 NDIS_DEFAULT_VPORT_ID 식별자가 있습니다.
PF 미니포트 드라이버가 기본 NIC 스위치를 만들고 구성하면 드라이버는 암시적으로 기본 VPort를 만들고 PF에 연결합니다. 기본 VPort는 VF에 연결할 수 없습니다.
기본 VPort는 항상 활성화된 상태이며 명시적으로 삭제할 수 없습니다. PF 미니포트 드라이버는 기본 NIC 스위치를 삭제할 때만 기본 VPort를 암시적으로 삭제합니다.
스위치에서 NIC 스위치 및 기본 VPort를 만드는 방법에 대한 자세한 내용은 NIC 스위치 만들기를 참조하세요.
기본이 아닌 VPort
기본이 아닌 VPort는 NIC 스위치를 만들 때 암시적으로 만들어지지 않습니다. 가상화 스택과 같은 지나치게 많은 드라이버는 OID_NIC_SWITCH_CREATE_VPORT OID 메서드 요청을 실행하여 이러한 포트를 명시적으로 만듭니다. 기본이 아닌 VPort는 PF 또는 VF에 연결될 수 있으며 NIC 스위치를 만든 후에만 만들 수 있습니다.
VF에 연결된 기본이 아닌 VPort는 게스트 운영 체제에서 실행되는 네트워킹 구성 요소에 대한 네트워크 연결을 제공합니다. VF가 만들어지고 VF에 연결되면 기본이 아닌 VPort가 활성화된 상태입니다.
PF에 연결된 기본이 아닌 VPort는 관리 운영 체제에서 실행되는 네트워킹 구성 요소에 추가 네트워크 오프로드 기능을 제공합니다. 예를 들어 PF의 기본이 아닌 VPort를 사용하여 VMQ(가상 머신 큐) 인터페이스와 유사한 오프로드 기능을 제공할 수 있습니다.
참고 기본이 아닌 VPort는 NIC 스위치를 만든 후에만 만들 수 있습니다.
지나치게 많은 드라이버는 지정된 NIC 스위치에서 기본이 아닌 VPort를 만들기 위해 OID_NIC_SWITCH_CREATE_VPORT OID(개체 식별자) 메서드 요청을 실행합니다. 또한 이 OID 요청은 생성된 VPort를 네트워크 어댑터의 PF 또는 이전에 할당된 VF에 연결합니다.
NDIS_OID_REQUEST 구조체의 InformationBuffer 멤버에는NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조체에 대한 포인터가 포함되어 있습니다. OID_NIC_SWITCH_CREATE_VPORT 요청에서 성공적으로 반환된 후 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조의 VPortId 멤버에는 NIC 스위치의 VPort에서 고유한 VPort 식별자가 있습니다.
오버리싱 드라이버는 만들 기본이 아닌 VPort에 대한 구성 정보를 사용하여 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조를 초기화합니다. 구성 정보에는 기본이 아닌 VPort가 연결된 PCIe 함수와 기본이 아닌 VPort에 대한 큐 쌍 수가 포함됩니다.
NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조를 초기화할 때 오버리싱 드라이버는 다음을 수행해야 합니다.
SwitchId 멤버는 OID_NIC_SWITCH_CREATE_SWITCH OID 메서드 요청을 통해 네트워크 어댑터에서 이전에 만든 NIC 스위치의 식별자로 설정해야 합니다.
참고 Windows Server 2012 SR-IOV 인터페이스는 네트워크 어댑터에서 하나의 NIC 스위치만 지원합니다. 이 스위치를 기본 NIC 스위치라고 합니다. 기본이 아닌 VPort를 만들 때 오버리싱 드라이버는 SwitchId 멤버를 NDIS_DEFAULT_SWITCH_ID 식별자로 설정해야 합니다.
VPortId 멤버는 NDIS_DEFAULT_VPORT_ID 설정해야 합니다.
AttachedFunctionId 멤버는 기본이 아닌 VPort를 연결할 VF 또는 PF의 식별자로 설정해야 합니다.
NDIS_PF_FUNCTION_ID 값은 PF를 지정합니다. 그렇지 않으면 OID_NIC_SWITCH_ALLOCATE_VF OID 메서드 요청을 통해 리소스가 이전에 할당된 VF 의 식별자로 값을 설정해야 합니다.
참고 기본이 아닌 VPort를 만든 후에는 VF 또는 PF에 대한 기본이 아닌 VPort의 첨부 파일을 변경할 수 없습니다.
오버리싱 드라이버는 VPort에 할당된 큐 쌍의 수를 지정할 수도 있습니다. 큐 쌍은 VPort에 할당된 네트워크 어댑터의 전송 및 수신 큐입니다. 네트워크 어댑터가 기본이 아닌 VPort에 대한 비대칭 큐 쌍을 지원하는 경우 오버리싱 드라이버는 드라이버가 만드는 각 VPort에 대해 다른 수의 큐 쌍을 지정할 수 있습니다. 자세한 내용은 큐 쌍의 대칭 및 비대칭 할당을 참조하세요.
지나치게 많은 드라이버는 NdisOidRequest 를 호출하여 기본 PF 미니포트 드라이버에 OID_NIC_SWITCH_CREATE_VPORT 요청을 실행합니다. NDIS가 미니포트 드라이버에 OID 메서드 요청을 전달하기 전에 다음을 수행합니다.
NDIS는 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조 내의 매개 변수의 유효성을 검사합니다. 매개 변수가 오류인 경우 NDIS는 OID 메서드 요청에 실패하고 PF 미니포트 드라이버에 요청을 전달하지 않습니다.
NDIS는 범위 내에서 기본이 아닌 VPort에 대한 식별자를 1에서 (NumVPorts– 1) 할당합니다. 여기서 NumVPorts 는 미니포트 드라이버가 네트워크 어댑터에서 구성한 VPort 수입니다. 드라이버는 NDIS_NIC_SWITCH_INFO 구조체의 NumVPorts 멤버에서 이 숫자를 지정합니다. 드라이버는 OID_NIC_SWITCH_ENUM_SWITCHES OID 쿼리 요청을 통해 이 구조를 반환합니다.
참고 NDIS_DEFAULT_VPORT_ID VPort 식별자는 기본 NIC 스위치에서 PF에 연결된 기본 VPort용으로 예약됩니다.
할당된 VPort 식별자는 네트워크 어댑터의 NIC 스위치에서 기본이 아닌 VPort를 고유하게 식별합니다.
- NDIS는 할당된 VPort 식별자를 사용하여 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조체의 VPortId 멤버를 설정합니다.
PF 미니포트 드라이버가 OID 요청을 발급하면 드라이버는 지정된 비기본 VPort와 연결된 하드웨어 및 소프트웨어 리소스를 할당합니다. 모든 리소스가 성공적으로 할당되면 PF 미니포트 드라이버는 MiniportOidRequest에서 NDIS_STATUS_SUCCESS 반환하여 OID를 성공적으로 완료합니다.
OID_NIC_SWITCH_CREATE_VPORT 요청이 성공적으로 완료되면 PF 미니포트 드라이버와 오버리싱 드라이버는 연속 작업을 위해 기본이 아닌 VPort의 VPortId 값을 유지해야 합니다. VPortId 값은 다음 작업 중에 사용됩니다.
NDIS 및 지나치게 많은 드라이버는 VPortId 값을 사용하여 이 VPort와 관련된 연속 OID 요청(예: OID_NIC_SWITCH_VPORT_PARAMETERS 및 OID_NIC_SWITCH_DELETE_VPORT)에서 기본이 아닌 VPort를 식별합니다.
보내기 작업 중에 NDIS는 패킷이 전송된 VPort를 식별하는 VPortId 값을 지정합니다. 이 값은 NET_BUFFER_LIST 구조체의 OOB(out-of-band) NDIS_NET_BUFFER_LIST_FILTERING_INFO 데이터 내에 지정됩니다.
수신 작업 중에 PF 미니포트 드라이버는 패킷을 전달할 VPortId 값을 지정합니다. 이 값은 NET_BUFFER_LIST 구조체의 OOB NDIS_NET_BUFFER_LIST_FILTERING_INFO 데이터에도 지정됩니다.
다음 사항은 기본이 아닌 VPort 만들기에 적용됩니다.
MAC(미디어 액세스 제어) 및 VLAN(가상 LAN) 식별자에 대한 수신 필터는 VPort를 만든 후 VPort에 구성됩니다. 드라이버를 과도하게 사용하면 OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청을 실행하여 이러한 수신 필터를 동적으로 설정합니다. 수신 필터는 OID_RECEIVE_FILTER_MOVE_FILTER OID 집합 요청을 통해 한 VPort에서 다른 VPort로 이동할 수도 있습니다.
VF에 연결된 기본이 아닌 VPort는 VF를 만들 때 활성화된 상태입니다. VPort가 VF에 연결되어 있으면 비활성화할 수 없습니다.
PF에 연결된 기본이 아닌 VPort는 만들 때 비활성화된 상태입니다. Hyper-V 확장 가능 스위치 모듈과 같은 지나치게 많은 드라이버는 VPort를 성공적으로 만든 후 PF에 연결된 기본이 아닌 VPort를 명시적으로 활성화합니다. 이 작업은 PF 미니포트 드라이버에 OID_NIC_SWITCH_VPORT_PARAMETERS OID 메서드 요청을 실행하여 수행됩니다.
오버리싱 드라이버가 이 OID 요청을 발급하면 VPortState 멤버가 NdisNicSwitchVPortStateActivated로 설정된 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조를 전달합니다.
기본이 아닌 VPort가 활성화된 상태이면 PF 미니포트 드라이버는 NdisAllocateSharedMemory를 호출하여 VPort에 대한 공유 메모리를 할당할 수 있습니다. 드라이버는 NDIS_SHARED_MEMORY_PARAMETERS 구조체의 VPortId 멤버를 VPort의 식별자 값으로 설정해야 합니다.
참고 기본이 아닌 VPort가 활성화된 상태인 경우 OID_NIC_SWITCH_DELETE_VPORT OID 집합 요청을 통해 삭제될 때만 비활성화된 상태로 설정됩니다.