Add a new translated section (Bluetooth), the translation of this "long"

chapter is over!
This commit is contained in:
Marc Fonvieille 2004-07-23 17:48:09 +00:00
parent 33b1117ee8
commit e4fbb2c0e2
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=21638

View file

@ -1322,10 +1322,736 @@ wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
</sect2>
</sect1>
<sect1 id="network-bluetooth">
<title>Bluetooth ** Traduction en Cours **</title>
<para></para>
<sect1info>
<authorgroup>
<author>
<firstname>Pav</firstname>
<surname>Lucistnik</surname>
<contrib>Ecrit par </contrib>
<affiliation>
<address><email>pav@oook.cz</email></address>
</affiliation>
</author>
</authorgroup>
</sect1info>
<title>Bluetooth</title>
<indexterm><primary>Bluetooth</primary></indexterm>
<sect2>
<title>Introduction</title>
<para>&bluetooth; est une technologie sans fil pour cr&eacute;er
des r&eacute;seaux personnels sans fils fonctionnant dans la
bande 2.4 GHz ne n&eacute;cessitant pas d'autorisation, avec
une port&eacute;e de 10 m&egrave;tres. Les r&eacute;seaux
&eacute;tant g&eacute;n&eacute;ralement compos&eacute;s de
p&eacute;riph&eacute;riques nomades comme les
t&eacute;l&eacute;phones portables, les assistants personnels
et les ordinateurs portables. Contrairement &agrave; l'autre
technologie sans fil, Wi-Fi, &bluetooth; offre un niveau plus
&eacute;lev&eacute; de profils de service, par exemple des
serveurs de fichiers semblables &agrave; FTP, &ldquo;file
pushing&rdquo;, transport de la voix, &eacute;mulation de
lignes s&eacute;ries, et bien plus.</para>
<para>La pile &bluetooth; sous &os; utilise le syst&egrave;me
Netgraph (voir &man.netgraph.4;). Une large gamme
d'adaptateurs USB &bluetooth; sont support&eacute;s par le
pilote &man.ng.ubt.4;. Les p&eacute;riph&eacute;riques
&bluetooth; bas&eacute;s sur le circuit Broadcom BCM2033 sont
support&eacute;s par les pilotes &man.ubtbcmfw.4; et
&man.ng.ubt.4;. La carte 3Com &bluetooth; PC Card 3CRWB60-A
demande le pilote &man.ng.bt3c.4;. Les
p&eacute;riph&eacute;riques &bluetooth; de type s&eacute;rie
et UART sont support&eacute;s via les pilotes &man.sio.4;,
&man.ng.h4.4; et &man.hcseriald.8;. Cette section
d&eacute;crit l'utilisation d'un adaptateur USB &bluetooth;.
Le support &bluetooth; est disponible sur les syst&egrave;mes
5.0 et suivants.</para>
</sect2>
<sect2>
<title>Branchement du p&eacute;riph&eacute;rique</title>
<para>Par d&eacute;faut les pilotes de
p&eacute;riph&eacute;riques &bluetooth; sont disponibles sous
la forme de modules du noyau. Avant de brancher le
p&eacute;riph&eacute;rique, vous devrez charger le pilote dans
le noyau:</para>
<screen>&prompt.root; <userinput>kldload ng_ubt</userinput></screen>
<para>Si le p&eacute;riph&eacute;rique &bluetooth; est
pr&eacute;sent au d&eacute;marrage du syst&egrave;me, chargez
le module &agrave; partir de
<filename>/boot/loader.conf</filename>:</para>
<programlisting>ng_ubt_load="YES"</programlisting>
<para>Branchez votre cl&eacute; USB. Une sortie semblable
&agrave; celle-ci devrait s'afficher sur la console (ou dans
les journaux du syst&egrave;me):</para>
<screen>ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294</screen>
<para>Copiez
<filename>/usr/share/examples/netgraph/bluetooth/rc.bluetooth</filename>
&agrave; un emplacement adapt&eacute;, comme
<filename>/etc/rc.bluetooth</filename>. Cette
proc&eacute;dure est utilis&eacute;e pour d&eacute;marrer et
arr&ecirc;ter la pile &bluetooth;. C'est une bonne
id&eacute;e d'arr&ecirc;ter la pile avant de d&eacute;brancher
le p&eacute;riph&eacute;rique, mais ce n'est pas
(g&eacute;n&eacute;ralement) fatal. Quand la pile
d&eacute;marre, vous devriez avoir des messages similaires aux
suivants:</para>
<screen>&prompt.root; <userinput>/etc/rc.bluetooth start ubt0</userinput>
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
&lt;3-Slot&gt; &lt;5-Slot&gt; &lt;Encryption&gt; &lt;Slot offset&gt;
&lt;Timing accuracy&gt; &lt;Switch&gt; &lt;Hold mode&gt; &lt;Sniff mode&gt;
&lt;Park mode&gt; &lt;RSSI&gt; &lt;Channel quality&gt; &lt;SCO link&gt;
&lt;HV2 packets&gt; &lt;HV3 packets&gt; &lt;u-law log&gt; &lt;A-law log&gt; &lt;CVSD&gt;
&lt;Paging scheme&gt; &lt;Power control&gt; &lt;Transparent SCO data&gt;
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8</screen>
</sect2>
<indexterm><primary>HCI</primary></indexterm>
<sect2>
<title>Interface de contr&ocirc;le de l'h&ocirc;te (HCI)</title>
<para>L'interface de contr&ocirc;le de l'h&ocirc;te (HCI)
fournit une interface de commande pour le contr&ocirc;leur de
la bande de base et le gestionnaire de liaisons, et
l'acc&egrave;s &agrave; l'&eacute;tat du mat&eacute;riel et
aux registres de contr&ocirc;le. Cette interface offre une
m&eacute;thode uniforme d'acc&egrave;s aux fonctions de la
bande de base &bluetooth;. La couche HCI de l'h&ocirc;te
&eacute;change des donn&eacute;es et des commandes avec le
firmware HCI du mat&eacute;riel &bluetooth;. Le pilote de la
couche de transport du contr&ocirc;leur d'h&ocirc;te (i.e. le
bus physique) fournit aux deux couches HCI la
possibilit&eacute; d'&eacute;changer des informations entre
elles.</para>
<para>Un seul noeud Netgraph de type <emphasis>hci</emphasis>
est cr&eacute;&eacute; pour un p&eacute;riph&eacute;rique
&bluetooth;. Le noeud HCI est normalement connect&eacute; au
noeud du pilote &bluetooth; (flux descendant) et au noeud
L2CAP (flux montant). Toutes les op&eacute;rations HCI
doivent &ecirc;tre effectu&eacute;es sur le noeud HCI et non
pas sur le noeud du pilote de p&eacute;riph&eacute;rique. Le
nom par d&eacute;faut pour le noeud HCI est
&ldquo;devicehci&rdquo;. Pour plus de d&eacute;tails
consultez la page de manuel &man.ng.hci.4;.</para>
<para>Une des t&acirc;ches les plus courantes est la recherche
de p&eacute;riph&eacute;riques &bluetooth; dans le voisinage
hertzien. Cette op&eacute;ration est appel&eacute;e
<emphasis>inquiry</emphasis> (enqu&ecirc;te, recherche).
Cette recherche et les autres op&eacute;rations relatives
&agrave; HCI sont effectu&eacute;es par l'utilitaire
&man.hccontrol.8;. L'exemple ci-dessous montre comment
d&eacute;terminer quels p&eacute;riph&eacute;riques
&bluetooth; sont dans le voisinnage. Vous devriez obtenir une
listes de p&eacute;riph&eacute;riques au bout de quelques
secondes. Notez qu'un p&eacute;riph&eacute;rique distant ne
r&eacute;pondra &agrave; la recherche que s'il est
plac&eacute; dans le mode <emphasis>discoverable</emphasis>.
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci inquiry</userinput>
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]</screen>
<para><literal>BD_ADDR</literal> est l'adresse unique d'un
p&eacute;riph&eacute;rique &bluetooth;, similaire &agrave;
l'adresse MAC d'une carte r&eacute;seau. Cette adresse est
n&eacute;cessaire pour communiquer avec un
p&eacute;riph&eacute;rique. Il est possible d'assigner un nom
humainement compr&eacute;hensible &agrave; l'adresse BD_ADDR.
Le fichier <filename>/etc/bluetooth/hosts</filename> contient
des informations concernant les h&ocirc;tes &bluetooth;
connus. L'exemple suivant montre comment obtenir le nom qui a
&eacute;t&eacute; assign&eacute; au p&eacute;riph&eacute;rique
distant:</para>
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4</userinput>
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39</screen>
<para>Si vous effectuez une recherche sur un
p&eacute;riph&eacute;rique &bluetooth; distant, vous devriez
trouver votre ordinateur en tant que &ldquo;votre.machine.nom
(ubt0)&rdquo;. Le nom affect&eacute; au
p&eacute;riph&eacute;rique local peut &ecirc;tre
modifi&eacute; &agrave; tout moment.</para>
<para>Le syst&egrave;me &bluetooth; fournit une connexion point
&agrave; point (seules deux mat&eacute;riels &bluetooth; sont
concern&eacute;s), ou une connexion point &agrave;
multipoints. Dans le cas d'une connexion point &agrave;
multipoints, la connexion est partag&eacute;s entre plusieurs
p&eacute;riph&eacute;riques &bluetooth;. L'exemple suivant
montre comment obtenir la liste des connexions en bande de
base actives pour le p&eacute;riph&eacute;rique local:</para>
<screen>&prompt.user; <userinput>hccontrol -n ubt0hci read_connection_list</userinput>
Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN</screen>
<para>Une <emphasis>manipulation de la connexion</emphasis> est
utile quand la fin d'une connexion en bande de base est
n&eacute;cessaire. Notez qu'il n'est normalement pas
n&eacute;cessaire de le faire &agrave; la main. La pile
mettra fin automatiquement aux connexions en bande de base
inactives.</para>
<screen>&prompt.root; <userinput>hccontrol -n ubt0hci disconnect 41</userinput>
Connection handle: 41
Reason: Connection terminated by local host [0x16]</screen>
<para>R&eacute;f&eacute;rez-vous &agrave; la commande
<command>hccontrol help</command> pour une liste
compl&egrave;te des commandes HCI disponibles. La plupart des
commandes HCI ne n&eacute;cessitent pas les privil&egrave;ges
du super-utilisateur.</para>
</sect2>
<indexterm><primary>L2CAP</primary></indexterm>
<sect2>
<title>Protocole d'adaptation et de contr&ocirc;le de lien
logique (L2CAP)</title>
<para>Le protocole d'adaptation et de contr&ocirc;le de lien
logique (L2CAP) fournit des services orient&eacute;s connexion
ou non aux protocoles de niveaux sup&eacute;rieurs, et cela
avec des possibilit&eacute;s de multiplexage de protocoles, de
segmentation et de r&eacute;assemblage. L2CAP permet aux
applications et aux protocoles de niveaux sup&eacute;rieurs de
transmettre et recevoir des paquets L2CAP d'une taille allant
jusqu'&agrave; 64 Ko.</para>
<para>L2CAP est bas&eacute; sur le concept de
<emphasis>canaux</emphasis>. Un canal est une connexion
logique au sommet de la connexion en bande de base. Chaque
canal est attach&eacute; &agrave; un protocole suivant le
sch&eacute;ma plusieurs-vers-un. Plusieurs canaux peuvent
&ecirc;tre attach&eacute;s au m&ecirc;me protocole, mais un
canal ne peut &ecirc;tre attach&eacute;s &agrave; plusieurs
protocoles. Chaque paquet L2CAP re&ccedil;u sur un canal est
dirig&eacute; vers le protocole de niveau sup&eacute;rieur
appropri&eacute;. Plusieurs canaux peuvent partager la
m&ecirc;me connexion en bande de base.</para>
<para>Un seul noeud Netgraph de type <emphasis>l2cap</emphasis>
est cr&eacute;&eacute; pour un p&eacute;riph&eacute;rique
&bluetooth;. Le noeud L2CAP est normalement connect&eacute;
au noeud HCI &bluetooth; (flux descendant) et aux noeuds des
&ldquo;sockets&rdquo; &bluetooth; (flux montant). Le nom par
d&eacute;faut pour le noeud L2CAP est
&ldquo;device2cap&rdquo;. Pour plus de d&eacute;tails
consultez la page de manuel &man.ng.l2cap.4;.</para>
<para>Une commande utile est &man.l2ping.8;, qui peut &ecirc;tre
utilis&eacute;e pour &ldquo;pinguer&rdquo; les autres
p&eacute;riph&eacute;riques. Certaines impl&eacute;mentations
de &bluetooth; peuvent ne pas renvoyer toutes les
donn&eacute;es qui leur sont envoy&eacute;es, aussi <literal>0
bytes</literal> dans ce qui suit est normal.</para>
<screen>&prompt.root; <userinput>l2ping -a 00:80:37:29:19:a4</userinput>
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0</screen>
<para>L'utilitaire &man.l2control.8; est employ&eacute; pour
effectuer diverses op&eacute;rations sur les noeuds L2CAP.
Cet exemple montre comment obtenir la liste des connexions
logiques (canaux) et la liste des connexions en bande de base
pour le p&eacute;riph&eacute;rique local:</para>
<screen>&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_channel_list</userinput>
L2CAP channels:
Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State
00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN
&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_connection_list</userinput>
L2CAP connections:
Remote BD_ADDR Handle Flags Pending State
00:07:e0:00:0b:ca 41 O 0 OPEN</screen>
<para>Un autre outil de diagnostic est &man.btsockstat.1;. Il
effectue un travail similaire &agrave; celui de
&man.netstat.1;, mais relatif aux structures de donn&eacute;es
r&eacute;seau &bluetooth;. L'exemple ci-dessous montre la
m&ecirc;me connexion logique que &man.l2control.8;
ci-dessus.</para>
<screen>&prompt.user; <userinput>btsockstat</userinput>
Active L2CAP sockets
PCB Recv-Q Send-Q Local address/PSM Foreign address CID State
c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN
Active RFCOMM sessions
L2PCB PCB Flag MTU Out-Q DLCs State
c2afe900 c2b53380 1 127 0 Yes OPEN
Active RFCOMM sockets
PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State
c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN</screen>
</sect2>
<indexterm><primary>RFCOMM</primary></indexterm>
<sect2>
<title>Protocole RFCOMM</title>
<para>Le protocole RFCOMM permet l'&eacute;mulation du port
s&eacute;rie au-dessus du protocole L2CAP. Le protocole est
bas&eacute; sur la norme ETSI TS 07.10. RFCOMM est un
protocole de transport simple, avec les dispositions
suppl&eacute;mentaires pour &eacute;muler les 9 circuits
(signaux) d'un port s&eacute;rie RS232 (EIATIA-232-E). Le
protocole RFCOMM supporte jusqu'&agrave; 60 connexions
simultan&eacute;es (canaux RFCOMM) entre deux
p&eacute;riph&eacute;riques &bluetooth;.</para>
<para>Dans le cas de RFCOMM, l'&eacute;tablissement d'une
communication implique deux applications tournant sur des
p&eacute;riph&eacute;riques diff&eacute;rents (les
extr&eacute;mit&eacute;s de la communication) avec un segment
de communication entre eux. RFCOMM est pr&eacute;vu pour
couvrir les applications faisant usage des ports s&eacute;ries
des p&eacute;riph&eacute;riques sur lesquels elles
r&eacute;sident. Le segment de communication est une liaison
&bluetooth; d'un p&eacute;riph&eacute;rique vers un autre
(connexion directe).</para>
<para>RFCOMM est seulement concern&eacute; par la connexion
entre p&eacute;riph&eacute;riques dans le cas d'un
raccordement direct, ou entre le p&eacute;riph&eacute;rique et
un modem dans le cas d'un r&eacute;seau. RFCOMM peut
supporter d'autres configurations, comme les modules qui
communiquent par l'interm&eacute;diaire de la technologie sans
fil &bluetooth; d'un c&ocirc;t&eacute; et utilise une
interface c&acirc;bl&eacute;e de l'autre
c&ocirc;t&eacute;.</para>
<para>Sous &os;, le protocole RFCOMM est
impl&eacute;ment&eacute; au niveau de la couche des
&ldquo;sockets&rdquo; &bluetooth;.</para>
</sect2>
<indexterm><primary>couplage</primary></indexterm>
<sect2>
<title>Couplage des p&eacute;riph&eacute;riques</title>
<para>Par d&eacute;faut, une communication &bluetooth; n'est pas
authentifi&eacute;e, et n'importe quel
p&eacute;riph&eacute;rique peut parler avec n'importe quel
autre p&eacute;riph&eacute;rique. Un
p&eacute;riph&eacute;rique &bluetooth; (par exemple un
t&eacute;l&eacute;phone portable) peut choisir de demander une
authentification pour fournir un service particulier (par
exemple un service de connexion t&eacute;l&eacute;phonique).
L'authentification &bluetooth; est g&eacute;n&eacute;ralement
effectu&eacute;e avec des <emphasis>codes PIN</emphasis>. Un
code PIN est une cha&icirc;ne ASCII d'une longueur de 16
caract&egrave;res. L'utilisateur doit entrer le m&ecirc;me
code PIN sur les deux p&eacute;riph&eacute;riques. Une fois
que l'utilisateur a entr&eacute; le code PIN, les deux
p&eacute;riph&eacute;riques g&eacute;n&egrave;rent une
<emphasis>cl&eacute; de liaison</emphasis> (link key).
Ensuite la cl&eacute; peut &ecirc;tre enregistr&eacute;e soit
dans les p&eacute;riph&eacute;riques eux-m&ecirc;mes ou sur un
moyen de stockage non-volatile. La fois suivante les deux
p&eacute;riph&eacute;riques utiliseront la cl&eacute;
pr&eacute;c&eacute;demment g&eacute;n&eacute;r&eacute;e. La
proc&eacute;dure d&eacute;crite est appel&eacute;e
<emphasis>couplage</emphasis>. Si la cl&eacute; de liaison
est perdue par un des p&eacute;riph&eacute;riques alors
l'op&eacute;ration de couplage doit &ecirc;tre
r&eacute;p&eacute;t&eacute;e.</para>
<para>Le &ldquo;daemon&rdquo; &man.hcsecd.8; est responsable de
la gestion de toutes les requ&ecirc;tes d'authentification
&bluetooth;. Le fichier de configuration par d&eacute;faut
est <filename>/etc/bluetooth/hcsecd.conf</filename>. Un
exemple de section pour un t&eacute;l&eacute;phone portable
avec un code PIN arbitraire de &ldquo;1234&rdquo; est
donn&eacute; ci-dessous:</para>
<programlisting>device {
bdaddr 00:80:37:29:19:a4;
name "Pav's T39";
key nokey;
pin "1234";
}</programlisting>
<para>Il n'y pas de limitation sur les codes PIN (en dehors de
la longueur). Certains p&eacute;riph&eacute;riques (comme les
casques-micro &bluetooth;) peuvent avoir un code PIN
d&eacute;finitivement fix&eacute;. Le param&egrave;tre
<option>-d</option> force le &ldquo;daemon&rdquo;
&man.hcsecd.8; &agrave; rester en t&acirc;che de fond, il est
donc ais&eacute; de voir ce qu'il se passe. Configurez le
p&eacute;riph&eacute;rique distant pour recevoir le couplage
et initier la connexion &bluetooth; vers le
p&eacute;riph&eacute;rique distant. Le
p&eacute;riph&eacute;rique distant devrait annoncer que le
couplage a &eacute;t&eacute; accept&eacute;, et demander le
code PIN. Entrez le m&ecirc;me code PIN que celui que vous
avez dand le fichier <filename>hcsecd.conf</filename>.
Maintenant votre PC et le p&eacute;riph&eacute;rique distant
sont coupl&eacute;s. Alternativement, vous pouvez initier le
couplage sur le p&eacute;riph&eacute;rique distant. Ce qui
suit est une partie de la sortie du &ldquo;daemon&rdquo;
<application>hcsecd</application>:</para>
<programlisting>hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4</programlisting>
</sect2>
<indexterm><primary>SDP</primary></indexterm>
<sect2>
<title>Le protocole de d&eacute;couverte de service
(SDP)</title>
<para>Le protocole de d&eacute;couverte de service (SDP) offre
aux applications clientes les moyens de d&eacute;couvrir
l'existence des services fournis par les applications serveurs
ainsi que les propri&eacute;t&eacute;s (attributs) de ces
services. Les attributs d'un service comprennent le type ou
la classe du service offert et le m&eacute;canisme ou
l'information sur le protocole n&eacute;cessaire pour utiliser
le service.</para>
<para>Le SDP implique la communication entre un serveur SDP et
un client SDP. Le serveur maintient une liste
d'enregistrements de services qui d&eacute;crit les
caract&eacute;ristiques des services associ&eacute;s avec le
serveur. Chaque enregistrement de service contient
l'information sur un seul serveur. Un client peut
r&eacute;cup&eacute;rer l'information &agrave; partir d'un
enregistrement de service maintenu par le serveur SDP en
&eacute;mettant une requ&ecirc;te SDP. Si le client, ou une
application associ&eacute;e avec le client, d&eacute;cide
d'utiliser un service, il doit ouvrir une connexion
s&eacute;par&eacute;e avec le fournisseur du service afin
d'utiliser ce service. Le SDP fournit un m&eacute;canisme
pour d&eacute;couvrir les services et leur attributs, mais
n'offre pas de m&eacute;canisme pour utiliser ces
services.</para>
<para>G&eacute;n&eacute;ralement, un client SDP recherche les
services sur la base de caract&eacute;ristiques de services
d&eacute;sir&eacute;es. Cependant, il est parfois
d&eacute;sirable de d&eacute;couvrir quel type de services
sont d&eacute;crits par les enregistrements de services d'un
serveur SDP sans aucune information pr&eacute;alable sur les
services. Ce processus de recherche des services offerts est
appel&eacute; <emphasis>navigation</emphasis>
(&ldquo;browsing&rdquo;).</para>
<para>Le serveur SDP &bluetooth; &man.sdpd.8; et le client en
ligne de commande &man.sdpcontrol.8; font partie de
l'installation &os; standard. L'exemple suivant montre
comment effectuer un requ&ecirc;te de navigation
(&ldquo;browse&rdquo;) SDP:</para>
<screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec browse</userinput>
Record Handle: 00000000
Service Class ID List:
Service Discovery Server (0x1000)
Protocol Descriptor List:
L2CAP (0x0100)
Protocol specific parameter #1: u/int/uuid16 1
Protocol specific parameter #2: u/int/uuid16 1
Record Handle: 0x00000001
Service Class ID List:
Browse Group Descriptor (0x1001)
Record Handle: 0x00000002
Service Class ID List:
LAN Access Using PPP (0x1102)
Protocol Descriptor List:
L2CAP (0x0100)
RFCOMM (0x0003)
Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
LAN Access Using PPP (0x1102) ver. 1.0
</screen>
<para>... et ainsi de suite. Remarquez que chaque service a une
liste d'attributs (canal RFCOMM par exemple). En fonction du
service vous pourrez avoir besoin de prendre note de certains
de ces attributs. Certaines impl&eacute;mentations
&bluetooth; ne supportent pas les requ&ecirc;tes de navigation
et peuvent renvoyer une liste vide. Dans ce cas il est
possible de chercher un service sp&eacute;cifique. L'exemple
ci-dessous montre comment chercher le service OBEX Object Push
(OPUSH):</para>
<screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH</userinput></screen>
<para>Offrir des services sous &os; aux clients &bluetooth; se
fait &agrave; l'aide du serveur &man.sdpd.8;:</para>
<screen>&prompt.root; <userinput>sdpd</userinput></screen>
<para>L'application serveur locale qui d&eacute;sire offrir un
service &bluetooth; &agrave; des clients distants enregistrera
le service aupr&egrave;s du &ldquo;daemon&rdquo; SDP local.
Un exemple d'une telle application est &man.rfcomm.pppd.8;.
Une fois d&eacute;marr&eacute;, il enregistrera un service de
r&eacute;seau local &bluetooth; aupr&egrave;s du serveur SDP
local.</para>
<para>La liste des services enregistr&eacute;s aupr&egrave;s du
serveur SDP local peut &ecirc;tre obtenue en &eacute;mettant
une requ&ecirc;te de navigation (&ldquo;browse&rdquo;) SDP par
l'interm&eacute;diaire du canal de contr&ocirc;le:</para>
<screen>&prompt.root; <userinput>sdpcontrol -l browse</userinput></screen>
</sect2>
<sect2>
<title>Les profils Dial-Up Networking (DUN) et acc&egrave;s au
r&eacute;seau local avec PPP (LAN)</title>
<para>Le profil Dial-Up Networking (DUN) est principalement
utilis&eacute; avec les modems et les t&eacute;l&eacute;phones
portables. Les cas de figure couverts par ce profil sont les
suivants:</para>
<itemizedlist>
<listitem>
<para>Utilisation d'un t&eacute;l&eacute;phone portable ou
d'un modem par un ordinateur comme modem sans fil pour se
connecter &agrave; un serveur d'acc&egrave;s Internet, ou
pour l'utilisation de services accessibles par
t&eacute;l&eacute;phone;</para>
</listitem>
<listitem>
<para>Utilisation d'un t&eacute;l&eacute;phone portable ou
d'un modem par un ordinateur pour recevoir des appels avec
transmission de donn&eacute;es.</para>
</listitem>
</itemizedlist>
<para>Le profil d'acc&egrave;s au r&eacute;seau local avec PPP
(LAN) peut &ecirc;tre utilis&eacute; dans les situations
suivantes:</para>
<itemizedlist>
<listitem>
<para>Acc&egrave;s au r&eacute;seau local pour un
p&eacute;riph&eacute;rique &bluetooth;;</para>
</listitem>
<listitem>
<para>Acc&egrave;s au r&eacute;seau local pour plusieurs
p&eacute;riph&eacute;riques &bluetooth;;</para>
</listitem>
<listitem>
<para>Liaison PC &agrave; PC (en utilisant le protocole PPP
sur une &eacute;mulation de c&acirc;ble
s&eacute;rie).</para>
</listitem>
</itemizedlist>
<para>Sous &os; les deux profils sont impl&eacute;ment&eacute;s
par &man.ppp.8; et &man.rfcomm.pppd.8;&mdash;un
&ldquo;wrapper&rdquo; convertit la connexion &bluetooth;
RFCOMM en quelque chose d'utilisable par PPP. Avant qu'un
profil ne soit utilisable, un nouveau label doit &ecirc;tre
cr&eacute;&eacute; dans le fichier
<filename>/etc/ppp/ppp.conf</filename>. Consultez la page de
manuel &man.rfcomm.pppd.8; pour des exemples.</para>
<para>Dans l'exemple suivant &man.rfcomm.pppd.8; sera
employ&eacute; pour ouvrir un connexion RFCOMM avec le
p&eacute;riph&eacute;rique distant avec une adresse BD_ADDR
00:80:37:29:19:a4 sur un canal DUN RFCOMM. Le num&eacute;ro
de canal RFCOMM r&eacute;el sera obtenu du
p&eacute;riph&eacute;rique distant par l'interm&eacute;diaire
de SDP. Il est possible de pr&eacute;ciser le canal RFCOMM
&agrave; la main, dans ce cas &man.rfcomm.pppd.8;
n'&eacute;mettra pas de requ&ecirc;te SDP. Utilisez
&man.sdpcontrol.8; pour trouver le canal RFCOMM sur le
p&eacute;riph&eacute;rique distant.</para>
<screen>&prompt.root; <userinput>rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup</userinput></screen>
<para>Afin de fournir un service d'acc&egrave;s au r&eacute;seau
local avec PPP, le serveur &man.sdpd.8; doit &ecirc;tre en
fonctionnement. Une nouvelle entr&eacute;e pour les clients
du r&eacute;seau local doit &ecirc;tre cr&eacute;&eacute;e
dans le fichier <filename>/etc/ppp/ppp.conf</filename>.
Consultez la page de manuel &man.rfcomm.pppd.8; pour des
exemples. Enfin, lancez le serveur RFCOMM PPP sur un
num&eacute;ro de canal RFCOMM valide. Le serveur RFCOMM PPP
enregistrera automatiquement un service &bluetooth; LAN
aupr&egrave;s du &ldquo;daemon&rdquo; SDP local. L'exemple
ci-dessous montre comment d&eacute;marrer le serveur RFCOMM
PPP:</para>
<screen>&prompt.root; <userinput>rfcomm_pppd -s -C 7 -l rfcomm-server</userinput></screen>
</sect2>
<indexterm><primary>OBEX</primary></indexterm>
<sect2>
<title>Le profil OBEX Object Push (OPUSH)</title>
<para>OBEX (&eacute;change d'objets) est un protocole
tr&egrave;s largement utilis&eacute; pour les tranferts de
fichiers entre p&eacute;riph&eacute;riques mobiles. Son
utilisation principale se trouve dans les communications par
infrarouge, o&ugrave; il est utilis&eacute; pour le tranfert
des fichiers entre ordinateurs portables ou PDAs, et pour
envoyer des cartes de visite &eacute;lectronique ou des
&eacute;l&eacute;ments d'agenda entre t&eacute;l&eacute;phones
portables et d'autres p&eacute;riph&eacute;riques disposant
d'applications de gestion d'informations personnelles
(PIM).</para>
<para>Le serveur et le client OBEX sont
impl&eacute;ment&eacute;s dans le logiciel tierce-partie
<application>obexapp</application>, qui est disponible sous la
forme du logiciel port&eacute; <filename
role="package">comms/obexapp</filename>.</para>
<para>Le client OBEX est employ&eacute; pour
&ldquo;pousser&rdquo; et/ou &ldquo;tirer&rdquo; des objets du
serveur OBEX. Un objet peut &ecirc;tre, par exemple, une
carte de visite ou un rendez-vous. Le client OBEX peut
obtenir un num&eacute;ro de canal RFCOMM d'un
p&eacute;riph&eacute;rique distant par l'interm&eacute;diaire
de SDP. Cela peut &ecirc;tre fait en sp&eacute;cifiant le nom
du service plut&ocirc;t que le num&eacute;ro du canal RFCOMM.
Les noms de service support&eacute;s sont: IrMC, FTRN et
OPUSH. Il est possible de pr&eacute;ciser le canal RFCOMM par
un nombre. Un exemple de session OBEX est
pr&eacute;sent&eacute; ci-dessous, o&ugrave; l'objet
information du p&eacute;riph&eacute;rique d'un
t&eacute;l&eacute;phone portable est
r&eacute;cup&eacute;r&eacute;, et un nouvel objet (carte de
visite) est envoy&eacute; dans le r&eacute;pertoire du
t&eacute;l&eacute;phone.</para>
<screen>&prompt.user; <userinput>obexapp -a 00:80:37:29:19:a4 -C IrMC</userinput>
obex&gt; get
get: remote file&gt; telecom/devinfo.txt
get: local file&gt; devinfo-t39.txt
Success, response: OK, Success (0x20)
obex&gt; put
put: local file&gt; new.vcf
put: remote file&gt; new.vcf
Success, response: OK, Success (0x20)
obex&gt; di
Success, response: OK, Success (0x20)</screen>
<para>Afin de fournir le service OBEX Object Push, le serveur
&man.sdpd.8; doit tourner. Un dossier racine o&ugrave; tous
les objets entrant seront stock&eacute;s doit &ecirc;tre
cr&eacute;&eacute;. Le chemin d'acc&egrave;s par
d&eacute;faut du r&eacute;pertoire racine est <filename
role="directory">/var/spool/obex</filename>. Le serveur OBEX
enregistrera automatiquement le service OBEX Object Push
aupr&egrave;s du &ldquo;daemon&rdquo; SDP local. L'exemple
ci-dessous montre comment d&eacute;marrer le serveur
OBEX:</para>
<screen>&prompt.root; <userinput>obexapp -s -C 10</userinput></screen>
</sect2>
<sect2>
<title>Le profil port s&eacute;rie (SPP)</title>
<para>Le profil port s&eacute;rie (SPP) permet aux
p&eacute;riph&eacute;riques &bluetooth; d'&eacute;muler un
c&acirc;ble s&eacute;rie RS232 (ou similaire). Ce profil
traite avec les applications classiques en utilisant
&bluetooth; comme un c&acirc;ble de remplacement, &agrave;
travers une abstraction de port s&eacute;rie virtuel.</para>
<para>L'utilitaire &man.rfcomm.sppd.1; impl&eacute;mente le
profil port s&eacute;rie. Un pseudo terminal est
utilis&eacute; comme abstraction de port s&eacute;rie virtuel.
L'exemple ci-dessous montre comment se connecter &agrave; un
service port s&eacute;rie d'un p&eacute;riph&eacute;rique
distant. Notez que vous n'avez pas besoin d'indiquer un canal
RFCOMM &mdash; &man.rfcomm.sppd.1; peut l'obtenir
aupr&egrave;s du p&eacute;riph&eacute;rique distant via SDP.
Si vous d&eacute;sirez forcer cela, sp&eacute;cifiez un canal
RFCOMM sur la ligne de commande.</para>
<screen>&prompt.root; <userinput>rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6</userinput>
rfcomm_sppd[94692]: Starting on /dev/ttyp6...</screen>
<para>Une fois connect&eacute;, le pseudo-terminal peut
&ecirc;tre utilis&eacute; comme un port s&eacute;rie:</para>
<screen>&prompt.root; <userinput>cu -l ttyp6</userinput></screen>
</sect2>
<sect2>
<title>D&eacute;pannage</title>
<sect3>
<title>Un p&eacute;riph&eacute;rique distant ne peut pas se
connecter</title>
<para>Certains anciens p&eacute;riph&eacute;riques &bluetooth;
ne supportent pas de changement de r&ocirc;le. Par
d&eacute;faut, quand &os; accepte une nouvelle connexion, il
tente d'effectuer un changement de r&ocirc;le et de devenir
ma&icirc;tre. Les p&eacute;riph&eacute;riques qui ne
supportent pas cela ne seront pas en mesure de se connecter.
Notez qu'un changement de r&ocirc;le est effectu&eacute;
quand une nouvelle connexion est &eacute;tablie, il n'est
donc pas possible de demander au p&eacute;riph&eacute;rique
distant s'il supporte le changement de r&ocirc;le. Il
existe une option HCI pour d&eacute;sactiver le changement
de r&ocirc;le au niveau local:</para>
<screen>&prompt.root; <userinput>hccontrol -n ubt0hci write_node_role_switch 0</userinput></screen>
</sect3>
<sect3>
<title>Quelque chose ne va pas, puis-je voir ce qui se passe
exactement?</title>
<para>Bien s&ucirc;r. Utilisez le logiciel tierce-partie
<application>hcidump-1.5</application> qui peut &ecirc;tre
t&eacute;l&eacute;charg&eacute; depuis <ulink
url="http://www.geocities.com/m_evmenkin/"></ulink>.
L'utilitaire <application>hcidump</application> est
similaire &agrave; &man.tcpdump.1;. Il peut &ecirc;tre
utilis&eacute; pour afficher le contenu des paquets
&bluetooth; &agrave; l'&eacute;cran et les sauvegarder dans
un fichier.</para>
</sect3>
</sect2>
</sect1>
<sect1 id="network-bridging">