Управление кольцевой сетью
Следуйте указаниям в этом разделе, чтобы управлять структурами NET_RING и их элементами во время передачи данных по сети. Правила в этом разделе описывают, какие элементы сетевых элементов могут изменять клиентские драйверы и когда в зависимости от сценария пути к данным, а также общие сведения, которые клиентские драйверы должны иметь в виду для этих структур.
Важно!
Клиентские драйверы должны придерживаться этих направлений на всех этапах разработки. Если драйвер клиента не соответствует этим указаниям при тестировании с помощью средства проверки драйверов, средство проверки драйверов сообщает о нарушении и запускает проверка ошибок на тестируемом устройстве.
NET_RING
При запуске родительской очереди пакетов NET_RING все индексы в круге инициализируются значением 0.
В следующей таблице описаны элементы сетевого круга, которые клиентские драйверы могут изменять.
Поле | Драйвер клиента может изменяться |
---|---|
OSReserved1 | Нет |
ElementStride | Нет |
NumberOfElements | Нет |
ElementIndexMask | Нет |
Endindex | Нет |
OSReserved0 | Нет |
OSReserved2 | Нет |
Beginindex | Да (обязательно) |
NextIndex | Да (необязательно) Примечание. Платформа никогда не считывает NextIndex. |
Рабочая зона | Да (необязательно) Примечание. Платформа никогда не считывает Scratch. |
Буфер | Нет |
Клиентские драйверы не должны изменять члены этой структуры только для чтения, а также не должны увеличивать BeginIndex после EndIndex во время вызова EvtPacketQueueAdvance.
Дополнительные сведения о владении индексом в сетевых кольцах см. в статье Общие сведения о кругах сети.
NET_PACKET
Поля в NET_PACKET чувствительны к различным контекстам, в которых работает путь к данным. Указывает, задано ли поле Игнорировать пакета и принимает ли драйвер (Rx) или передает (Tx) пакет, изменяет набор правил, применяемый к пакету.
В следующей таблице приведены инструкции по драйверам в каждом сценарии.
Rx или Tx | Пропустить поле задается... | Примечания |
---|---|---|
Rx | Клиентский драйвер |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Во время операций Rx на поле МакетNET_PACKET распространяются следующие правила:
- Все поля, кроме Reserved0 , должны быть инициализированы драйвером клиента.
- Если параметр Layer2Type имеет значение NetPacketLayer2TypeEthernet, значение Layer2HeaderLength должно иметь значение 14 или больше.
- Если для параметра Layer2Type задано значение NetPacketLayer2TypeNull, значение Layer2HeaderLength должно иметь значение 0.
- Если Layer3Type является типом IPv4, значение Layer3HeaderLength должно иметь значение 20 или больше.
- Если Layer3Type является типом IPv6, значение Layer3HeaderLength должно иметь значение 40 или больше.
- Если параметр Layer4Type имеет значение Tcp, значение Layer4HeaderLength должно иметь значение 40 или больше.
- Если параметр Layer4Type имеет значение Udp, значение Layer4HeaderLength должно иметь значение 8 или больше.
- Поля типа слоя должны находиться в соответствующем диапазоне перечисления.
Макет не используется во время Tx.
NET_FRAGMENT
NET_FRAGMENT правила полей зависят от того, получает или передает драйвер, а также от того, присоединены ли буферы фрагментов к пакетам драйвером или платформой.
Rx или Tx | Примечания |
---|---|
Rx |
|
Tx |
|