NIC 스위치 기능 확인
이 항목에서는 NDIS 및 오버리싱 드라이버가 SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터의 NIC 스위치 기능을 결정하는 방법을 설명합니다. 이 항목에는 다음과 같은 정보가 포함되어 있습니다.
MiniportInitializeEx 중 NIC 스위치 기능 보고
참고 SR-IOV 네트워크 어댑터의 PCI Express(PCIe) PF(물리적 함수)에 대한 미니포트 드라이버만 NIC 스위치 기능을 보고할 수 있습니다. PCIe VF(가상 함수)용 미니포트 드라이버는 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 키워드(keyword) 미만의 값으로 설정할 수 있습니다. 이 키워드(keyword) 대한 자세한 내용은 SR-IOV에 대한 표준화된 INF 키워드를 참조하세요.
NDIS가 미니포트 드라이버의 MiniportInitializeEx 함수를 호출하면 드라이버는 다음 단계에 따라 네트워크 어댑터의 NIC 스위치 기능을 등록합니다.
미니포트 드라이버는 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 구조를 초기화합니다.
미니포트 드라이버는 HardwareNicSwitchCapabilities 멤버를 이전에 초기화된 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터로 설정합니다.
*SRIOV INF 키워드(keyword) 대한 레지스트리 설정 값이 1인 경우 네트워크 어댑터는 현재 NIC 스위치 만들기 및 구성에 대해 사용하도록 설정됩니다. 미니포트 드라이버는 CurrentNicSwitchCapabilities 멤버를 동일한 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터로 설정합니다.
*SRIOV INF 키워드(keyword) 대한 레지스트리 설정 값이 0인 경우 네트워크 어댑터는 현재 NIC 스위치 만들기 및 구성에 대해 사용하도록 설정되지 않습니다. 미니포트 드라이버는 CurrentNicSwitchCapabilities 멤버를 NULL로 설정해야 합니다.
*SRIOV INF 키워드(keyword) 대한 자세한 내용은 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는 AttachParameters 매개 변수를 통해 네트워크 어댑터의 NIC 스위치 기능을 전달합니다. 이 매개 변수는 NDIS_FILTER_ATTACH_PARAMETERS 구조체에 대한 포인터를 포함합니다. 이 구조체의 NicSwitchCapabilities 멤버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체에 대한 포인터를 포함합니다.
NDIS가 지나치게 많은 프로토콜 드라이버의 ProtocolBindAdapterEx 함수를 호출하면 NDIS는 BindParameters 매개 변수를 통해 네트워크 어댑터의 NIC 스위치 기능을 전달합니다. 이 매개 변수는 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 구조를 반환합니다.