{"id":354,"date":"2021-12-22T10:20:29","date_gmt":"2021-12-22T09:20:29","guid":{"rendered":"https:\/\/blog.uclm.es\/felixvillanueva\/?p=354"},"modified":"2021-12-22T10:20:29","modified_gmt":"2021-12-22T09:20:29","slug":"creando-un-nuevo-modulo-en-ns3","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2021\/12\/22\/creando-un-nuevo-modulo-en-ns3\/","title":{"rendered":"Creando un nuevo m\u00f3dulo en NS3"},"content":{"rendered":"<p>[Actualizado a cmake, versi\u00f3n 3.36.1 (<a href=\"https:\/\/www.nsnam.org\/docs\/manual\/html\/new-modules.html\">documentaci\u00f3n oficial ns3.36)<\/a>]<br \/>\nCrear un nuevo protocolo o algoritmo en NS3 es un paso que implica la creaci\u00f3n de un nuevo m\u00f3dulo. Obviamente, a partir del tipo de protocolo o algoritmo a implementar, los pasos a seguir y los protocolos que nos servir\u00e1n como referencia cambiar\u00e1n. En cualquier caso, siempre necesitaremos generar un nuevo m\u00f3dulo e incluirlo en la compilaci\u00f3n de NS3 para poder hacer simulaciones con posterioridad.<\/p>\n<p>Para crear un nuevo m\u00f3dulo, NS3 nos proporciona un script python, create-module.py, dentro de la carpeta src de nuestra instalaci\u00f3n de ns3.<br \/>\nSi por ejemplo queremos crear un nuevo protocolo inal\u00e1mbrico, pongamos el protocolo weightlessp, si ejecutamos:<br \/>\n<code><br \/>\n$utils\/create-module.py weightless<br \/>\nCreating module \/home\/felix\/tools\/ns-3-dev-git\/contrib\/weightless<br \/>\nSuccessfully created new modules<br \/>\nRun '.\/ns3 configure' to include them in the build<br \/>\n<\/code><\/p>\n<p>Se nos crea la plantilla dentro de src:<br \/>\n<code><br \/>\n$cd contrib\/weightless\/<br \/>\nfelix@homer-esi:~\/tools\/ns-3-dev-git\/contrib\/weightless$ ls<br \/>\nCMakeLists.txt  doc  examples  helper  model  test<br \/>\n<\/code><br \/>\ndonde vemos las carpetas habituales para meter la documentaci\u00f3n, los ejemplos, los asistentes, el modelo propiamente dicho y los test. Tambi\u00e9n me genera el archivo CMakeList.txt que utiliza ns3 para compilar los m\u00f3dulos. Para ver que se incluye correctamente en el proceso de compilaci\u00f3n:<br \/>\n<code><br \/>\n$.\/ns3 configure --enable-example --enable-test<br \/>\n$.\/ns3 build<br \/>\n$.\/test.py -s weightlessp<br \/>\n.<br \/>\nPASS: TestSuite weightlessp<br \/>\n1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)<br \/>\n.<br \/>\n<\/code><br \/>\nAhora falta, obviamente, lo dif\u00edcil, que es programar el modelo propiamente dicho identificando cada una de las partes. Lo m\u00e1s recomendable es estudiar cuidadosamente un protocolo existente de la misma capa que el que queremos programar y copiar su estructura adaptando el comportamiento a la funcionalidad deseada.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Actualizado a cmake, versi\u00f3n 3.36.1 (documentaci\u00f3n oficial ns3.36)] Crear un nuevo protocolo o algoritmo en NS3 es un paso que implica la creaci\u00f3n de un nuevo m\u00f3dulo. Obviamente, a partir del tipo de protocolo o algoritmo a implementar, los pasos &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2021\/12\/22\/creando-un-nuevo-modulo-en-ns3\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":182,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5,6],"tags":[21,30,35,38],"class_list":["post-354","post","type-post","status-publish","format-standard","hentry","category-ns3","category-simulacion","category-tutorial","tag-ejemplos","tag-ns3","tag-redes","tag-simulacion"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/users\/182"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/comments?post=354"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/354\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}