m2.mbcp/doc
2006-09-07 14:47:33 +00:00
..
my-rfc.txt 2006-03-06 21:16:17 +00:00
readme.css * Added the documentation 2006-09-07 14:22:54 +00:00
readme.html 2006-09-07 14:47:33 +00:00

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html style="direction: ltr;" lang="fr-fr">
<head>

  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">

  <link rel="stylesheet" type="text/css" href="readme.css">
  <title>Programmation R&eacute;partie - TP2</title>


  <meta content="Glenn ROLLAND" name="author">

</head>


<body style="direction: ltr;">

<div style="text-align: justify;" class="page code code">
<h1>Programmation r&eacute;partie - TP2</h1>

<h2><a name="1._Description"></a>1.
Description</h2>

<p>Le but de ce TP est de concevoir une impl&eacute;mentation
des protocoles ABCAST et CBCAST.&nbsp;</p>

<p> Il poss&egrave;de les
caract&eacute;ristiques
suivantes :</p>

<ul>

  <li>Il est distribu&eacute;
sous la licence&nbsp;<a href="http://www.gnu.org/copyleft/gpl.html">GNU
General Public License</a></li>

  <li>Il&nbsp;est
&eacute;crit en C++,&nbsp;</li>

  <li>Il impl&eacute;mente ABCAST,</li>

  <li>Il impl&eacute;mente CBCAST.</li>

</ul>

<p>Cette impl&eacute;mentation utilise&nbsp;trois <span style="font-style: italic;">threads</span>, un
"envoyeur de bas
niveau" (<span style="font-weight: bold;">LowSender</span>),
un "recepteur de bas niveau" (<span style="font-weight: bold;">LowReceiver</span>)
et un
"recepteur de haut niveau" (<span style="font-weight: bold;">HighReceiver</span>).</p>

<h3>1.1.
Auteurs</h3>

<p>Cet exercice a
&eacute;t&eacute; enti&egrave;rement
r&eacute;alis&eacute; par Glenn ROLLAND &lt;<a href="mailto:glenux@fr.st">glenux@fr.st</a>&gt;
&agrave; l'occasion de travaux pratiques du cours de <span style="font-style: italic;">Programmation R&eacute;partie</span>
du Master 2 Ing&eacute;nierie Informatique
-
Syst&egrave;mes, R&eacute;seaux et Internet.</p>

<h3>1.2. Impl&eacute;mentation des protocoles</h3>

<p>J'ai choisi d'&eacute;crire un protocole unique <span style="font-weight: bold;">Multi-BroadCast Protocol</span>
(MBCP) utilisable aussi bien pour envoyer les datagrammes d'ABCAST que
de CBCAST.</p>

<h4>1.2.1. Structures des datagrammes</h4>

<span class="code_var">Le datagramme MBCP</span> se
d&eacute;compose de la fa&ccedil;on
suivante:
<pre>+------+-----------+---------+<br>| Type | Timestamp | Message |<br>+------+-----------+---------+<br></pre>

<p>Dans ce datagrame:</p>

<p><span class="code_var" style="font-weight: bold;">Type</span>
est de type <span class="code_type">unsigned char</span>
et peu prendre les valeurs suivantes:
</p>

<dl>

  <dt style="font-weight: bold;">'A'</dt>

  <dd>Indique l'utilisation du protocole ABCAST</dd>

  <dt style="font-weight: bold;">'C'</dt>

  <dd>indique l'utilisation du protocole CBCAST</dd>

  <dt style="font-weight: bold;">une autre valeur</dt>

  <dd>indique un protocole inconnu</dd>

</dl>

<p><span class="code_var" style="font-weight: bold;">Timestamp</span>
peut varier en fonction de <span class="code_var">Type</span>.&nbsp;</p>

<ul>

  <li>Si <span class="code_var" style="font-weight: bold;">Type</span> == 'A', alors
la structure de <span class="code_var">Timestamp</span>
est la suivante:<br>

    <pre>+------------+-------------+<br>| Site index | Clock value |<br>+------------+-------------+</pre>

  </li>

  <li>Si <span class="code_var">Type</span>
== 'C', alors la structure de <span class="code_var">Timestamp</span>
est la suivante:<br>

    <pre>+------------+------------+-------------+<br>| Site_index | Clock_size | Clock_value |<br>+------------+------------+-------------+</pre>

  </li>

  <li>Si <span class="code_var">Type</span>
est diff&eacute;rent, alors on consid&egrave;re le paquet
illisible.</li>

</ul>

<p><span class="code_var">Site_index</span>
est de type <span class="code_type">unsigned short</span>
(16 bits).<br>

Il indique l'index du site emetteur. La num&eacute;rotation des
index d&eacute;bute &agrave; z&eacute;ro.</p>

<p><span class="code_var">Clock_size</span>
est de type <span class="code_type">unsigned short</span>
(16 bits).<br>

Ce champ indique la taille de l'horloge (si celle-ci est vectorielle).</p>

<p><span class="code_var">Clock_value</span>
peut varier en fonction de Type.</p>

<ul>

  <li>Si <span class="code_var">Type</span>
== 'A', alors <span class="code_var">Clock_value</span>
est de type <span class="code_type">unsigned short</span>
(16 bits)</li>

  <li>Si <span class="code_var">Type</span>
== 'C', alors <span class="code_var">Clock_value</span>
est un tableau de valeurs <span class="code_type">unsigned
short</span> (16 bits * <span class="code_var">Clock_size</span>)</li>

</ul>

<p><span class="code_var">Message</span>
poss&egrave;de la structure suivante:</p>

<pre>+--------------+--------------+<br>| Message_size | Message_data |<br>+--------------+--------------+<br></pre>

<p><span class="code_var">Message_size</span>
est de type <span class="code_type">unsigned short</span>
(16 bits). Cette valeur indique la taille du message.</p>

<p><span class="code_var">Message_data</span>
est un tableau de valeurs <span class="code_type">char</span>
(8 bits * <span class="code_var">Message_size</span>).
Ce champ contient le message (qui peut &ecirc;tre une estampille).</p>

<dl>

</dl>

<h2><a99 name="2._Pr&eacute;-requis">2.
Pr&eacute;-requis</a99></h2>

<p>Cet exercice n&eacute;cessite:</p>

<ul>

  <li>un syst&egrave;me compatible unix,&nbsp;</li>

  <li>le compilateur GNU GCC&nbsp;
(version&nbsp;&ge;
2.95)</li>

  <li>une version r&eacute;cente des GNU Autotools.</li>

</ul>

<h2>3.
Se procurer le sources</h2>

<p>Vous
pouvez t&eacute;l&eacute;charger la derni&egrave;re archive
des
sources, ou bien directement leur version la plus r&eacute;cente
sur le d&eacute;p&ocirc;t Subversion du projet.</p>

<h3>3.1. L'archive compress&eacute;e</h3>

<p>Elle est disponible &agrave; l'adresse :<br>

<a href="http://glenux2.free.fr/pub/projets/ProgRepartie/TP2/Archives/">http://glenux2.free.fr/pub/projets/ProgRepartie/TP2/Archives/</a><br>

</p>

<h3>3.2. Le
d&eacute;p&ocirc;t Subversion</h3>

<p>Afin d'obtenir les sources les
plus &agrave; jour, vous pouvez utiliser le logiciel de
contr&ocirc;le de sources Subversion </p>

<p class="code">$ svn
checkout \<br>

&nbsp;&nbsp;https://websvn.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/TP2/
\<br>

&nbsp;&nbsp;prog-repartie-tp2</p>

<p>Il n'y a pas de mot de passe,
il suffit donc de presser la touche
"Entr&eacute;e" pour l'utilisateur "anonymous", si ce dernier vous
est
demand&eacute;.</p>

<h2>4. Utiliser le logiciel</h2>

<h3>4.1. Compilation</h3>

<p>Si vous avez choisi l'archive, commencez par la
d&eacute;compressez.</p>

<p class="code">$ tar -xzvf prog-repartie-tp2.tar.gz</p>

<p>Rendez vous ensuite dans le
dossier qui vient d'&ecirc;tre cr&eacute;&eacute; lors de
la d&eacute;compression.</p>

<p class="code">$ cd prog-repartie-tp2</p>

<p>Puis lancez&nbsp;la compilation du logiciel:</p>

<p class="code">$ ./autogen.sh<br>

$ ./configure<br>

$ make</p>

<h3>4.3. Utilisation</h3>

<p>On supposera que les machines <span style="font-style: italic;">weber</span>, <span style="font-style: italic;">beethoven</span> et <span style="font-style: italic;">mozart </span>font partie
du m&ecirc;me groupe,&nbsp;que leur ports respectifs pour la
reception sont <span style="font-style: italic;">2300</span>,
<span style="font-style: italic;">2330</span>, et <span style="font-style: italic;">2360</span>.</p>

<h4>4.3.1. ABCAST</h4>

<p>Pour la machine <span style="font-style: italic;">weber</span>, on lancera:</p>

<p class="code">$ ./dabcast -A -p 2300 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 1</p>

<p>Pour la machine <span style="font-style: italic;">beethoven</span>:</p>

<p class="code">$ ./dabcast -A -p 2330 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 2</p>

<p>Pour la machine <span style="font-style: italic;">mozart</span>:&nbsp;</p>

<p class="code">$ ./dabcast -A -p 2360 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 3</p>

<h4>4.3.2. CBCAST</h4>

<p>On supposera que les machines <span style="font-weight: bold;">weber</span>, <span style="font-weight: bold;">beethoven</span> et <span style="font-weight: bold;">mozart</span> font partie
du m&ecirc;me groupe,&nbsp;que leur ports respectifs pour la
reception sont <span style="font-weight: bold;">2300</span>,
<span style="font-weight: bold;">2330</span>, et <span style="font-weight: bold;">2360</span>.</p>

<p>Pour la machine <span style="font-style: italic;">weber</span>, on lancera:</p>

<p class="code">$ ./dabcast -C -p 2300 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 1</p>

<p>Pour la machine <span style="font-style: italic;">beethoven</span>:</p>

<p class="code">$ ./dabcast -C -p 2330 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 2</p>

<p>Pour la machine <span style="font-style: italic;">mozart</span>:&nbsp;</p>

<p class="code">$ ./dabcast -C -p 2360 -g weber:2300 -g
beethoven:2330 -g mozart:2360 -i 3</p>

</div>

</body>
</html>