Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Шелезяки —> КПК + FreeBSD

КПК + FreeBSD - > Inet

Автор: fr33man.


О чем эта статья?
Я написал эту статью после трех дней мучения и головоломания. Идея была проста: у меня был КПК(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.



размещено: 2006-11-08,
последнее обновление: 2006-11-08,
автор: fr33man


Ygor, 2006-12-13 в 14:53:00

В 6.1 это слегка всё поменяли, с помощью devd.conf оно поднимается самостоятельно(впрочем тоже самое можно тыло следать и раньше, и ещё добавили пару конфигов, которые авторматом запускают демонов, вообщем все вроде как нормально.

Alex, 2007-02-17 в 0:10:01

А не могли бы подсказать, как настроить синхронизацию и выход в инет, если кпк подключается через USB?

Vitaliy, 2007-03-17 в 21:43:34

Для подключения через usb

cd /usr/ports/palm/uppc-kmod/
sudo make install clean

и т.д.

ipfw, 2007-03-20 в 12:55:02

блин скриншоты бы с кпк - бьюсь второй день, не могу зацепить hp iPAQ 2790 (WM5).
устанавливается соединение, спрашивает логин/пароль, жму ок - вылетает с ошибкой
tun1: Chat: deflink: Dial attempt 1 of 1
tun1: Chat: Expect(30): CLIENT
tun1: Chat: Expect timeout
tun1: Warning: Chat script failed
tun1: Phase: deflink: dial -> hangup
tun1: Phase: deflink: Disconnected!

DarkHost, 2007-08-01 в 17:34:05

Была бы интересна статья подключения телефона через bluetooth к FreeBSD и отправка через него смс из shell.

gx, 2008-12-12 в 3:21:12

как КПК вывести в инет через freebsd?

leov-001, 2009-09-17 в 15:00:18

В 7.0 и 6.3 вместо /etc/rc.bluetooth используется файл
/etc/rc.d/bluetooth



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0434 секунд
Из них PHP: 32%; SQL: 68%; Число SQL-запросов: 77 шт.
Исходный размер: 34766; Сжатая: 8356