{"id":76,"date":"2020-06-25T11:51:32","date_gmt":"2020-06-25T10:51:32","guid":{"rendered":"http:\/\/blog.uclm.es\/felixvillanueva\/?p=76"},"modified":"2020-06-25T11:51:32","modified_gmt":"2020-06-25T10:51:32","slug":"ns3-la-clase-node","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/06\/25\/ns3-la-clase-node\/","title":{"rendered":"NS3: La clase Node"},"content":{"rendered":"<p>La clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_node.html\">Node<\/a> y <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_net_device.html\">NetDevice<\/a>, junto con el canal de comunicaci\u00f3n, simulan el hardware de nuestra red. Un objeto de la clase Node podr\u00edamos identificarlo con un PC, un m\u00f3vil, un sensor, etc. es decir cualquier dispositivo de c\u00f3mputo donde vamos a instalar cosas. Al igual que los dispositivos de c\u00f3mputo en la realidad, los objetos de la clase Node necesitan interfaces de red para comunicarse. Estas interfaces de red son de una tecnolog\u00eda espec\u00edfica (Bluetooth, Wifi, Ethernet, LTE, etc.). Al igual que en la realidad, un objeto Node puede tener mas de un interfaz de red. Las interfaces de red en NS3 vienen representadas por objetos de la clase espec\u00edfica de la tecnolog\u00eda que hereda de la clase abstracta NetDevice.<\/p>\n<p>Por ejemplo una interfaz wifi viene representada por la clase WifiNetDevice que hereda de NetDevice.<\/p>\n<p>El ejemplo m\u00ednimo de creaci\u00f3n de un nodo lo podemos ver con el ejemplo <a href=\"https:\/\/bitbucket.org\/FelixVillanueva\/ns3.tutorial\/src\/master\/hardware\/\"> node1.cc <\/a>. Es un ejemplo que crea un \u00fanico nodo y obtiene su ID. Cada nodo tiene un Id \u00fanico. La variable n es, a todos los efectos, una caja vac\u00eda donde luego instalaremos y configuraremos el resto de cosas.<\/p>\n<p>Si ponemos el archivo node1.cc en el directorio scratch y lo ejecutamos con <code>NS_LOG=\"Node\" .\/waf --run node1<\/code> veremos la informaci\u00f3n del m\u00f3dulo Node (es lo que indicamos con <code>NS_LOG=\"Node\"<\/code> antes del comando waf) y el identificador del nodo. Salvo que estes depurando, evita usar muchos LOG ya que ralentizan la simulaci\u00f3n. Podemos habilitar el sistema de Log desde el c\u00f3digo fuente tal y como veremos en otra entrada de blog.<\/p>\n<p>El problema de crear los nodos de forma directa es que tienes que ocuparte de hacer todas las operaciones a todos los nodos. Para simplificar este proceso habitual en una simulaci\u00f3n, NS3 dispone de la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_node_container.html\">NodeContainer<\/a>.<\/p>\n<p>Si has echado un vistazo a la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_node.html\">Node<\/a> ver\u00e1s que es bastante sencilla, puedes instalar aplicaciones, puedes conectar interfaces de red y registrar manejadores o gestores de protocolos.<\/p>\n<p>En vez de usar directamente la clase Node, usaremos la clase NodeContainer para este tipo de tareas. En <a href=\"https:\/\/bitbucket.org\/FelixVillanueva\/ns3.tutorial\/src\/master\/hardware\/\"> NodeContainer.cc <\/a> podemos ver que hay varias formas de crear un contenedor (a\u00f1adiendo nodos ya creados, indicando el n\u00famero de nodos a crear con Create, concatenando dos contenedores ya creados, etc.) con un aspecto importante a tener en cuenta, el n\u00famero id de un nodo es \u00fanico e irrepetible.<\/p>\n<p>Al igual que otros asistentes que veremos, el NodeContainer es un contenedor inspirado en los <a href=\"http:\/\/www.cplusplus.com\/reference\/stl\/\">contenedores STL<\/a>.Como tal, se pueden iterar sobre sus elementos con un iterador (por ejemplo, la funci\u00f3n imprimirContainerIds en NodeContainer.cc), concatenar contenedores (por ejemplo, el NodeContainer c del ejemplo), etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La clase Node y NetDevice, junto con el canal de comunicaci\u00f3n, simulan el hardware de nuestra red. Un objeto de la clase Node podr\u00edamos identificarlo con un PC, un m\u00f3vil, un sensor, etc. es decir cualquier dispositivo de c\u00f3mputo donde &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/06\/25\/ns3-la-clase-node\/\">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],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-ejemplos","category-ns3","category-simulacion"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/76","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=76"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}