이 항목에서는 NDIS 및 오버리딩 드라이버가 단일 루트 I/O 가상화(SR-IOV)를 지원하는 네트워크 어댑터의 NIC 스위치 기능을 결정하는 방법에 대해 설명합니다. 이 항목에는 다음 정보가 포함되어 있습니다.
NIC 스위치 기능을 MiniportInitializeEx 동안 보고합니다.
참고 SR-IOV 네트워크 어댑터의 PCI Express(PCIe) PF(물리적 함수)에 대한 미니포트 드라이버만 NIC 스위치 기능을 보고할 수 있습니다. PCIe VF(Virtual Functions)용 미니포트 드라이버는 SR-IOV 어댑터의 NIC 스위치 기능을 보고해서는 안 됩니다.
NIC 스위치에 대한 자세한 내용은 NIC 스위치참조하세요.
MiniportInitializeEx 동안 NIC 스위치 기능 보고
NDIS가 미니포트 드라이버의 MiniportInitializeEx 함수를 호출하면 드라이버는 다음과 같은 NIC 스위치 기능을 제공합니다.
네트워크 어댑터가 지원할 수 있는 NIC 스위치에 대한 하드웨어 기능의 전체 집합입니다.
참고 NDIS 6.30부터 네트워크 어댑터에 하나의 NIC 스위치만 만들어집니다. 이 스위치는 기본 NIC 스위치로 알려져 있습니다.
네트워크 어댑터에서 현재 사용하도록 설정된 NIC 스위치 기능입니다.
미니포트 드라이버는 다음과 같은 방식으로 초기화된 NDIS_NIC_SWITCH_CAPABILITIES 구조를 통해 기본 네트워크 어댑터의 NIC 스위치 하드웨어 기능을 보고합니다.
미니포트 드라이버는 헤더 멤버를 초기화합니다. 드라이버는 Type 멤버를 헤더에 NDIS_OBJECT_TYPE_DEFAULT로 설정합니다.
NDIS 6.30부터 미니포트 드라이버는 Header의 Revision 멤버를 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2로 설정하고, Size 멤버를 NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2로 설정합니다.
미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체의 NicSwitchCapabilities 멤버에 적절한 플래그를 SR-IOV 네트워크 어댑터의 NIC 스위치 기능으로 설정합니다. 예를 들어 미니포트 드라이버는 NIC 스위치가 스위치에서 만든 각 VPort(가상 포트)에서 인터럽트 조정을 지원하는 경우 NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED 플래그를 설정합니다.
미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체의 다른 멤버를 SR-IOV 네트워크 어댑터의 NIC 스위치 기능에 대한 값 범위로 설정합니다. 예를 들어 미니포트 드라이버는 MaxNumVFs 및 MaxNumVPorts 멤버를 어댑터가 지원할 수 있는 최대 VF 및 VPort 수로 설정합니다.
참고 네트워크 어댑터에서 사용 가능한 하드웨어 리소스에 따라 미니포트 드라이버는 MaxNumVFs 멤버를 *NumVFs 키워드보다 작은 값으로 설정할 수 있습니다. 이 키워드에 대한 자세한 내용은 SR-IOV대한 표준화된 INF 키워드를 참조하세요.
NDIS가 미니포트 드라이버의 MiniportInitializeEx 함수를 호출하면 드라이버는 다음 단계에 따라 네트워크 어댑터의 NIC 스위치 기능을 등록합니다.
미니포트 드라이버는 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 구조를 초기화합니다.
미니포트 드라이버는 HardwareNicSwitchCapabilities 멤버를 이전에 초기화된 NDIS_NIC_SWITCH_CAPABILITIES 구조에 대한 포인터로 설정합니다.
*SRIOV INF 키워드에 대한 레지스트리 설정 값이 1인 경우 네트워크 어댑터는 현재 NIC 스위치 만들기 및 구성에 대해 사용하도록 설정됩니다. 미니포트 드라이버는 CurrentNicSwitchCapabilities 멤버를 동일한 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터로 설정합니다.
*SRIOV INF 키워드의 레지스트리 설정 값이 0인 경우 네트워크 어댑터는 현재 NIC 스위치 만들기 및 구성에 사용할 수 없습니다. 미니포트 드라이버는 CurrentNicSwitchCapabilities 멤버를 NULL로 설정해야 합니다.
*SRIOV INF 키워드에 대한 자세한 내용은 SR-IOV대한 표준화된 INF 키워드를 참조하세요.
드라이버는 NdisMSetMiniportAttributes 호출하고 MiniportAttributes 매개 변수를 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 구조체에 대한 포인터로 설정합니다.
어댑터 초기화 프로세스에 대한 자세한 내용은 미니포트 어댑터초기화를 참조하세요.
SR-IOV 없이 NIC 스위치 만들기
NDIS 6.60 이상의 미니포트 드라이버는 SR-IOV 사용하도록 설정되지 않은 경우 NIC 스위치 및 VMQ 기능의 공존을 위해 다음 요구 사항을 준수해야 합니다. SR-IOV 사용하도록 설정된 경우 미니포트 드라이버는 이전 섹션의 기존 요구 사항을 준수해야 합니다.
- 미니포트 드라이버는 NIC 스위치와 VMQ 기능을 모두 지원합니다.
- NIC는 NIC를 다시 시작하지 않고 NIC 스위치와 VMQ 모드 간에 전환할 수 있습니다.
- NIC가 처음에 시작되면 NIC 스위치를 만들거나 VMQ 큐를 만드는 모드로 전환할 준비가 됩니다.
- NIC 스위치가 만들어지면 미니포트는 후속 VMQ 큐 할당 콜백에 실패합니다.
- VMQ 큐를 먼저 만드는 경우 미니포트 드라이버는 VMQ 큐 할당에 성공하고 NIC 스위치 할당 호출에 실패합니다.
- NIC 스위치가 삭제되거나 모든 VMQ 큐가 삭제되면 미니포트 드라이버는 초기 상태로 돌아가 이러한 모드 중 하나에 다시 전환할 준비가 됩니다.
- NIC가 처음에 시작되면 NIC 스위치를 만들거나 VMQ 큐를 만드는 모드로 전환할 준비가 됩니다.
SR-IOV를 사용하지 않고 NIC 스위치를 만들 수 있음을 알리기 위해 미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체의 NicSwitchCapabilities 멤버에서 NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED 플래그를 설정합니다.
상위 드라이버를 통해 NIC 스위치 기능 조회
NDIS는 네트워크 어댑터의 현재 사용하도록 설정된 NIC 스위치 기능을 다음과 같은 방법으로 네트워크 어댑터에 바인딩하는 드라이버에 전달합니다.
NDIS가 상위 필터 드라이버의 FilterAttach 함수를 호출할 때, NDIS는 네트워크 어댑터의 NIC 스위치 기능을 AttachParameters 매개 변수를 통해 전달합니다. 이 매개 변수는 NDIS_FILTER_ATTACH_PARAMETERS 구조체에 대한 포인터를 포함합니다. 이 구조체의 NicSwitchCapabilities 멤버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터를 포함합니다.
NDIS가 상위 프로토콜 드라이버의 ProtocolBindAdapterEx 함수를 호출할 때, NDIS는 네트워크 어댑터의 NIC 스위치 기능을 BindParameters 매개 변수로 전달합니다. 이 매개 변수는 NDIS_FILTER_ATTACH_PARAMETERS 구조체에 대한 포인터를 포함합니다. 이 구조체의 NicSwitchCapabilities 멤버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터를 포함합니다.
또한 NDIS는 상위 프로토콜 또는 필터 드라이버에 의해 발급된 OID_NIC_SWITCH_HARDWARE_CAPABILITIES 및 OID_NIC_SWITCH_CURRENT_CAPABILITIES OID(개체 식별자) 쿼리 요청을 처리할 때 NDIS_NIC_SWITCH_CAPABILITIES 구조를 반환합니다.