Manuel de simulation de réseau ns-3. Chapitre 3

Manuel de simulation de réseau ns-3. Chapitre 3
chapitres 1,2

3 Commencer
3.1 Aperçu
3.2 Conditions préalables
3.2.1 Téléchargement de la version ns-3 sous forme d'archive source
3.3 Télécharger ns-3 avec Git
3.3.1 Téléchargement de ns-3 avec Bake
3.4 Compilation de ns-3
3.4.1 Compilation avec build.py
3.4.2 Compilation avec Bake
3.4.3 Compilation avec Waf
3.5 Test de ns-3
3.6 Exécution du script
3.6.1 Arguments de la ligne de commande
3.6.2 Débogage
3.6.3 Dossier de travail

Chapitre 3

Commencer

Ce chapitre a pour but de prĂ©parer le lecteur Ă  travailler Ă  partir d'un ordinateur sur lequel ns-3 n'a peut-ĂȘtre jamais Ă©tĂ© installĂ©. L'exposĂ© couvre les plateformes prises en charge, les conditions prĂ©alables, les mĂ©thodes d'obtention de ns-3, les mĂ©thodes de compilation de ns-3 et les moyens de vĂ©rifier votre compilation et d'exĂ©cuter des programmes simples.

3.1 Aperçu

Le simulateur ns-3 est conçu comme un systÚme de bibliothÚques logicielles interopérantes. Lors de la compilation, le code des programmes utilisateurs est lié à ces bibliothÚques. Pour écrire des programmes utilisateurs, les langages de programmation C++ ou Python sont utilisés.

Ns-3 est distribuĂ© sous forme de code source, ce qui signifie que le systĂšme cible doit disposer d'un environnement de dĂ©veloppement logiciel pour d'abord compiler les bibliothĂšques, puis compiler le programme utilisateur. En principe, ns-3 pourrait ĂȘtre distribuĂ© sous forme de bibliothĂšques prĂȘtes pour un systĂšme spĂ©cifique, et Ă  l'avenir, cela pourrait se faire de cette maniĂšre. Mais actuellement, de nombreux utilisateurs effectuent leur travail en modifiant le propre ns-3, il est donc utile d'avoir le code source pour compiler les bibliothĂšques. Si quelqu'un souhaite entreprendre la crĂ©ation de bibliothĂšques et de paquets prĂȘts pour les systĂšmes d'exploitation, veuillez contacter la liste de diffusion. ns-developers.

Nous allons maintenant examiner trois façons de télécharger et de compiler ns-3. La premiÚre consiste à télécharger et à construire la version officielle depuis le site principal. La deuxiÚme est de sélectionner et de compiler des copies des versions de développement de l'installation de base de ns-3. La troisiÚme utilise des outils de compilation supplémentaires pour télécharger davantage d'extensions pour ns-3. Nous allons parcourir chacune d'entre elles, car les outils diffÚrent légÚrement.

Les utilisateurs expĂ©rimentĂ©s de Linux peuvent se demander pourquoi ns-3 n'est pas proposĂ© sous forme de paquet, contrairement Ă  la plupart des autres bibliothĂšques utilisant un gestionnaire de paquets. Bien qu'il existe des paquets binaires pour diffĂ©rentes distributions Linux (par exemple, Debian), la plupart des utilisateurs finissent par modifier les bibliothĂšques et doivent recompiler ns-3 eux-mĂȘmes, rendant la disponibilitĂ© du code source pratique. Pour cette raison, nous nous concentrerons sur l'installation Ă  partir du code source.

Pour la plupart des utilisations, ns-3 n'exige pas de droits root particuliers, il est recommandé d'utiliser un compte utilisateur non privilégié.

3.2 Conditions préalables

L'ensemble des bibliothĂšques disponibles dans ns-3 a un certain nombre de dĂ©pendances par rapport Ă  des bibliothĂšques tierces, mais pour la plupart, ns-3 peut ĂȘtre compilĂ© et utilisĂ© avec le support de plusieurs composants courants (souvent installĂ©s par dĂ©faut) : un compilateur C++, Python, un Ă©diteur de code source (par exemple, vim, emacs ou Eclipse) et, si des dĂ©pĂŽts de dĂ©veloppement sont utilisĂ©s, des systĂšmes de contrĂŽle de version comme Git. La plupart des utilisateurs dĂ©butants n'ont pas Ă  s'inquiĂ©ter si leur configuration signale des fonctionnalitĂ©s supplĂ©mentaires manquantes de ns-3, mais pour ceux qui souhaitent une installation complĂšte, le projet fournit une wiki qui comprend des pages avec de nombreux conseils et astuces utiles. L'une de ces pages est la page « Installation » avec des instructions pour diverses systĂšmes, disponibles Ă  l'adresse : https://www.nsnam.org/wiki/Installation.

La section « Prérequis » de cette page wiki explique quels paquets sont nécessaires pour prendre en charge les options générales de ns-3, et fournit également les commandes utilisées pour les installer sur les distributions Linux ou macOS courantes.

Vous pouvez profiter de diverses ressources, telles que la page wiki de ns-3 ou le site web principal : https://www.nsnam.org, car il y a beaucoup d'informations disponibles. À partir de la derniĂšre version de ns-3 (ns-3.29), les outils suivants sont nĂ©cessaires pour exĂ©cuter ns-3 :

Outil Paquet/version

  • Compilateur C++
    clang++ ou g++ (g++ version 4.9 ou supérieure)
  • Python
    python2 version >= 2.7.10, ou python3 version >= 3.4
  • Git
    toute version récente (pour accéder à ns-3 sur GitLab.com)
  • tar
    toute version récente (pour décompresser la version de ns-3)
  • bunzip2
    toute version récente (pour décompresser la version de ns-3)

Pour vĂ©rifier la version de Python installĂ©e par dĂ©faut, entrez python -V. Pour vĂ©rifier la version de g++, entrez g++ -v. Si des outils sont manquants ou obsolĂštes, veuillez consulter le guide d'installation sur la page wiki de ns‑3.

À partir de maintenant, nous supposons que l'utilisateur travaille sous Linux, MacOS ou un Ă©mulateur de l'environnement Linux, et possĂšde au moins les outils mentionnĂ©s ci-dessus.

3.2.1 Téléchargement de la version ns-3 sous forme d'archive source

C'est la mĂ©thode pour un nouvel utilisateur qui souhaite tĂ©lĂ©charger et expĂ©rimenter avec les derniĂšres versions stables et les versions en paquet de ns‑3. Les versions de ns‑3 sont publiĂ©es sous forme d'archives compressĂ©es de source, parfois appelĂ©es tarball. tarball — c'est un format particulier d'archive de programme dans lequel plusieurs fichiers sont regroupĂ©s ensemble. L'archive est gĂ©nĂ©ralement compressĂ©e. Le processus de tĂ©lĂ©chargement de ns‑3 via tarball est simple, vous n'avez qu'Ă  choisir une version, la tĂ©lĂ©charger et l'extraire.

Supposons que vous, en tant qu'utilisateur, souhaitiez compiler ns‑3 dans un rĂ©pertoire local nommĂ© workspace. Vous pourrez obtenir une copie de travail de la version en entrant la commande suivante dans le terminal Linux (en remplaçant bien sĂ»r les numĂ©ros de version appropriĂ©s)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

Notez l'utilitaire utilisé ci-dessus wget, qui est un outil en ligne de commande pour télécharger des objets depuis Internet. Si vous ne l'avez pas installé, vous pouvez utiliser votre navigateur pour cela.

En suivant ces Ă©tapes, vous accĂ©derez au rĂ©pertoire ns-allinone-3.29, oĂč vous devriez voir plusieurs fichiers et rĂ©pertoires

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

Vous ĂȘtes dĂ©sormais prĂȘt Ă  compiler la distribution de base de ns‑3 et pouvez passer Ă  la section concernant la compilation de ns‑3.

3.3 Télécharger ns-3 avec Git

Le code de ns‑3 est disponible dans les dĂ©pĂŽts Git sur le service GitLab.com Ă  l'adresse https://gitlab.com/nsnam/. Le groupe nsnam regroupe divers dĂ©pĂŽts utilisĂ©s par le projet open source.

La maniĂšre la plus simple de commencer Ă  utiliser les dĂ©pĂŽts Git est de forker ou de cloner l'environnement ns‑3-allinone. C'est un ensemble de scripts qui gĂšrent le tĂ©lĂ©chargement et la compilation des sous-systĂšmes ns‑3 les plus couramment utilisĂ©s. Si vous ĂȘtes novice en Git, les termes "fork" et "clonage" peuvent vous ĂȘtre inconnus; si c'est le cas, nous vous recommandons de simplement cloner (crĂ©er votre propre copie) le dĂ©pĂŽt situĂ© sur GitLab.com comme suit:

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

À ce stade, l'apparence de votre rĂ©pertoire ns‑3-allinone differente du rĂ©pertoire d'archive de version dĂ©crit ci-dessus. Il doit ressembler Ă  ceci :

$ ls
build.py constants.py download.py README util.py

Veuillez noter la prĂ©sence du script download.py, qui extraira en plus ns‑3 et le code source associĂ©. Vous avez le choix ici : soit tĂ©lĂ©charger le dernier instantanĂ© de dĂ©veloppement de ns‑3 :

$ python download.py

ou prĂ©fĂ©rer la version de ns‑3 en utilisant l'option -n pour spĂ©cifier le numĂ©ro de version :

$ python download.py -n ns-3.29

AprĂšs cette Ă©tape, des dĂ©pĂŽts supplĂ©mentaires seront tĂ©lĂ©chargĂ©s dans le rĂ©pertoire ns‑3-allinone ns‑3 bake, pybindgen, netanim et Sur une machine avec Ubuntu 16.04 propre, j'ai dĂ» modifier la commande comme suit :.

Remarque
$ sudo python3 download.py -n ns-3.29 (ici et par la suite, remarques du traducteur). Les deux méthodes mentionnées ci-dessus (archive source ou dépÎt

3.3.1 Téléchargement de ns-3 avec Bake

via Git) sont utiles pour obtenir l'installation la plus simple de ns‑3 avec quelques add-ons ( ns‑3-allinone pour gĂ©nĂ©rer des liaisons Python etnetanim pour l'animation du rĂ©seau). Le troisiĂšme dĂ©pĂŽt, fourni par dĂ©faut dans ns‑3-allinone, s'appelle Sur une machine avec Ubuntu 16.04 propre, j'ai dĂ» modifier la commande comme suit : Bake pybindgen.

— c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. peut ĂȘtre utilisĂ© pour obtenir des versions de dĂ©veloppement de ns‑3, ainsi que pour tĂ©lĂ©charger et construire des extensions de la version de base de la distribution ns‑3, telles que l'environnement — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. ExĂ©cution de Code Direct CradleNetwork Simulation Cradle, , la possibilitĂ© de crĂ©er de nouvelles liaisons Python et diverses "applications" ns‑3.CradleNetwork Simulation Cradle — un cadre qui permet d'utiliser de vĂ©ritables piles rĂ©seau TCP/IP au sein du simulateur rĂ©seau.

Remarque
Si vous pensez que votre installation de ns‑3 doit avoir des fonctionnalitĂ©s avancĂ©es ou supplĂ©mentaires, vous pouvez suivre ce chemin d'installation.

Dans les derniùres versions de ns‑3

a Ă©tĂ© ajoutĂ© dans la version tar. La version inclut un fichier de configuration permettant de tĂ©lĂ©charger les versions les plus rĂ©centes au moment de la crĂ©ation de la version. Cela signifie que, par exemple, la version — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. , qui est distribuĂ©e avec la version ns‑3.29, peut ĂȘtre utilisĂ©e pour obtenir des composants pour cette version ns‑3 ou pour des versions antĂ©rieures, mais ne peut pas ĂȘtre utilisĂ©e pour extraire des composants pour des versions ultĂ©rieures (si le fichier de description de paquet — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3.bakeconf.xml n'est pas mis Ă  jour). Vous pouvez Ă©galement obtenir la version la plus rĂ©cente

, en entrant la commande suivante dans votre console Linux (à condition que Git soit installé) : pybindgen, en entrant la commande suivante dans votre console Linux (à condition que Git soit installé) :

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

Lorsque vous exécutez la commande git, vous devriez voir quelque chose comme ceci :

Clonage dans 'bake'...
remote: ÉnumĂ©ration des objets : 2086, fait. 
remote: Comptage des objets : 100 % (2086/2086), fait. 
remote: Compression des objets : 100 % (649/649), fait. 
remote: Total 2086 (delta 1404), réutilisé 2078 (delta 1399) 
Réception des objets : 100 % (2086/2086), 2.68 MiB | 3.82 MiB/s, fait. 
Résolution des deltas : 100 % (1404/1404), fait.

AprÚs l'achÚvement de la commande clone vous devriez avoir un répertoire nommé pybindgen, dont le contenu devrait ressembler à ceci :

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

Notez que vous avez téléchargé plusieurs scripts Python, un module Python nommé pybindgen et un fichier de configuration XML. L'étape suivante consiste à utiliser ces scripts pour télécharger et construire la distribution ns-3 de votre choix. Plusieurs cibles de configuration sont disponibles :

  1. ns-3.29: module correspondant à la version ; il téléchargera des composants similaires à ceux de la version dans le tarball ;

  2. ns-3-dev: module similaire, mais utilisant le code de l'arbre de développement ;

  3. ns-allinone-3.29: module qui inclut d'autres fonctionnalités supplémentaires, telles que la routage Click et le Network Simulation Cradle, Openflow pour ns-3.

  4. ns‑3-allinone: similaire Ă  la version officielle du module allinone, mais pour le code de dĂ©veloppement.

Remarque
Click — architecture logicielle modulaire pour crĂ©er des routeurs.

Openflow est un protocole de gestion du processus de traitement des données qui transitent par le réseau via des routeurs et des commutateurs, réalisant la technologie de réseau programmablement configurable.

Le dernier instantanĂ© de dĂ©veloppement (non publiĂ©) de ns-3 peut ĂȘtre trouvĂ© Ă  l'adresse :https://gitlab.com/nsnam/ns-3-dev.git.

Les développeurs s'efforcent de maintenir ces dépÎts en état de fonctionnement, mais ils sont en zone de développement et contiennent un code non publié, donc si vous ne prévoyez pas d'utiliser de nouvelles fonctionnalités, choisissez la version officielle.

Vous pouvez trouver la derniÚre version du code en parcourant la liste des dépÎts ou en visitant la page web « ns-3 Releases » :https://www.nsnam.org/releases/ et en cliquant sur le lien de la derniÚre version. Dans cet exemple, nous allons continuer avec ns-3.29.

Maintenant, pour obtenir les composants nĂ©cessaires de ns-3, nous allons utiliser l'outil — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3.. Disons quelques mots d'introduction au fonctionnement de — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3..

Bake fonctionne en tĂ©lĂ©chargeant les sources des paquets dans le rĂ©pertoire source et en installant les bibliothĂšques dans le rĂ©pertoire de construction. — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. peut ĂȘtre lancĂ© en rĂ©fĂ©rant au fichier binaire, mais si vous souhaitez lancer — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. pas Ă  partir du rĂ©pertoire dans lequel il a Ă©tĂ© tĂ©lĂ©chargĂ©, il est souhaitable d'ajouter le chemin Ă  pybindgen votre chemin (variable d'environnement PATH), par exemple, de la maniĂšre suivante (exemple pour le shell Linux bash). AccĂ©dez au rĂ©pertoire « bake », puis dĂ©finissez les variables d'environnement suivantes :

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

Cela mettra le programme bake.py dans le chemin du shell et permettra Ă  d'autres programmes de trouver les exĂ©cutables et bibliothĂšques que vous avez créés. pybindgenDans certains cas d'utilisation, pybindgenl'installation de PATH et PYTHONPATH dĂ©crite ci-dessus n'est pas nĂ©cessaire, mais pour la construction complĂšte de ns‑3-allinone (avec des paquets supplĂ©mentaires), elle est gĂ©nĂ©ralement requise.

Accédez au répertoire de travail et tapez dans le terminal ce qui suit :

$ ./bake.py configure -e ns-3.29

Ensuite, nous allons vous demander — c'est un outil pour la construction coordonnĂ©e de logiciels Ă  partir de plusieurs dĂ©pĂŽts, dĂ©veloppĂ© pour le projet ns‑3. de vĂ©rifier si nous avons suffisamment d'outils pour tĂ©lĂ©charger les diffĂ©rents composants. Tapez :

$ ./bake.py check

Vous devriez voir quelque chose comme ceci :

> Python - OK 
> Compilateur GNU C++ - OK 
> Mercurial - OK 
> Git - OK 
> Outil Tar - OK 
> Outil Unzip - OK 
> Make - OK 
> cMake - OK 
> Outil patch - OK 
> Chemin recherché pour les outils : /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

En particulier, les outils de tĂ©lĂ©chargement tels que Mercurial, CVS, Git et Bazaar sont essentiels Ă  cette Ă©tape, car ils nous permettent d'obtenir le code. À cette Ă©tape, installez les outils manquants de la maniĂšre habituelle de votre systĂšme (si vous savez comment faire) ou demandez de l'aide Ă  votre administrateur systĂšme.

Ensuite, essayez de télécharger le logiciel :

$ ./bake.py download

le résultat devrait ressembler à quelque chose comme :

>> Recherche de la dépendance systÚme setuptools - OK 
>> Recherche de la dépendance systÚme libgoocanvas2 - OK 
>> Recherche de la dépendance systÚme gi-cairo - OK 
>> Recherche de la dépendance systÚme pygobject - OK 
>> Recherche de la dépendance systÚme pygraphviz - OK 
>> Recherche de la dépendance systÚme python-dev - OK 
>> Recherche de la dépendance systÚme qt - OK 
>> Recherche de la dépendance systÚme g++ - OK 
>> Téléchargement de pybindgen-0.19.0.post4+ng823d8b2 (répertoire cible : pybindgen) - OK 
>> Téléchargement de netanim-3.108 - OK 
>> Téléchargement de ns-3.29 - OK

Cela signifiera que trois sources ont été téléchargées. Maintenant, allez dans le répertoire source et tapez ls; vous devriez voir :

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

Vous ĂȘtes maintenant prĂȘt Ă  compiler la distribution ns‑3.

3.4 Compilation de ns-3

Tout comme pour le tĂ©lĂ©chargement de ns‑3, il existe plusieurs maniĂšres de compiler ns‑3. La principale chose que nous tenons Ă  souligner est que ns‑3 est compilĂ© Ă  l'aide d'un outil de compilation appelĂ© Waf, dĂ©crit ci-dessous. La plupart des utilisateurs travailleront avec Waf, mais il existe plusieurs scripts pratiques qui vous aideront Ă  dĂ©marrer ou Ă  organiser des assemblages plus complexes. Par consĂ©quent, veuillez lire sur Waf, jetez un Ɠil au build.py et l'assemblage avec pybindgen.

3.4.1 Compilation avec build.py

Attention ! Cette étape d'assemblage est uniquement disponible à partir de la version de l'archive source obtenue comme décrit ci-dessus ; et non téléchargée via git ou bake.

Lors de l'utilisation de l'archive de version tarball, sur ns‑3‑allinone , il existe un script pratique qui peut simplifier l'assemblage des composants. Il s'appelle build.py. Ce programme configurera le projet pour vous de la maniĂšre la plus utile. Cependant, veuillez noter que des configurations plus complexes et le travail avec ns‑3 impliquent gĂ©nĂ©ralement l'utilisation de son propre systĂšme de construction, Waf, qui sera prĂ©sentĂ© plus tard dans ce guide.

Si vous avez téléchargé à l'aide de tarball, alors votre répertoire ~\/workspace doit contenir un répertoire nommé quelque chose comme ns-allinone-3.29. Tapez ce qui suit :

$ .\/build.py --enable-examples --enable-tests

Lors de l'appel build.py , nous avons appliquĂ© les arguments de ligne de commande pour assembler les exemples et tests utilisĂ©s dans ce guide, qui ne sont pas assemblĂ©s par dĂ©faut dans ns‑3. Par dĂ©faut, le programme construit Ă©galement tous les modules disponibles. Ensuite, si vous le souhaitez, vous pouvez assembler ns‑3 sans exemples ni tests ou exclure les modules qui ne sont pas nĂ©cessaires pour votre travail.

Vous verrez beaucoup de messages de sortie du compilateur affichĂ©s par le script lors de l'assemblage des diffĂ©rentes parties que vous avez tĂ©lĂ©chargĂ©es. Tout d'abord, le script essaiera d'assembler l'animateur Sur une machine avec Ubuntu 16.04 propre, j'ai dĂ» modifier la commande comme suit :, puis le gĂ©nĂ©rateur de liaisons netanim et enfin, ns‑3. À la fin du processus, vous devriez voir ce qui suit :

Waf : Leaving directory '\/path\/to\/workspace\/ns-allinone-3.29\/ns-3.29\/build'\n'build' finished successfully (6m25.032s) \n\nModules built:\nantenna                aodv                     applications\nbridge                 buildings                config-store\ncore                   csma                     csma-layout\ndsdv                   dsr                      energy \nfd-net-device          flow-monitor             internet\ninternet-apps          lr-wpan                  lte\nmesh                   mobility                 mpi\nnetanim (no Python)    network                  nix-vector-routing \nolsr                   point-to-point           point-to-point-layout \npropagation            sixlowpan                spectrum \nstats                  tap-bridge               test (no Python) \ntopology-read          traffic-control          uan \nvirtual-net-device     visualizer               wave \nwifi                   wimax \n\nModules not built (see ns-3 tutorial for explanation):\nbrite                  click                    openflow \nLeaving directory .\/ns-3.29

Dans les trois derniÚres lignes du listing, nous voyons un message sur les modules qui n'ont pas été assemblés :

Modules not built (see ns-3 tutorial for explanation):\nbrite                     click

Cela signifie simplement que certains modules ns-3, qui dĂ©pendent de bibliothĂšques externes, n'ont peut-ĂȘtre pas Ă©tĂ© construits, ou que leur construction n'est pas nĂ©cessaire pour cette configuration. Cela ne signifie pas que le simulateur n'a pas Ă©tĂ© construit ou que les modules construits fonctionneront mal.

3.4.2 Compilation avec Bake

Si vous avez utilisé bake pour récupérer le code source à partir des dépÎts du projet, vous pouvez continuer à l'utiliser pour construire ns-3. Tapez :

$ ./bake.py build

et vous devriez voir quelque chose comme :

>> Construction de pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Construction de netanim-3.108 - OK 
>> Construction de ns-3.29 - OK

Indice: vous pouvez également exécuter les deux étapes, téléchargement et construction, à la fois en appelant « bake.py deploy ».

Lors de la construction de tous les composants, des Ă©checs peuvent survenir, mais la construction se poursuivra si le composant n'est pas essentiel. Par exemple, un problĂšme rĂ©cent de portabilitĂ© concernait le fait que castxml peut ĂȘtre construit par un outil pybindgen pas sur toutes les plateformes. Dans ce cas, vous verrez un message du type :

>> Construction de castxml - ProblĂšme 
> ProblÚme : dépendance optionnelle, le module "castxml" a échoué
Cela peut réduire la fonctionnalité de la construction finale.
Cependant, bake continuera puisque "castxml" n'est pas une dépendance essentielle.
Pour plus d'informations, appelez bake avec -v ou -vvv, pour le mode verbeux complet.

Cependant castxml n'est nĂ©cessaire que si vous souhaitez crĂ©er des liaisons Python mises Ă  jour. Pour la plupart des utilisateurs, cela n'est pas nĂ©cessaire (du moins jusqu'Ă  ce qu'ils commencent Ă  modifier ns-3), donc ces avertissements peuvent ĂȘtre ignorĂ©s en toute sĂ©curitĂ© pour l'instant.

Si un échec se produit, la commande suivante vous donnera un indice sur les dépendances manquantes :

$ ./bake.py show

Différentes dépendances de paquets que vous essayez de construire seront énumérées.

3.4.3 Compilation avec Waf

Jusqu'à présent, pour commencer à construire ns-3, nous avons utilisé soit un script build.py, soit un outil pybindgen. Ces outils sont utiles pour construire ns-3 et supporter les bibliothÚques. En fait, pour la construction, ils lancent l'outil de construction Waf depuis le répertoire ns-3. Waf est installé avec le code source de ns-3. La plupart des utilisateurs passent rapidement à l'utilisation directe de Waf. Donc, pour continuer, veuillez vous rendre dans le répertoire ns-3 que vous avez initialement créé.

Actuellement, cela n'est pas strictement nécessaire, mais il est utile de faire un petit détour et de voir comment apporter des modifications à la configuration du projet. Probablement, le changement de configuration le plus utile que vous pouvez faire est de créer une version optimisée du code. Par défaut, vous avez configuré votre projet pour compiler la version de débogage. Examinons le projet pour créer une version optimisée. Pour expliquer à Waf qu'il doit effectuer des constructions optimisées, y compris des exemples et des tests, vous devrez exécuter les commandes suivantes :

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

Cela lancera Waf en dehors du répertoire local (pour votre commodité). La premiÚre commande exécute le nettoyage de l'ancienne construction, elle n'est généralement pas strictement nécessaire, mais c'est une bonne pratique (voir également les profils de construction ci-dessous) ; cela supprimera les bibliothÚques et les fichiers objets précédemment créés se trouvant dans le répertoire build/. Lorsque le projet est reconfiguré et que le systÚme de construction vérifie diverses dépendances, vous devriez voir une sortie semblable à celle-ci :

Définition du répertoire de haut : /home/ns3user/workspace/bake/source/ns-3-dev
Définition du répertoire de sortie : /home/ns3user/workspace/bake/source/ns-3-dev/build
Vérification de 'gcc' (compilateur C) : /usr/bin/gcc
Vérification de la version de cc : 7.3.0
Vérification de 'g++' (compilateur C++) : /usr/bin/g++
Vérification du support du drapeau de compilation -march=native : ok
Vérification du support du drapeau de compilation -Wl,--soname=foo : ok
Vérification du support du drapeau de compilation -std=c++11 : ok
VĂ©rification des inclusions de boost : en-tĂȘtes non trouvĂ©s, veuillez fournir un argument --boost-includes (voir aide)
VĂ©rification des inclusions de boost : en-tĂȘtes non trouvĂ©s, veuillez fournir un argument --boost-includes (voir aide)
Vérification du programme 'python' : /usr/bin/python
Vérification de la version de python >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Demande Ă  python-config pour les drapeaux pyembed '--cflags --libs --ldflags' : oui
Test de la configuration pyembed : oui
Demande Ă  python-config pour les drapeaux pyext '--cflags --libs --ldflags' : oui
Test de la configuration pyext : oui

Vérification du support du drapeau de compilation -fvisibility=hidden : ok
Vérification du support du drapeau de compilation -Wno-array-bounds : ok
Vérification de l'emplacement de pybindgen : ../pybindgen, (deviné)
Vérification du module python 'pybindgen' : 0.19.0., post4+g823d8b2
Vérification de la version de pybindgen : 0.19.0., post4+g823d8b2
Vérification de l'extrait de code : oui
Vérification de l'équivalence des types uint64_t et unsigned long : non
Vérification de l'extrait de code : non
Vérification de l'équivalence des types uint64_t et unsigned long long : oui
VĂ©rification des apidefs pouvant ĂȘtre utilisĂ©s pour les liaisons Python : gcc-LP64
Vérification de l'abstraction interne GCC cxxabi : complÚte
Vérification du module python 'pygccxml' : non trouvé
Vérification de l'emplacement de click : non trouvé
Vérification du programme 'pkg-config' : /usr/bin/pkg-config
Vérification de 'gtk+-3.0' : non trouvé
Vérification de 'libxml-2.0' : oui
Vérification de uint128_t : non trouvé
Vérification de __uint128_t : oui
Vérification de l'implémentation de haute précision : entier 128 bits, (par défaut)
VĂ©rification de l'en-tĂȘte stdint.h : oui
VĂ©rification de l'en-tĂȘte inttypes.h : oui
VĂ©rification de l'en-tĂȘte sys/inttypes.h : non trouvĂ©
VĂ©rification de l'en-tĂȘte sys/types.h : oui
VĂ©rification de l'en-tĂȘte sys/stat.h : oui
VĂ©rification de l'en-tĂȘte dirent.h : oui
VĂ©rification de l'en-tĂȘte stdlib.h : oui
VĂ©rification de l'en-tĂȘte signal.h : oui
VĂ©rification de l'en-tĂȘte pthread.h : oui
VĂ©rification de l'en-tĂȘte stdint.h : oui
VĂ©rification de l'en-tĂȘte inttypes.h : oui
VĂ©rification de l'en-tĂȘte sys/inttypes.h : non trouvĂ©
Vérification de la bibliothÚque rt : oui
VĂ©rification de l'en-tĂȘte sys/ioctl.h : oui
VĂ©rification de l'en-tĂȘte net/if.h : oui
VĂ©rification de l'en-tĂȘte net/ethernet.h : oui
VĂ©rification de l'en-tĂȘte linux/if_tun.h : oui
VĂ©rification de l'en-tĂȘte netpacket/packet.h : oui
Vérification de l'emplacement de NSC : non trouvé
Vérification de 'sqlite3' : non trouvé
VĂ©rification de l'en-tĂȘte linux/if_tun.h : oui
Vérification du module python 'gi' : 3.26.1
Vérification du module python 'gi.repository.GObject' : ok
Vérification du module python 'cairo' : ok
Vérification du module python 'pygraphviz' : 1.4rc1
Vérification du module python 'gi.repository.Gtk' : ok
Vérification du module python 'gi.repository.Gdk' : ok
Vérification du module python 'gi.repository.Pango' : ok
Vérification du module python 'gi.repository.GooCanvas' : ok
Vérification du programme 'sudo' : /usr/bin/sudo
Vérification du programme 'valgrind' : non trouvé
Vérification de 'gsl' : non trouvé python-config : non trouvé
Vérification du support du drapeau de compilation -fstrict-aliasing : ok
Vérification du support du drapeau de compilation -fstrict-aliasing : ok
Vérification du support du drapeau de compilation -Wstrict-aliasing : ok
Vérification du support du drapeau de compilation -Wstrict-aliasing : ok
Vérification du programme 'doxygen' : /usr/bin/doxygen
---- Résumé des fonctionnalités optionnelles de ns-3 :
Profil de construction : optimisé
Répertoire de construction : 
Intégration BRITE : non activée (BRITE non activé (voir l'option --with-brite))
Collecte d'événements de métriques DES : non activée (par défaut désactivé)
Emulation FdNetDevice : activée
Exemples : activés
Fichier NetDevice : activé
BibliothÚque scientifique GNU (GSL) : non activée (GSL non trouvé)
BibliothÚque Gcrypt : non activée
(libgcrypt non trouvé : vous pouvez utiliser libgcrypt-config pour trouver son emplacement.) GtkConfigStore : non activé (bibliothÚque 'gtk+-3.0 >= 3.0' non trouvée)
Support MPI : non activé (option --enable-mpi non sélectionnée)
Intégration ns-3 Click : non activée (nsclick non activé (voir option --with-nsclick))
Intégration ns-3 OpenFlow : non activée (bibliothÚques boost requises non trouvées)
Berceau de simulation réseau : non activé (NSC non trouvé (voir option --with-nsc))
FdNetDevice PlanetLab : non activé (systÚme d'exploitation PlanetLab non détecté (voir l'option --force-planetlab)) PyViz visualiseur : activé
Support de numérisation de l'API Python : non activé (Module Python 'pygccxml' manquant)
Liaisons Python : activées
Simulateur en temps réel : activé
Sortie de données statistiques SQlite : non activée (bibliothÚque 'sqlite3' non trouvée)
Pont Tap : activé
FdNetDevice Tap : activé
Tests : activés
Primitives de threading : activées
Utiliser sudo pour définir le bit suid : non activé (option --enable-sudo non sélectionnée)
XmlIo : activé
'configure' terminé avec succÚs (6.387s)

Faites attention Ă  la derniĂšre partie de l'extrait ci-dessus. Certaines options de ns-3 ne sont pas activĂ©es par dĂ©faut ou nĂ©cessitent un soutien de la part du systĂšme pour fonctionner correctement. Par exemple, pour activer XmlTo, la bibliothĂšque libxml-2.0doit ĂȘtre prĂ©sente dans le systĂšme. Si cette bibliothĂšque n'a pas Ă©tĂ© trouvĂ©e et que la fonction correspondante de ns-3 n'a pas Ă©tĂ© activĂ©e, un message sera affichĂ©. Notez Ă©galement qu'il est possible d'utiliser la commande sudo pour dĂ©finir le bit suid « installer l'ID de groupe pendant l'exĂ©cution » pour certains programmes. Il n'est pas activĂ© par dĂ©faut, c'est pourquoi cette fonction est affichĂ©e comme « non activĂ©e » (« not enabled »). Enfin, pour obtenir la liste des options activĂ©es, utilisez Waf avec le paramĂštre --check-config.

Revenons maintenant à la compilation de débogage, qui contient des exemples et des tests.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

Le systÚme de compilation est maintenant configuré et vous pouvez compiler des versions de débogage de ns-3 en tapant simplement :

$ ./waf

Bien que les étapes ci-dessus vous aient amené à compiler une partie du systÚme ns-3 deux fois, vous savez maintenant comment modifier la configuration et construire du code optimisé.

Pour vérifier quel profil est actif pour cette configuration de projet, il existe une commande :

$ ./waf --check-profile 
Waf : Entrée dans le répertoire `/path/to/ns-3-allinone/ns-3.29/build` 
Profil de construction : debug

Le scénario décrit ci-dessus build.py prend également en charge les arguments --enable-examples et --enable-tests, mais il ne prend pas directement d'autres options. Par exemple, cela ne fonctionnera pas : Waf $ ./build.py --disable-python

la réaction sera la suivante :

build.py : erreur : option inconnue : --disable-python

Cependant, un opĂ©rateur spĂ©cial - - peut ĂȘtre utilisĂ© pour passer des paramĂštres supplĂ©mentaires via

, donc à la place de la commande mentionnée ci-dessus, la commande suivante fonctionnera : waf$ ./build.py -- --disable-python

car elle génÚre la commande principale

./waf configure --disable-python . Voici quelques conseils supplémentaires concernantLa gestion des erreurs de compilation Waf.

Gestion des erreurs de compilation

Les versions de ns‑3 ont Ă©tĂ© testĂ©es avec les derniers compilateurs C++ disponibles au moment de la sortie sur les distributions populaires de Linux et de MacOS. Cependant, avec le temps, de nouvelles distributions avec de nouveaux compilateurs sont publiĂ©es, et ces compilateurs plus rĂ©cents sont gĂ©nĂ©ralement plus exigeants concernant les avertissements. Ns‑3 configure sa compilation pour traiter tous les avertissements comme des erreurs, donc parfois, si vous utilisez une version plus ancienne sur un systĂšme plus rĂ©cent, un avertissement du compilateur peut arrĂȘter la compilation.

Par exemple, il y a eu auparavant la version ns‑3.28 pour Fedora 28, qui incluait une nouvelle version majeure gcc (gcc-8). La compilation de la version ns‑3.28 ou des versions antĂ©rieures sous Fedora 28, avec Gtk2+ d'installĂ©, donnera cette erreur :

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

Dans les versions Ă  partir de ns‑3.28.1, une Waf option est disponible pour rĂ©soudre ces problĂšmes. Elle dĂ©sactive le flag « -Werror » dans g++ et clang++. Cette option « --disable-werror » doit ĂȘtre appliquĂ©e lors de la configuration :

$ ./waf configure --disable-werror --enable-examples --enable-tests

Configurer ou construire

Certaines commandes Waf n'ont de sens que lors de la phase de configuration, tandis que d'autres n'agissent que lors de la phase de construction. Par exemple, si vous souhaitez utiliser les fonctionnalitĂ©s d'Ă©mulation de ns‑3, vous pouvez activer le bit suid en utilisant sudo, comme dĂ©crit ci-dessus. Cela annulera les commandes de la phase de configuration, et vous pourrez ainsi modifier la configuration en utilisant la commande suivante, qui inclut Ă©galement des exemples et des tests.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

Si vous faites cela, Waf lancera sudo, pour changer les programmes de création de sockets du code d'émulation pour s'exécuter avec des droits root. Il y a Waf il existe de nombreuses autres options pour les étapes de configuration et de construction. Pour explorer les options, tapez :

$ ./waf --help

Dans la section suivante, nous utiliserons certaines options liées aux tests.

Profils de construction

Nous avons déjà vu comment configurer Waf pour les constructions debug et optimisées:

$ ./waf --build-profile=debug

Il existe aussi un profil de construction intermédiaire, release. L'option -d est un synonyme de --build-profile. Le profil de construction gÚre l'utilisation de la journalisation, des assertions et des clés d'optimisation du compilateur :

Manuel de simulation de réseau ns-3. Chapitre 3

Comme vous pouvez le voir, la journalisation et les assertions ne sont disponibles que dans les versions de débogage. La pratique recommandée consiste à développer votre script en mode débogage, puis à exécuter des réévaluations (pour des statistiques ou des changements de paramÚtres) dans un profil de compilation optimisé.

Si vous avez du code qui doit ĂȘtre exĂ©cutĂ© uniquement dans des profils de compilation spĂ©cifiques, utilisez le macro Code Wrapper Macro :

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

Par dĂ©faut, Waf les artefacts de compilation sont placĂ©s dans le rĂ©pertoire de compilation. Vous pouvez spĂ©cifier un autre rĂ©pertoire de sortie avec l'option - -out, par exemple :

$ ./waf configure --out=my-build-dir

En combinant cela avec les profils de compilation, vous pouvez facilement alterner entre différentes options de compilation :

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

Ce qui vous permet de travailler avec plusieurs compilations sans avoir à réécrire à chaque fois la derniÚre compilation. Lorsque vous passez à un autre profil, Waf il ne compile que celui-ci, sans recompilation complÚte de l'ensemble.

Lorsque vous changez ainsi les profils de compilation, il est nĂ©cessaire de veiller Ă  fournir les mĂȘmes paramĂštres de configuration Ă  chaque fois. La dĂ©finition de plusieurs variables d'environnement vous aidera Ă  Ă©viter des erreurs :

$ export NS3CONFIG="--enable-examples --enable-tests" 
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT="--build-profile=optimized --out=build/optimized" 

$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build 
... 
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build

Compilateurs et drapeaux

Dans les exemples ci-dessus, Waf pour la compilation de ns-3 utilise le compilateur C++ de GCC ( g++). Cependant, vous pouvez changer le compilateur C++ utilisé en définissant la variable d'environnement CXX. Par exemple, pour utiliser le compilateur C++ Clang, clang++, Waf $ CXX="clang++" ./waf configure $ ./waf build

De mĂȘme, vous pouvez configurer 

pour utiliser la compilation distribuée avec Waf distcc $ CXX="distcc g++" ./waf configure $ ./waf build:

Pour plus d'informations sur distcc et la compilation distribuée, veuillez consulter la page du projet dans la section 'Documentation'. Pour ajouter des drapeaux de compilateur lors de la configuration de ns-3, utilisez la variable d'environnement CXXFLAGS_EXTRA.

Des informations plus dĂ©taillĂ©es sur distcc et la compilation distribuĂ©e peuvent ĂȘtre trouvĂ©es sur la page du projet dans la section « Documentation ». Pour ajouter des drapeaux de compilation lors de la configuration de ns‑3, utilisez la variable d'environnement CXXFLAGS_EXTRA.

Installation

Waf peut ĂȘtre utilisĂ© pour installer des bibliothĂšques Ă  diffĂ©rents endroits du systĂšme. Par dĂ©faut, les bibliothĂšques compilĂ©es et les fichiers exĂ©cutables se trouvent dans le rĂ©pertoire build, et puisque Waf connaĂźt l'emplacement de ces bibliothĂšques et fichiers exĂ©cutables, il n'est pas nĂ©cessaire d'installer les bibliothĂšques ailleurs.

Si les utilisateurs prĂ©fĂšrent une installation en dehors du rĂ©pertoire de construction, ils peuvent exĂ©cuter la commande .\/waf install. Par dĂ©faut, le prĂ©fixe pour l'installation est /usr/local, donc .\/waf install installera les programmes dans /usr/local/bin, les bibliothĂšques dans /usr/local/lib et les fichiers d'en-tĂȘte dans /usr/local/include. Les privilĂšges de superutilisateur sont gĂ©nĂ©ralement nĂ©cessaires pour installer avec le prĂ©fixe par dĂ©faut, donc la commande typique sera sudo .\/waf install. Lors de l'exĂ©cution, Waf prĂ©fĂ©rera d'abord utiliser les bibliothĂšques partagĂ©es dans le rĂ©pertoire de construction, puis cherchera les bibliothĂšques sur le chemin des bibliothĂšques configurĂ© dans l'environnement local. Ainsi, lors de l'installation de bibliothĂšques dans le systĂšme, il est bon de vĂ©rifier que les bonnes bibliothĂšques sont utilisĂ©es. Les utilisateurs peuvent choisir une installation avec un autre prĂ©fixe en passant l'option lors de la configuration --prefix, par exemple :

.\/waf configure --prefix=\/opt\/local

Si plus tard, aprÚs la construction, l'utilisateur entre la commande d'installation .\/waf, le préfixe /opt/local.

Commande .\/waf clean doit ĂȘtre utilisĂ© avant de reconfigurer le projet, si l'installation se fait avec Waf un prĂ©fixe diffĂ©rent.

Ainsi, pour utiliser ns‑3, il n'est pas nĂ©cessaire d'appeler .\/waf install. La plupart des utilisateurs n'auront pas besoin de cette commande, car Waf prendra les bibliothĂšques actuelles depuis le rĂ©pertoire de construction, mais certains utilisateurs pourraient la trouver utile si leur activitĂ© implique de travailler avec des programmes en dehors du rĂ©pertoire ns‑3.

Waf unique

Au niveau supĂ©rieur de l'arborescence du code source de ns‑3, il n'y a qu'un seul script Waf. En commençant Ă  travailler, vous passerez beaucoup de temps dans le rĂ©pertoire scratch\/ ou plus profondĂ©ment, danssrc\/... et avoir besoin d'exĂ©cuter Waf. Vous pouvez simplement vous souvenir de votre emplacement et exĂ©cuter Waf comme suit :

$ ..\/..\/..\/waf ...

mais cela serait fatigant et sujet Ă  des erreurs, donc il existe de meilleures solutions. L'un des moyens courants consiste Ă  utiliser un Ă©diteur de texte tel que emacs ou vim, qui ouvre deux sessions terminales, l'une utilisĂ©e pour construire ns‑3 et l'autre pour Ă©diter le code source. Si vous n'avez que tarball, cela peut ĂȘtre aidĂ© par une variable d'environnement :

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

Il peut sembler tentant d'ajouter un script waf trivial dans le répertoire du module selon l'exemple exec ../../waf. Veuillez ne pas faire cela. Cela peut troubler les débutants et, si mal exécuté, conduire à des erreurs de compilation difficiles à détecter. Les solutions mentionnées ci-dessus sont la voie à suivre.

3.5 Test de ns-3

Vous pouvez effectuer des tests unitaires de la distribution ns-3 en exécutant le script ./test.py:

$ ./test.py

Ces tests s'exécutent en parallÚle avec Waf. Finalement, vous devriez voir un message indiquant que

92 de 92 tests ont réussi (92 réussis, 0 échoués, 0 plantés, 0 erreurs valgrind)

C'est un message important pour identifier les échecs, les plantages ou les erreurs valgrind, signalant des problÚmes dans le code ou des incompatibilités entre les outils et le code.

Vous verrez également la sortie finale de Waf et du testeur exécutant chaque test, qui ressemblera à peu prÚs à ceci :

Waf : Entrée dans le répertoire `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf : Sortie du répertoire `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' terminé avec succÚs (1.799s) 

Modules construits :
aodv           applications          bridge
click          config-store          core
csma           csma-layout           dsdv
emu            energy                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
network        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
point-to-point point-to-point-layout propagation
spectrum       stats                 tap-bridge
template       test                  tools
topology-read  uan                   virtual-net-device
visualizer     wifi                  wimax

PASS : TestSuite ns3-wifi-interference
PASS : TestSuite histogram 

...

PASS : TestSuite object
PASS : TestSuite random-number-generators
92 de 92 tests ont réussi (92 réussis, 0 échoués, 0 plantés, 0 erreurs valgrind)

Cette commande est gĂ©nĂ©ralement lancĂ©e par les utilisateurs pour vĂ©rifier rapidement l'exactitude de la compilation de la distribution ns-3. (Notez que l'ordre des lignes « PASS : ... » peut varier, c'est normal. Ce qui compte, c'est que la ligne finale du rapport indique que tous les tests ont Ă©tĂ© passĂ©s ; aucun test n'a Ă©chouĂ© ni n'a plantĂ©.) Et Wafet test.py Ă©taleront le travail sur les cƓurs de processeur disponibles de la machine.

3.6 Exécution du script

En gĂ©nĂ©ral, nous exĂ©cutons des scripts sous le contrĂŽle de Waf. Cela permet au systĂšme de construction de garantir que les chemins vers la bibliothĂšque partagĂ©e sont correctement dĂ©finis et que les bibliothĂšques sont accessibles Ă  l'exĂ©cution. Pour lancer le programme, utilisez simplement Waf avec le paramĂštre - run. Nous allons lancer pour ns-3 l'Ă©quivalent du programme omniprĂ©sent hello world, en tapant ce qui suit :

$ ./waf --run hello-simulator

Waf commencera par vérifier que le programme est correctement construit, et effectuera une construction si nécessaire. Ensuite, Waf il exécutera le programme qui produira la sortie suivante.

Hello Simulator

FĂ©licitations ! Vous ĂȘtes maintenant utilisateur de ns‑3 !

Que dois-je faire si je ne vois pas de résultat ?

Si vous voyez des messages Waf, indiquant que la construction a Ă©tĂ© effectuĂ©e avec succĂšs, mais que vous ne voyez pas la sortie « Hello Simulator », il est probable que vous ayez basculĂ© votre mode de construction dans la section [Construction-s-Waf] sur optimisĂ©es, mais avez manquĂ© de revenir Ă  mode debug. Toute la sortie de la console utilisĂ©e dans ce guide utilise un composant spĂ©cial ns‑3 qui effectue l'enregistrement des logs et est utilisĂ© pour imprimer des messages d'utilisateur dans la console. La sortie de ce composant est automatiquement dĂ©sactivĂ©e lors de la compilation du code optimisĂ© — elle est « optimisĂ©e ». Si vous ne voyez pas la sortie « Hello Simulator », entrez la commande suivante :

$ .\/waf configure --build-profile=debug --enable-examples --enable-tests

pour configurer Waf la construction des versions de dĂ©bogage des programmes ns‑3, qui incluent des exemples et des tests. Ensuite, vous devez recompiler la version actuelle du code de dĂ©bogage en tapant

$ ./waf

Maintenant, si vous exécutez le programme hello-simulator, vous devriez voir le résultat attendu.

3.6.1 Arguments de la ligne de commande

Pour passer des arguments de ligne de commande au programme ns‑3, utilisez ce modùle :

$ .\/waf --run  --command-template="%s "

Remplacez par le nom de votre programme et les par les arguments. L'argument - -command-template pour Waf est essentiellement une recette pour construire la ligne de commande rĂ©elle Waf utilisĂ©e pour exĂ©cuter le programme. Waf vĂ©rifie que la construction est terminĂ©e, configure les chemins vers la bibliothĂšque commune, puis utilisant le modĂšle de ligne de commande fourni et substituant le nom du programme Ă  l'emplacement du placeholder %s, appelle le fichier exĂ©cutable. Si cette syntaxe vous semble compliquĂ©e, il existe une option plus simple qui consiste Ă  inclure le programme ns‑3 et ses arguments entre des guillemets simples :

$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'

Un autre exemple particuliÚrement utile est l'exécution sélective de suites de tests. Supposons qu'il existe une suite de tests (suite) mytest (il n'y en a en fait pas). Plus haut, nous avons utilisé le script .\/test.py pour exécuter en parallÚle un certain nombre de tests, ce qui appelle à plusieurs reprises le programme de test test-runner. Appel test-runner directement pour exécuter un test :

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

Les arguments seront transmis au programme test-runner. Étant donnĂ© que mytest n'existe pas, un message d'erreur sera gĂ©nĂ©rĂ©. Pour afficher les paramĂštres disponibles de test-runner, entrez :

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 Débogage

Pour exécuter des programmes ns-3 sous une autre utilitaire, comme un débogueur (par exemple, gdb) ou un outil de vérification de mémoire (par exemple, valgrind), utilisez une forme similaire - -command-template = "
". Par exemple, pour lancer le débogueur gdb votre programme hello-simulator ns-3 avec les arguments :

$ ./waf --run=hello-simulator --command-template="gdb %s --args "

Notez que le nom du programme ns-3 est accompagnĂ© d'un argument - run, et l'utilitaire de gestion (ici gdb) est le premier jeton de l'argument - -command-template. L'option - -args indique gdb, ce qui signifie que le reste de la ligne de commande appartient au programme « infĂ©rieur ». (Certaines versions gdb ne reconnaissent pas l'option - -args. Dans ce cas, retirez les arguments du programme de - -command-template et utilisez un ensemble de commandes gdb args.) Nous pouvons combiner cette recette et la prĂ©cĂ©dente pour exĂ©cuter un test sous le dĂ©bogueur :

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 Dossier de travail

Waf doit ĂȘtre lancĂ© depuis son emplacement en haut de l'arborescence ns-3. Ce dossier devient le rĂ©pertoire de travail oĂč les fichiers de sortie seront enregistrĂ©s. Mais que faire si vous souhaitez conserver ces fichiers en dehors de l'arborescence du code source ns-3 ? Utilisez l'argument - -cwd:

$ ./waf --cwd=...

Il peut ĂȘtre plus pratique pour vous de recevoir les fichiers de sortie dans votre rĂ©pertoire de travail. Dans ce cas, une action indirecte comme celle-ci peut ĂȘtre utile :

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

Un tel décorateur de la version précédente de la commande conserve le répertoire de travail actuel, passe au répertoire Waf, puis ordonne Waf de changer le répertoire de travail en celui enregistré avant d'exécuter le programme dans le répertoire de travail actuel. Nous mentionnons la commande - -cwd pour complétude ; la plupart des utilisateurs lancent simplement Waf depuis le répertoire racine et génÚrent les fichiers de sortie là-bas.

Suite : chapitre 4

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster