Поделиться через


Общие сведения о чистых кольцах

обзор NET_RING

NET_RING — это циклический буфер сетевых данных, общий доступ между NetAdapterCx и драйвером клиента. Каждая очередь пакетов в драйвере клиента имеет два кольца: кольцо пакетов для дескрипторов основных пакетов и кольцо фрагмента для дескрипторов фрагментов каждого пакета.

Дополнительные сведения о дескрипторах пакетов см. в разделе "Дескрипторы пакетов" и расширения.

Каждый дескриптор ядра в круге пакетов содержит индексы в кольцо фрагмента для определения дескрипторов фрагмента пакета. Другая структура данных, NET_RING_COLLECTION, группируйте кольцо пакетов и кольцо фрагментов для заданной очереди пакетов, как показано на следующей схеме.

Схема, демонстрирующая многокольцевую структуру NET_RING_COLLECTION, включая кольцо пакета и кольцо фрагмента.

Каждая очередь пакетов имеет собственную структуру NET_RING_COLLECTION , а следовательно, собственный круг пакетов, кольцо фрагмента и дескрипторы в этих кольцах. Поэтому операция передачи сетевых данных каждой очереди пакетов полностью не зависит. Дополнительные сведения о очередях пакетов см. в статье "Передача и получение очередей".

владение элементом NET_RING

Каждый элемент в NET_RING принадлежит драйверу клиента или NetAdapterCx. Владение контролируется тремя индексами, которые помечают разделы NET_RING. Эти индексы описаны в следующей таблице. Действие перемещения этих индексов описывается семантикой записи и очистки .

имя индекса NET_RING Description Требуется для передачи сетевых данных Кто изменил
Beginindex Начало диапазона элементов в NET_RING , принадлежащих драйверу клиента сетевого адаптера. BeginIndex также является началом подраздела сливаNET_RING. Когда BeginIndex увеличивается, драйвер очищает элементы из кольца и передает их в ОС. Да Драйвер клиента сетевого адаптера
NextIndex Начало подраздела должностиNET_RING. NextIndex делит раздел кольца, принадлежащий драйверу клиента, в подразделы post и drain. При добавочном добавлении NextIndex драйвер помещает буферы в оборудование и передает буферы в раздел очистки кольца. No Драйвер клиента сетевого адаптера
Endindex Конец диапазона элементов в NET_RING , принадлежащих драйверу клиента сетевого адаптера. Клиентские драйверы имеют собственные элементы до EndIndex — 1 включительно. Да NetAdapterCx

Управление этими индексами во время обратного вызова очереди пакетов EvtPacketQueueAdvance заключается в том, как драйверы клиента передают сетевые данные между системой и оборудованием сетевого интерфейса карта (сетевой адаптер).

Клиентские драйверы принадлежат каждому элементу из BeginIndex в EndIndex — 1 включительно. Например, если BeginIndex имеет значение 2 и EndIndex равно 5, драйвер клиента владеет тремя элементами: элементами с значениями индекса 2, 3 и 4.

Если BeginIndex равно EndIndex, драйвер клиента не владеет элементами.

NetAdapterCx публикует элементы в кольцевой буфер, добавив EndIndex. Драйвер клиента очищает буферы и возвращает владение элементами путем продвижения BeginIndex.

NextIndex является необязательным для использования драйверов клиентов и предоставляется для удобства разделения подразделов пост и очистки раздела драйвера клиента кольца.

Элементы со значениями индекса между NextIndex и EndIndex — 1 включительно принадлежат клиенту, но еще не были размещены на оборудовании. Если NextIndex равно BeginIndex, драйвер клиента не имеет завершенных буферов для передачи в ОС. Если NextIndex равен EndIndex, драйвер клиента не имеет буферов для отправки в оборудование.

Так как сетевое кольцо циклическое, в конечном итоге значения индекса обтекаются вокруг конца буфера и возвращаются к началу. NetAdapterCx автоматически обрабатывает оболочку значений индекса вокруг кольца, когда драйвер клиента вызывает соответствующий метод.

Дополнительные сведения об управлении элементами в чистых кольцах см. в разделе Net Ring Management.

Отправка и получение сетевых данных с помощью сетевых кругов

Дополнительные сведения и примеры кода по отправке и получению сетевых данных в кругах сети см. в следующих разделах.

Отправка сетевых данных с помощью сетевых кругов

Получение сетевых данных с сетевыми кольцами