E3276 - тоже касается, железо аналогичное, прошивки совместимы.
E3272 модемом можно назвать с натяжкой - понимает AT команды с некоторыми прошивками, начинка там вполне роутерная.
Ещё и MicroSD кардридер в подарок.
Кладовая знаний по этому модему тут: http://4pda.ru/forum/index.php?showtopic=508842&st=3440
прошивка 22.*, так же шьётся отдельно веб интерфейс. Модем определяется как сетевой адаптер подключённый к сети, в которой есть роутер с NAT, DHCP сервер и Web сервер - это всё модем. Модем сам подключается, сам раздаёт адреса и сам NAT-ит.
В веб интерфейсе можно смотреть уровень сигнала, читать SMS и отправлять USSD запросы. (не во всех веб интерфейсах это доступно)
Минусы: если брать “белый” IP адрес то в этом режиме входящие подключения так же не будут работать; возможно что модему не хватит ресурсов для того чтобы задействовать доступную пропускную способность.
прошивка 21.*, (он же RAS) модем внутри себя эмулирует PPP сервер на COM порте. Нужно по “старинке” создавать подключение и “дозваниваться”.
В таком режиме у меня наблюдались флуктуации пинга: 25+-4 мс. И в этом режиме у меня нагрузка на систему при замерах скорости была выше.
Уровень сигнала и прочее доступно через AT команды.
прошивка 21.*, модем виден в системе как сетевой интерфейс и COM порт для управления.
Ещё этот режим называют NDIS, тк модем эмулирует стандартный сетевой адаптер, драйвера на который есть во многих ОС из коробки.
Это наиболее интересный, на мой взгляд, режим работы модема.
Можно получить “белый” IP адрес прямо на сетевой интерфейс системы по DHCP, пинги не прыгают как в режиме модема, нагрузки на систему не заметно.
В винде в этом режиме он работает практически как WiFi: в списке доступных сетей показывает сеть оператора, один щелчок, вводим APN и инет работает.
см шапку топика: http://4pda.ru/forum/index.php?showtopic=508842&st=3440
всё делаем в точности, у меня получилось.
AT+CGSN
Или можно прочитать под крышкой и набить ручками.
Используем huaweicalc_win32.rar или huaweicalc_src.tar.gz
Код V201 или V2 (666666 в примере) вводим командой:
AT^CARDLOCK="666666"
Мегафоновской оригинальной прошивки нет в инете в свободном доступе, но есть близкие по номеру версии от других операторов.
Прошивки на 22.* - это HiLink режим работы, к ней в комплект нужен WebUI (веб интерфейс).
Прошивки на 21.* - это Modem+NCM режими работы, к ней в комплект можно шить (но не обязательно) Dashboard (образ компакт диска для виртуального CD-ROM).
Перешиваться 21↔22 нужно строго по инструкции из шапки.
Драйвера ставить нужно по одному разу для 21 и 22 прошивок, потом это не требуется, тк венда их сохраняет и ставит автоматом.
Прошивки есть для разных моделей: 153, 210, 927 и тп. Разные модели работают на разных частотах/каналах.
Hint: Если прошить мегафоновский модем прошивкой от МТС светодиод начнёт светится красным вместо зелёного, вероятно есть и какие то другие последствия, поскольку мегафон модель 153 а мтс 210.
Большая коллекция прошивок:
http://unlock4modem.in/download-huawei-e3272-modem-firmware-software-update-free/
и
http://3ginfo.ru/download58.html
Восстановление работоспособности
Опять же отсылаю на 4pda, метод “иголки”, ссылка в шапке.
Я замыкал контакт пока модем не отдавал в систему свои COM порты и дальше шил обычную прошивку.
Некоторые говорят что такое для них не срабатывает а вот флешер от хуавея помогает.
Мне приходилось его восстанавливать 2-3 раза после AT^SETPORT с неправильной последовательностью, об этом ниже.
Тут всё просто и без подробностей.
Вставили модем, подождали пока он прогрузится, система увидела CD-ROM, можно поставить от туда софт оператора, при его установке дрова поставятся автоматом.
Скачиваем дрова из инета (да, без инета их скачать не получится, а без дров туда не попасть :) ), хотя бы из шапки в 4PDA и поставим их самостоятельно.
После установки модем увидит новые устройства. (скорее всего модем, сетевой адаптер, COM порт и кардридер)
Если служба: “Автонастройка WWAN” запущена, то щёлкаем по значку с сетями, там будет “Подключение через адаптер широкополосной мобильной связи” а под ним название нашего ОПСОСа и уровень сигнала, по виду всё как с WiFi.
Щёлкаем подключится, оно спросит APN (для мегафона: internet), имя пользователя и пароль (для мегафона можно пустые), и всё, инет есть.
Софт от ОПСОСа смысла ставить не вижу, всё делается средствами системы и через сайт ОПСОСа.
Hint: В целях безопасности, настоятельно рекомендую зайти в свойства адаптера: “Подключение через адаптер широкополосной мобильной связи” и снять галочки с клиента и службы доступа к файлам.
Ближе ко второму случаю, максимум поставить дрова, остальное сделается автоматом.
HiLink прошивку я поставил, посмотрел и снёс, подробностей не помню.
<spoiler title=“Увы”>Как только я увидел 192.168.1.1 в качестве шлюза по умолчанию и DNS сервера, зашёл и узрел веб интерфейс с минимум инфы и настроек, мне вспомнился мой первый ADLS модем DSL-300T, примерно такого же содержания, который держал максимум 100 соединений через себя в режиме “роутера”. И хотя прошло 8 лет, железо уже совсем другое, но ассоциации с ограниченным функционалом никуда не делись.</spoiler>
Текущий режим смотреть в конект манагере или через терминал послать команду:
AT^SYSINFOEX ^SYSINFOEX:1,0,1,255,,3,"WCDMA",41,"WCDMA"
Настроить что использовать - аналогично, + см топик 4PDA.
В терминале набрать (через порт модема точно работает):
AT^USSDMODE=0 AT+CUSD=1,"*100#",15
В ответ придёт пачка кодов, видимо сообщение в юникоде.
Вероятно есть какой то софт, который умеет делать тоже самое по нажатию кнопки.
Дальше хардкор, на основе собственных опытов.
Команда:
AT^SETPORT?
покажет как сконфигурирован модем.
Отправлять в COM порт для управления или в то что винда/линукс/фря называет модемом.
Отправить можно взяв софт из шапки в 4PDA или Putty или cu -l /dev/cuaU0 (~. - выход из терминалки) во FreeBSD.
В ответ можно получить какой то из вариантов:
AT^SETPORT="A1,A2;10,12,16,A1,A2" AT^SETPORT="A1;10,12,16,A1,A2" AT^SETPORT="FF;10,12,16,A1,A2" AT^SETPORT="FF;61,62,76,A1,A2"
Для того чтобы узнать какой код что означает служит команда: AT^SETPORT=?
AT^SETPORT=? ^SETPORT:1: 3G MODEM ^SETPORT:2: 3G PCUI ^SETPORT:3: 3G DIAG ^SETPORT:5: 3G GPS ^SETPORT:A: BLUE TOOTH ^SETPORT:16: NCM ^SETPORT:A1: CDROM ^SETPORT:A2: SD ^SETPORT:10: 4G MODEM ^SETPORT:12: 4G PCUI ^SETPORT:13: 4G DIAG ^SETPORT:14: 4G GPS
Модель 153 - GPS - Я тоже было раскатал губу, но это, похоже, не распаяно физически или вообще от софта сходного чипа, тем более в прошивке от модели 210 GPS вообще не упоминается.
Модель 210
AT^SETPORT=? ^SETPORT:1: 3G MODEM ^SETPORT:2: 3G PCUI ^SETPORT:7C: SerialC ^SETPORT:78: Shell A ^SETPORT:79: Shell B ^SETPORT:76: NCM ^SETPORT:A1: CDROM ^SETPORT:A2: SD ^SETPORT:61: 4G MODEM ^SETPORT:62: 4G PCUI ^SETPORT:7B: SerialB ^SETPORT:7A: SerialA
но это не “железно”, те возможно данные коды к модели и не привязаны, просто на тех прошивках что я пробовал было вот так.
Как минимум есть модели/прошивки где: ^SETPORT:46: NCM (код из дров линуха)
Итак,
AT^SETPORT="A1,A2;10,12,16,A1,A2"
AT^SETPORT="A1;10,12,16,A1,A2"
AT^SETPORT="FF;10,12,16,A1,A2"
Первый - два кода (до точки с запятой) описывают какие устройства будут видны системе до того как драйвер отправит код переключения режима, все оставшиеся коды это устройства которые доступны в рабочем режиме.
FF - означает что модем сразу переходит в рабочий режим.
A1, A2 - у меня сводился к A1 - только CD-ROM.
Пример: AT^SETPORT="A1;10,12,16,A1,A2" - в системе появляется CD-ROM с Dashboard, если это первый раз, то юзер ставит от туда дрова, дрова отправляют спец код и в системе появляется всё остальное.
Время переключения конфигурации - примерно 2 секунды.
Пример: AT^SETPORT="FF;10,12,16,A1,A2" - в системе сразу появляется куча устройств, юзер/система сам ищет и ставит дрова.
ВАЖНО!!!
Если мы меняем конфигурацию модема, то команда AT^SETPORT=“…;….” должна содержать коды в порядке возрастания!
Иначе модем не сможет инициализироваться и придётся его восстанавливать.
idProduct - это PID устройства, так драйвер отличает разные устройства одного производителя.
VID - идентификатор производителя одинаковый, 0x12d1 - для хуавея.
Для начальной конфигурации A1:
idProduct = 0x14fe - с родной прошивкой меги (21.*, модель 153 скорее всего для всех них)
idProduct = 0x155b - с прошивкой МТС (21.*, модель 210)
При этом система видит только один CD-ROM. Если прошит дашборд то его можно примонтировать и там будут файлы.
Для продолжения работы вставьте 5 долларов в дисковод А требуется отправить в модем специальный код.
Это не только хуавей такой, многие модемы так же работают.
В венде код отправляет драйвер, заботливо написанный хуавеем.
В Linux пользуются программой usb_modeswitch (насчёт драйверов которые это умеют я ничего не знаю).
Во FreeBSD можно воспользоваться usb_modeswitch либо это в может сделать драйвер u3g (если его заботливо пропатчить, см ниже).
Пример: usb_modeswitch -v 0x12d1 -V 0x12d1 -p 0x14fe -P 0x14fe -M 55534243123456780000000000000011060000000000000000000000000000
В интернете нашлось три разных кода:
1. 55534243123456780000000000000011060000000000000000000000000000
2. 55534243123456780000000000000011062000000100000000000000000000
3. 55534243123456780000000000000011062000000101000100000000000000
(555342431234567800000000000000 - это коды обёртка для SCSI, насколько я понял, в u3g оно генерируется на лету и код в исходнике начинается с 0x11, 0x06).
Код 1: 11060000000000000000000000000000
Похоже старый код инициализации.
На данный момент именно он прописан в u3g драйвере FreeBSD.
Прошивка 153-21.470.05.00.00 (вроде как самая свежая) вообще не принимает этот код и похоже зависает!
Остальные (210-21.436.11.00.143_Russia+MTS, 153-21.436.05.00.56_Tele2_Estonia, 153-21.436.05.00.1134_Baltic_OM (как и родная от меги)) принимают и выставляют PID
idProduct = 0x1c1e
при этом все устройства идут со стандартными идентификаторами, универсальными для всех производителей
usbconfig dump_all_config_desc
Interface 0 .... bInterfaceClass = 0x0002 bInterfaceSubClass = 0x0002 bInterfaceProtocol = 0x00ff ...
Эти идентификаторы известны как стандартные и подхватываются стандартные дрова типа if_cdce во FreeBSD или аналогичный в линухе, для COM порта и модема аналогично.
Ещё к побочным эффектам можно отнести что команда: AT^SETPORT=? на прошивке: 210-21.436.11.00.143_Russia+MTS выдаёт вот такую ошибочную конфигурацию:
AT^SETPORT:A1,A2;7C,A1,62,76,A2,79
хотя должна
AT^SETPORT:A1,A2;61,62,76,A1,A2
и под вендой она выдаёт правильно, что намекает что в венде данный код инициализации не используется.
Больше похоже на то, что этот код использовался раньше, и ещё некоторое время работал (до 153-21.470.05.00.00 или раньше), но потом хуавей отказалась от него, возможно из за каких то проблем с универсальными драйверами или ещё каких то причин.
Код 2: 11062000000100000000000000000000
Код 3: 11062000000101000100000000000000
Режим FF (это который через SETPORT настраивается)
Код 3 - похоже самый “новый”, его я достал из самого свежего usb_modeswitch, а уж откуда они его взяли я не интересовался :)
PID получается:
idProduct = 0x1506
А вот устройства уже
usbconfig dump_all_config_desc
Interface 0 ... bInterfaceClass = 0x00ff bInterfaceSubClass = 0x0002 bInterfaceProtocol = 0x0061 ...
где, bInterfaceProtocol - содержит номер устройства из строки инициализации (см AT^SETPORT=?).
bInterfaceClass = 0x00ff - означает специфичные для вендора значения, а не стандартные как было в предыдущем случае - те нужен специальный драйвер.
В линухе только недавно сделали отдельный драйвер: huawei_cdc_ncm.
Всё что выше и ниже пришлось раскопать чтобы написать патч и понять почему с оригинальной прошивкой от меги работало а с новой универсальной уже нет, и почему с прошивкой от МТС заработало после добавления идентификаторов устройства.
Можно накатить патч: https://bz-attachments.freebsd.org/attachment.cgi?id=145319
Здесь обсуждение: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192345
А здесь видно что он и где меняет: https://bugs.freebsd.org/bugzilla/attachment.cgi?id=145319&action=diff
if_cdce.c: просто добавляем идентификаторы NCM устройств от хуавея
u3g.c: выкидываем кусок неиспользуемых констант, добавляем идентификаторы E3272 в список известных, макрос U3G_HUAWEI_IS_CDC чтобы не приставать к NCM устройствам от хуавея в этом драйвере, и два места в которых эта проверка выполняется, и ещё по мелочи.
umodem.c: добавляем идентификаторы специфичные для хуавея, хотя по сути его можно не патчить, u3g делает всё вместо него.
usb_msctest.c: заменяем старый код переключения режима на новый и улучшаем обработку ошибок.
usbdevs: идентификаторы новых устройств.
Увы, но самое важное: замена кода инициализации на новый и макрос U3G_HUAWEI_IS_CDC добавлять не хотят и приходится тратить кучу времени на объяснение что в линуксе это уже сделали и без этого новые модемы хуавей работать не будут.
Притом это касается не только E3272 но и как минимум E3276 и скорее всего других моделей.
Это для модемов со старой прошивкой, типа мегафоновской оригинальной либо после применения патча.
Для МТС не сработает без патча.
Модем эмулирует ethernet адаптер и DHCP сервер.
kldload u3g kldload if_cdce
подключить модем
echo 'AT^NDISDUP=1,1,"internet"' > /dev/cuaU0.1 dhclient ue0 /dev/cuaU0.1 - управляющий порт NCM.
Это не оптимальный режим, поскольку модем эмулирует PPP сервер, а ОС занимается инкапсуляцией/декапсуляцией пакетов в/из PPP, всё это накладные расходы.
Устанавливаем mpd5 из портов, конфигурим и запускаем:
cd /usr/ports/net/mpd5 make install make clean cp /usr/local/etc/mpd5/mpd.script.sample /usr/local/etc/mpd5/mpd.script
Создаём такой файл: “/usr/local/etc/mpd5/mpd.conf”
### MPD configuration file ### startup: ###set user foo bar admin ###set user foo1 bar1 ###set console self 127.0.0.1 5005 set console close #set console enable logging ###set web self 0.0.0.0 5006 set web close #set web enable auth set global disable one-shot tcp-wrapper log +auth -bund -ccp -chat +console -echo -ecp -frame -fsm -iface +ipcp -ipv6cp -lcp -link -phys -radius -rep #log +auth +bund +ccp +chat +console +echo +ecp +frame +fsm +iface +ipcp +ipv6cp +lcp +link +phys +radius +rep default: load modem_client1 modem_client1: create bundle static BndModemCli1 set bundle links L1 set iface addrs 1.1.1.1 2.2.2.2 set iface route default set iface mtu 1500 set iface idle 0 set iface session 0 set iface enable tcpmssfix set iface disable on-demand proxy-arp tee nat netflow-in netflow-out netflow-once set ipcp ranges 0.0.0.0/0 1.1.1.1/0 set ipcp enable req-pri-dns req-sec-dns set ipcp no vjcomp req-pri-nbns req-sec-nbns create link static L1 modem set modem device /dev/cuaU0.0 #set modem speed 921600 set modem watch -cd set modem watch -dsr set modem var $DialPrefix "D" set modem var $Telephone "*99#" set modem var $InitString "+CGDCONT=1,\"IP\",\"internet\"" set modem script DialPeer set modem idle-script Ringback set link action bundle BndModemCli1 #set link mtu 1492 #set link mru 1492 set link fsm-timeout 2 set link keep-alive 4 40 set link max-redial 0 set link redial-delay 8 set link accept pap chap-md5 chap-msv2 set link enable acfcomp protocomp magicnum check-magic set link no chap-msv1 eap incoming multilink shortseq passive callback no-orig-auth keep-ms-domain time-remain peer-as-calling report-mac #set link disable chap pap #set link accept chap pap #set link enable incoming set auth authname user set auth password password open
/dev/cuaU0.0 - это порт модема.
Запускаем: /usr/local/etc/rc.d/mpd5 forcerestart
Сравнил работу в режимах NDIS (NCM) и RAS (modem) под FreeBSD.
Методика: Москва, после полуночи.
wget качал в 8 потоков один и тот же файл в /dev/null
Сервер с файлом в этом же городе, канал до него позволяет более 100 мегабит забирать, сам сервер тоже может 500+ легко для одного файла.
Скорость получилась примерно одинаковой: 7-8 мегабайт в секунду.
Пинг стабильно (более менее) держится и ниже, нагрузки на систему (E8500 - это вам не задохлик роутер на ARM/mips) не заметно вообще.
64 bytes from xxx: icmp_seq=1 ttl=244 time=25.212 ms 64 bytes from xxx: icmp_seq=2 ttl=244 time=25.939 ms 64 bytes from xxx: icmp_seq=3 ttl=244 time=29.943 ms 64 bytes from xxx: icmp_seq=4 ttl=244 time=27.439 ms 64 bytes from xxx: icmp_seq=5 ttl=244 time=25.662 ms 64 bytes from xxx: icmp_seq=6 ttl=244 time=27.778 ms 64 bytes from xxx: icmp_seq=7 ttl=244 time=28.916 ms 64 bytes from xxx: icmp_seq=8 ttl=244 time=27.233 ms 64 bytes from xxx: icmp_seq=9 ttl=244 time=24.446 ms 64 bytes from xxx: icmp_seq=10 ttl=244 time=29.356 ms 64 bytes from xxx: icmp_seq=11 ttl=244 time=25.392 ms 64 bytes from xxx: icmp_seq=12 ttl=244 time=27.369 ms 64 bytes from xxx: icmp_seq=13 ttl=244 time=25.578 ms 64 bytes from xxx: icmp_seq=14 ttl=244 time=27.748 ms
Пинг скачет и несколько выше, нагрузка на систему заметна, примерно 4-6% одного ядра CoreDuo E8400. Такое не всем роутерам под силу.
64 bytes from xxx: icmp_seq=0 ttl=244 time=33.971 ms 64 bytes from xxx: icmp_seq=1 ttl=244 time=27.066 ms 64 bytes from xxx: icmp_seq=2 ttl=244 time=28.687 ms 64 bytes from xxx: icmp_seq=3 ttl=244 time=23.930 ms 64 bytes from xxx: icmp_seq=4 ttl=244 time=26.412 ms 64 bytes from xxx: icmp_seq=5 ttl=244 time=25.663 ms 64 bytes from xxx: icmp_seq=6 ttl=244 time=30.312 ms 64 bytes from xxx: icmp_seq=7 ttl=244 time=29.905 ms 64 bytes from xxx: icmp_seq=8 ttl=244 time=35.774 ms 64 bytes from xxx: icmp_seq=9 ttl=244 time=25.895 ms 64 bytes from xxx: icmp_seq=10 ttl=244 time=31.763 ms 64 bytes from xxx: icmp_seq=11 ttl=244 time=27.883 ms 64 bytes from xxx: icmp_seq=12 ttl=244 time=23.862 ms 64 bytes from xxx: icmp_seq=13 ttl=244 time=29.746 ms 64 bytes from xxx: icmp_seq=14 ttl=244 time=34.491 ms 64 bytes from xxx: icmp_seq=15 ttl=244 time=23.722 ms 64 bytes from xxx: icmp_seq=16 ttl=244 time=31.306 ms 64 bytes from xxx: icmp_seq=17 ttl=244 time=43.241 ms 64 bytes from xxx: icmp_seq=18 ttl=244 time=38.716 ms 64 bytes from xxx: icmp_seq=19 ttl=244 time=31.190 ms