Отправка кадров 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 структурами.