Vous avez remarqué dans la version précédente que l'arbre construit est réduit à un seul saut.
Pour que la requête de construction parvienne aux autres noeuds, il est nécessaire de la faire relayer à chaque fois qu'elle est reçus par un noeud.
Pour cela, reprenez la version précédente de TreeBuilderM et rajoutez une tâche :
task void relayTreeReq() {
struct TreeReqMsg* ptr;
ptr = (struct TreeReqMsg*)(buffer.data);
ptr->src = TOS_LOCAL_ADDRESS;
dbg(DBG_USR2,"__ROUTE__:mainParent=%d\n",parentId);
call SendTreeReqMsg.send(TOS_BCAST_ADDR,sizeof(struct TreeReqMsg),&buffer);
}
Analysez que fait cette tâche.
Modifier TreeBuilderM pour que cette tâche soit appelée par chaque noeud recevant une requête de construction de l'arbre de routage.
Relancer la compilation et l'exécution de cette nouvelle version.
Analyser le résultat obtenu.
Est ce que tous les noeuds couverts par l'arbre ont un chemin vers la racine (noeuds puis 0) ?
De quoi souffre cette version du protocole ?
Proposez une solution à ce problème.