На главную Уровнем выше

Настройка GPRS соединения в FreeBSD 6.1


Дано

Операционная система 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

Hosted by uCoz