ABCAST and CBCAST protocol implementation
Go to file
glenux 0d982d3be0 2006-09-07 14:47:33 +00:00
doc 2006-09-07 14:47:33 +00:00
src 2006-03-18 17:37:33 +00:00
AUTHORS 2006-02-05 17:44:20 +00:00
COPYING 2006-02-05 17:44:01 +00:00
ChangeLog 2006-02-05 17:44:20 +00:00
Doxyfile 2006-03-18 17:37:18 +00:00
INSTALL 2006-02-05 17:44:01 +00:00
Makefile.am 2006-03-18 17:40:54 +00:00
NEWS 2006-02-05 17:44:01 +00:00
README 2006-03-18 17:40:54 +00:00
autogen.sh 2006-02-05 17:43:00 +00:00
config.h 2006-02-05 17:44:01 +00:00
configure.in 2006-02-05 17:43:00 +00:00

README

Programmation répartie - TP2

1. Description

   Le but de ce TP est de concevoir une implémentation des protocoles
   ABCAST et CBCAST.

   Il possède les caractéristiques suivantes :
     * Il est distribué sous la licence [1]GNU General Public License
     * Il est écrit en C++,
     * Il implémente ABCAST,
     * Il implémente CBCAST.

   Cette implé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 été entièrement réalisé par Glenn ROLLAND
   <[2]glenux@fr.st> à l'occasion de travaux pratiques du cours de
   Programmation Répartie du Master 2 Ingénierie Informatique - Systèmes,
   Réseaux et Internet.

1.2. Implémentation des protocoles

   J'ai choisi d'é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ç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érent, alors on considère le paquet illisible.

   Site_index est de type unsigned short (16 bits).
   Il indique l'index du site emetteur. La numérotation des index débute
   à 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è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 être une estampille).

2. Pré-requis

   Cet exercice nécessite:
     * un systè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écharger la dernière archive des sources, ou bien
   directement leur version la plus récente sur le dépôt Subversion du
   projet.

3.1. L'archive compressée

   Elle est disponible à l'adresse :
   [3]http://glenux2.free.fr/pub/projets/Programmation_Repartie/TP2/archi
   ves/

3.2. Le dépôt Subversion

   Afin d'obtenir les sources les plus à jour, vous pouvez utiliser le
   logiciel de contrô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ée" pour l'utilisateur "anonymous", si ce dernier vous est
   demandé.

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'être créé 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éfé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/