Мобильные юниксы vol. 3 Anton Karpov Хакер, номер #071, стр. 071-098-4 Мобильный интернет Для того чтобы применять телефон в качестве модема для доступа в интернет, нужно настроить ppp(8) или pppd(8), и единственная проблема заключается в том, чтобы мобильник был опознан этими демонами как модем на каком-либо порту. Благодаря эмуляции через драйвера ucom, ucycom, uplcom или uvscom, подключенный через USB-кабель телефон выступает в роли некоего девайса на последовательном порту. В случае с Bluetooth, по сути, ничего не меняется, только сэмулировать порт чуть сложнее. Пожалуй, самый простой способ - использование rfcomm_sppd(1) для эмуляции последовательного порта и передачи ppp-фреймов через RFCOMM-каналы: # rfcomm_sppd -a 00:01:e2:3f:c5:9a -b -t /dev/ttyp4 После чего для pppd(8) в /etc/ppp/options следует указать /dev/ttyp4 как порт модема и все волшебным образом заработает :). Разумеется, данным трюком можно обходиться и при использовании ppp(8). В этом случае порт можно вообще не указывать, употребив в конфиге /etc/ppp/ppp.conf следующую конструкцию: set device "!/usr/bin/rfcomm_sppd -a 00:01:e2:3f:c5:9a" В данном случае девайс создается на лету самим ppp, что очень удобно. Альтернативный способ - применение rfcomm_pppd(8) совместно с ppp: # rfcomm_pppd -a 00:01:e2:3f:c5:9a -c -C DUN -l gprs Как и везде, -a указывает BD_ADDR мобильника, -C DUN указывает использование Dialup-Networking канала (если канал определить данным образом, а не напрямую, по номеру, то номер будет запрошен по протоколу SDP), -l gprs указывает на существующую запись в ppp.conf, ее ты должен создать заранее, прописав обычные настройки для GPRS твоего оператора. Зачем же две утилиты для одной и той же задачи? Дело в том, что с помощью rfcomm_pppd(8) можно не только употреблять мобильный девайс как модем, но и предоставить этому девайсу доступ в локальную сеть. Для сотового телефона это, ясное дело, неактуально, но ведь Bluetooth встраивают во многие другие мобильные устройства. В ppp.conf нужно внести новую запись rfcomm-server (обратись к man rfcomm_pppd за примерами) и запустить rfcomm_pppd как сервер, точно так же, как грузили obexapp в серверном режиме: # rfcomm_pppd -s -C 7 -l rfcomm-server Bluetooth и Linux В Linux с Bluetooth, как и со всем остальным, относительная неразбериха в виде проектов-патчкитов. Существует несколько реализаций BT-стэка, но самый популярный - BlueZ (www.bluez.org). Его ядерная часть была смержена в vanilla kernel (официальное, чистое ядро с kernel.org) где-то во времена 2.4.20. Необходимые опции ядра CONFIG_BLUEZ=m CONFIG_BLUEZ_L2CAP=m CONFIG_BLUEZ_SCO=m CONFIG_BLUEZ_RFCOMM=m CONFIG_BLUEZ_RFCOMM_TTY=y CONFIG_BLUEZ_HCIUSB=m Но библиотеки и утилиты все равно следует собирать из исходников с bluez.org или поставить из пакетов своего дистрибутива. Необходимые тарболлы - bluez-libs и bluez-utils. Обнаружить мобильник можно с помощью утилиты hcitool (hcitool scan). Аналог sdpcontrol для обнаружения сервисов девайса называется sdptool (sdptool browse BD_ADDR). После определения BD_ADDR можно забиндить девайс на эмуляцию порта (/dev/ircomm0): |