Résumé
- Dans Click, une connexion décrit un chemin possible de remise des paquets. Elle ne prouve ni qu’un paquet l’a empruntée, ni quelle extrémité a provoqué le transfert.
- En mode push, la source appelle vers l’aval. En mode pull, la destination réclame vers l’amont, puis le paquet revient dans le sens de la flèche. Une
Queueexplicite peut réunir ces deux horloges. - Le graphe rend les responsabilités lisibles, mais l’exécution exige d’autres reçus : types de ports, initialisation, configuration installée, choix de l’ordonnanceur, état des files et résultat du périphérique.
L’erreur cachée dans un schéma très clair
Click décompose le traitement d’un routeur en éléments fins. L’un lit une interface, l’autre vérifie un en-tête, un troisième consulte une route, un autre encore compte, met en file ou transmet. Les connexions entre ces éléments forment un graphe orienté. Dans l’article de 2000 signé par Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti et M. Frans Kaashoek, chaque arête représente un chemin possible de remise d’un paquet.
Le mot « possible » est essentiel. Le graphe n’est pas la trace d’un paquet déjà observé. Et l’orientation du paquet n’est pas forcément celle de l’appel. Click associe aux ports un contrat de transfert qui répond à la question omise par le dessin : qui est autorisé à demander le prochain mouvement ?
Cette séparation empêche une attribution trop rapide. Une pause près de la sortie peut venir d’un périphérique qui n’est pas prêt, et non du dernier élément amont. Une branche dessinée ne prouve pas qu’un classificateur l’a choisie. Une arête expose une relation permise ; elle n’hérite pas de toute l’histoire d’exécution.
Push : l’événement arrive avant la demande
Une interface de réception produit un paquet sans que le reste du routeur l’ait sollicité. Son élément doit donc commencer. Il appelle le port push suivant ; le contrôle avance avec le paquet à travers les éléments, jusqu’à une consommation, un rejet ou une mise en attente.
La source possède l’instant du premier appel, pas le destin complet du paquet. Un élément aval peut choisir une autre sortie, invalider l’en-tête ou rencontrer une file pleine. Dire « le paquet a été poussé » ne vaut pas accusé de réception de tout le chemin.
Pour reconstruire cet épisode, il faut l’événement du périphérique, l’identité de la configuration, l’élément initiateur, la branche réellement prise et le résultat à chaque frontière pertinente. Additionner deux compteurs éloignés ne suffit pas à établir qu’ils parlent du même paquet.
Pull : la capacité se manifeste à l’autre bout
La transmission suit une autre logique. Le périphérique de sortie veut un paquet au moment où il peut l’émettre. Dans Click, son élément lance alors un pull. La demande remonte les connexions jusqu’à une source capable de retourner un paquet, ou une absence de paquet.
La thèse de Kohler formule le paradoxe sans ambiguïté : durant le push, le contrôle part de la réception et avance ; durant le pull, il part de la transmission et recule ; le paquet, lui, avance toujours. Ainsi, deux observations distinctes partagent une seule flèche.
Un ordonnanceur devient composable grâce à cette convention. Avec plusieurs entrées pull et une sortie pull, il reçoit une demande aval, choisit une entrée et l’interroge. Le composant porte la décision. Ses connexions révèlent les candidats, pas le gagnant d’une requête précise, la raison du choix ou le temps d’attente des autres.
La file reconnaît le désaccord des horloges
L’exemple canonique place une Queue entre les deux régions. L’interface d’entrée pousse les paquets dans son entrée ; la file les conserve. Quand l’interface de sortie est disponible, elle tire sur la sortie de la file et reçoit le premier paquet.
Ce composant avoue quelque chose que les grandes procédures cachent souvent : l’arrivée et le service n’ont pas la même horloge. Quelqu’un doit posséder l’intervalle. Click lui donne un nom, une capacité et un état consultable.
L’aveu reste borné. Une insertion réussie montre qu’une file en mémoire a accepté un paquet dans une configuration donnée. Elle ne garantit ni survie à une panne, ni délai maximal, ni sélection ultérieure, ni émission sur le fil. Une extraction prouve seulement la sortie de cette file. La confirmation du périphérique et la réception distante sont d’autres reçus.
Le FIFO local n’établit pas davantage l’équité globale. Plusieurs files peuvent alimenter un ordonnanceur ; des pertes peuvent se produire avant l’entrée ; les notifications et la disponibilité matérielle modifient les appels pull. Rendre la file explicite localise la responsabilité sans supprimer les dépendances.
Une incompatibilité que l’initialisation peut refuser
À l’exécution, chaque port est push, pull ou agnostique. Deux ports push forment une connexion push ; deux ports pull, une connexion pull. Relier directement un push à un pull est illégal. Un port agnostique adopte le comportement compatible avec son voisin.
Cette règle étroite ressemble à une spécification initiale minimale. Des auteurs différents peuvent composer des éléments sans demander à une institution de décider chaque montage. Ils doivent cependant s’accorder sur le détenteur de l’initiative. En cas de désaccord, l’initialisation peut rejeter la connexion selon une condition déterministe.
La publication du fichier ne rend pourtant rien réel. La description de SMP Click précise que le système analyse le fichier, construit le routeur, tente de l’initialiser, puis ne l’installe et ne démarre le routage qu’en cas de succès. Une capture d’écran ou une syntaxe valide ne démontre donc pas le chemin actif.
Entre le dessin et le binaire, conserver la filiation
Les éléments fins coûtent des appels et peuvent répéter des calculs. Kohler, Morris et Chen ont appliqué à la configuration des optimisations inspirées des compilateurs. L’écosystème Click comprend aussi des outils pour spécialiser les classificateurs, éliminer le code mort, supprimer certains appels virtuels, vérifier l’alignement ou combiner des routeurs.
Le graphe logique et les frontières de l’exécutable ne coïncident donc pas nécessairement un pour un. Cela ne rend pas le graphe mensonger : il reste le contrat lisible. Mais un audit doit conserver le fichier source, la suite de transformations, la sortie produite, l’identité du build et l’instance installée.
Sans cette filiation, le schéma peut être pris pour une trace littérale. À l’inverse, le binaire optimisé peut paraître sans explication alors qu’il dérive d’une composition déclarative. La primauté du code en fonctionnement exige les deux côtés : la règle annoncée et la preuve de son adoption réelle.
Attribuer sans reconstruire un héros unique
La page officielle de Harvard associe Kohler à Click, et la bibliographie place leur nom en tête de l’article de revue. La thèse développe l’architecture et les outils du langage. Mais les signatures rappellent une œuvre collective : Morris, Chen, Jannotti et Kaashoek pour l’article principal, Massimiliano Poletto pour le rapport sur le langage, puis de nombreux contributeurs au logiciel.
Réduire ce réseau humain à une flèche vers une seule personne contredirait le mécanisme étudié. L’apport de Kohler apparaît plus précisément dans une méthode : rendre les petites responsabilités composables, déclarer qui peut appeler, et laisser l’exécution fournir la preuve finale.
Sources
- Eddie Kohler — profil officiel de Harvard
- Bibliographie officielle d’Eddie Kohler
- The Click Modular Router — version auteur de l’article TOCS
- The Click Modular Router — thèse MIT d’Eddie Kohler
- Programming Language Techniques for Modular Router Configurations
- Programming Language Optimizations for Modular Router Configurations
- Flexible Control of Parallelism in a Multiprocessor PC Router
- Click for Measurement
- Dépôt officiel de Click
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
Briefing des membres
Contexte approfondi du profil
Connectez-vous avec le bon niveau d'adhésion pour débloquer le briefing complet et les notes de source.
Réservé à Strategic Circle
Strategic Circle
Ouvert à tous les lecteurs. Débloquez les briefings de profil après adhésion et connexion.
Rejoindre Strategic CircleRéservé aux membres de Leadership Alliance
Leadership Alliance
Réservé aux propriétaires et dirigeants qualifiés d'actifs IP ; connectez-vous pour débloquer les briefings Alliance.
Rejoindre Leadership Alliance
