Понятия и определения удаленного NDIS
В этом разделе представлен обзор требований к удаленному NDIS для канала связи и драйверов нижнего уровня, которые используются для обмена данными между узлом и удаленным устройством NDIS. В этом разделе также описаны переходы состояния устройства и основные операции, такие как инициализация, остановка и сброс.
Канал управления
Канал управления должен быть надежным и обеспечивать упорядоченную доставку. Он используется для всего обмена данными, кроме передачи пакетов сетевых данных. Все необходимые управляющие сообщения, за исключением REMOTE_NDIS_HALT_MSG и REMOTE_NDIS_INDICATE_STATUS_MSG, являются обменом запросами и ответами, инициированными узлом. Устройство должно отвечать в течение периода ожидания, указанного для каждой шины.
Канал данных
Канал данных используется исключительно для передачи пакетов сетевых данных. Он может состоять из нескольких подканалов (например, для разного качества обслуживания), как определено для соответствующей шины.
Инициализация и очистка
Каналы управления и данных инициализируются и настраиваются, как указано для соответствующей шины. Узел отправляет REMOTE_NDIS_INITIALIZE_MSG сообщение на удаленное устройство NDIS. Удаленное устройство NDIS предоставляет сведения о его типе (без подключения или с ориентацией на подключение), поддерживаемом носителе и версии в ответном сообщении REMOTE_NDIS_INITIALIZE_CMPLT.
Узел или удаленное устройство NDIS может разорвать канал связи через сообщение REMOTE_NDIS_HALT_MSG . Все невыполненные запросы и пакеты удаляются при получении этого сообщения.
Определения состояния устройства
После инициализации на уровне шины устройство находится в неинициализированном состоянии RNDIS. Получив REMOTE_NDIS_INITIALIZE_MSG и ответив REMOTE_NDIS_INITIALIZE_CMPLT с состоянием RNDIS_STATUS_SUCCESS, устройство переходит в состояние инициализации RNDIS.
После получения REMOTE_NDIS_SET_MSG указания ненулевого значения фильтра для OID_GEN_CURRENT_PACKET_FILTER устройство переходит в состояние инициализации данных RNDIS.
При инициализации RNDIS-data получение REMOTE_NDIS_SET_MSG, указывающее нулевое значение фильтра для OID_GEN_CURRENT_PACKET_FILTER возвращает устройство в состояние инициализации RNDIS.
Прием REMOTE_NDIS_HALT_MSG или отключение или жесткий сброс на уровне шины в любое время приводит устройство к неинициализированному состоянию RNDIS.
Остановить
В любой момент, когда устройство находится в состоянии инициализации RNDIS или RNDIS-data-initialized, главный компьютер может завершить работу удаленного NDIS устройства, отправив REMOTE_NDIS_HALT_MSG на устройство.
Сброс канала связи
Канал связи сбрасывается при возникновении ошибки, например истечения времени ожидания сообщения. Узел может инициировать сброс в любое время, когда устройство находится в инициализированном состоянии RNDIS, отправив REMOTE_NDIS_RESET_MSG на устройство, и устройство должно отправить ответное сообщение после завершения сброса. Например, узел может инициировать сброс при возникновении ошибки, такой как истечение времени ожидания сообщения.
Обратите внимание, что это обратимый сброс в том смысле, что все дескрипторы (например, виртуальные машины для устройств, ориентированных на подключение) остаются действительными после сброса. Удаленное устройство NDIS отменяет все невыполненные запросы и пакеты в рамках процесса сброса. Удаленное устройство может сбросить некоторые аппаратные компоненты, но сохранить канал связи без изменений.
Если удаленное устройство NDIS выполняет перезагрузку, это событие эквивалентно "Удалить", за которым следуют события "Добавить" Plug and Play. Драйвер мини-порта NDIS узла будет остановлен и удален, а также будет добавлен и запущен новый экземпляр. Вся инициализация на уровне шины и удаленная инициализация NDIS будет выполнена повторно. Удаленное устройство NDIS может перезагрузиться в случае критического сбоя устройства.
Управление потоком
Удаленному устройству NDIS может потребоваться осуществлять управление потоком, чтобы предотвратить переполнение узлом буферов данных пакетами. Все положения или требования к управлению потоком зависят от шины.
Упорядочение числовых байтов
Все числовые значения в сообщениях Remote NDIS должны быть закодированы в малобайтовом формате (сначала наименее значимый байт).
Инкапсуляция сообщений NDIS
Не существует спецификации remote NDIS для способа инкапсулировать сообщения NDIS в сообщения шины или примитивы.