Chapitre 5. Technologie à la base de NetworkManager

Table des matières

5.1. D-BUS
5.2. HAL (hardware abstraction layer - couche d'abstraction matérielle)
5.3. Pour plus d'informations

NetworkManager tire profit des technologies D-BUS et HAL (hardware abstraction layer - couche d'abstraction matérielle). D-BUS est utilisé en interne pour la communication entre le démon NetworkManager, les composants de NetworkManager et HAL, ce qui permet de détecter les matériels existants et nouveaux. En externe, D-BUS est utilisé pour diffuser des informations sur les différents changements d'état.

5.1. D-BUS

D-BUS est un système d'IPC (interprocess communication - communication entre processus) écrit en langage C. Il permet aux applications de communiquer entre elles. Il a été lancé en 2002 par Havoc Pennington, Alex Larsson et Anders Carlsson dans le cadre du projet freedesktop.org pour la standardisation autour d'une plate-forme de messagerie pour le bureau.

D-BUS a été conçu pour deux cas spécifiques : la communication entre les applications d'une même session de bureau et la communication entre la session de bureau et le système d'exploitation.

D-BUS possède une architecture claire. Elle est composée de trois couches principales :

libdbus

Bibliothèque de bas niveau pour connecter des applications entre elles et échanger des messages. Elle ne prend en charge que les connexions biunivoques.

démon de bus de message

Exécutable auquel plusieurs applications peuvent se connecter. Le démon peut router les messages d'une application vers un nombre quelconque d'applications.

bibliothèques de wrapper

Les bibliothèques de wrapper, également connues sous le nom de liaisons, intègrent le D-BUS de bibliothèque de bas niveau standard pour offrir un meilleur environnement aux développeurs. Les bibliothèques de wrapper incluent libdbus-qt et libdbus-glib.

Du fait que D-BUS est un système de bus de message, il n'envoie pas de flux d'octets mais des messages. Les messages ont un en-tête avec identification du type et un corps qui inclut des données. Leur format est binaire. Il existe différents types de messages intégrés, par exemple pour les messages d'erreur ou la notification d'événements. Les informations concernant le type de message sont stockées dans son en-tête. L'en-tête comprend également des informations concernant le chemin et l'interface du message.

Le démon de bus, qui agit comme un serveur pour les messages, a normalement plusieurs instances. La première est globale. Elle est dans ses grandes lignes similaire aux démons classiques tels que httpd ou sendmail. Cette instance présente un grand nombre de restrictions de sécurité et sert à la communication à l'échelle du système. Une instance est créée par session de login d'utilisateur. Ces instances sont utilisées pour la communication parmi des applications dans la session de l'utilisateur.

Avant qu'une connexion ne soit établie et que la communication ne démarre, les applications doivent s'authentifier. À cette fin, un simple protocole en texte brut basé sur SASL est utilisé. Pour envoyer le bon message à la bonne application, des adresses d'un format spécial et des noms de bus de message sont utilisés. Chaque connexion possède donc au moins un nom. Lorsqu'une connexion est fermée, tous les noms qu'elle contient sont supprimés.

L'API D-BUS de bas niveau principale est écrite en langage C. Elle n'est pas destinée au développement d'infrastructures d'application. Dans cet objectif, D-BUS offre différentes liaisons vers des langages. Vous pouvez notamment choisir :

  • GLib

  • Qt

  • Python

  • .NET

  • Java

  • Perl

  • C++

  • Ruby