{"id":92,"date":"2020-07-06T16:16:40","date_gmt":"2020-07-06T15:16:40","guid":{"rendered":"http:\/\/blog.uclm.es\/felixvillanueva\/?p=92"},"modified":"2020-07-06T16:16:40","modified_gmt":"2020-07-06T15:16:40","slug":"ns3-la-clase-netdevice-wifi","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/07\/06\/ns3-la-clase-netdevice-wifi\/","title":{"rendered":"NS3: La clase NetDevice (Wifi)"},"content":{"rendered":"<p>La clase NetDevice representa una interfaz de red que va asociada a una tecnolog\u00eda. Es una clase abstracta de la cual heredamos para crear una interfaz de red de una tecnolog\u00eda asociada. B\u00e1sicamente necesitamos tener en cuenta la capa MAC, la capa f\u00edsica y el canal.<\/p>\n<p>Vamos a ver un ejemplo con la conocida tecnolog\u00eda <a href=\"https:\/\/www.nsnam.org\/docs\/release\/3.30\/models\/singlehtml\/index.html#document-wifi\">WiFi<\/a>. Cada m\u00f3dulo de tecnolog\u00eda de comunicaci\u00f3n se estructura de forma distinta atendiendo al est\u00e1ndar, en el caso del m\u00f3dulo WiFi implementa muchas de las tecnolog\u00edas  del est\u00e1ndar IEEE 802.11 (802.11a, 802.11b, etc.) incluyendo los \u00faltimos est\u00e1ndares 802.11ac y 802.11ax as\u00ed como algunas versiones especiales como 802.11p para redes vehiculares.<\/p>\n<p>La clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_yans_wifi_phy.html#details\">YansWifiPhy<\/a> implementa la capa f\u00edsica del est\u00e1ndar 802.11a en la cual tienes par\u00e1metros configurables como la frecuencia, la anchura del canal, el n\u00famero del canal, configuraciones MIMO, etc. que son las propiedades de la clase.<\/p>\n<p>Cabe destacar las variables TxGain y RxGain que expresan la ganancia en decibelios a la hora de transmitir y recibir respectivamente. Con estas variables podemos simular la antena de dicha interfaz.<\/p>\n<p>Para conectar objetos de la clase YansWifiPhy necesitas un canal que simule c\u00f3mo se comporta una transmisi\u00f3n WiFi con los par\u00e1metros que hayas configurado. La clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_yans_wifi_channel.html\">YansWifiChannel<\/a> tiene este prop\u00f3sito. Realmente lo que hace este canal es configurar un  <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_propagation_loss_model.html\">ns3::PropagationLossModel<\/a> y un <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_propagation_delay_model.html\">ns3::PropagationDelayModel<\/a> y aplicarlo a toda transmisi\u00f3n\/recepci\u00f3n de un objeto YansWifiPhy. Como su propio nombre indica, esas clases modelan las perdidas y el retardo para la transmisi\u00f3n configurada. Es responsabilidad del programador configurar el canal con los modelos apropiados.<\/p>\n<p>De la capa MAC definida en el est\u00e1ndar se encarga la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_wifi_mac.html#details\">WifiMac<\/a>. Cuando creas un objeto de la clase WifiMac debes configurarle un objeto de la clase WifiPhy con el que interacciona. Puedes establecer con WifiMac par\u00e1metros para est\u00e1ndares espec\u00edficos. Con funciones privadas, existen funciones para configurar est\u00e1ndares precisos, por ejemplo ns3::WifiMac::Configure80211a o Configure80211ax_2_4Ghz. En la lista de m\u00e9todos privados de WifiMac tienes la lista completa.<\/p>\n<p>Una vez tenemos el objeto de WifiMac y WifiPhy (por ejemplo YansWifiPhy) con su canal asociado, podemos construir el equivalente a la interfaz de rede Wifi con un NetDevice. Lo normal es utilizar un asistente ya que generalmente, tendremos que crear un NetDevice por cada nodo e instalarlo en dicho nodo. El asistente para este proceso es la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_wifi_helper.html\">WifiHelper<\/a>. Una de las formas m\u00e1s comunes de usarlo es llamar al m\u00e9todo install con un objeto WifiPhy, un objeto WifiMac y un NodeContainer. Este m\u00e9todo crear\u00e1 un contenedor de objetos DeviceNet (<a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_net_device_container.html\">NetDeviceContainer<\/a>) asociados a cada nodo en el NodeContainer y con los correspondientes objetos instalados.<\/p>\n<p>La clase que hereda de la clase NetDevice para wifi es la clase <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_wifi_net_device.html\">WifiNetDevice<\/a><br \/>\nSi echamos un vistazo a sus m\u00e9todos, tenemos los m\u00e9todos de configuraci\u00f3n:<br \/>\n<code><br \/>\nvoid \tSetMac (const Ptr&lt; WifiMac &gt; mac)<br \/>\nbool \tSetMtu (const uint16_t mtu)<br \/>\nvoid \tSetNode (const Ptr&lt; Node &gt; node)<br \/>\nvoid \tSetPhy (const Ptr&lt; WifiPhy &gt; phy)<br \/>\n<\/code><br \/>\nComo hemos dicho anteriormente, la clase WifiHelper nos ayuda con esta configuraci\u00f3n cuando tenemos que hacerlo con varios nodos.<br \/>\nResumiendo, el esquema de recepci\u00f3n de un paquete con esta configuraci\u00f3n ser\u00eda, por lo tanto:<br \/>\nChannel -&gt; WifiPhy -&gt; WifiMac -&gt; WifiNetDevice -&gt; Node<\/p>\n<p>En otra entrada analizaremos un ejemplo simplificado para ver c\u00f3mo se configura un escenario simple. No obstante en el directorio <i>examples<\/i> de la instalaci\u00f3n de NS3 hay un directorio <i>wireless<\/i> con ejemplos de Wifi y otras tecnolog\u00edas inal\u00e1mbricas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La clase NetDevice representa una interfaz de red que va asociada a una tecnolog\u00eda. Es una clase abstracta de la cual heredamos para crear una interfaz de red de una tecnolog\u00eda asociada. B\u00e1sicamente necesitamos tener en cuenta la capa MAC, &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/07\/06\/ns3-la-clase-netdevice-wifi\/\">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":[44],"class_list":["post-92","post","type-post","status-publish","format-standard","hentry","category-ejemplos","category-ns3","category-simulacion","tag-wifi"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/92","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=92"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}