다음을 통해 공유


NIC 스위치 기능 결정

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

NIC 스위치 기능을 MiniportInitializeEx 동안 보고합니다.

상위 드라이버를 통해 NIC 스위치 기능 확인

참고 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 스위치 하드웨어 기능을 보고합니다.

  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 키워드보다 작은 값으로 설정할 수 있습니다. 이 키워드에 대한 자세한 내용은 SR-IOV대한 표준화된 INF 키워드를 참조하세요.

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

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

  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는 네트워크 어댑터의 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_CAPABILITIESOID_NIC_SWITCH_CURRENT_CAPABILITIES OID(개체 식별자) 쿼리 요청을 처리할 때 NDIS_NIC_SWITCH_CAPABILITIES 구조를 반환합니다.