{"id":148,"date":"2020-09-14T17:10:33","date_gmt":"2020-09-14T16:10:33","guid":{"rendered":"http:\/\/blog.uclm.es\/felixvillanueva\/?p=148"},"modified":"2020-09-14T17:10:33","modified_gmt":"2020-09-14T16:10:33","slug":"el-sistema-de-trazas-de-ns3","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/09\/14\/el-sistema-de-trazas-de-ns3\/","title":{"rendered":"El sistema de trazas de NS3"},"content":{"rendered":"<p>Una vez que hemos creado una simulaci\u00f3n necesitamos analizar los resultados de dicha simulaci\u00f3n. C\u00f3mo sacar los resultados de una simulaci\u00f3n es responsabilidad del <a href=\"https:\/\/www.nsnam.org\/docs\/manual\/html\/tracing.html\">sistema de trazas de NS3<\/a>. El sistema de trazas de NS3 genera, como veremos a continuaci\u00f3n, una serie de archivos en un formato determinado que nos muestra todos los resultados de nuestra simulaci\u00f3n. Estos formatos est\u00e1n definidos en los m\u00f3dulos existentes en NS3 y podemos a\u00f1adirlos a nuestros nuevos m\u00f3dulos. En esta entrada vamos a centrarnos en sacar informaci\u00f3n de los m\u00f3dulos existentes mediante un formato determinado (pcap).<\/p>\n<p>Existen dos formatos que podemos generar, archivos con extensi\u00f3n .tr que es heredado del simulador NS2 y archivos con extensi\u00f3n .pcap que es un est\u00e1ndar para guardar paquetes de red. Por supuesto, al ser un archivo en C++ podemos generar resultados en otros formatos, pero supondr\u00eda acceder a la informaci\u00f3n directamente lo cual es m\u00e1s complejo e ineficiente.<\/p>\n<p>No obstante, personalmente recomiendo el uso de pcap, ya que es un est\u00e1ndar abierto soportado por multitud de herramientas que podemos utilizar para analizar los resultados de nuestra simulaci\u00f3n. Por ejemplo tenemos <a href=\"https:\/\/www.wireshark.org\/\">wireshark<\/a> si queremos analizar el di\u00e1logo de un protocolo en nuestra simulaci\u00f3n o <a href=\"scapy.net\">scapy<\/a> si queremos generar gr\u00e1ficas espec\u00edficas mediante scripts python.<\/p>\n<p>Los m\u00f3dulos mas relevantes de NS3 ya tienen implementados un asistente para generar trazas. Estos asistentes o Helpers nos permiten generar de forma f\u00e1cil las trazas m\u00e1s relevantes. Vamos a generar trazas de nuestro ejemplo b\u00e1sico para ver c\u00f3mo funciona. Tomamos nuestro basic-iot-sensors.cc y vamos a generar un archivo pcap por cada interfaz creada de nuestros tres nodos (Recordar que un nodo puede tener varias interfaces).<\/p>\n<p>En principio, con habilitar la traza pcap en la capa f\u00edsica de wifi nos vale con lo que nos basta a\u00f1adir:<br \/>\n<code><br \/>\nwifiPhy.EnablePcapAll(\"resultados\");<br \/>\n<\/code><br \/>\nSi compilamos nuestro ejemplo de nuevo veremos que se han generado archivos pcap por cada interfaz con el formato resultados-NodeId-DeviceId.pcap. En nuestro caso tendr\u00edamos tres nodos con una \u00fanica interfaz por lo que se generan los archivos resultados-0-0.pcap, resultados-1-0.pcap y resultados-2-0.pcap.<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.uclm.es\/felixvillanueva\/wp-content\/uploads\/sites\/81\/2020\/09\/wireshark.jpg\" alt=\"Captura wireshark\"><\/p>\n<p>Todas las clases que heredan de la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_pcap_helper_for_device.html\">PcapHelperForDevice<\/a> tiene este mecanismo para habilitar el pcap en todas las interfaces (Devices). Estas clases son (imagen extra\u00edda de la documentaci\u00f3n de la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_pcap_helper_for_device.html\">PcapHelperForDevice<\/a>):<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.uclm.es\/felixvillanueva\/wp-content\/uploads\/sites\/81\/2020\/09\/pcaphelper.jpg\" alt=\"Captura wireshark\"><\/p>\n<p>Si se est\u00e1 interesado en cambios de estado de variables concretas, definidas como traceables dentro del modulo. Esto es, se pueden monitorizar sus cambios de estado, podemos definir funciones que se invoquen cuando hay un cambio en el valor de una variable. En la entrada <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2021\/04\/15\/simulando-consumo-de-energia-en-ns3-ii\">relativa a observar el consumo de energ\u00eda vemos un ejemplo<\/a> de c\u00f3mo observar este tipo informaci\u00f3n relativa a variables concretas (e.g. nivel de carga de una bater\u00eda). Identificar\u00e1s en las clases qu\u00e9 variables pueden ser traceadas por que son declaradas mediante una plantilla <a href=\"https:\/\/www.nsnam.org\/docs\/release\/3.31\/doxygen\/classns3_1_1_traced_value.html\">TracedValue<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una vez que hemos creado una simulaci\u00f3n necesitamos analizar los resultados de dicha simulaci\u00f3n. C\u00f3mo sacar los resultados de una simulaci\u00f3n es responsabilidad del sistema de trazas de NS3. El sistema de trazas de NS3 genera, como veremos a continuaci\u00f3n, &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/09\/14\/el-sistema-de-trazas-de-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":[2,4,5,6],"tags":[33,44],"class_list":["post-148","post","type-post","status-publish","format-standard","hentry","category-ejemplos","category-ns3","category-simulacion","category-tutorial","tag-pcap","tag-wifi"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/148","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=148"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/148\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}