Share via


확장 가능한 스위치 대상 포트에 패킷 배달 제외

이 항목에서는 Hyper-V 확장 가능한 스위치 확장이 확장 가능한 스위치 포트에 대한 패킷 배달을 제외할 수 있는 방법에 대해 설명합니다. 패킷의 대상 포트는 패킷의 NET_BUFFER_LIST 구조 내에서 OOB(대역 외) 전달 컨텍스트 내에 지정됩니다. 이 컨텍스트에 대한 자세한 내용은 Hyper-V 확장 가능한 전환 전달 컨텍스트를 참조하세요.

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

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

확장 필터링 및 전달은 확장 가능한 스위치 수신 또는 송신 데이터 경로에서 가져온 패킷 배달을 제외할 수 있습니다. 패킷 배달 제외는 다음과 같은 방법으로 수행할 수 있습니다.

  • 확장은 패킷 요청 또는 표시를 완료하여 패킷을 삭제할 수 있습니다. 확장 가능한 스위치 포트에 대한 패킷 배달은 제외됩니다. 이 메서드는 하나 이상의 대상 포트가 있는 패킷에서 사용할 수 있습니다.

    확장 가능한 스위치 수신 데이터 경로에서 가져온 패킷의 경우 확장은 NdisFSendNetBufferListsComplete를 호출하여 패킷 보내기 요청을 완료합니다.

    확장 가능한 스위치 송신 데이터 경로에서 가져온 패킷의 경우 확장은 NdisFReturnNetBufferLists를 호출하여 패킷 수신 표시를 완료합니다.

  • 여러 대상 포트가 있는 송신 데이터 경로에서 가져온 패킷의 경우 확장은 하나 이상의 대상 포트에 대한 데이터를 수정하여 패킷 배달을 제외할 수 있습니다. 확장은 대상 포트의 NDIS_SWITCH_PORT_DESTINATION 구조체의 IsExcluded 멤버를 하나의 값으로 설정하여 이 작업을 수행합니다. 이 메서드를 사용하면 IsExcluded 값이 0으로 설정된 포트에 패킷을 배달할 수 있습니다.

    참고 수신 데이터 경로에서 가져온 패킷에는 대상 포트가 포함되지 않습니다. 이 데이터는 확장 가능한 스위치가 패킷을 송신 데이터 경로 위로 전달한 후에만 사용할 수 있습니다.

확장이 대상 포트의 IsExcluded 값을 수정한 후에는 송신 데이터 경로의 패킷을 오버리링 확장으로 전달해야 합니다. 그러나 모든 패킷의 대상 포트에 대한 IsExcluded 데이터가 1로 설정된 경우 확장은 패킷을 전달하는 대신 패킷 수신 표시를 완료하여 패킷을 삭제해야 합니다.

참고 확장이 대상 포트의 IsExcluded 값을 1로 설정한 후에는 송신 데이터 경로의 확장이 이 값을 0으로 변경할 수 없습니다.

참고 확장 캡처는 확장 가능한 스위치 포트에 대한 패킷 배달을 제외할 수 없습니다.

확장 필터링 및 전달은 확장 가능한 스위치 포트로 패킷 배달을 제외하기 위해 다음 지침을 따라야 합니다.

  • 확장 가능한 스위치 수신 데이터 경로에서 필터링 및 전달 확장 프로그램은 패킷의 원본 포트 또는 데이터에 대한 정책 기준에 따라 패킷 배달을 제외할 수 있습니다.

    원본 포트 정보는 패킷 의 NET_BUFFER_LIST 구조체의 OOB 데이터에 있는 NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO 공용 구조체에 저장됩니다. 확장은 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 매크로를 사용하여 데이터를 가져옵니다.

    확장이 수신 데이터 경로에서 가져온 패킷 배달을 제외하는 경우 패킷 보내기 요청을 완료하여 패킷을 삭제해야 합니다.

  • 확장 가능한 스위치 수신 데이터 경로에서 전달 확장은 패킷의 대상 포트를 결정하고 이 정보를 패킷의 OOB 데이터에 추가합니다. 확장에 의해 적용되는 정책 조건에 따라 대상 포트 정보를 OOB 데이터에 추가하지 않음으로써 포트에 대한 패킷 배달을 제외할 수 있습니다.

    이 절차에 대한 자세한 내용은 패킷에 확장 가능한 스위치 대상 포트 데이터 추가를 참조하세요.

  • 확장 가능한 스위치 송신 데이터 경로에서 필터링 및 전달 확장 프로그램은 정책 기준에 따라 패킷 배달을 제외할 수 있습니다. 예를 들어 확장 필터링은 패킷의 원본 포트 또는 대상 포트에 대한 정책 조건에 따라 패킷 배달을 제외할 수 있습니다.

    확장은 다음 단계에 따라 대상 포트에 패킷 배달을 제외합니다.

    1. 확장은 GetNetBufferListDestinations를 호출하여 패킷의 대상 포트를 가져옵니다. 호출이 NDIS_STATUS_SUCCESS 반환하는 경우 Destinations 매개 변수에는 NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 구조체에 대한 포인터가 포함됩니다. 이 구조체는 패킷의 확장 가능한 스위치 대상 포트를 지정합니다. 각 대상 포트의 형식은 NDIS_SWITCH_PORT_DESTINATION 구조체로 지정됩니다.

      참고NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 구조체의 NumDestinations 멤버에 값이 0인 경우 패킷에는 대상 포트에 대한 데이터가 없습니다.

  1. 확장은 대상 포트의 NDIS_SWITCH_PORT_DESTINATION 구조체IsExcluded 멤버를 하나의 값으로 설정하여 확장 가능한 스위치 포트로 패킷 배달을 제외합니다.

    참고 확장에서 모든 대상 포트에 대한 패킷 배달을 제외하는 경우 확장은 패킷의 수신 표시를 완료하여 패킷을 삭제해야 합니다.

  2. 확장에서 패킷의 하나 또는 모든 대상 포트에 대한 배달을 제외하는 경우 다음을 수행해야 합니다.

    • 확장은 UpdateNetBufferListDestinations 를 호출하여 패킷의 OOB 데이터에 이러한 변경 내용을 커밋해야 합니다.

    • 확장은 ReportFilteredNetBufferLists를 호출해야 합니다. 이 함수가 호출되면 확장 가능한 스위치 인터페이스는 카운터를 증가시키고 제외된 패킷에 대한 이벤트를 기록합니다. 확장은 패킷을 가져온 확장 가능한 스위치 데이터 경로의 패킷을 전달하기 전에 이 호출을 수행해야 합니다.

    마찬가지로 확장이 패킷 전송 요청 또는 패킷의 모든 포트에 대한 배달을 제외하라는 표시를 완료하는 경우 ReportFilteredNetBufferLists도 호출해야 합니다.

    참고 확장은 확장에서 제외하는 패킷에 대한 NET_BUFFER_LIST 구조의 연결된 목록을 만들 수 있습니다. 확장에서 ReportFilteredNetBufferLists를 호출하면 NetBufferLists 매개 변수를 연결된 목록에 대한 포인터로 설정합니다.

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