Capítulo 5. Tecnología en la que se basa NetworkManager

Tabla de contenidos

5.1. D-BUS
5.2. Capa de abstracción de hardware (HAL)
5.3. Información adicional

NetworkManager hace uso de las ventajas que proporcionan las tecnologías D-BUS y de capa de abstracción de hardware (HAL, Hardware Abstraction Layer). D-BUS se utiliza internamente para las comunicaciones entre el daemon NetworkManager, las partes de NetworkManager y HAL, lo que hace posible aprender sobre el hardware existente y el nuevo. Externamente, D-BUS se usa para difundir la información acerca de los distintos cambios de estado.

5.1. D-BUS

D-BUS es un sistema de comunicación entre procesos (IPC, Interprocess Communication) escrito en C que hace posible la comunicación entre las aplicaciones. Se inició en 2002 impulsado por Havoc Pennington, Alex Larsson y Anders Carlsson como parte del proyecto freedesktop.org, que pretendía lograr un estándar de plataforma de mensajería para escritorio.

D-BUS se diseñó para dos casos específicos: la comunicación entre aplicaciones de escritorio en la misma sesión de escritorio y las comunicaciones entre la sesión de escritorio y el sistema operativo.

D-BUS tiene una arquitectura muy clara. Cuenta con tres capas básicas:

libdbus

Biblioteca de nivel inferior para conectar aplicaciones entre sí e intercambiar mensajes. Admite sólo conexiones uno a uno.

daemon del bus de mensajes

Ejecutable al que se pueden conectar varias aplicaciones. El daemon puede dirigir los mensajes a ninguna a aplicación, a una aplicación o a varias de ellas.

bibliotecas de la empaquetadora

Las bibliotecas de la empaquetadora, también conocidas como enlaces, empaquetan el sistema D-BUS con la biblioteca de nivel inferior estándar para conseguir un mejor entorno para los desarrolladores. Entre las bibliotecas de la empaquetadora se incluyen libdbus-qt y libdbus-glib.

Como D-BUS es un sistema de bus de mensajes, no envía flujos de bytes, sino mensajes. Los mensajes cuentan con un encabezado con identificación del tipo y un cuerpo que incluye los datos. Son binarios en cuanto al formato. Hay distintos tipos integrados de mensajes, por ejemplo, los mensajes de error o las notificaciones de eventos. La información acerca del tipo de mensajes se almacena en el encabezado del mensaje. El encabezado también incluye información acerca de la vía y la interfaz del mensaje.

El daemon del bus, que actúa como un servidor para los mensajes, normalmente tiene varias instancias. La primera es global y es parecida en líneas generales a los daemons clásicos, como httpd o sendmail. Esta instancia tiene muchas restricciones de seguridad y se usa para la comunicación a través de todo el sistema. Las otras instancias se crean cada vez que inicia sesión el usuario. Estas instancias se utilizan para la comunicación entre las aplicaciones en la sesión del usuario.

Antes de que se establezca la conexión y se inicie la comunicación, las aplicaciones deben autenticarse. Para este propósito, se utiliza un protocolo sencillo de sólo texto basado en SASL. Para enviar el mensaje adecuado a la aplicación oportuna, se usan direcciones con un formato especial y nombres de bus de mensajes. Esto significa que cada conexión tiene, como mínimo, un nombre. Cuando se cierra una conexión, todos los nombres que pertenecían a la conexión se cierran.

El núcleo de la API D-BUS de nivel inferior está escrito en C y no está diseñado para desarrollar estructuras de aplicaciones. D-BUS proporciona varios enlaces a idiomas para este propósito. Entre otros, puede elegir:

  • GLib

  • Qt

  • Python

  • .NET

  • Java

  • Perl

  • C++

  • Ruby