суббота, 30 сентября 2006 г.

PPP Bluetooth/GPRS во FreeBSD

Настройка PPP Bluetooth/GPRS во FreeBSD

1. Читаем раздел хэндбука FreeBSD, посвящённый Bluetooth и выбираем из него некоторые полезные моменты.

2. Если модуль поддержки Bluetooth не прописан в автозагрузку в файле /etc/rc.conf, то загружаем его из командной строки:
% kldload ng_ubt

и прописываем его в автозагрузку в файле /etc/rc.conf:
hcsecd_enable="YES"

3. Скопируйте файл /usr/share/examples/netgraph/bluetooth/rc.bluetooth в какое-нибудь подходящее место, например, в файл /etc/rc.bluetooth. Этот скрипт используется для запуска и остановки работы Bluetooth-стека. Дайте права на запуск:
% chmod 755 /etc/rc.bluetooth

4. При запуске стека вы получите сообщения, подобные следующим:
% /etc/rc.bluetooth start ubt0
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
<3-Slot> <5-Slot> < Encryption > < Slot offset >
< Timing accuracy > < Switch > < Hold mode > < Sniff mode >
< Park mode> < Channel quality> < SCO link >
< HV2 packets> < u-law log > < A-law log > < CVSD >
< Paging scheme > < Power control > < Transparent SCO data >
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8


5. Одной из самой часто выполняемой задач является обнаружение Bluetooth-устройств в радиусе RF-доступности. Эта операция называется опросом (inquiry). Опрос и другие операции, связанные с HCI, выполняются при помощи утилиты hccontrol(8). Пример ниже показывает, как найти доступные устройства Bluetooth. Список таких устройств должен быть получен в течение нескольких секунд. Заметьте, что удалённые устройства будут отвечать на опрос, если только они находятся в режиме обнаруживаемости (discoverable).
% hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 00:80:37:29:19:a4
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 00
Page Scan Mode: 00
Class: 52:02:04
Clock offset: 0x78ef
Inquiry complete. Status: No error [00]


BD_ADDR является уникальным адресом устройства Bluetooth, вроде MAC-адресов сетевых адаптеров. Этот адрес необходим для дальнейшей работы с устройством. Адресу BD_ADDR можно присвоить удобное для чтения имя. Файл /etc/bluetooth/hosts содержит информацию об известных хостах Bluetooth. В следующем примере показано, как получить имя, назначенное удалённому устройству:
% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
BD_ADDR: 00:80:37:29:19:a4
Name: T610


Если вы выполните опрос на другом Bluetooth-устройстве, но ваш компьютер будет опознан как ''your.host.name (ubt0)''. Имя, назначаемое локальному устройству, может быть в любой момент изменено.

7. Спаривание Bluetooth-устройств.
По умолчанию связь Bluetooth не аутентифицируется, поэтому любое устройство может общаться с любым другим. Устройство Bluetooth (например, сотовый телефон) может задать обязательность аутентификации для предоставления определённого сервиса (в частности, услугу доступа по коммутируемой линии). Bluetooth-аутентификация обычно выполняется через PIN-коды. PIN-код представляет из себя ASCII-строку длиной до 16 символов. Пользователь обязан ввести один и тот же PIN-код на обоих устройствах. Как только он введёт PIN-код, оба устройства сгенерируют ключ связи. После этого ключ может быть сохранён либо в самом устройстве, либо на постоянном носителе. В следующий раз оба устройства будут использовать ранее сгенерированный ключ соединения. Процедура, описанная выше, носит название подгонки пары (pairing). Заметьте, что если ключ связи потерян любой из сторон, то подбор пары должен быть повторен.

За обработку всех запросов на Bluetooth-аутентификацию отвечает даемон hcsecd(8). По умолчанию файл конфигурации называется /etc/bluetooth/hcsecd.conf. Пример раздела, содержащего информацию о сотовом телефоне с явно заданным PIN-кодом ''1234'' приведен ниже:
device {
bdaddr 00:80:37:29:19:a4;
name "T610";
key nokey;
pin "1234";
}


Кроме длины, на PIN-коды не накладывается никаких ограничений. Некоторые устройства (например, Bluetooth-гарнитуры) могут иметь фиксированный встроенный PIN-код. Параметр -d позволяет запустить hcsecd(8) как нефоновый процесс, что облегчает просмотр происходящих событий. Задайте получение парного ключа на удалённом устройстве и инициируйте Bluetooth-соединение с этим устройством. Удалённое устройство должно подтвердить получение пары и запросить PIN-код. Введите тот же самый код, что находится в hcsecd.conf. Теперь ваш ПК и удалённое устройство спарены. Альтернативным способом является инициация процесса создания пары на удалённом устройстве.

8. Доступ к сети по коммутируемой линии связи (DUN) и по протоколу PPP (LAN).
Модуль работы с коммутируемым доступом к сети (DUN - Dial-Up Networking) в большинстве случаев используется с модемами и сотовыми телефонами. Этот модуль покрывает следующие случаи:

* сотовый телефон или модем используется вместе с компьютером в качестве беспроводного модема для подключения к серверу коммутируемого доступа в Интернет, или другой коммутируемой услуге;
* сотовый телефон или модем используется компьютером для приёма входящих соединений.

Модуль доступа к сети по протоколу PPP (Network Access with PPP - LAN) может использоваться в следующих ситуациях:

* доступ к ЛВС для одного Bluetooth-устройства;
* доступ к ЛВС для нескольких Bluetooth-устройств;
* связь между двумя ПК (при помощи протокола PPP поверх эмулируемого последовательного канала связи).

Во FreeBSD оба случая реализуются при помощи сервисных программ ppp(8) и rfcomm_pppd(8) - это обработчик, преобразующий RFCOMM-соединения Bluetooth в нечто, с чем может работать PPP. Перед тем, как использовать любой модуль, в файле /etc/ppp/ppp.conf должна быть создана новая PPP-метка. Примеры использования можно найти в справочной странице к rfcomm_pppd(8).

Для сервиса Билайн-Интернет в файле /etc/ppp/ppp.conf у меня работает следующая конструкция:
beelinebt:
shell rfcomm_sppd -a 00:80:37:29:19:a4 -t /dev/ttyp6 -b
set log Chat Command
set device /dev/ttyp6
set speed 115200
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\"\" AT OK-AT-OK ATE1Q0 OK \
AT+CGDCONT=1,\\\"IP\\\",\\\"internet.beeline.ru\\\" OK \
AT+CGATT=1 OK \
\dATDT\\T TIMEOUT 40 CONNECT"
set logout "ABORT BUSY ABORT ERROR TIMEOUT 30 \
\"\" +++ATH OK-ATH-OK AT+CGATT=0 OK"
set mode background
set phone "*99***1#"
set authname beeline
set authkey beeline
set timeout 0
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
enable dns


9. Пропишите в файле /etc/resolv.conf адреса билайновских DNS-серверов Интернета:
nameserver 217.118.66.243
nameserver 217.23.64.2


10. Установление bluetooth-соединения через GPRS-модем телефона следующей серией команд:
% rfcomm_sppd -a 00:80:37:29:19:a4 -t /dev/ttyp6 -b
% ppp -auto beelinebt


11. После перезагрузки машины под обычным пользователем для установления Интернет-моединения можно набрать тоько одну команду:
> ppp -auto beelinebt

Закрытие соединения можно провести командой (хотя это не совсем корректно и может "сбить телефон с толку"):
> killall ppp

(Проверялось в системе FreeBSD6.1 на связке Bluetooth-USB-адаптера D-Link DBT-120 и телефона Sony-Ericsson T610. Работает устойчивее, чем в Linux/Xubuntu.)