Zusammenfassung

  • Revision 13 trennt Filterung, Sortierung, Locale, Richtung, Position und Begrenzung und ergänzt Knotenerklärungen für eingeschränkte operative Listen.
  • Ein gültiger Cursor belegt eine Fortsetzungsposition im erhaltenen Abfragekontext. Er belegt keinen unveränderten NACM-Sichtbereich, keine vollständige Ordnung und keinen gemeinsamen Zeitpunkt aller Seiten.

Die heikelste Lücke einer Paginierung liegt nicht zwingend in einer einzelnen Antwort. Seite eins kann korrekt sein, Seite zwei ebenfalls, und ihre Vereinigung kann dennoch einen Zustand zeigen, den es nie gab. Zwischen beiden Antworten kann ein Objekt verschwinden, seinen Sortierwert ändern, durch eine neue Zugriffsregel unsichtbar werden oder in einem föderierten Speicher früher aktualisiert werden als in einem anderen.

draft-ietf-netconf-list-pagination-13 bietet eine saubere Grammatik, um die Anfrage selbst nachzuweisen. Zuerst wirkt where, danach sort-by; locale liefert den Sortierkontext. Dann folgen direction und entweder offset oder cursor, schließlich limit. sublist-limit begrenzt nicht die Zielliste, sondern untergeordnete Listen und Leaf-Lists innerhalb der zurückgegebenen Elemente.

Revision 13 wurde am 6. Juli 2026 eingestellt. Der IETF Datatracker führt sie als aktiven Internet-Draft der NETCONF-Arbeitsgruppe für den Standards Track, im WG-Zustand In WG Last Call, mit dem Kennzeichen Revised I-D Needed - Issue raised by WGLC; der IESG-Zustand lautet I-D Exists. Die aktuelle YANG-Validierungsanzeige zählt drei Fehler. Die sichtbaren Meldungen von pyang und yanglint betreffen denselben Bereich einer maskierten Zeilenfortsetzung. Das ist Dokument- und Werkzeugstatus, kein Nachweis eines Implementierungs- oder Betriebsfehlers.

Der Fortsetzungslink erhält die Frage

Eine Cursorfolge beginnt mit cursor=first. Bei dieser Initialisierung werden where, sort-by und locale festgelegt. next und previous übernehmen den ursprünglichen Kontext; später dürfen nur limit und sublist-limit variieren. Ein Client kann also nicht mitten im Durchlauf den Filter wechseln und beide Teile als eine Abfrage ausgeben.

Die Spezifikation schützt damit die Identität der Frage. Sie definiert weder Snapshot-Kennung noch gemeinsamen Lesezeitpunkt, Transaktionsnummer, Revisionsvektor oder Barriere zwischen Backends. Dieselbe Frage kann wenige Sekunden später auf eine veränderte Population treffen.

Offset und Cursor schließen einander aus. Ein Offset überspringt eine Anzahl von Einträgen; Einfügungen oder Löschungen vor der Grenze verschieben seine Bedeutung. Der opake Cursor steht für einen Schlüssel oder Index des unterliegenden Systems. Er kann die Position robuster beschreiben, hält aber andere Objekte nicht davon ab, ihren Platz zu wechseln.

Der RESTCONF-Begleitentwurf sagt ausdrücklich, dass der Server keinen Zustand über die nächste oder vorige Seite beziehungsweise deren Cursor führt. Der Link ist daher keine Reservierung eines Ergebnisbestands, sondern eine später neu ausgewertete Fortsetzungsanweisung. Zustandsfreiheit erleichtert den Betrieb; ein Snapshot-Beleg entsteht daraus nicht.

Ein Sortierwert ergibt nicht immer eine Totalordnung

Ohne sort-by gilt die Ordnung der YANG-Liste. Mit dem Parameter stehen Einträge ohne den ausgewählten Wert hinter Einträgen mit Wert. locale ist nur zusammen mit sort-by zulässig. Fehlt die Angabe des Clients, wählt der Server eine Locale und meldet sie als YANG-Metadatum zurück.

Das beseitigt einen unsichtbaren Standardwert. Ein BCP-47-Tag benennt jedoch weder Unicode-Version noch Kollationsbibliothek, Normalisierung oder Gleichstandsregel. Zwei Quellen können dieselbe Locale akzeptieren und Akzente, Großschreibung oder äquivalente Zeichen dennoch verschieden ordnen.

Zudem kennt der Entwurf keine Untersortierung. Haben mehrere Objekte denselben Hauptwert, hängt ihre tatsächliche Reihenfolge von einem internen Merkmal ab. Schneidet die Seitengrenze durch diese Gruppe, können Neustart, anderer Knoten oder Indexwechsel die Zuordnung ändern, obwohl sort-by erfüllt bleibt. Eine belastbare Evidenz muss den wirklichen Gleichstandsbrecher festhalten oder offen sagen, dass keine Totalordnung vorlag.

Eine Fähigkeit ist zunächst eine Erklärung

Große config false-Listen können beliebige XPath-Auswertung wirtschaftlich unmöglich machen. Über RFC 9196 kann der Server einen Knoten als constrained markieren, indexed-Kinder nennen und cursor-supported erklären. Bei einer eingeschränkten Liste beziehen sich Filter und Sortierung nur auf indizierte Knoten; ein Ausdruck darf nicht durch Unterlisten hinabsteigen.

Diese Angaben helfen dem Client, ausführbare Anfragen zu bilden. Sie beweisen nicht, dass der Index bei diesem Aufruf benutzt wurde, aktuell war oder sämtliche beitragenden Quellen enthielt. Systemfähigkeiten können sich mit Hardware, Lizenz oder Laufzeitbedingung ändern. Die Identität des beobachteten Fähigkeitssatzes gehört deshalb zu jeder Seite.

Der content-id der YANG Library aus RFC 8525 identifiziert Module und Schemata. Er sagt, mit welchem Strukturvertrag die Antwort interpretiert wurde. Er ist keine Versionsnummer der beschriebenen Schnittstellen, Routen oder Zähler und folglich kein Daten-Snapshot.

NACM verändert den sichtbaren Bestand

RFC 8341 erlaubt NACM, Operationen und Daten je Principal einzuschränken. where läuft damit über die autorisierte Sicht, nicht über eine abstrakte Gesamtmenge. Ändern sich Gruppen, Regeln oder Objektberechtigungen zwischen den Seiten, ändert sich die Population trotz gleichem Filter.

Der bestehende BTW-Beitrag über RFC 9865 und SCIM untersucht, warum Cursorbesitz keine entzogene Berechtigung fortschreiben darf. Hier liegt der Schwerpunkt anders: Selbst wenn jede Seite neu und korrekt autorisiert wird, bilden zwei unterschiedliche Sichtbereiche nicht automatisch eine kohärente Liste. Principal, Policy-Version und wirksame Sicht müssen seitenweise erhalten bleiben.

Operative Daten warten nicht

RFC 8342 trennt beabsichtigte und operative Datenspeicher. Operative Daten verbinden angewandte Konfiguration und Systemzustand, teils aus mehreren Ursprüngen. Routen konvergieren, Zähler laufen und Schnittstellen ändern sich während des Lesens.

Endet Seite eins beim Sortierwert m, kann ein vorheriges Objekt seinen Wert auf z ändern und erneut erscheinen. Ein späteres Objekt kann auf a wechseln und vollständig fehlen. Der Cursor verringert bestimmte Offset-Probleme, friert aber weder andere Schlüssel noch föderierte Quellen ein.

Wo ein gemeinsamer Snapshot oder Revisionsvektor existiert, sollte er an jede Seite gebunden werden. Andernfalls braucht das Ergebnis Beobachtungszeiten je Seite und Quelle, Grenzvergleiche sowie Dubletten- und Lückenprüfungen. Dann ist es als Durchlauf über ein Zeitfenster zu bezeichnen, nicht als Zustand eines einzigen Augenblicks.

Unterlisten benötigen eigene Fortsetzungen

limit beschränkt die Zielliste, sublist-limit ihre Nachfahren. remaining kann eine positive Zahl oder unknown liefern. Alle Geräte zu lesen bedeutet also nicht, alle Schnittstellen oder Routen in diesen Geräten gelesen zu haben.

Jede abgeschnittene Unterliste eröffnet einen eigenen Nachweiszweig mit Eltern-ID, Kontext, Cursorfolge, Antwort-Hash und Restzahl oder Ungewissheit. Eine abgeschlossene Hauptseite ist kein Beleg für vollständigen Inhalt ihrer Elemente.

Seitenbeleg und Gesamtbeleg

Der Seitenbeleg sollte Principal und NACM-Policy, Datastore, YANG-Library- und Fähigkeitssatz, genaue Parameter, Anfrage- und Antwort-Hashes, Cursorlinie, Schlüssel und Sortierwerte, remaining, Serverzeit sowie Quellrevisionen enthalten.

Der Gesamtbeleg sucht nach Dubletten, Lücken und Grenzsprung, vergleicht die letzte Sortiertupel einer Seite mit der ersten der nächsten und meldet Änderungen an Policy, Fähigkeit, Locale oder Ursprung. Schließlich klassifiziert er das Ergebnis als gemeinsamen Snapshot, begrenzt inkonsistente Lektüre oder Lauf über veränderliche Beobachtungen. Das ist ein Betriebsentwurf, keine dem Internet-Draft zugeschriebene Pflicht.

Der Cursor wird nicht abgewertet, wenn seine Aussage eng bleibt. Er kennt die Position im bewahrten Fragekontext. Den gemeinsamen Zeitpunkt müssen andere Instrumente nachweisen.

Primärquellen

Der geschlossene Bestand enthält aktuellen Entwurf und Archiv, Datatracker-Status und Historie, Versionsvergleich, beide Begleitentwürfe, drei nur historisch verwendete Reviews und die Grundlagen-RFCs: 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.