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


Отправка кадров Ethernet

Транспорт Windows TCP/IP поддерживает набор требований для отправки кадров Ethernet. Любой драйвер (например, драйвер-посредник MUX или драйвер фильтра), который отправляет запросы на отправку или изменяет запросы на отправку выше зависимостей драйверов, должен поддерживать требования, которые реализует транспорт TCP/IP.

Примечание Если какой-либо драйвер в стеке драйверов не соответствует этим требованиям, базовые драйверы минипорта, промежуточные драйверы MUX и драйверы фильтров могут вести себя непредсказуемо.

Для запросов на отправку Ethernet драйверы должны поддерживать следующие требования:

  • Если драйвер создает запрос на отправку, драйвер должен выделить NET_BUFFER_LIST структуру для кадров Ethernet. Элемент NetBufferListInfo в каждой NET_BUFFER_LIST структуре должен содержать данные вне диапазона (OOB), необходимые для конкретного использования. Данные OOB применяются ко всем NET_BUFFER структурам, связанным со структурой NET_BUFFER_LIST.

  • Если драйвер создает запрос на отправку, драйвер должен выделить одну или несколько NET_BUFFER структур для кадров Ethernet и связать эти структуры со структурой NET_BUFFER_LIST. Каждая NET_BUFFER структура, связанная со структурой NET_BUFFER_LIST, описывает один кадр Ethernet. Драйвер может связать несколько структур NET_BUFFER_LIST в запросе на отправку.

  • Все структуры NET_BUFFER, связанные со структурой NET_BUFFER_LIST, должны иметь одинаковый тип кадра Ethernet и версию протокола IP (IPv4 или IPv6).

  • Все структуры NET_BUFFER, связанные со структурой NET_BUFFER_LIST, должны иметь одинаковые MAC-адреса источника и назначения.

  • Если драйвер отправляет кадры TCP или UDP, все структуры NET_BUFFER, связанные со структурой NET_BUFFER_LIST, должны быть связаны с тем же соединением TCP или UDP. Примечание В соответствии со следующими требованиями передаваемые кадры Ethernet можно разделить. То есть несколько списков дескрипторов памяти (MDL) могут быть связаны со структурой NET_BUFFER в запросе на отправку.

  • Не разделяйте заголовок MAC кадра Ethernet передачи между несколькими mdl. Обработайте флаг Виртуальной локальной сети (VLAN) (или Приоритет), если он имеется, как часть заголовка MAC. Поэтому этот флаг должен находиться в том же MDL, что и остальная часть заголовка MAC.

  • Если драйвер изменяет связи в цепочке MDL в структуре NET_BUFFER или цепочке NET_BUFFER в структуре NET_BUFFER_LIST, драйвер должен восстановить связи с исходной конфигурацией, прежде чем он вернет право собственности на NET_BUFFER_LIST на более низверх драйвер. Однако драйверы не требуются для восстановления связей между NET_BUFFER_LIST структурами.