Description
Le noyau Linux a des fonctionnalités très avancées pour construire des équipements réseaux. Si des outils existent en ligne de commande pour tout faire (avec les outils iproute2, comme les commandes ip, tc, ss, ...), on est très vite limité si on tente de lancer ces commandes avec os.system ou équivalent, et d'analyser la sortie des commandes pour lire l'état du système.
Heureusement, les outils iproute2 utilisent en réalité une API pour discuter avec le noyau : netlink. Cette interface est construite sur une simple socket, qui permet de recevoir des informations et d'en écrire. À travers cette socket, tout est configurable et il devient très simple de construire des applications complexes (surveillance des évènements en écoutant les messages, etc).
Si la plupart des outils utilisant l'interface netlink sont écrits en C (ils n'ont qu'à reprendre les bibliothèques existantes pour iproute2), les développeurs Python ont une bibliothèque complète et 100% Python à disposition : pyroute2 (https://github.com/svinota/pyroute2).
Cette présentation vous propose une rapide introduction à l'interface netlink et ses fonctionnalités (vous y apprendrez ainsi pourquoi ifconfig est obsolète depuis une dizaine d'année). Nous ferons ensuite le tour du fonctionnement de pyroute2, notamment comment s'effectue la construction des structures des messages netlink. Nous terminerons avec la liste des fonctionnalités et modules de pyroute2, qui permettent d'abstraire plus ou moins le système en fonction de vos besoins.