Résumé

  • La révision 13 ordonne nettement le traitement : where, sort-by, locale, direction, offset ou cursor, puis limit, tandis que sublist-limit borne les collections descendantes.
  • Un curseur valide et une page triée attestent d’une position et d’un contexte de requête, pas d’une vue NACM inchangée, d’un instant commun entre sources ni de l’exhaustivité des données opérationnelles.

Une page est un résultat. Une collection paginée est une affirmation sur le rapport entre plusieurs résultats. C’est dans cet intervalle que se loge le risque le plus intéressant de draft-ietf-netconf-list-pagination-13 : le protocole peut être respecté à chaque requête alors que l’ensemble reconstitué ne correspond à aucun état unique du système.

Le texte ne dissimule pas ce problème derrière une abstraction vague. Il nomme précisément les éléments qui façonnent la requête. Le serveur évalue d’abord where, applique ensuite sort-by, utilise locale pour le contexte de classement, puis traite direction avec offset ou cursor, avant de limiter la page. Cette séquence constitue une base sérieuse pour un journal de preuve. Elle dit ce que le serveur devait faire de la requête. Elle ne dit pas que les données attendaient patiemment la page suivante.

La révision 13 a été publiée le 6 juillet 2026. Le Datatracker de l’IETF la présente comme un Internet-Draft actif du groupe NETCONF, destiné à la voie de normalisation, à l’état In WG Last Call, avec l’étiquette Revised I-D Needed - Issue raised by WGLC; l’état IESG est I-D Exists. Le panneau actuel de validation YANG totalise trois erreurs. Les sorties visibles de pyang et de yanglint se concentrent autour du même échappement de coupure de ligne. C’est un constat sur un document en cours et sur ses outils de validation, non une preuve de panne dans une mise en œuvre ou un réseau.

Le contexte initial est conservé

Avec un curseur, where, sort-by et locale sont fournis lors de l’initialisation par la valeur first. Les liens next et previous reprennent les paramètres initiaux. Après cette étape, seuls limit et sublist-limit peuvent varier. L’intérêt est considérable : un client ne peut pas changer discrètement de filtre ou de classement entre deux pages puis présenter l’ensemble comme un parcours homogène.

Cette règle protège la continuité de la question, pas la continuité du monde interrogé. Le projet ne définit ni identifiant d’instantané, ni horodatage de lecture commun, ni numéro de transaction, ni vecteur de révision entre magasins fédérés. Le même prédicat peut être réévalué une seconde plus tard sur une population différente.

offset et cursor sont mutuellement exclusifs. L’offset compte les entrées à ignorer. Il est vulnérable aux insertions et suppressions situées avant sa frontière : le même nombre peut alors désigner une autre position logique. Le curseur opaque, rattaché à un index ou une clé du système sous-jacent, évite de confier cette position au client. Il ne fige pas pour autant les autres objets.

Le document compagnon RESTCONF est sans ambiguïté : le serveur ne conserve pas d’état relatif au curseur suivant ou précédent ni à la page. Le lien est une instruction de reprise, pas une réservation du jeu de résultats. La conception sans état est utile à l’échelle; elle interdit justement de déduire un instantané de la seule existence du lien.

L’ordre déclaré peut rester partiel

Sans sort-by, l’ordre propre à la liste YANG s’applique. Avec ce paramètre, les entrées dépourvues de la valeur choisie arrivent après celles qui la possèdent. locale ne peut être employé sans tri. Si le client ne la précise pas, le serveur choisit la locale et la renvoie sous forme de métadonnée YANG.

Ce retour de locale est une amélioration probatoire : un classement linguistique n’est plus une hypothèse invisible. Mais un identifiant BCP 47 ne nomme ni la version Unicode, ni la bibliothèque de collation, ni la normalisation, ni la règle de départage. Deux magasins peuvent déclarer la même locale et ordonner différemment des chaînes équivalentes.

Surtout, le projet ne prévoit pas de sous-tri. Lorsque plusieurs objets partagent la valeur principale, l’ordre total dépend d’un détail extérieur à la requête. La frontière d’une page peut couper ce groupe d’égalités. Un redémarrage, un autre nœud ou une nouvelle version de l’index peut modifier leur ordre sans violer la clé de tri demandée. Pour démontrer une traversée stable, il faut donc conserver le discriminateur réel ou admettre que l’ordre est partiel.

Une capacité annoncée n’est pas une exécution observée

Les listes config false peuvent être vastes, volatiles et coûteuses. La révision 13 complète le modèle de capacités système de la RFC 9196 afin qu’un serveur annonce qu’un nœud est constrained, quels enfants sont indexed et si cursor-supported est disponible. Sur une liste contrainte, les expressions sont restreintes aux nœuds indexés et ne peuvent pas descendre par des sous-listes.

Ces déclarations permettent une négociation honnête. Elles n’attestent pas que l’index a réellement servi à cette requête, qu’il était à jour, ni que chaque source alimentant la vue opérationnelle partageait la même révision. Les capacités RFC 9196 peuvent changer selon le matériel, la licence ou l’état d’exécution. Leur identité doit accompagner la page.

La RFC 8525 apporte, elle, l’identité du contenu de la bibliothèque YANG. Son content-id permet de dire sous quel ensemble de modules et de schémas une réponse a été comprise. Il n’identifie pas le contenu des données à un instant donné. Confondre les deux reviendrait à prendre la version d’un dictionnaire pour la photographie des objets décrits avec ce dictionnaire.

Le contrôle d’accès redéfinit l’univers visible

La RFC 8341 permet à NACM de limiter les opérations et les données accessibles à un principal. Le filtre est donc évalué sur une vue autorisée, pas nécessairement sur toute la collection interne. Une modification de groupe, de règle ou de permission entre deux appels peut retirer un objet devant le curseur ou en ajouter un derrière lui.

L’article BTW déjà publié sur la RFC 9865 et SCIM étudie la question spécifique suivante : posséder un curseur ne doit pas prolonger une autorisation périmée. Ici, le sujet est différent. Même si chaque page fait l’objet d’une nouvelle décision NACM correcte, le changement de vue peut rendre leur union incohérente. Deux pages licites ne sont pas forcément une liste unique.

Le dossier de preuve doit associer à chaque requête l’identité du principal, la version de la politique et la vue effective. Si elles diffèrent, le rapport final ne doit pas effacer la rupture. Il peut dire que deux observations autorisées ont été effectuées sous deux politiques. Il ne peut pas prétendre à une exhaustivité uniforme.

Les données opérationnelles ont leur propre horloge

La RFC 8342 distingue les magasins et décrit l’opérationnel comme une composition de configuration appliquée et d’état système, avec des origines potentiellement différentes. Les routes convergent, les compteurs progressent, les interfaces changent, les baux expirent. La pagination rend cette masse consultable; elle n’en suspend pas les transitions.

Imaginons que la première page se termine à la valeur de tri m. Un objet situé avant m adopte ensuite la valeur z : il peut réapparaître. Un objet placé après m devient a : il peut ne jamais être vu. Une suppression modifie la signification d’un offset; une insertion peut provoquer une répétition. Même un curseur stable attaché à une clé ne contrôle pas la mutation des autres clés ni le rythme de magasins fédérés.

L’intégrité exige donc une qualification temporelle. Un serveur capable de fournir un identifiant d’instantané ou une révision commune peut renforcer la preuve. À défaut, l’opérateur peut conserver les temps d’observation par page et par source, contrôler doublons et lacunes, puis qualifier le résultat comme un parcours durant un intervalle. Cette formulation est moins spectaculaire et beaucoup plus utile.

Les descendants forment plusieurs parcours

limit borne les entrées de la collection cible. sublist-limit borne séparément les listes et leaf-lists descendantes. Une page peut contenir tous les équipements demandés tout en tronquant les interfaces, adresses ou routes à l’intérieur de chacun. L’annotation remaining peut donner un entier positif ou la valeur unknown.

unknown n’est ni zéro ni une erreur : c’est la limite de la connaissance du serveur. De même, une page top-level complète ne valide pas ses sous-listes. Chaque descendant tronqué nécessite une lignée de continuation liée à son parent, ses propres hachages de requête et de réponse et son propre contrôle d’exhaustivité. La preuve ressemble à un arbre de parcours, non à une seule suite de jetons.

Construire une enveloppe de preuve

Pour chaque page, un opérateur peut enregistrer le principal et la politique NACM; le magasin; les identités de bibliothèque YANG et de capacités; tous les paramètres; les hachages de la requête et de la réponse; la lignée du curseur; les clés et valeurs de tri retournées; les annotations remaining; les heures côté serveur; et les révisions des sources lorsqu’elles existent.

Un second objet de preuve concerne l’assemblage. Il détecte les identifiants répétés, les inversions de frontière et les lacunes attendues; compare la dernière clé ordonnée d’une page à la première de la suivante; signale toute modification de politique, de capacité ou de collation; et indique la catégorie de cohérence réellement obtenue. Ce dispositif est une recommandation d’exploitation, non une obligation déjà écrite dans le projet IETF.

Il existe des usages où une photographie stricte serait trop coûteuse ou trompeuse. Une surveillance temps réel peut préférer la fraîcheur à l’immobilité. Le point n’est pas d’imposer un seul modèle, mais de faire correspondre l’affirmation à l’instrument. Un curseur prouve une reprise de position sous un contexte conservé. Il ne connaît pas l’instant commun que le rapport final aimerait parfois lui attribuer.

Sources primaires

Le corpus contrôlé comprend les textes et états IETF actuels, le diff de révision, les deux compagnons, trois avis historiques clairement distingués de la révision 13 et les RFC de fondation : https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-13; https://www.ietf.org/archive/id/draft-ietf-netconf-list-pagination-13.txt; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination/; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination/history/; https://author-tools.ietf.org/iddiff?url1=draft-ietf-netconf-list-pagination-12&url2=draft-ietf-netconf-list-pagination-13; https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-nc-12; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination-nc/; https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-rc-11; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination-rc/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-07-opsdir-early-linkova-2025-05-10/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-07-yangdoctors-early-lhotka-2025-04-28/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-03-yangdoctors-lc-lhotka-2024-05-01/; https://www.rfc-editor.org/rfc/rfc6241.html; https://www.rfc-editor.org/rfc/rfc6242.html; https://www.rfc-editor.org/rfc/rfc5646.html; https://www.rfc-editor.org/rfc/rfc7950.html; https://www.rfc-editor.org/rfc/rfc7951.html; https://www.rfc-editor.org/rfc/rfc7952.html; https://www.rfc-editor.org/rfc/rfc8040.html; https://www.rfc-editor.org/rfc/rfc8341.html; https://www.rfc-editor.org/rfc/rfc8342.html; https://www.rfc-editor.org/rfc/rfc8407.html; https://www.rfc-editor.org/rfc/rfc8525.html; https://www.rfc-editor.org/rfc/rfc9196.html; https://www.rfc-editor.org/rfc/rfc9911.html.