Ncm network control model

Программа DriverPack полностью бесплатна

  • Главная /
  • устройства Wi-Fi /
  • устройства Wi-Fi Huawei /
  • Huawei Mobile Connect – Network Card

Устали искать драйверы для ваших устройств?

DriverPack Online автоматически найдет и установит нужные вам драйверы

Я, наивный, раньше думал, что протоколов общения с GSM-модемом на сегодняшний день существует не так уж и много. Пока не набрёл в Сети на одну занимательную PDF-ку с презентацией. Оказывается, оных технологий существует около десятка. Причём, как относительно "стандартных" и более-менее распространённых, так и всяких проприетарных и экзотических. Наглядно проиллюстрировать ситуацию можно так:

Если вкратце, то весь этот зоопарк сводится примерно к следующему.

  • Семейство AT-комманд + PPP
  • Семейство ECM (Ethernet Control Model)
  • Семейство EEM (Ethernet Emulation Model)
  • Семейство NCM (Network Control Model)
  • Проприетарщина типа Sierra и Option
  • Условно-проприетарщина типа QCDM, WMC, QMI
  • RNDIS
  • MBIM

Если интересно, сравнение стандартизированных протоколов (ECM, EEM, NCM) и RNDIS можно посмотреть вот здесь.

Как говорится, "оу май факинг гад"! Но это всё голая теория. А что мы имеем на практике и какой протокол / модем лучше выбрать для использования в повседневной нелёгкой админской жизни и на какие грабли можно наступить? Какие нюансы следует держать в голове и учитывать?

  1. Варианты с PPP и RNDIS — самые тормозные, но в то же время и самые универсальные. Если вам нужна высокая скорость передачи данных и/или торренты, то они не для вас. Первый упирается в архитектурные ограничения, второй — в вычислительные мощности модема, который в таком случае становится уже и не модемом, а очень даже роутером. И помните, что RNDIS автоматически подразумевает наличие ещё одного NAT-а внутри модема, наряду с NAT-ом в сети провайдера.
  2. Самым свежим, "молодым" и перспективным протоколом является MBIM. В Windows начиная с 8-ки он поддерживается "из коробки", никаких драйверов устанавливать не требуется: "воткнул и работает". По этой же причине он не всегда корректно заводится под Linux-ом. В 2013-м году там было вообще всё очень грустно. Как сейчас — не знаю, надо тестировать. Может, и допилили. Именно этому протоколу следует отдавать предпочтение при прочих равных.
  3. Если выбирать между PPP, ECM, EEM и NCM, то лучше уж NCM. Именно он реализован в большинстве хуявых (Huawei) модемов.
  4. Почти все устройства на базе широко распространённых чипов имени Qualcomm будут поддерживать QMI. С точки зрения пользователя это вполне нормальный, годный протокол. Linux-ом обычно понимается нормально. Под винду надо ставить драйвера от производителя. Если оный супостат не приложил к железке диск с драйверами, то попробуйте взять их от Sierra Wireless EM7345. 🙂
  5. Бывает, что одно и то же устройство умеет работать в нескольких различных режимах. Тогда предпочтение тому или иному протоколу следует отдавать в таком порядке, по убыванию: проприетарщина, QMI, MBIM, NCM, ECM, RNDIS, PPP. Данная рекомендация касается админов и пользователей. У разработчиков софта скорее всего будет диаметрально противоположное мнение. 🙂
  6. Некоторые устройства по-разному представляются операционной системе в зависимости от её типа и версии. Например, бывают модемы, которые под Windows 7 автоматически включают режим RNDIS, под Windows 8 — MBIM, а под Linux-ом — QMI. Такая технология называется "морфинг" (morphing). Иногда это удобно, а иногда наоборот, прибавляет проблем.
Читайте также:  Dark souls 2 выносливость

Теперь касаемо выбора конкретного железа. Из того, что на момент написания этого поста реально купить, достойны внимания четыре модели.

  • Sierra AirCard 320U. Офигенно, дорого, в России официально не продаётся. Есть на AliExpress-е. Заводится под чем угодно быстро и без проблем. Понимает свой собственный проприетарный протокол имени "Direct IP" (есть модуль под Linux) и QMI.
  • Huawei E3272 и его клоны. Снят с производства, но можно взять на каком-нибудь Avito БУшный. Понимает RNDIS, он же HiLink, и NCM. Для переключения между одним и другим требуется перепрошивка. Обычно из коробки идёт с NCM-ом.
  • Huawei E3372 и его модификации. Старший брат предыдущего товарища на более новом чипе и с более мощным процессором. Также понимает RNDIS и NCM, но намного хуже перепрошивается. Вариант для настоящих красноглазиков. Из коробки обычно идёт с прошивкой RNDIS (HiLink). Экземпляры из некоторых партий дык вообще перешиваются исключительно с применением паяльника. Спорный выбор, но имеет право на существование.
  • ZTE MF823D. Полиморф. Настоящий комбайн с труЪ-линуксом внутри. Сделан на базе Qualcomm. Понимает QMI, RNDIS, MBIM и вроде как ECM. Для ценителей доступен линуксовый shell через telnet либо ADB-интерфейс. В MBIM переключать без особой нужды не рекомендуется, ибо при этом сразу теряется доступ к "кишкам" модема. Весьма занятный представитель своего племени.

Что касается конкретно меня, то первые два типа "мопедов" у меня уже довольно давно и успешно трудятся на благо предприятия. Про остальные два больше ничего сказать толком не могу. Купил по штучке "на пробу", буду ковырять и смотреть как они себя ведут под реальной нагрузкой. Если у кого-то уже есть опыт использования одного из них, милостиво прошу поделиться своими соображениями. Потому что пока не могу решить кому бы отдать предпочтение при закупке следующей партии.

Читайте также:  Terminating on signal 15

Implement application specific behavior of a Communication Device Class (CDC) USB Device using the sub-class Network Control Model (NCM) for Ethernet-over-USB applications. More.

Content

User API User API reference of the Communication Device Class (NCM). Configuration Configuration of the USB Device CDC (NCM) Class in ВµVision.

Description

Implement application specific behavior of a Communication Device Class (CDC) USB Device using the sub-class Network Control Model (NCM) for Ethernet-over-USB applications.

The ability to connect Ethernet devices via USB ports is known as Ethernet-over-USB. Various industry protocols are available to achieve this. One of the most advanced protocols is the CDC (NCM) class which is supported by the USB Component.

The usbnet Kernel module in Linux hosts enables you to attach a USB Device to the host to emulate an Ethernet device. There is no native Ethernet-over-USB support in Windows.

The USB Component allows multiple instances of the CDC class. This feature is used to create USB Composite Devices. Each CDC class instance has a separate files and interface functions:

  • A CDC configuration file USBD_Config_CDC_n.h.
  • An application-specific user source code file, which can be implemented with the USBD_User_CDC_NCM_n.c, or USBD_User_CDC_NCM_ETH_n.c.
  • Functions that start with the prefix USBD_CDCn_NCM are available for each instance of a CDC NCM class.

This documentation uses n as a placeholder for the instance number 7. Most applications only require one instance of a CDC NCM class. For the first CDC NCM class instance the instance number is 0:

  • USBD_Config_CDC_0.h
  • USBD_User_CDC_NCM_0.c
  • The function prefix is USBD_CDC0_NCM

Descriptor Requirements The following descriptors are required in an USB CDC NCM Device:

  • Standard Device Descriptor
  • Standard Configuration Descriptor
  • Interface Association Descriptor
  • CDC Header Functional Descriptor
  • CDC Union Functional Descriptor
  • CDC Ethernet Networking Functional Descriptor
  • NCM Functional Descriptor
  • Standard Interface Descriptor for the CDC Class communication interface
  • Standard Endpoint Descriptor for Interrupt IN endpoint
  • Standard Interface Descriptor for the CDC Class data interface
  • Standard Endpoint Descriptors for Bulk IN and Bulk OUT endpoints
Читайте также:  Как загрузить айтюнс на компьютер

The necessary descriptors are automatically generated by the USB Middleware Component. The page USB Descriptors provides more information on the topic.

The handling for the CDC class endpoint events is implemented in USBD_CDCn_Int_Thread and USBD_CDCn_Bulk_Thread which are started by USBD_Initialize. Each instance of a CDC class runs an instance of USBD_CDCn_Int_Thread and USBD_CDCn_Bulk_Thread.

The thread USBD_CDCn_Int_Thread handles Interrupt IN Endpoint whereas the USBD_CDCn_Bulk_Thread handles the Bulk IN and Bulk OUT Endpoints.

Implementation

To create an USB Device with a CDC NCM class:

  • Set the required number for USB:Device:CDC class instances during the RTE Component Selection.
  • Set the parameters in the configuration file USBD_Config_CDC_n.h.
  • Implement the application specific behavior using this templateor
  • Use the pre-built template file for Ethernet-over-USB.

User Code Template USBD_User_CDC_NCM.c

The following source code contains all the required callback functions and can be used to implement the application specific behavior of a USB CDC (NCM) Device.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector