Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Шелезяки —> Peoplenet + C-motech (3G)

Прикручивание 3G модема С-motech под FreeBSD для использования в сети Peoplenet

Автор: Dron.


После облома с подключением по wifi к одному из провайдеров, пришлось
остановиться на Peoplenet.
Вот и займемся прикручиванием данного провайдера к правильной ОС :)
Было решено запереть модем на чердак и воткнуть его в роутер, который
планировался для wifi :)
В качестве роутера выступает iP133/64RAM/2x2,1Gb/мать с USB, как по мне,
вполне достаточно для раздачи и-нета на несколько машин, по крайней мере
в институтское время выручала отлично, думаю и сейчас не подведет :)
Модем C-MOTECH CCU-650U, и рулить всем будет

home-gw# uname -a
FreeBSD home-gw 6.3-RELEASE FreeBSD 6.3-RELEASE #0: Wed Jan 16 04:18:52
UTC 2008 root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
i386

Грузим umodem
home-gw# kldload umodem

Подключаем модем и наблюдаем картинку:
ugen0: CMOTECH CO., LTD. CMOTECH CDMA Technologies, rev 2.00/0.00, 
addr 2

Модем не определился... Следуя проторенной тут дорожке,
за которую спасибо товарисчу paradox'y,
смотрим, VendorID и DevID

home-gw# usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000),  
rev 1.00
 port 1 powered
 port 2 addr 2: full speed, power 500 mA, config 1, CMOTECH CDMA Technologies 
(0x6523), CMOTECH CO., LTD.(0x16d8), rev 0.00

и согласно обсуждению в форуме правим патч, применяем его, пересобираем
модуль и подгружаем (готовый патч под мою систему и железку смотри ниже)
Переподключаем модем и смотрим

ucom0: CMOTECH CO., LTD. CMOTECH CDMA Technologies, rev 2.00/0.00, addr 2, 
iclass 2/2
ucom0: data interface 1, has CM over data, has break
ucom0: status change notification available

Это уже веселее, пойдем далее

home-gw# cu -l /dev/cuaU0
Connected
t
OK
at
OK
ati
Manufacturer: C-MOTECH Co., Ltd.
Model: CCU-650
Revision: CCU65TSU00
Esn: 532E8A6F
+GCAP: +CIS707A, +MS, +ES, +DS, +FCLASS

OK
ati3
Manufacturer: C-MOTECH Co., Ltd.
Model: CCU-650
Revision: CCU65TSU00
Esn: 532E8A6F
+GCAP: +CIS707A, +MS, +ES, +DS, +FCLASS

OK

Так, модем "верещит" как положено :) Поехали дальше...

Под винды есть сервисная программка для модема, посмотрим может и повезет.
Порывшись на форумах, вышел на такую [url=http://www.bsdua.org/cdma.html]
страничку[/url], CLI приложение для управления C-MOTECH модемами, написанная
Алексеем Ватченко.
Исходники для OpenBSD, есть порт для Linux (спрашиваем автора, ссылочку он
по какой-то причине не указал на сайте)
Теперь благодаря товаричсу Andy имеем shar для этой утили (смотри ниже).
Скачиваем shar (я его скачал в /tmp), распаковываем (в /root создал каталог
cdma, в него и распакую), ошибочка...
Создаем каталог files и распаковываем снова, получилось, собираем, rehash и
попробуем запустить...


home-gw# cd /root
home-gw# mkdir cdma
home-gw# cd cdma
home-gw# mv /tmp/cdma.shar /root/cdma/
home-gw# sh cdma.shar
x - ./Makefile
x - ./distinfo
x - ./pkg-descr
x - ./files/patch-aa
cdma.shar: cannot create ./files/patch-aa: No such file or directory
x - ./files/patch-ab
cdma.shar: cannot create ./files/patch-ab: No such file or directory
x - ./pkg-plist
home-gw# mkdir files
home-gw# sh cdma.shar
x - ./Makefile
x - ./distinfo
x - ./pkg-descr
x - ./files/patch-aa
x - ./files/patch-ab
x - ./pkg-plist
home-gw# make install clean
===>  Vulnerability check disabled, database not found
=> cdma-0.10.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://www.bsdua.org/files/.
cdma-0.10.tar.gz                              100% of   12 kB   23 kBps
===>  Extracting for cdma-0.10
=> MD5 Checksum OK for cdma-0.10.tar.gz.
=> SHA256 Checksum OK for cdma-0.10.tar.gz.
===>  Patching for cdma-0.10
===>  Applying FreeBSD patches for cdma-0.10
===>  Configuring for cdma-0.10
===>  Building for cdma-0.10
"/usr/share/mk/bsd.compat.mk", line 36: warning: NOMAN is deprecated in favor
of NO_MAN
Warning: Object directory not changed from original /root/cdma/work/cdma-0.10
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g  -c cdma.c
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g  -c dev.c
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g  -c util.c
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g  -c cmotech_ccu550.c
cmotech_ccu550.c:573: warning: unused parameter 'ctx'
cmotech_ccu550.c:573: warning: unused parameter 'n_sms'
cmotech_ccu550.c:42: warning: unused parameter 'ctx'
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g  -c cmotech_ccu650u.c
cmotech_ccu650u.c:31: warning: unused parameter 'ctx'
cc -O2 -fno-strict-aliasing -pipe   -W -Wall -g   -o cdma cdma.o dev.o util.o 
cmotech_ccu550.o cmotech_ccu650u.o
===>  Installing for cdma-0.10
===>   Generating temporary packing list
===>  Checking if comms/cdma already installed
"/usr/share/mk/bsd.compat.mk", line 36: warning: NOMAN is deprecated in favor
 of NO_MAN
install -s -o root -g wheel -m 555   cdma /usr/local/bin/
===>   Registering installation for cdma-0.10
===>  Cleaning for cdma-0.10
home-gw# rehash
home-gw# ./cdma
cdma [-d device_model] [-f device] command
Commands:
        list            - show all supported device models
        date            - show date and time
        date set        - set local time
        mode            - show current mode
        mode hybrid     - set hybrid mode
        mode 1x         - set 1x mode
        mode ev-do      - set EV-DO mode
        pb              - show address book
        pb add <idx> <phone> <name>     - add record with index <idx>
        pb del <idx>    - delete record by index <idx>
        pin             - show whether PIN code is enabled
        pin enable      - enable PIN code
        pin disable     - disable PIN code
        pin change      - change PIN code
        sms             - show stored messages
        sms check       - check for new SMS
        sms send <phone>        - send SMS (from stdin)
        sms read        - read new SMS (written to stdout)
        sms del <idx>   - delete stored SMS with index <idx>
        sms save <phone> [date] - save SMS (from stdin) into SIM-card

Date format: [[[[[cc]yy]mm]dd]HH]MM[.SS]

Собственно разобраться проблемы не составит, меня же интересует проверка и
переключение при необходимости в EV-DO.

home-gw# cdma mode
EV-DO

действительно, то что и было выставлено в винде в последний раз. Приятно :)
Скажу только, что использовать утилиту надо при разорванном соединении.

Далее пришел черед позвонить... Надеяться на поддержку пиплнета нет смысла,
так как все специалисты поддержки у них умеют только галки в винде тыцать.
Промучившись около 15 минут с тем, что номер никак не хотел набираться,
плюнул и вставил его прямо в строку инициализации. Получилась следующая
секция для пиплнета для ppp в /etc/ppp/ppp.conf

peoplenet:
 set device /dev/cuaU0
 set speed 460800

 #Отсюда номер у меня не подхватился
 set phone \#777 
 #А отсюда наоборот
 set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5 \"\" AT OK-AT-OK AT \
OK-AT-OK ATDT\#777 TIMEOUT 40 CONNECT"
 enable dns
 set authname 8092_PHONE_NUMBER_@people.net.ua
 set authkey PASS
 accept PAP
 set login
 add default HISADDR
 set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0
 disable ipv6cp
 disable mppe
 disable pred1 deflate protocomp acfcomp shortseq vj
 deny pred1 deflate protocomp acfcomp shortseq vj

Особо не тестировалось, т.к. установлю все это хозяйство на чердак в
выходные, но коннектится и работает без проблем.

home-gw# ping lissyara.su
PING lissyara.su (77.221.149.162): 56 data bytes
64 bytes from 77.221.149.162: icmp_seq=0 ttl=53 time=226.061 ms
64 bytes from 77.221.149.162: icmp_seq=1 ttl=53 time=255.973 ms
64 bytes from 77.221.149.162: icmp_seq=2 ttl=53 time=220.971 ms
64 bytes from 77.221.149.162: icmp_seq=3 ttl=53 time=229.934 ms
64 bytes from 77.221.149.162: icmp_seq=4 ttl=53 time=240.886 ms
^C
--- lissyara.su ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 220.971/234.765/255.973/12.463 ms

Теперь душе хочется немного статистики :) C помощью гугла и некоторого
участия серого вещества родилась пара скриптиков

home-gw# cat /root/bin/chk_balance
#!/bin/sh

date_b=`date "+%d.%m.%Y %H:%M "`
ostatok=`wget http://my.people.net.ua/TSU/WWW/ACCOUNT_INFO --post-data \
"X_Username=USERNAME&X_Password=PASSWORD" -O - -q  | grep -E "span \
class=.(gray|red)." | sed "s#^.*\">##;s%&#1075.*$%%"`
echo >> /root/_balance
echo $date_b ostatok - $ostatok grn >> /root/_balance

Проверка нашего баланса через сайт my.peoplenet.ua В USERNAME и PASSWORD
нужно подставить свои данные.
Полученная информация складывается в /root/_balance

Далее хотелось-бы статистики по трафу на внешнем интересфейсе. Для начала
добавим пару правил в ipfw, которые будут подсчитывать количество принятых
и отправленных байт

ipfw add 11 count all from any to any in via tun0
ipfw add 12 count all from any to any out via tun0

Не забудьте их внести в инициализацию своего фаервола.

home-gw# ipfw show 11 12
00011   19   2049 count ip from any to any in via tun0
00012   17   1247 count ip from any to any out via tun0

Чего-то уже успело пробежать :)

Далее следующий скрипт

home-gw# cat /root/bin/traf_stat
#!/bin/sh

download=`/sbin/ipfw show 11 | awk '{ print$3 }'`
upload=`/sbin/ipfw show 12 | awk '{ print$3 }'`
date_b=`date "+%d.%m.%Y"`

echo trafic statistics >> /root/_balance
echo "    downloaded $download bytes" >> /root/_balance
echo "    uploaded $upload bytes" >> /root/_balance

/sbin/ipfw zero 11
/sbin/ipfw zero 12

Т.е. считываем значения в нашем ipfw, сохраняем их в /root/_balance и
обнуляем статистику в фаерволе.

И дадим работы нашему cron... В /etc/crontab добавил следующие строки

55      23      *       *       *       root    /root/bin/chk_balance
59      23      *       *       *       root    /root/bin/traf_stat
05       0      *       *       *       root    /root/bin/chk_balance

Проверяем баланс за 5 минут до полуночи, сбрасываем статистику по трафу за
минуту до полуночи и в 5 минут после полуночи снимаем баланс еще раз
(хочется видеть списание абонплаты и превышения)

Все эти данные можем посмотреть в файлике /root/_balance

Помимо этого был настроен фаервол, установлен squid (этого описывать не вижу
смысла, на данном ресурсе найти статьи по данной тематике не проблема ;) ),
в планах динамический DNS

Также есть еще некоторые доработки железного характера:
- Так как под виндами бывали случаи подвисания модема, в цепь его питания
впаял реле на разрыв и подвел питание к катушке от БП, с выводом пары наружу.
При замыкании выведенных контактов, реле разрывает цепь питания модема, чем
обеспечивается его перезагрузка;
- Вывел наружу и пару от контактов reset на всякий случай, мало-ли :)

эти 2 пары передам по незадействованным парам витухи к свичу и будет такой
себе remote control :)


После использования в течении некоторого времени, полезла такая ошибка
home-gw kernel: ucom0: ucomreadcb: IOERROR


соединение подвисает, приходится килять ppp и стартовать заново...
Нарыл в и-нете следующее
и пропатчил...
Живет, ошибки сыпятся, но соединение восстанавливается без мучений ppp

Обсуждение

ucom.c.patch
файл скачан размер размещён примечание
ucom.c.patch
721 0.8kb 2009-03-16 патч для С-motech 650U для FreeBSD 6.3-RELEASE #0

cdma.shar
файл скачан размер размещён примечание
cdma.shar
723 3kb 2009-03-16 shar файл для cdma



размещено: 2009-03-31,
последнее обновление: 2009-03-31,
автор: Dron


pinger, 2009-04-03 в 22:12:18

Давно пользуюсь по этой статье
http://www.lissyara.su/?id=1311
зачем повторяться?

Vesper, 2009-05-28 в 20:13:34

По-мойму очень даже полезная, хочу сделать эту схему как резервный канал

salimk, 2010-08-27 в 10:36:54

Статья прикольная

вот еще кому интересно

ftp://ftp.dlink.ru/pub/Router/DIR-320/Data_sh/Supported%203G%20modems.pdf

ftp://ftp.dlink.ru/pub/Router/DIR-320/Firmware/

kpp, 2011-01-24 в 11:41:01

Думаю стОит немного подробнее описать момент с тестированием модема
# cu -l /dev/cuaU0
1. Команды AT нужно вводить руками.
По изложению в статье логично предполагается, что вводим  cu -l /dev/cuaU0 и в ответ должен выпасть указанный текст, а этого не просходит.
2. Для штатного выхода из утилиты cu нужно последовательно нажать тильду(~) и Ctrl+D.
Для невладеющих вопросом эти моменты будут головной болью.
Сам через это прошел ;)

kpp, 2011-01-24 в 11:46:43

И еще, в версии 7.2-RELEASE ничего в исходниках править не нужно. Хотя при вставке\извлечении модема в /var/log/messages пишется Unknown USB device: vendor 0x16d8 product 0x5533 bus uhub2

kpp, 2011-04-14 в 18:20:59

Страница баланса несколько изменилась у пиплов.
Коррекция скрипта получения балланса:
ostatok=`wget http://my.people.net.ua/TSU/WWW/ACCOUNT_INFO/ --post-data "X_Username=$NAME&X_Password=$PASSWO
iconv -c -f cp1251 | grep аванс |\
sed 's/^.*аванс \([0-9][0-9]*\.[0-9][0-9]\).*$/\1/'`

kpp, 2011-04-14 в 18:21:57

ostatok=`wget http://my.people.net.ua/TSU/WWW/ACCOUNT_INFO/ --post-data "X_Username=$NAME&X_Password=$PASSWORD" -O - -q |\
iconv -c -f cp1251 | grep аванс |\
sed 's/^.*аванс \([0-9][0-9]*\.[0-9][0-9]\).*$/\1/'`

Dark_LemON, 2011-06-12 в 20:09:43

kpp,
парсер sed в твоём случае не работает если баланс имеет вид Х.Х и актуален только для положительных балансов с четырьмя числовыми символами.

Dark_LemON, 2011-06-12 в 22:45:08

так будет лучше
ostatok=`wget http://my.people.net.ua/TSU/WWW/ACCOUNT_INFO/ --post-data "X_Username=$NAME&X_Password=$PASSWORD" -O - -q |\
iconv -c -f cp1251 | grep аванс |\
sed 's/^.*аванс \([0-9]*\.[0-9]*\).*$/\1/'`



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1947 секунд
Из них PHP: 60%; SQL: 40%; Число SQL-запросов: 79 шт.
Исходный размер: 50320; Сжатая: 11848