Подключение КПК к FreeBSD через Bluetooth для выхода в сеть. (ipaq linux pda palm bluetooth)
Ключевые слова: ipaq , linux , pda , palm , bluetooth , (найти похожие документы )
From: fr33man <fr33man@fr33man.ru. >
Date: Mon, 28 Nov 2006 18:21:07 +0000 (UTC)
Subject: Подключение КПК к FreeBSD через Bluetooth для выхода в сеть.
Оригинал: http://www.lissyara.su/?id=1282
О чем эта статья?
Я написал эту статью после трех дней мучения и головоломания. Идея
была проста: у меня был КПК(HP hx4700) и два компьютера, один из
которых домашний(под управлением ОС Linux), а второй --
роутер(FreeBSD 5.4). Причем домашний выходил в инет через роутер.
Поэтому было решено подружить КПК и фрю. После часа изучения рунета я
понял, что связывать буду через bluetooth, соглачитесь -- не очень
приятно тоскать с собой крэдл ;) .
А с помощью bluetooth можно передвигаться, не завися от проводов.
Пришлось смотаться в ближайшую компьютерную лавочку и купить
USB-bluetooth(~10$).
Можно было приступать к спариванию устройств! :)
Подключения USB-bluetooth к роутеру(FreeBSD).
Работу с bluetooth-устройствами во FreeBSD осуществляет модуль
ng_ubt, который, кстати, написан нашим соотечественником Максимом
Евменкиным. За что ему -- огроменый респект! Итак, перед подключением
устройства нужно погрузить этот модуль:
# kldload ng_ubt
После этого можно смело вставлять bluetooth адаптор в usb-порт. Если
посмотреть /var/log/messages, то там будут записи типа таких:
# tail /var/log/messages
Feb 4 12:46:57 fr33man kernel: ubt0: SiW SiW, rev 1.10/15.00, addr 2
Feb 4 12:46:57 fr33man kernel: ubt0: SiW SiW, rev 1.10/15.00, addr 2
Feb 4 12:46:57 fr33man kernel: ubt0: Interface 0 endpoints:
interrupt=0x81, bulk-in=0x82, bulk-out=0x2
Feb 4 12:46:57 fr33man kernel: ubt0: Interface 1 (alt.config 5)
endpoints: isoc-in=0x83, isoc-out=0x3;
wMaxPacketSize=49; nframes=6, buffer size=294
Если у Вас примерно такие же записи, то все хорошо. Девайс определился
как ubt0. теперь нам нужно активировать интерфейс, чтобы мы смогли
работать с bluetooth-устройствами:
# cp /usr/share/examples/netgraph/bluetooth/rc.bluetooth \
/etc/rc.bluetooth
# chmod 555 /etc/rc.bluetooth
# /etc/rc.bluetooth start ubt0
BD_ADDR: 00:0b:0d:08:93:f2
Features: 0xff 0xff 0x5 0x38 0x18 0x18 00 00
< 3-Slot> < 5-Slot> < Encryption> < Slot offset >
< Timing accuracy > < Switch > < Hold mode > < Sniff mode >
< Park mode> < RSSI> < Channel quality> < SCO link>
< HV2 packets> < HV3 packets> < u-law log> < A-law log> < CVSD>
< Power control>
Max. ACL packet size: 120 bytes
Number of ACL packets: 20
Max. SCO packet size: 0 bytes
Number of SCO packets: 0
Теперь наш девайс подключен и работает, давайте попробуем найти наш
КПК:
# hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 08:00:37:4e:5d:c6
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 32:01:10
Clock offset: 0x10f0
Inquiry complete. Status: No error [00]
Как можно увидеть адрес КПК -- 08:00:37:4e:5d:c6. Чтобы не запоминать
этот номер я тут же занес его в /etc/bluetooth/hosts:
# echo 08:00:37:4e:5d:c6 kpk >> /etc/bluetooth/hosts
Если еще раз просканировать сеть, то мы получим немного другой
результат:
# hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result # 0
BD_ADDR: kpk
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 32:01:10
Clock offset: 0x10f0
Inquiry complete. Status: No error [00]
Теперь вместо адреса устройства пишется его имя.
Настройка ppp-соединения.
С помощью ppp, мы сможем соеденить КПК и роутер в сеть и
соответственно открыть КПК доступ в инет.
Для начала запустим сервер sdpd, который нужен для того, чтобы КПК
нашел наши службы:
# sdpd
# ps ax | grep sdpd
16654 ?? Is 0:00.36 sdpd
Теперь можно перейти к составлению конфига /etc/ppp/ppp.conf:
rfcomm-server:
set timeout 0
set lqrperiod 10
enable lqr
accept lqr
set ifaddr 172.16.0.1 172.16.0.10 255.255.255.0
enable force-scripts
set dial "CLIENT CLIENTSERVER"
accept dns
disable pap
deny pap
disable chap
deny chap
Такой простенький конфиг. Обо всех опциях можно почитать в мане. Я
остановлюсь только на одной:
set ifaddr. Первый аргумент -- ip-адрес шлюза, второй -- адрес,
который будет выдан клиенту, ну и третий -- маска сети.
После этого запускаем наш сервер:
# rfcomm_pppd -s -C 7 -l rfcomm-server
# ps ax | grep ppp
19233 ?? Is 0:00.00 rfcomm_pppd -s -C 7 -l rfcomm-server
Опции запуска очень просты и Вы сможете прочесть о них в
мане(rfcomm_pppd).
OBEX
Что такое OBEX? Это протокол обмена файлами между портативными
устройствами. Программа -- obexapp. Ставить будем из портов:
# cd /usr/ports/comms/obexapp
# make install clean
Теперь будем настраивать. По сути подправить нужно только один файл
/etc/bluetooth/hcsecd:
device {
bdaddr 00:00:00:00:00:00;
name "Default entry";
key nokey;
pin nopin;
}
device {
bdaddr 08:00:37:4e:5d:c6;
name "kpk";
key nokey;
pin "12345";
}
Конфиг создан, теперь создадим директорию, для закачки фалов, а так же
запустим необходимые демоны:
# mkdir /var/spool/obex
# hcsecd
# obexapp -s -C 1
Теперь все работает и можно переходить к тестированию. Но так как моей
задачей было выпустить КПК в инет, то нужно настроить нат.
Это будет Вашим Домашним заданием. ;)
Тестирование.
К сожалению предоставить скрины с КПК я не с могу по техническим
причинам, поэтому смотреть будем только со стороны сервера.
Для начала подключитесь к сети на КПК. Когда Вас попросят ввести имя
пользователя и пароль -- ничего не вводите, а просто нажмите ОК.
После этого Вы подключитесь к сети. Давайте посмотрим что произошло на
сервере:
# tail /var/log/ppp.log
Feb 5 15:41:19 fr33man ppp[34325]: Phase: Using interface: tun0
Feb 5 15:41:19 fr33man ppp[34325]: Phase: deflink: Created in closed state
Feb 5 15:41:19 fr33man ppp[34325]: Phase: PPP Started (direct mode).
Feb 5 15:41:19 fr33man ppp[34325]: Phase: bundle: Establish
Feb 5 15:41:19 fr33man ppp[34325]: Phase: deflink: closed - > opening
Feb 5 15:41:19 fr33man ppp[34325]: Phase: deflink: Connected!
Feb 5 15:41:19 fr33man ppp[34325]: Phase: deflink: opening - > dial
Feb 5 15:41:20 fr33man ppp[34325]: Phase: deflink: dial - > carrier
Feb 5 15:41:20 fr33man ppp[34325]: Phase: deflink: carrier - > login
Feb 5 15:41:20 fr33man ppp[34325]: Phase: deflink: login - > lcp
Feb 5 15:41:20 fr33man ppp[34325]: Phase: deflink: lcp - > open
Feb 5 15:41:20 fr33man ppp[34325]: Phase: bundle: Network
# ifconfig tun0
tun0: flags=8051< UP,POINTOPOINT,RUNNING,MULTICAST > mtu 1500
inet6 fe80::240:f4ff:fe7e:aea4%tun0 prefixlen 64 scopeid 0x9
inet 172.16.0.1 -- > 172.16.0.10 netmask 0xffffff00
Opened by PID 34325
Как видно все работает. Теперь проверим как передаются файлы. Если Вы
на КПК попробуете передать файл на сервер, то он будет передан без
ошибок,
НО на сервере не вылетит никакого предупреждающего сообщения о приеме
файла. И переданный файл можно найти в /var/spool/obex.
А давайте соеденимся по протоколу OBEX с КПК:
# obexapp -a kpk -C OPUSH
obex> put /etc/passwd
Success, response: OK, Success (0x20)
obex> di
Success, response: OK, Success (0x20)
Мы передали файл /etc/passwd. Он сохранился в папке My Documents на
КПК.
Заключение.
Я брал информацию из многих источников, в том числе и английских. Где
об этом можно почитать: freebsd.org(handbook), google.com, man.
© lissyara 2006-10-24 08:47 MSK
1 , Balm (? ), 17:24, 16/09/2007 [ответить ]
+ /–
Хорошая статья, спасибо.
А если бы роутер работал не на FreeBSD, а на Windows Server, можно было бы подключить КПК к Интернету? Возможно ли такое в принципе?