Hyper-V 확장 가능 스위치 전달 컨텍스트 관리
참고 이 페이지에서는 Hyper-V 확장 가능 스위치 및 하이브리드 전달 개요의 정보 및 다이어그램에 익숙하다고 가정합니다.
Hyper-V 확장 가능한 스위치 데이터 경로를 트래버스하는 각 패킷의 NET_BUFFER_LIST 구조에는 OOB(대역 외) 데이터가 포함됩니다. 이 데이터는 패킷이 시작된 원본 포트와 패킷 배달을 위한 하나 이상의 대상 포트를 지정합니다. 이 OOB 데이터를 확장 가능한 전환 전달 컨텍스트라고 합니다.
참고 확장 가능한 스위치 전달 컨텍스트는 NET_BUFFER_LIST_CONTEXT 구조와 다릅니다. 이를 통해 확장은 전달 컨텍스트에 영향을 주지 않고 자체 컨텍스트 구조를 할당할 수 있습니다.
확장 가능한 스위치 전달 컨텍스트는 다음과 같은 방식으로 할당되고 해제됩니다.
패킷이 네트워크 어댑터에서 확장 가능한 스위치에 도착하면 확장 가능한 스위치 인터페이스는 전달 컨텍스트를 할당하고 패킷의 NET_BUFFER_LIST 구조와 연결합니다.
패킷이 대상 포트로 전달되면 인터페이스는 패킷의 NET_BUFFER_LIST 구조에서 전달 컨텍스트를 해제 합니다.
확장 가능한 스위치 확장이 확장 가능한 스위치 데이터 경로에 새 패킷 또는 복제된 패킷을 삽입하는 경우 NdisFSendNetBufferLists를 호출하기 전에 전달 컨텍스트를 할당해야 합니다.
확장에서 새 패킷 또는 복제된 패킷에 대한 NET_BUFFER_LIST 구조를 할당한 후에는 AllocateNetBufferListForwardingContext 함수를 호출하여 패킷에 대한 전달 컨텍스트를 할당해야 합니다. 패킷 보내기 요청이 완료되면 확장은 NET_BUFFER_LIST 구조를 해제하거나 재사용하기 전에 FreeNetBufferListForwardingContext를 호출해야 합니다.
참고 확장이 AllocateNetBufferListForwardingContext를 호출하면 패킷의 원본 포트가 NDIS_SWITCH_DEFAULT_PORT_ID 설정됩니다. 확장 가능한 스위치 포트에 도착하는 대신 패킷이 확장에서 시작되도록 지정합니다. 특정 조건에서 확장은 패킷의 원본 포트를 변경할 수 있습니다. 자세한 내용은 패킷의 확장 가능한 스위치 원본 포트 데이터 수정을 참조하세요.
자세한 내용은 Hyper-V 확장 가능 스위치 보내기 및 받기 작업을 참조하세요.
확장 가능한 모든 스위치 확장은 다음 확장 가능한 스위치 처리기 함수를 호출하여 패킷의 전달 컨텍스트 내의 데이터에 액세스할 수 있습니다.
AllocateNetBufferListForwardingContext
확장 가능한 스위치 전달 컨텍스트를 할당하고 확장 가능한 스위치 내에서 보내기 또는 받기 작업을 위한 NET_BUFFER_LIST 구조를 준비합니다.
CopyNetBufferListInfo
원본 패킷의 NET_BUFFER_LIST 구조에서 대상 패킷의 NET_BUFFER_LIST 구조로 전달 컨텍스트를 복사합니다. 이 데이터에는 확장 가능한 스위치 원본 포트 및 네트워크 어댑터 정보가 포함됩니다. 확장 가능한 스위치 대상 포트 정보를 대상 패킷에 복사할 수도 있습니다.
FreeNetBufferListForwardingContext
NET_BUFFER_LIST 구조체의 확장 가능한 전환 전달 컨텍스트에서 리소스를 해제 합니다. 이 데이터는 Hyper-V 확장 가능 스위치의 송신 또는 수신 작업에 사용되었으며, 이전에는 AllocateNetBufferListForwardingContext 함수를 호출하여 할당되었습니다.
GetNetBufferListDestinations
패킷의 NET_BUFFER_LIST 구조의 전달 컨텍스트에서 대상 포트를 반환합니다.
전달 확장은 패킷이 NVGRE 패킷이 아닌 한 패킷에 대한 대상 포트를 추가하는 역할을 합니다. (자세한 내용은 하이브리드 전달을 참조하세요.) 확장은 다음 확장 가능한 스위치 처리기 함수를 호출하여 패킷의 전달 컨텍스트 내에서 대상 포트를 추가하거나 업데이트합니다.
AddNetBufferListDestination
NET_BUFFER_LIST 구조체로 지정된 패킷의 확장 가능한 스위치 전달 컨텍스트 영역에 단일 대상을 추가합니다.
참고 이 호출은 변경 내용을 전달 컨텍스트 영역에 커밋합니다. 이 경우 전달 확장은 UpdateNetBufferListDestinations를 호출할 필요가 없습니다.
GrowNetBufferListDestinations
패킷 NET_BUFFER_LIST 구조의 전달 컨텍스트 영역에서 대상 포트 배열의 크기를 늘입니다.
UpdateNetBufferListDestinations
확장이 패킷의 하나 이상의 확장 가능한 스위치 대상 포트에 대해 수행한 수정 내용을 커밋합니다. 이 함수는 패킷의 NET_BUFFER_LIST 구조체의 전달 컨텍스트를 이러한 변경 내용으로 업데이트합니다.
참고 전달 확장이 대상 포트에 대한 변경 내용을 전달 컨텍스트에 커밋한 후에는 대상 포트를 제거할 수 없으며 대상 포트의 NDIS_SWITCH_PORT_DESTINATION 구조체의 IsExcluded 멤버만 변경할 수 있습니다. 자세한 내용은 확장 가능한 스위치 대상 포트에 대한 패킷 배달 제외를 참조하세요.