3 сент. 2010 г.

МТС Коннект

Поговорим о 3G/EDGE/GPRS USB модемах, раздаваемых "большой тройкой". Сейчас речь пойдет о Huawei E1550, но, думаю, для других моделей все нижесказанное тоже актуально, за исключением разве что idProduct'а и idVendor'а, которые можно найти в Сети для каждой железки.
Проблема работы этих устройств в линуксах заключается, по большому счету, в том, что при подключении девайс определяется как CD-ROM, на котором лежит софт для подключения и работы в винде. После установки он сам переключает (flip-flop) девайс на "режим модема". У linux же такое переключение возможно, если работать с модемом софтинкой Mobile Partner от Huawei. Но она, на мой взгляд, уж сильно прожорливая и неторопливая, что особо нехорошо для мобильных устройств. Итак, основная задача - перевести девайс в режим модема, заимев в результате /dev/ttyUSB0, через который pppd и  будет "звонить". В случае Ubuntu все просто:
sudo apt-get install usb-modeswitch
Свежие версии "знают" о Huawei E1550, поэтому добавлять ничего не придется.
Для того, чтобы модем переключался в нужный режим автоматически при подключении, создадим правило udev: /etc/udev/rules.d/45-huawei1550.rules следующего содержания:
SUBSYSTEM=="usb", SYSFS{idProduct}=="1446", SYSFS{idVendor}=="12d1", RUN+="/usr/sbin/usb_modeswitch -v 0x12d1 -p 0x1446 -m 0x01 -M 55534243000000000000000000000011060000000000000000000000000000"
Таким образом, если udev видит подключенное устройство с совпадающими параметрами, он выполняет соответствующую команду.
Для проверки следует переподключить модем и поглядеть вывод lsusb, который должен отрапортовать о наличии модема.
lsusb | grep Huawei
Bus 003 Device 004: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem
В случае с Debian Lenny действий придется совершить чуть больше, ибо пакет usb-modeswitch доступен только для sid. Не беда, соберем сами. Алгоритм простой: качаем исходники, распаковываем, собираем и устанавливаем. Предварительно полезно прочитать информацию на страничке продукта, выяснив, к примеру, что для сборки необходимо установить пакеты tcl и libusb-dev, а также pppconfig для последующей настройки подключения.
apt-get install tcl libusb-dev pppconfig
mkdir modswitch; cd modeswitch
wget -c http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.1.4.tar.bz2
tar zjvf  usb-modeswitch-1.1.4.tar.bz2
cd  usb-modeswitch-1.1.4
make install
cd ..
wget -c http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20100826.tar.bz2
tar xjvf usb-modeswitch-data.tar.bz2
cd  usb-modeswitch-data
make install
Установщик сам "договорится" с udev-ом, поэтому переключение в режим модема при подключении девайса должно работать сразу, что и следует  проверить после окончания установки usb-modeswitch.
Теперь осталось лишь настроить ppp-подключение. Запускаем pppconfig, отвечаем на вопросы, к примеру, так: 
Create -> mts -> dynamic -> pap -> mts -> mts -> 115200 -> tone -> *99# -> Нет -> /dev/ttyUSB0 -> Finished
Все, осталось запустить соединение:
pppd call mts nodetach
Все должно работать. 
Один раз, на убунте, столкнулся с ошибкой: pppd отключался с таким отлупом:
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfNak id=0x1 ]
sent [IPCP ConfReq id=0x2 ]
Modem hangup
Connection terminated.
Полечилось явным указанием точки входа в /etc/chatscripts/mts:

# modeminit
'' ATZ
'' AT+CGDCONT=1,\"IP\",\"internet.mts.ru\"
Проверка скорости на internet.yandex.ru:

Я.Интернет. Измерьте вашу скорость.
То бишь - HSDPA имеет место быть худо-бедно ;)