다음을 통해 공유


원본 패킷 트래픽

이 항목에서는 Hyper-V 확장이 새 패킷을 시작하고 확장 가능한 스위치 데이터 경로에 삽입하는 방법을 설명합니다.

참고 이 페이지에서는 Hyper-V 확장 가능 스위치하이브리드 전달 개요의 정보 및 다이어그램에 익숙하다고 가정합니다.

참고 확장 가능한 스위치 인터페이스에서 NDIS 필터 드라이버를 확장 가능한 스위치 확장 이라고 하며 드라이버 스택을 확장 가능한 스위치 드라이버 스택이라고 합니다. 확장에 대한 자세한 내용은 Hyper-V 확장 스위치 확장을 참조하세요.

확장 가능한 스위치 확장은 확장 가능한 스위치 수신 데이터 경로에 새 패킷만 삽입할 수 있습니다. 이렇게 하면 확장 가능한 스위치 인터페이스가 이러한 패킷을 올바르게 필터링하고 전달할 수 있습니다. 확장은 수신 데이터 경로에 새 패킷을 삽입하기 위해 다음 지침을 따라야 합니다.

  • 확장은 먼저 새 패킷에 대한 NET_BUFFER_LIST 구조를 할당해야 합니다.

  • 확장에서 새 패킷에 대한 NET_BUFFER_LIST 구조를 할당한 후에는 AllocateNetBufferListForwardingContext 처리기 함수를 호출하여 패킷에 대한 확장 가능한 스위치 전달 컨텍스트를 할당해야 합니다.

    전달 컨텍스트는 패킷의 OOB(대역 외) 데이터에 상주합니다. 원본 포트 및 하나 이상의 대상 포트 배열과 같은 패킷에 대한 전달 정보가 포함됩니다.

    전달 컨텍스트에 대한 자세한 내용은 Hyper-V 확장 가능한 전환 전달 컨텍스트를 참조하세요.

  • 확장이 AllocateNetBufferListForwardingContext를 호출하면 패킷의 원본 포트가 NDIS_SWITCH_DEFAULT_PORT_ID 설정됩니다. NDIS_SWITCH_DEFAULT_PORT_ID 원본 포트 식별자가 있는 패킷은 신뢰할 수 있으며 ACL(액세스 제어 목록) 및 QoS(서비스 품질)와 같은 확장 가능한 스위치 포트 정책을 무시합니다.

    확장은 패킷이 특정 포트에서 시작된 것처럼 처리되도록 할 수 있습니다. 이렇게 하면 해당 포트에 대한 정책을 패킷에 적용할 수 있습니다. 확장은 SetNetBufferListSource 를 호출하여 패킷의 원본 포트를 변경합니다.

    그러나 확장에서 패킷의 원본 포트 식별자를 NDIS_SWITCH_DEFAULT_PORT_ID 할당하려는 경우가 있을 수 있습니다. 예를 들어 확장은 외부 네트워크의 디바이스로 전송되는 독점 제어 패킷에 대해 원본 포트 식별자를 NDIS_SWITCH_DEFAULT_PORT_ID 설정할 수 있습니다.

  • 전달 확장이 수신 데이터 경로에 새 패킷을 보내는 경우 패킷의 대상 포트를 결정해야 합니다. 이 절차에 대한 자세한 내용은 패킷에 확장 가능한 스위치 대상 포트 데이터 추가를 참조하세요.

    참고 캡처 또는 필터링 확장은 새 패킷에 새 대상 포트를 추가할 수 없습니다.

  • 확장에서 새 패킷을 만들 때 패킷 데이터는 Hyper-V 부모 파티션의 부모 운영 체제에 있는 로컬 또는 신뢰할 수 있는 메모리에 있습니다. 이 메모리는 자식 파티션에서 액세스할 수 없습니다. 따라서 해당 파티션에서 실행되는 게스트 운영 체제의 동기화되지 않은 업데이트로부터 "안전"으로 간주됩니다.

    확장은 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 매크로를 사용하여 새 패킷에 대한 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 공용 구조체를 가져와야 합니다. 확장은 IsPacketDataSafe 멤버를 TRUE로 설정해야 합니다. 이렇게 하면 모든 패킷 데이터가 신뢰할 수 있는 메모리에 있습니다.

  • 확장이 NdisFSendNetBufferLists 를 호출하여 패킷을 수신 데이터 경로에 삽입하는 경우 적절한 확장 가능한 스위치 플래그 설정을 사용하여 Flags 매개 변수를 설정해야 합니다. 이러한 플래그 설정에 대한 자세한 내용은 Hyper-V 확장 가능 스위치 보내기 및 수신 플래그를 참조하세요.

  • NDIS가 확장의 FilterSendNetBufferListsComplete 함수를 호출하여 새 패킷의 보내기 요청을 완료하는 경우 확장은 FreeNetBufferListForwardingContext 를 호출하여 할당된 전달 컨텍스트를 해제해야 합니다. 확장은 패킷에 대한 NET_BUFFER_LIST 구조를 해제하거나 재사용하기 전에 이 작업을 수행해야 합니다.

확장 가능한 스위치 수신 및 송신 데이터 경로에 대한 자세한 내용은 Hyper-V 확장 가능한 스위치 데이터 경로를 참조하세요.