Sie sind auf Seite 1von 10

3.

Bluetooth

20

3. Bluetooth

3.1
3.1.1

BlueZ - Der Linux Bluetooth Stack


Allgemeines

Fr eine allgemeine Einfhrung in die Technologie und den Bluetooth-Protokollstack wird u u auf die Literatur [1] und [2] verwiesen. In diesem Praktikum soll mit BlueZ [4], einer Open-Source Implementierung des Bluetooth Protokollstacks fr Linux, gearbeitet werden. u Der Uberblick uber BlueZ wird in Abbildung 3.1 dargestellt. BlueZ untersttzt folgende Teile u des Bluetooth Protokollstacks:

User space Kernel space

BlueZ utilities

Bluetooth Applications

Berkley Socket Interface

HCI sockets

L2CAP protocol
Protocol Interface

SCO sockets

BlueZ Core
Driver Interface

VHCI driver

UART driver

USB driver

Other drivers

Host Controller Interface (HCI)

Bluetooth Hardware
- Components provided by BlueZ

Abbildung 3.1 Uberblick uber BlueZ (Quelle: Bluez-HowTo)

Das Host Controller Interface (HCI) ermglicht den Zugri auf Funktionen des Bluetootho Chips in einer standardisierten und schnittstellenunabhngigen Art und Weise. Untera sttzt werden die serielle (HCI-UART) und die USB-Schnittstelle (HCI-USB). u Das Logical Link Control und Adaptation Protocol (L2CAP) ist der Link Layer des Bluetooth Protokoll Stacks. Der Sourcecode von BlueZ inklusive einem HowTo und einigen README-Dateien bendet sich in dem Verzeichnis /usr/local/mobiprak/src/bluez auf den Praktikums-Notebooks bzw. im Internet unter http://www.bluez.org/documentation.html.

3.1.2

Laden der Kernel-Modules

Die Kernel-Module von BlueZ mssen nacheinander, von den unteren Schichten angefangen, u geladen werden.

3.1. BlueZ - Der Linux Bluetooth Stack

21

3.1.2.1

Das Host Controller Interface

Die beiden notwendigen HCI-Module hci_usb und bluetooth sollten ab Kernel-Version 2.6 automatisch geladen worden sein. Dies kann mit lsmod uberprft werden. u Ansonsten laden Sie die Module mit: modprobe hci_usb (fr USB Gerte) u a modprobe bluetooth Bei evtl. auftretenden Problemen knnen die entsprechenden Systemmeldungen uber den o Befehl dmesg zum Aunden und Lsen des Problems herangezogen werden. War das Laden o der Modules erfolgreich, kann mit hciconfig hci0 up die HCI-Schnittstelle hochgefahren werden (hier hci0). Mit hciconfig hci0 kann der Status der Schnittstelle abgefragt werden. Die Ausgabe sollte in etwa folgendermaen aussehen: hci0: Type: USB BD Address: 00:80:37:14:42:7D ACL MTU: 672:10 UP RUNNING NORMAL PSCAN ISCAN RX bytes:69 acl:0 sco:0 events:8 errors:0 TX bytes:31 acl:0 sco:0 commands:8 errors:0

SCO: MTU 255:255

wobei BD Address die MAC-Adresse des Bluetooth-Gertes ist. Es sollten sowohl ISCAN als a auch PSCAN aufgefhrt werden, damit das Gert fr andere Bluetoothgerte sichtbar ist und u a u a Verbindungen zulsst. Ist dies nicht der Fall, knnen beide durch den Befehl: a o hciconfig hci0 piscan aktiviert werden. hciconfig bietet auerdem eine einfache Schnittstelle zur Konguration des BluetoothChips. Mit hciconfig -h knnen mgliche Parameter eingesehen werden. So lassen sich z.B. o o mit features und version Informationen uber den Chip herausnden, oder mit ptype der Packetmodus einstellen. Noch ein ntzliches Kommando nennt sich hcitool, mit dem Informationen uber Nachbaru gerte ermittelt bzw. Verbindungen aufgebaut werden knnen. So kann man z.B. mit inq ein a o Inquiry anstoen oder mit con die momentan geneten Verbindungen auisten. o Die Aktivitten auf HCI-Schicht knnen mit hcidump beobachtet werden: a o hcidump <-i hciX> [-h] Aufgabe: Finden Sie die Version Ihres Bluetooth-Chips heraus. Suchen Sie auerdem nach Bluetooth-Gerten in Ihrer Nhe. Finden Sie auch die Adresse des a a anderen Bluetooth-Gertes Ihrer Gruppe heraus. a Version: Adressen der Gerte der Gruppe: a

22

3. Bluetooth

3.1.2.2

Das L2CAP-Interface

Danach soll das L2CAP-Modul geladen werden: modprobe l2cap Um die Funktion des Link Layers zu testen, senden Sie ein Ping-Paket mit dem Befehl l2ping [-s size] [-c count] [-f] <bd_addr>

zu dem anderen Notebook Ihrer Gruppe. Wenn Sie whrenddessen hcidump laufen lassen, a knnen Sie die Vorgnge auf der HCI-Schicht beobachten. o a Da sich die Software noch im Entwicklungsstadium bendet, kann es zeitweise dazu kommen, da ein Bluetooth-Gert nicht mehr ansprechbar ist. In diesem Fall hilft evtl. ein Reset der a Hardware mit hciconfig hci0 reset und anschlieendem hciconfig hci0 up. Falls eines der Kernel-Module Probleme bereitet, knnen diese mit rmmod herausgeladen und mit insmod o oder modprobe erneut geladen werden. Aufgabe: Vor dem ersten Versenden eines Ping-Pakets wird vom LMP eine Verbindung auf Link-Ebene aufgebaut und ein Piconet aus den beiden Gerten gea bildet. Welches Gert ist in diesem Piconet Master, welches ist Slave? a Aufgabe: Entfernen Sie sich whrend des Ping-Vorgangs von dem anderen Notea book und ermitteln Sie dadurch die ungefhre Reichweite des Bluetooth-Gertes. a a Reichweite:

3.2

Bluetooth-Netzwerkprogrammierung unter Linux

Um Daten ohne den Umweg uber RFCOMM und PPP uber Bluetooth transportieren zu knnen, kann die Ubertragung auch direkt uber die L2CAP-Schicht stattnden. BlueZ bietet o eine Programmierschnittstelle in Form einer UNIX Socket-Schnittstelle, die das ermglicht. o

3.2.1

Datenbertragung uber L2CAP u

Im obigen Abschnitt wird die Verwendung von Sockets fr die Datenbertragung uber IP u u beschrieben, whrend in diesem Versuch Daten uber die L2CAP-Schicht des Bluetooth-Stacks a versendet werden sollen. Fr die Ubertragung uber die L2CAP-Schicht des BlueZ Stacks sind folgende Punkte zu u beachten: Die Library bluetooth ist zu linken Die Dateien bluetooth.h und l2cap.h sind einzubinden. Folgende Parameter sind beim Aufruf der socket()-Funktion zu verwenden: domain type protocol PF_BLUETOOTH SOCK_SEQPACKET BTPROTO_L2CAP

3.2. Bluetooth-Netzwerkprogrammierung unter Linux

23

An Stelle der Struktur sockaddr_in fr IP ist die Struktur sockaddr_l2 zu benutzten: u struct sockaddr_l2 { sa_family_t unsigned short bdaddr_t };

l2_family; // hier AF_BLUETOOTH l2_psm; // Protocol/Service Multiplexer (PSM) l2_bdaddr; // Bluetooth Gerteadresse a

Die Gerteadresse des Bluetooth-Gerts ist in Network Byte Order anzugeben. Zur a a Transformation einer Adressen von Host Byte Order zu Network Byte Order kann void baswap(bdaddr_t *dst, bdaddr_t *src) verwendet werden, zur Transformation der PSM htobs(a) (siehe bluetooth.h). Zur Darstellung bzw. Eingabe knnen Adresse mit den Funktionen char *batostr(bdaddr_t o *ba) und bdaddr_t *strtoba(char *str); von bzw. in Zeichenketten gewandelt werden. Als zustzliche Hilfe knnen auch die Sourcen der BlueZ-Tools l2ping und l2test una o ter /usr/local/mobiprak/src/bluez/bluez-utils-3.5/tools herangezogen werden. Diese setzen ebenfalls auf der L2CAP-Schicht auf und verwenden die BlueZ-Sockets. Um den geschriebenen Code zu kompilieren, soll der GNU-Kompiler gcc verwendet werden. Folgendes Beispiel zeigt, wie ein Programm namens bluecat kompiliert werden kann: gcc -I/usr/include/bluetooth -lbluetooth bluecat.c -L/usr/lib -o bluecat Man kann auch ein Makefile in dem Verzeichnis erstellen, in dem der Quellcode liegt. Der Vorteil ist, da man lediglich make zum Kompilieren eingegeben mu. Insbesondere bei komplexeren Projekten ist das eine groe Erleichterung. Fr das obige Beispiel knnte ein Makefile u o folgendermaen aussehen: UTILS = bluecat

CFLAGS = -g -O2 -Wall -I/usr/include/bluetooth -I. LDFLAGS = -lbluetooth -L/usr/lib CC = gcc %:%.c $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) all: utils utils: $(UTILS) clean: rm -f *.o *.tab.* *.lex.* $(UTILS) Aufgabe: Messen Sie die genaue maximale Datenrate unter Verwendung der verschiedenen Packetmodi mit Hilfe des selbstgeschriebenen Programms. Dazu soll die Gre der Datei und die Zeitdauer der Ubertragung ermittelt und daraus die o resultierende Datenrate berechnet werden. Fr die Zeitmessung soll die Funktiu on int gettimeofday(struct timeval *tv, struct timezone *tz) verwendet werden.

24 Slave DM1 DM1 DH1 DM3 DH3 DM5 DH5 DH1 Master DM3 DH3

3. Bluetooth

DM5

DH5

3.3

Aufbau der IP-Verbindungen uber BNEP

Neben RFCOMM und PPP bietet Bluetooth neuerdings eine weitere Mglichkeit zur Kommuo nikation zwischen Bluetooth-Gerten uber IP. Das Bluetooth Network Encapsulation Protocol a (BNEP) wurde deniert, um uber L2CAP eine Schnittstelle hnlich zu Ethernet zu bieten. a Das Personal Area Networking Prole beschreibt zwei Szenarien, das Network access points (NAP)-Szenario und das Group Ad-hoc Networks (GAP)-Szenario, in denen Bluetooth-Gerte a mittles BNEP miteinander in einem Piconet uber IP kommunizieren knnen. o Das Service Discovery Protocol (SDP) Protokoll [5] ermglicht das Aunden angebotener o Dienste (z.B. Dienst Network access points oder Group Ad-hoc Networks) bzw. deren Eigenschaften auf einem Bluetooth-Gert. a

3.3.1

IP-Kommunikation zwischen Bluetooth-Gerten a

In den Versuchen soll gelernt werden, wie beide Bluetooth-Gerte mittels des PAN-Proles a eine IP-Verbindung aufbauen. Dafr sollte ein Bluetooth-Gert die Rolle des sogenannten u a Group ad-hoc Network (GN) 1 annehmen, whrend die andere Bluetooth-Gerte im PAN a a die Rolle PAN User (PANU) haben. Das GN-Bluetoothgert mu auerdem ein Bluetooth a Master sein. Um BNEP zu untersttzen, mu das Modul bnep geladen werden. u modprobe bnep Anschlieend sollte der PAN-Dmon pand auf allen teilnehmenden Bluetoothgerten gestartet a a werden, um eine Verbindung im Ad-Hoc Netz aufzubauen. Auf diesem GN-Bluetoothgert ist deswegen das folgende Kommando auszufhren: a u hcid pand --listen -n --role

GN

--master

Durch das Kommando hcid wird der HCI-dmon gestartet, damit danach andere Dmonen a a bei ihm die angebotenen Dienste registrieren knnen. Die Optionen - -master und -n lassen o den pand Bluetooth Master sein und nicht im Hintergrund laufen. Der pand registriert automatisch beim HCI-Dmon den Dienst Group ad-hoc Network. a Nachdem beim GN-Bluetoothgert der PAN-Dmon gestartet wurde, kann man bei einem a a anderen Bluetoothgert mittels sdptool feststellen, da das GN-Bluetoothgert nun einen a a Dienst Group ad-hoc Network anbietet.
1

oder Network access point (NAP), obwohl im Beispiel nur GN-Rolle verwendet wird

3.3. Aufbau der IP-Verbindungen uber BNEP sdptool browse <Zieladresse des GN-Bluetoothgerts> a Dann ist folgendes Kommando auszufhren: u pand -n --connect <Zieladresse des GN-Bluetoothgerts> a

25

Nachdem die Verbindung aufgebaut wurde, wird eine virtuelle Netzschnittstelle, z.B. bnep0, auf beiden Bluetoothgerten hergestellt. Daraufhin kann man mit ifconfig die Informationen a darber einsehen bzw. eine IP-Adresse zuweisen. z.B.: u ifconfig bnep0 192.168.5.1 auf eines bzw. ifconfig bnep0 192.168.5.2 Anschlieend knnen beide Bluetoothgerte miteinander uber IP kommunizieren. o a Aufgabe: Bauen Sie mittels BNEP eine IP-Verbindung zwischen zwei BluetoothGerten auf. Testen Sie mit ping die Verbindung und messen Sie mittels des im a ersten Versuch geschriebenen Programms den Durchsatz der Verbindung. Der gemessene Durchsatz:

3.3.2

Szenario: Netzzugangspunkt

In dem Versuch wird das Szenario Network Access Point (NAP) veranschaulicht. Dazu soll das Bluetooth-PAN mit einem vorhandenen Infrastruktur-Netz verbunden werden. Ein Bluetoothgert nimmt die Rolle des sogenannten NAP an, whrend die anderen Bluea a toothgerte im PAN die Rolle PAN User (PANU) haben. Das NAP-Bluetoothgert vera a bindet PANU-Bluetoothgerte im PAN mittels der im 802.3d vorgeschriebenen Brckena u Funktion mit dem lokalen Netz des Instituts. Zunchst sollten alle im letzen Versuch gestarteten pand-Dmonen beendet werden. Das a a kann entweder durch pand -K erreicht werden, wenn die pand-Dmonen im Hintergrund a gelaufen sind, oder mit der Tastaturenkombination Strg-C bei im Vordergrund laufenden pand-Dmonen. Daraufhin wird die Ethernet-Schnittstelle aller im Praktikum eingesetzten a Notebooks deaktiviert: ifconfig eth0 down 3.3.2.0.1 Konguration beim NAP

Beim NAP-Bluetoothgert wird die Ethernet-Schnittstelle wieder aktiviert: a ifconfig eth0 0.0.0.0 up Dann wird eine Brcke namens pan0 mittels brctl eingerichtet: u

26 brctl addbr pan0 brctl setfd pan0 0 brctl stp pan0 off

3. Bluetooth

Anschlieend ist dem NAP-Bluetoothgert eine IP-Adresse vom Institut-Netz sowie ein Gaa teway als Defaultroute vergeben. Die Ethernet-Schnittstelle ist der Brcke zuzuordnen. u ifconfig pan0 141.3.70.146 netmask 255.255.255.128 route add default gw 141.3.70.254 brctl addif pan0 eth0 Um eine vom PAN hergestellte virtuelle Schnittstelle bnepx automatisch in die Brcke einzuu fgen, soll das folgende Skript geschrieben und unter ~/bluetooth/devup abgelegt werden. u Dieses wird von pand aufgerufen, wenn eine BNEP-Verbindung aufgebaut wird. #!/bin/bash brctl addif pan0 $1 ifconfig $1 0.0.0.0

# $1 ist z.B. bnepx

Beim NAP-Bluetoothgert ist der Dmon pand dann mit a a pand --listen -n --role NAP --master --devup ~/bluetooth/devup zu starten. Man kann den Zustand der Brcke mit folgendem Kommando einsehen: u brctl show bzw. mit brctl showmacs <pan-id> eine Liste der Verbindungen ausgeben lassen. 3.3.2.0.2 Konguration des PANU-Bluetoothgertes a

Um eine vom PAN hergestellte virtuelle Schnittstelle bnepx automatisch einzurichten, mssen u folgende Befehle in das unter ~/bluetooth/devup abzulegende Kongurationsskript eingetragen werden: #!/bin/bash ifconfig bnep0 <vergebene IP-Adresse> netmask 255.255.255.128 route add default gw 141.3.70.254 Wobei vergebene IP-Adresse eine Adresse von 141.3.70.141145 ist. Dann kann ein PANU-Bluetoothgert folgendes Kommando ausfhren, um Zugang auf den a u NAP zu bekommen. pand -n --role PANU --persist --connect <NAP-BD-ADDR> --devup ~/bluetooth/devup Aufgabe: Nehmen Sie i72prak6 als das NAP-Bluetoothgert, d.h., i72prak6 a hat sowohl Verbindungen zum LAN des Internets als auch zu anderen Notebooks. Kongurieren Sie das Netz, so dass man das Notebook im PAN mit dem Internet verbinden kann und ggf. mit Web-Browser im Inernet surfen kann. Mit ping kann die Erreichbarkeit inner- und auerhalb des PANs getestet werden. Aufgabe: Bewegen Sie sich mit einem Notebook (mit PANU-Rolle) und messen Sie, wie weit man sich vom NAP entfernen kann, ohne die Verbindung zu verlieren.

Literatur

27

Literatur
[1] Pravin Bhagwat: Bluetooth: Technology for Short-Range Wireless Apps, IEEE Internet Computing, May/June 2001, Vol. 5, S. 96103. [2] Jaap Haartsen: Bluetooth - The universal radio interface for ad hoc, wireless connectivity, Ericsson Review No. 3, 1998, S. 110-117. [3] BlueZ - Bluetooth protocol stack for Linux, http://bluez.sourceforge.net [4] HowTo set up common PAN scenarios with BlueZs integrated PAN support, http://bluez.sourceforge.net/contrib/HOWTO-PAN [5] Bluetooth SIG: Service Discovery Protocol (SDP), Bluetooth Specication 1.1, Part E, 2001

28

3. Bluetooth