다음을 통해 공유


NIC 스위치 기능 확인

이 항목에서는 NDIS 및 오버리싱 드라이버가 SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터의 NIC 스위치 기능을 결정하는 방법을 설명합니다. 이 항목에는 다음과 같은 정보가 포함되어 있습니다.

MiniportInitializeEx 중 NIC 스위치 기능 보고

드라이버를 오버리싱하여 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 스위치 하드웨어 기능을 보고합니다.

  1. 미니포트 드라이버는 헤더 멤버를 초기화합니다. 드라이버는 헤더Type 멤버를 NDIS_OBJECT_TYPE_DEFAULT 설정합니다.

    NDIS 6.30부터 미니포트 드라이버는 HeaderRevision 멤버를 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2, Size 멤버를 NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2 설정합니다.

  2. 미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체의 NicSwitchCapabilities 멤버에 적절한 플래그를 SR-IOV 네트워크 어댑터의 NIC 스위치 기능으로 설정합니다. 예를 들어 미니포트 드라이버는 NIC 스위치가 스위치에 생성된 각 VPort(가상 포트)에서 인터럽트 조정을 지원하는 경우 NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED 플래그를 설정합니다.

  3. 미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조체의 다른 멤버를 SR-IOV 네트워크 어댑터의 NIC 스위치 기능에 대한 값 범위로 설정합니다. 예를 들어 미니포트 드라이버는 MaxNumVFsMaxNumVPorts 멤버를 어댑터가 지원할 수 있는 최대 VF 및 VPort 수로 설정합니다.

    참고 네트워크 어댑터에서 사용 가능한 하드웨어 리소스에 따라 미니포트 드라이버는 MaxNumVFs 멤버를 *NumVFs 키워드(keyword) 미만의 값으로 설정할 수 있습니다. 이 키워드(keyword) 대한 자세한 내용은 SR-IOV에 대한 표준화된 INF 키워드를 참조하세요.

NDIS가 미니포트 드라이버의 MiniportInitializeEx 함수를 호출하면 드라이버는 다음 단계에 따라 네트워크 어댑터의 NIC 스위치 기능을 등록합니다.

  1. 미니포트 드라이버는 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 키워드를 참조하세요.

  2. 드라이버는 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 큐가 삭제되면 미니포트 드라이버는 초기 상태로 돌아가서 이러한 모드 중 하나로 다시 전환할 준비가 됩니다.

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_CAPABILITIESOID_NIC_SWITCH_CURRENT_CAPABILITIES OID(개체 식별자) 쿼리 요청을 처리할 때 NDIS_NIC_SWITCH_CAPABILITIES 구조를 반환합니다.