2006-03-18 17:40:54 +00:00
|
|
|
|
|
|
|
|
|
Programmation r<>partie - TP2
|
|
|
|
|
|
|
|
|
|
1. Description
|
|
|
|
|
|
|
|
|
|
Le but de ce TP est de concevoir une impl<70>mentation des protocoles
|
|
|
|
|
ABCAST et CBCAST.
|
|
|
|
|
|
|
|
|
|
Il poss<73>de les caract<63>ristiques suivantes :
|
|
|
|
|
* Il est distribu<62> sous la licence [1]GNU General Public License
|
|
|
|
|
* Il est <20>crit en C++,
|
|
|
|
|
* Il impl<70>mente ABCAST,
|
|
|
|
|
* Il impl<70>mente CBCAST.
|
|
|
|
|
|
|
|
|
|
Cette impl<70>mentation utilise trois threads, un "envoyeur de bas
|
|
|
|
|
niveau" (LowSender), un "recepteur de bas niveau" (LowReceiver) et un
|
|
|
|
|
"recepteur de haut niveau" (HighReceiver).
|
|
|
|
|
|
|
|
|
|
1.1. Auteurs
|
|
|
|
|
|
|
|
|
|
Cet exercice a <20>t<EFBFBD> enti<74>rement r<>alis<69> par Glenn ROLLAND
|
|
|
|
|
<[2]glenux@fr.st> <20> l'occasion de travaux pratiques du cours de
|
|
|
|
|
Programmation R<>partie du Master 2 Ing<6E>nierie Informatique - Syst<73>mes,
|
|
|
|
|
R<>seaux et Internet.
|
|
|
|
|
|
|
|
|
|
1.2. Impl<70>mentation des protocoles
|
|
|
|
|
|
|
|
|
|
J'ai choisi d'<27>crire un protocole unique Multi-BroadCast Protocol
|
|
|
|
|
(MBCP) utilisable aussi bien pour envoyer les datagrammes d'ABCAST que
|
|
|
|
|
de CBCAST.
|
|
|
|
|
|
|
|
|
|
1.2.1. Structures des datagrammes
|
|
|
|
|
|
|
|
|
|
Le datagramme MBCP se d<>compose de la fa<66>on suivante:
|
|
|
|
|
+------+-----------+---------+
|
|
|
|
|
| Type | Timestamp | Message |
|
|
|
|
|
+------+-----------+---------+
|
|
|
|
|
|
|
|
|
|
Dans ce datagrame:
|
|
|
|
|
|
|
|
|
|
Type est de type unsigned char et peu prendre les valeurs suivantes:
|
|
|
|
|
|
|
|
|
|
'A'
|
|
|
|
|
Indique l'utilisation du protocole ABCAST
|
|
|
|
|
|
|
|
|
|
'C'
|
|
|
|
|
indique l'utilisation du protocole CBCAST
|
|
|
|
|
|
|
|
|
|
une autre valeur
|
|
|
|
|
indique un protocole inconnu
|
|
|
|
|
|
|
|
|
|
Timestamp peut varier en fonction de Type.
|
|
|
|
|
* Si Type == 'A', alors la structure de Timestamp est la suivante:
|
|
|
|
|
+------------+-------------+
|
|
|
|
|
| Site index | Clock value |
|
|
|
|
|
+------------+-------------+
|
|
|
|
|
* Si Type == 'C', alors la structure de Timestamp est la suivante:
|
|
|
|
|
+------------+------------+-------------+
|
|
|
|
|
| Site_index | Clock_size | Clock_value |
|
|
|
|
|
+------------+------------+-------------+
|
|
|
|
|
* Si Type est diff<66>rent, alors on consid<69>re le paquet illisible.
|
|
|
|
|
|
|
|
|
|
Site_index est de type unsigned short (16 bits).
|
|
|
|
|
Il indique l'index du site emetteur. La num<75>rotation des index d<>bute
|
|
|
|
|
<20> z<>ro.
|
|
|
|
|
|
|
|
|
|
Clock_size est de type unsigned short (16 bits).
|
|
|
|
|
Ce champ indique la taille de l'horloge (si celle-ci est vectorielle).
|
|
|
|
|
|
|
|
|
|
Clock_value peut varier en fonction de Type.
|
|
|
|
|
* Si Type == 'A', alors Clock_value est de type unsigned short (16
|
|
|
|
|
bits)
|
|
|
|
|
* Si Type == 'C', alors Clock_value est un tableau de valeurs
|
|
|
|
|
unsigned short (16 bits * Clock_size)
|
|
|
|
|
|
|
|
|
|
Message poss<73>de la structure suivante:
|
|
|
|
|
+--------------+--------------+
|
|
|
|
|
| Message_size | Message_data |
|
|
|
|
|
+--------------+--------------+
|
|
|
|
|
|
|
|
|
|
Message_size est de type unsigned short (16 bits). Cette valeur
|
|
|
|
|
indique la taille du message.
|
|
|
|
|
|
|
|
|
|
Message_data est un tableau de valeurs char (8 bits * Message_size).
|
|
|
|
|
Ce champ contient le message (qui peut <20>tre une estampille).
|
|
|
|
|
|
|
|
|
|
2. Pr<50>-requis
|
|
|
|
|
|
|
|
|
|
Cet exercice n<>cessite:
|
|
|
|
|
* un syst<73>me compatible unix,
|
|
|
|
|
* le compilateur GNU GCC (version >= 2.95)
|
|
|
|
|
* une version r<>cente des GNU Autotools.
|
|
|
|
|
|
|
|
|
|
3. Se procurer le sources
|
|
|
|
|
|
|
|
|
|
Vous pouvez t<>l<EFBFBD>charger la derni<6E>re archive des sources, ou bien
|
|
|
|
|
directement leur version la plus r<>cente sur le d<>p<EFBFBD>t Subversion du
|
|
|
|
|
projet.
|
|
|
|
|
|
|
|
|
|
3.1. L'archive compress<73>e
|
|
|
|
|
|
|
|
|
|
Elle est disponible <20> l'adresse :
|
|
|
|
|
[3]http://glenux2.free.fr/pub/projets/Programmation_Repartie/TP2/archi
|
|
|
|
|
ves/
|
|
|
|
|
|
|
|
|
|
3.2. Le d<>p<EFBFBD>t Subversion
|
|
|
|
|
|
|
|
|
|
Afin d'obtenir les sources les plus <20> jour, vous pouvez utiliser le
|
|
|
|
|
logiciel de contr<74>le de sources Subversion
|
|
|
|
|
|
|
|
|
|
$ svn checkout \
|
|
|
|
|
http://repository.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/
|
|
|
|
|
TP2/ \
|
|
|
|
|
prog-repartie-tp2
|
|
|
|
|
|
|
|
|
|
Il n'y a pas de mot de passe, il suffit donc de presser la touche
|
|
|
|
|
"Entr<74>e" pour l'utilisateur "anonymous", si ce dernier vous est
|
|
|
|
|
demand<6E>.
|
|
|
|
|
|
|
|
|
|
4. Utiliser le logiciel
|
|
|
|
|
|
|
|
|
|
4.1. Compilation
|
|
|
|
|
|
|
|
|
|
Si vous avez choisi l'archive, commencez par la d<>compressez.
|
|
|
|
|
|
|
|
|
|
$ tar -xzvf prog-repartie-tp2.tar.gz
|
|
|
|
|
|
|
|
|
|
Rendez vous ensuite dans le dossier qui vient d'<27>tre cr<63><72> lors de la
|
|
|
|
|
d<>compression.
|
|
|
|
|
|
|
|
|
|
$ cd prog-repartie-tp2
|
|
|
|
|
|
|
|
|
|
Puis lancez la compilation du logiciel:
|
|
|
|
|
|
|
|
|
|
$ ./autogen.sh
|
|
|
|
|
$ ./configure
|
|
|
|
|
$ make
|
|
|
|
|
|
|
|
|
|
4.3. Utilisation
|
|
|
|
|
|
|
|
|
|
On supposera que les machines weber, beethoven et mozart font partie
|
|
|
|
|
du m<>me groupe, que leur ports respectifs pour la reception sont 2300,
|
|
|
|
|
2330, et 2360.
|
|
|
|
|
|
|
|
|
|
4.3.1. ABCAST
|
|
|
|
|
|
|
|
|
|
Pour la machine weber, on lancera:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -A -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 1
|
|
|
|
|
|
|
|
|
|
Pour la machine beethoven:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -A -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 2
|
|
|
|
|
|
|
|
|
|
Pour la machine mozart:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -A -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 3
|
|
|
|
|
|
|
|
|
|
4.3.2. CBCAST
|
|
|
|
|
|
|
|
|
|
On supposera que les machines weber, beethoven et mozart font partie
|
|
|
|
|
du m<>me groupe, que leur ports respectifs pour la reception sont 2300,
|
|
|
|
|
2330, et 2360.
|
|
|
|
|
|
|
|
|
|
Pour la machine weber, on lancera:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -C -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 1
|
|
|
|
|
|
|
|
|
|
Pour la machine beethoven:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -C -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 2
|
|
|
|
|
|
|
|
|
|
Pour la machine mozart:
|
|
|
|
|
|
|
|
|
|
$ ./dabcast -C -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
|
|
|
-i 3
|
|
|
|
|
|
|
|
|
|
R<EFBFBD>f<EFBFBD>rences
|
|
|
|
|
|
|
|
|
|
1. http://www.gnu.org/copyleft/gpl.html
|
|
|
|
|
2. mailto:glenux@fr.st
|
|
|
|
|
3. http://glenux2.free.fr/pub/projets/Programmation_Repartie/TP2/archives/
|