다음을 통해 공유


원래 패킷 트래픽

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

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

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

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

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

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

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

    전달 컨텍스트에 대한 자세한 내용은 확장 가능한 스위치 전달 컨텍스트 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 확장 가능한 스위치 데이터 경로참조하세요.