Les fondamentaux pour la programmation d’applications SDN sur OpenDaylight

Lorsqu’on commence à se documenter sur la création d’applications SDN, on se rend très vite compte qu’il y a un manque crucial d’informations. Cela est, d’une part due au fait que la technologie SDN reste en plein développement et que, d’autre part, la majorité des solutions et plateformes SDN sont propriétaires.

Cependant, il existe des plateformes commerciales, collaboratives et open source qui permettent la prise en main de la technologie SDN. OpenDaylight en est un exemple concret.

Cet article à donc pour but de définir les différents composants de base qui permettent la création d’une application SDN avec OpenDaylight

1. Les composants

Afin de mener à bien la bonne création d’une application SDN via OpenDaylight, différents composants présents dans les deux (02) couches application et contrôleur de l’architecture SDN rentrent en jeu :

  • Yang Model
  • Maven
  • OSGIs
  • Karaf

1.1. Yang Model

YANG est un language de modélisation de données.Il est utilisé pour modéliser à la fois la configuration et les données d’état des éléments du réseau. Il structure les définitions de données en structures arborescentes. Ce modèle permet donc de structurer et modéliser les données du réseau qui seront ensuite utilisées par un autre modèle nommé NETCONF afin de configurer le matériel réseau. Son protocole est décrit dans la RFC-7950.

NETCONF, quant à lui, est un protocole utilisé pour la configuration et la surveillance des dispositifs du réseau. Il est décrit dans la RFC-6241.

À titre d’exemple, voici un extrait du modèle YANG pour le stockage des nœuds (c’est-à-dire les commutateurs ie switchs) et des connecteurs de nœuds (c’est-à-dire les interfaces ou les ports) définis dans opendaylight-inventory.yang :

1.2. Maven

Maven permet la gestion des dépendances. C’est-à-dire il permet de télécharger de façon facile toutes les dépendances dont notre API a besoin pour s’exécuter. On obtiendra à la suite de cela notre OSGI API JAR qui contient l’API avec toutes les dépendances dont elle a besoin. Ceux qui sont habitués à la programmation Java ont peut être déjà eu affaire avec Maven.

Afin d’installer Maven (sous Linux), on aura besoin d’exécuter la commande suivante :

sudo apt-get install maven 

Pour vérifier la bonne installation de Maven on pourra utiliser la commande :

mvn --version

Une fois Maven installé, il faudra configurer les variables d’environnement. Pour cela, nous allons  créer un nouveau fichier nommé mavenenv.sh dans le répertoire /etc/profile.d/ et ajouter les lignes suivantes :

1.3. OSGIs

OSGI définit une architecture pour le développement d’applications modulaires.     

Il ajoute un cadre modulaire qui permet le chargement, déchargement, démarrage et arrêt dynamique des modules Java sans arrêter la plate-forme JVM en cours d’exécution.    

Ces modules sont appelés bundles qui ne sont que des JAR avec des fichiers manifestes qui définissent ce qui est exporté vers d’autres bundles et ce qui est importé d’autres bundles en plus d’autres détails tels que le nom du bundle, l’activateur, la version, … etc.     

Un bundle à lui seul peut agir en tant que fournisseur de services ou consommateur de services. Les services sont spécifiés par des interfaces Java. Les bundles peuvent donc implémenter cette interface et enregistrer le service auprès du registre des services. Les consommateurs d’un service particulier peuvent le rechercher dans le registre des services.

Quand on parle de OSGI, on on parle alors de :

  • Un Manifest (ensemble de données pour assurer la mise à jour )
  • Nom du composant
  • Version
  • Dépendances
  • Paramètres.
  • Class Activator : exécutée lorsque le composant est activé ou désactivé .
  • Chaque composant OSGI est chargé à l’exécution dans son propre espace  de classes.
  • Le contenu d’un composant est privé .
  • Chaque contenu de composant peut évaluer.
  • Annuaire : ensemble des services d’un composant 

1.4. Karaf

Karaf est un petit runtime basé sur OSGi qui fournit un conteneur léger pour le chargement de différents modules. Autrement dit, Karaf est un conteneur d’applications ( embarquer et gérer le cycle de vie d’une application) qui permet la gestion de JAR classique et OSGIs Bundle.

Karaf est donc responsable du lancement du contrôleur. C’est à dire que lancer l’exécution de Karaf revient à lancer le contrôleur.

L’exécution de Karaf suit les étapes suivantes :

  • Etape 1 (Accéder au répertoire de Karaf) : Il faut savoir que le répertoire de Karaf diffère d’une version d’OpenDaylight à une autre. Pour notre version, on aura :
cd distribution/opendaylight-karaf/target/assembly
  • Etape 2 (Lancement de Karaf) : Après s’être positionné sur le répertoire de Karaf, il suffit d’exécuter la commande suivante :
./karaf

Lorsqu’une application souhaite s’exécuter sur Karaf, elle doit avoir une description de fonctionnalités (features) pour que le shell Karaf puisse la charger.

NETCONF API Sud par exemple possède plusieurs features qui peuvent être installés sur Karaf en utilisant la commande suivante :

feature:install odl-netconf-connector-all

Karaf à la fin aura a :

  • Démarre tous les paquets Java installés sous forme de fichiers jar dans l’environnement OSGi. 
  • Une fois tous les paquets lancés, la méthode createInstance() de chaque classe d’implémentation sera appelée, et le contrôleur passera à un état d’opération déclenché par un événement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.