Дано
Операционная система FreeBSD 6.1-RELEASE
Мобильный телефон Motorola C380
Оператор Kyivstar GSM
Большое желание посидеть в ICQ (ни на что другое GPRS не тянет :) )
Решение
Для начала надо, чтобы система увидела наш телефон. Поскольку наш телефон представляет собой в общем-то обычный USB модем, нужно в системе включить поддержку этих самых модемов. Для этого используется два драйвера:
umodem, который включает собственно поддержку USB модемов
ucom, позволяет нашему модему выглядеть как tty.
Поддержка данных устройств включается, согласно man umodem добавлением в ядро строк:
device umodem
device ucom
А можно просто загрузить соответствующий модуль:
[squirl@squirlhome ~] kldload umodem
который автоматически тянет за собой загрузку модуля ucom. Проверяем:
[squirl@squirlhome ~]$ kldstat
Id Refs Address Size Name
1 16 0xffffffff80100000 58eca0 kernel
2 1 0xffffffff8068f000 7118 snd_via8233.ko
3 2 0xffffffff80697000 34770 sound.ko
4 1 0xffffffffa772c000 219 ntfs_iconv.ko
5 1 0xffffffffa772d000 1c83 libiconv.ko
6 1 0xffffffffa772f000 132d ng_ether.ko
7 1 0xffffffffa7731000 2c11 ng_pppoe.ko
8 1 0xffffffffa7734000 1d0d ng_socket.ko
9 1 0xffffffffa7862000 1239 umodem.ko
10 1 0xffffffffa7864000 112f ucom.ko
Подключайте телефон. В dmesg (а если вы сидите в голой консоли, то и на консоли) увидите
ucom0: Motorola Inc. Motorola Phone (C380), rev 1.10/0.01, addr 2, iclass 2/2
ucom0: data interface 1, has CM over data, has no break
ucom0: status change notification available
Теперь проверяем наличие устройства /dev/cuaU0 и приступаем к настройке ppp.Настраивать будем User ppp. В /etc/ppp/ppp.conf добавьте следующие строки:
GPRS:
set device /dev/cuaU0
set speed 115200
enable DNS
set authname igprs
set authkey internet
set dial "\"\" AT+CGDCONT=1,\"IP\",\"www.kyivstar.net\" OK ATDP*99***1# CONNECT"
set ifaddr 0.0.0.0/0 0.0.0.0/0 255.255.255
add default HISADDR
Я думаю комментарии не нужны? Нужны??? Ну тогда вперед читать FreeBSD Handbook, man ppp, man chat. Единственное, что наверное надо объяснить - откуда взялась такая строка инициализации. Отвечаю - из маленькой книжечки, которая лежала на стойке в магазине Kyivstar GSM :) Оттуда же я взял и телефон дозвона. Все строка читается следующим образом:
посылаем в телефон строку инициализации AT+CGDCONT=1,"IP","www.kyivstar.net"
получаем в ответ OK
набираем в импульсном режиме номер *99***1#
получаем CONNECT
радуемся.
Теперь запускаем ppp:
[squirl@squirlhome ~]$ sudo ppp -ddial GPRS
И смотрим через ifconfig, поднялся ли интерфейс tun0 (1, 2...). Если все сделаноправильно - поздравляю, вы в online :)
Возможные проблемы
Если у вас все в порядке с финансами, а телефон упорно не желает соединятся, смотрим /var/log/ppp.log
1 squirlhome ppp[1279]: Phase: Using interface: tun1
2 squirlhome ppp[1279]: Phase: deflink: Created in closed state
3 squirlhome ppp[1280]: Phase: PPP Started (ddial mode).
4 squirlhome ppp[1280]: Phase: bundle: Establish
5 squirlhome ppp[1280]: Phase: deflink: closed -> opening
6 squirlhome ppp[1280]: Phase: deflink: Connected!
7 squirlhome ppp[1280]: Phase: deflink: opening -> dial
8 squirlhome ppp[1280]: Phase: deflink: dial -> carrier
9 squirlhome ppp[1280]: Phase: deflink: /dev/cuaU0: CD detected
10 squirlhome ppp[1280]: Phase: deflink: carrier -> login
11 squirlhome ppp[1280]: Phase: deflink: login -> lcp
12 squirlhome ppp[1280]: Phase: bundle: Authenticate
13 squirlhome ppp[1280]: Phase: deflink: his = PAP, mine = none
14 squirlhome ppp[1280]: Phase: Pap Output: igprs ********
15 squirlhome ppp[1280]: Phase: Pap Input: SUCCESS ()
16 squirlhome ppp[1280]: Phase: deflink: lcp -> open
17 squirlhome ppp[1280]: Phase: bundle: Network
Вот так выглядит нормальное соединение. Часто коннект обрывается на строке 8. Тогда в строке 9 появляется что-то вроде:
squirlhome ppp[203]: Phase: deflink: Disconnected!
Обычно такое поведение - признак неуверенного приема. Иногда помогает подзарядка - со слабым зарядом мой аппарат наотрез отказывается ходить в интернет, иногда - простая перезагрузка телефона.
PS:
Я посчитал нецелесообразным засовывать запуск PPP в rc.conf, поскольку
там
уже прописана автоконнект к провайдеру по PPPoE. Поэтому GPRS соединение
будем запускать/отключать следующим скиптом:
#!/bin/sh
case $1 in
'start')
echo "start GPRS session..."
sudo ppp -ddial GPRS
;;
'stop')
pid=`pgrep -f "GPRS"`
echo "stop GRPS session..."
sudo kill $pid
;;
*)
echo 'Usage gprs.sh start|stop'
;;
esac