функция обратного вызова W_TCP_OFFLOAD_FORWARD_HANDLER (ndischimney.h)

[Функция разгрузки tcp chimney является устаревшей и не должна использоваться.]

NDIS вызывает функцию MiniportTcpOffloadForward для переадресации непризнанных полученных сегментов TCP в целевой объект разгрузки.

Синтаксис

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

NDIS_STATUS WTcpOffloadForwardHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Параметры

[in] MiniportAdapterContext

Дескриптор выделенной области контекста целевого объекта разгрузки, в которой целевой объект разгрузки хранит сведения о состоянии этого экземпляра адаптера. Драйвер мини-порта предоставил этот дескриптор NDIS при вызове NdisMSetMiniportAttributes из егоФункция MiniportInitializeEx.

[in] MiniportOffloadContext

Указатель на расположение памяти, содержащее значение PVOID. Это значение PVOID ссылается на контекст разгрузки минипорта, содержащий объект состояния для TCP-подключения, для которого пересылаются сегменты TCP. Целевой объект разгрузки предоставил это значение PVOID при разгрузке объекта состояния tcp-подключения.

[in] NetBufferList

Указатель на структуру NET_BUFFER_LIST . Эта структура может быть автономной структурой или первой структурой в связанном списке NET_BUFFER_LIST структур. Каждая структура NET_BUFFER_LIST в списке описывает одну NET_BUFFER структуру. Каждая структура NET_BUFFER сопоставляется с цепочкой списков дескрипторов памяти (MDL). Многомерные списки, связанные со структурой NET_BUFFER, содержат только один сегмент TCP, который пересылается в целевой объект разгрузки. Первый байт первого MDL является первым байтом заголовка TCP. NET_BUFFER_LIST и связанные структуры блокируются, чтобы они оставались в физической памяти. Однако они не сопоставляются с системной памятью.

Возвращаемое значение

NDIS_STATUS_PENDING является единственным допустимым возвращаемым значением. Целевой объект разгрузки всегда асинхронно завершает переадресованный запрос путем вызоваФункция NdisTcpOffloadForwardComplete.

Комментарии

Стек узла пересылает один или несколько сегментов TCP, которые он получил, но не подтвердил в следующих ситуациях:

  • Стек узла получил сегменты tcp-подключения, которое выгружалось в целевой объект разгрузки. Так как подключение не было полностью разгружено, целевой объект разгрузки не мог обработать сегменты TCP в это время.
  • Стек узла находится в многосетковой системе, которая получила сегменты в сетевом интерфейсе, отличном от того, в котором разгружено TCP-подключение.
  • Целевой объект разгрузки ранее указывал на полученные пакеты с заданными параметрами IP-адресов и (или) фрагменты, требующие повторной сборки. После обработки параметров IP-адреса и (или) успешной повторной сборки пакетов стек узла перенаправит сегменты TCP в целевой объект разгрузки.
Стек узлов никогда не пытается пересылать сегменты TCP для TCP-подключения в следующих случаях:
  • Это подключение разгружается. Стек узла всегда ожидает завершения разгрузки подключения, прежде чем пересылать пакеты для этого подключения. Стек узла пересылает сегменты TCP как можно скорее после завершения разгрузки подключения. Однако для пересылки таких сегментов нет ограничений по времени.
  • Разгрузка этого подключения завершается. В этом случае стек узла буферизует данные до завершения разгрузки, а затем обрабатывает сегменты.
Стек узла перенаправит сегменты TCP, а не ip-датаграммы, в целевой объект разгрузки. Таким образом, единственным заголовком, который предоставляется стеком узлов для каждого сегмента, является заголовок TCP, включая все параметры TCP, которые присутствуют. Это все сведения о заголовке, необходимые целевому объекту разгрузки для обработки полученного сегмента.

При переадресации сегментов TCP стек узлов передает один сегмент TCP на NET_BUFFER структуру. Стек узлов связывает только одну структуру NET_BUFFER и, следовательно, один переадресованный сегмент TCP с каждой NET_BUFFER_LIST структурой в связанном списке.

Стек узла выделяет NET_BUFFER_LIST и связанные структуры, которые NDIS передает функции MiniportTcpOffloadForward . Целевой объект разгрузки владеет этими ресурсами, пока не передаст их вФункция NdisTcpOffloadForwardComplete. Хотя он владеет этими ресурсами, целевой объект разгрузки может свободно помещать их в очередь для обработки.

Требования

Требование Значение
Целевая платформа Windows
Header ndischimney.h (включая Ndischimney.h)
IRQL Любой уровень

См. также раздел

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete