структура TCP_OFFLOAD_STATE_DELEGATED (ndischimney.h)
[Функция разгрузки дымохода TCP является нерекомендуемой и не должна использоваться.]
Структура TCP_OFFLOAD_STATE_DELEGATED содержит делегированные переменные объекта состояния TCP-подключения.
Синтаксис
typedef struct _TCP_OFFLOAD_STATE_DELEGATED {
OFFLOAD_STATE_HEADER Header;
TCP_OFFLOAD_CONNECTION_STATE State;
USHORT Flags;
ULONG RcvNxt;
ULONG RcvWnd;
ULONG SndUna;
ULONG SndNxt;
ULONG SndMax;
ULONG SndWnd;
ULONG MaxSndWnd;
ULONG SendWL1;
ULONG CWnd;
ULONG SsThresh;
USHORT SRtt;
USHORT RttVar;
ULONG TsRecent;
ULONG TsRecentAge;
ULONG TsTime;
ULONG TotalRT;
UCHAR DupAckCount;
UCHAR SndWndProbeCount;
struct {
UCHAR ProbeCount;
ULONG TimeoutDelta;
} KeepAlive;
struct {
UCHAR Count;
ULONG TimeoutDelta;
} Retransmit;
union {
struct {
PNET_BUFFER_LIST SendDataHead;
PNET_BUFFER_LIST SendDataTail;
};
ULONG SendBacklogSize;
};
union {
PNET_BUFFER_LIST BufferedData;
ULONG ReceiveBacklogSize;
};
ULONG DWnd;
} TCP_OFFLOAD_STATE_DELEGATED, *PTCP_OFFLOAD_STATE_DELEGATED;
Члены
Header
Структура OFFLOAD_STATE_HEADER . NDIS задает для элемента Lengthзаголовка размер структуры TCP_OFFLOAD_STATE_DELEGATED в байтах. Элемент RecognizedOptionsзаголовка зарезервирован.
State
Текущее состояние TCP-подключения (см. RFC 793) в качестве одного из следующих TCP_OFFLOAD_CONNECTION_STATE значений:
TcpConnectionClosed
Состояние подключения отсутствует.
TcpConnectionListen
Ожидание запроса на подключение из любого удаленного TCP и порта.
TcpConnectionSynSent
Ожидание соответствующего запроса на подключение после отправки запроса на подключение.
TcpConnectionSynRcvd
Ожидание подтверждения запроса на подключение после получения и отправки запроса на подключение.
TcpConnectionEstablished
Открытое подключение: полученные данные могут быть доставлены пользователю. Нормальное состояние для этапа передачи данных подключения.
TcpConnectionFinWait1
Ожидание запроса на завершение подключения от удаленного TCP или подтверждения запроса на завершение подключения, отправленного ранее.
TcpConnectionFinWait2
Ожидание запроса на завершение подключения от удаленного TCP.
TcpConnectionCloseWait
Ожидание запроса на завершение подключения от локального пользователя.
TcpConnectionClosing
Ожидание подтверждения запроса на завершение подключения от удаленного TCP.
TcpConnectionLastAck
Ожидание подтверждения запроса на завершение подключения, отправленного ранее в удаленный TCP, который включает подтверждение запроса на завершение подключения.
TcpConnectionTimeWait
Ожидание достаточного времени, чтобы убедиться, что удаленный TCP получил подтверждение своего запроса на завершение подключения.
Обратите внимание, что стек узлов может разгрузить TCP-подключение, если соединение находится в любом состоянии, кроме TcpConnectionClosed, TcpConnectionListen, TcpConnectionSynRcvd,
Состояние TcpConnectionSynSent или TcpConnectionTimeWait . Стек узлов может запрашивать, обновлять, аннулировать или завершать TCP-подключение независимо от состояния соединения.
Flags
Зарезервировано для системного использования.
RcvNxt
Порядковый номер для следующего сегмента получения (см. RCV. ДАЛЕЕ в RFC 793).
RcvWnd
Размер окна получения в байтах (см. RCV. WND в RFC 793).
SndUna
Порядковый номер первого байта неподтвержденных данных (см. раздел SND. UNA в RFC 793). Дополнительные сведения см. в разделе Отправка данных, содержащих данные для повторной передачи.
SndNxt
Порядковый номер для следующего байта, отправляемого при подключении (см. раздел SND. NXT в RFC 793). Дополнительные сведения см. в разделе Отправка данных, содержащих данные для повторной передачи.
SndMax
Максимальный порядковый номер, отправленный при подключении. Дополнительные сведения см. в разделе Отправка данных, содержащих данные для повторной передачи.
SndWnd
Размер окна отправки в байтах (см. SND. WND в RFC 793).
MaxSndWnd
Максимальный размер окна отправки в байтах (см. RFC 813).
SendWL1
Порядковый номер сегмента, используемый для последнего обновления окна (см. раздел SND. WL1 в RFC 793).
CWnd
Размер окна перегрузки в байтах (см. cwnd в RFC 2581).
SsThresh
Порог медленного запуска в байтах (см. ssthresh в RFC 2581).
SRtt
Сглаженное время кругового пути в часах (см. SRTT в RFC 793 и 2988). Поддерживается для каждого подключения, так как он учитывает путь, узел, а иногда и поведение приложения.
RttVar
Вариация времени кругового пути в тактах часов (см. RTTVAR в RFC 2988).
TsRecent
Значение метки времени для отправки в следующем ACK (см. TS. Последние в RFC 1323)
TsRecentAge
Продолжительность времени с момента получения последней метки времени (см. RFC 1323).
TsTime
Текущее значение скорректированной метки времени.
TotalRT
Общее время в тактах часов, затраченное на повторную передачу текущего сегмента TCP.
DupAckCount
Количество ACL, принятых для одного и того же порядкового номера (см. RFC 1323).
SndWndProbeCount
Текущий цикл проверки окна отправки. Описание цикла проверки окна отправки см. в разделе Сохранение таймера.
KeepAlive
Этот член является объединением, состоящим из следующих членов:
KeepAlive.ProbeCount
Количество отправленных проб проверки активности, которые не получили ответа (см. RFC 1122).
KeepAlive.TimeoutDelta
Оставшееся время в часах тикает до следующего тайм-аута (см. RFC 1122). Обратите внимание, что значение -1 сразу после разгрузки TCP-подключения указывает на то, что таймер keepalive не был запущен при разгрузке подключения. Если таймер сохранения целевого объекта разгрузки не запущен, целевой объект разгрузки должен возвращать значение -1 в этом элементе при ответе на вызов функции MiniportQueryOffload или MiniportTerminateOffload.
Retransmit
Этот член является объединением, состоящим из следующих членов:
Retransmit.Count
Количество отправленных повторных передач (см. RFC 2581).
Retransmit.TimeoutDelta
Время в часах, оставшееся до следующего тайм-аута повторной передачи (см. RFC 2581). Обратите внимание, что значение -1 сразу после разгрузки TCP-подключения указывает на то, что таймер повторной передачи не выполнялся при разгрузке подключения. Таймер повторной передачи не был запущен, так как при разгрузке подключения не было незавершенных данных отправки. Если таймер повторной передачи целевого объекта разгрузки не запущен, целевой объект разгрузки должен возвращать значение -1 в этом элементе при ответе на вызов функции MiniportQueryOffload или MiniportTerminateOffload.
SendDataHead
Указатель на структуру NET_BUFFER_LIST . Эта NET_BUFFER_LIST структура находится в связанном списке, на который указывает элемент NetBufferListChain NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структуру, которая непосредственно предшествует структуре TCP_OFFLOAD_STATE_DELEGATED. Если указатель NetBufferListChain имеет значение NULL, SendDataHead не имеет значения.
Указатель SendDataHead указывает на первую NET_BUFFER_LIST структуру, NET_BUFFER структура которой буферизовала связанные с ней данные отправки.
Эта переменная используется только при инициировании разгрузки или завершении операции разгрузки. Дополнительные сведения об использовании этой переменной см. в разделах Обработка необработанных данных отправки во время и после операции разгрузки и Обработка необработанных данных отправки во время операции завершения разгрузки.
SendDataTail
Указатель на структуру NET_BUFFER_LIST . Эта NET_BUFFER_LIST структура находится в связанном списке, на который указывает элемент NetBufferListChain структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, непосредственно перед структурой TCP_OFFLOAD_STATE_DELEGATED. Если указатель NetBufferListChain имеет значение NULL, SendDataTail не имеет значения.
Указатель SendDataTail указывает на последнюю NET_BUFFER_LIST структуру, NET_BUFFER структура которой буферизовала связанные с ней данные отправки.
Эта переменная используется только при инициировании разгрузки или завершении операции разгрузки. Дополнительные сведения об использовании этой переменной см. в разделах Обработка необработанных данных отправки во время и после операции разгрузки и Обработка необработанных данных отправки во время операции завершения разгрузки.
SendBacklogSize
Целевой объект разгрузки задает это значение, чтобы указать количество байтов данных, которые должны быть незаполненными в стеке узлов в целевом объекте разгрузки для обеспечения оптимальной производительности. (Это количество байтов отправки, которые были переданы целевому объекту разгрузки, но еще не были завершены целевым объектом разгрузки.) Конкретные переменные и алгоритм, которые целевой объект разгрузки использует для вычисления размера невыполненной работы по отправке, зависят от реализации. Размер невыполненной работы по отправке может быть функцией времени круговой передачи (RTT) для подключения, пропускной способности интерфейса и других параметров. Целевой объект разгрузки может, например, использовать минимальную пропускную способность или задержку продукта и объявленное окно получения. Обратите внимание, что размер невыполненной работы по отправке не зависит от количества байтов данных, которые в настоящее время передаются для передачи по подключению.
Стек узла может запросить делегированное состояние TCP для подключения, чтобы получить размер невыполненной работы по отправке. Кроме того, целевой объект разгрузки может указывать на изменение размера невыполненной работы по отправке путем вызоваФункция NdisTcpOffloadEventHandler.
Если целевой объект разгрузки не поддерживает функцию send-backlog-size, он должен записать значение 0xFFFFFFFF в SendBacklogSize при запросе делегированного состояния TCP для подключения. Переменная SendBacklogSize не используется в операции завершения разгрузки.
BufferedData
Указатель на буферизованное получение данных. Стек узла может передавать такие данные в целевой объект разгрузки при разгрузке TCP-подключения. (Дополнительные сведения см. в разделе Обработка буферизованного получения данных во время и после операции разгрузки.) Целевой объект разгрузки может передавать такие данные в стек узлов при отправке TCP-подключения. (Дополнительные сведения см. в разделе Обработка буферизованного получения данных во время завершения операции разгрузки.)
ReceiveBacklogSize
Целевой объект разгрузки задает это значение, чтобы указать количество байтов данных о получении, которые буферикуются в целевом объекте разгрузки для разгруженного TCP-подключения. Стек узлов может запросить делегированное состояние TCP для подключения, чтобы получить это значение. Стек узлов использует это значение для отправки одного или нескольких запросов на получение в подключении, которые достаточно велики для хранения всех буферизированных данных.
Если целевой объект разгрузки не поддерживает функцию размера невыполненной работы по получению, он должен записать значение 0xFFFFFFFF в ReceiveBacklogSize .
DWnd
Комментарии
Стек узлов предоставляет начальные значения для делегированных переменных TCP при разгрузке этих переменных в целевой объект разгрузки. После разгрузки делегированные переменные TCP принадлежат целевому объекту разгрузки и поддерживаются ими. Только целевой объект разгрузки может изменять значение разгруженной делегированной переменной TCP. Целевой объект разгрузки не уведомляет стек узлов об изменениях значений разгруженных делегированных переменных TCP. Однако стек узла может запрашивать значение разгруженных делегированных переменных TCP, что приводит к тому, что NDIS вызывает функцию MiniportQueryOffload целевого объекта разгрузки. Когда стек узлов завершает разгрузку объекта состояния TCP-подключения, вызывая NDIS для вызова целевого объекта разгрузки.Функция MiniportTerminateOffload, целевой объект разгрузки передает значение делегированных переменных TCP в объекте состояния завершенного TCP-подключения обратно в стек узлов.
При передаче в целевой объект разгрузки структура TCP_OFFLOAD_STATE_DELEGATED связана с NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структура, содержащая заголовок, отформатированный как структура NDIS_OBJECT_HEADER . В данном случае элемент Revision структуры NDIS_OBJECT_HEADER указывает номер редакции TCP_OFFLOAD_STATE_DELEGATED структуры.
Требования
Требование | Значение |
---|---|
Заголовок | ndischimney.h (включая Ndischimney.h) |