要約
draft-ietf-netmod-yang-anydata-validation-00は、符号化されたデータノードの識別情報から RFC 8525 の YANG Library を引き、anydata配下に対応するスキーマを探す方法を示した。anydata-completeは対応スキーマの全制約を適用する一方、anydata-candidateは制約検査を行わない。どちらも送信元、権限、運用状態、転送、事業成果を単独では証明しない。
監視画面の緑色は、ときに質問を終わらせてしまう。だが、数か月前のペイロードを同じバリデータで再生して結果が変わったとき、問題はデータなのか、モジュールの revision なのか、feature や deviation なのか。検証時の YANG Library が残っていなければ、緑色は再現できない記憶にすぎない。
revision 00 の Validating anydata in YANG Library context が扱ったのは、この接続点だった。YANG 1.1 の anydata は、YANG でモデル化できるものの、親モジュールの設計時点では具体的なモデルが分からないノード集合を格納する。フィルター、編集、instance data、通知、YANG-Push で便利だが、受信側は中身をどのスキーマで評価するか決めなければならない。
草案は符号化に残る識別子を使う。XML では local name とモジュールの XML namespace、JSON ではデータノード識別子またはモジュール修飾名、CBOR では SID、SID delta、namespace-qualified name、instance-identifier などである。その識別子から、YANG Library にある対応ノードを探す。
しかし YANG Library は単一の辞書ではない。RFC 8525 では datastore が schema を参照し、schema は module-set の和集合である。モジュールには revision、submodule、feature、deviation が伴う。content-id は Library の情報が変われば変化するが、実装固有であり同じ内容から常に同じ値が得られる保証はない。schema mount の下なら、さらにマウント先の文脈が必要になる。
candidate の合格は complete の途中結果ではない
草案が分けた二つのモードには明確な非対称性がある。anydata-complete は anydata subtree の内容を検証し、対応スキーマにあるすべての検証規則への適合を求める。anydata-candidate は constraint checks を適用しない。
名称は RFC 7950 section 8.3.3 の検証時点を参照する。running と startup では編集やコピーの終わりに制約を強制し、candidate datastore では commit または validate まで遅らせられる。だから candidate の合格を「完全な YANG 適合」と表示してはならない。構造を候補経路が受け入れたことと、全制約を通過したことは別の証拠である。
complete の合格にも条件が付く。それは指定した符号化、Library snapshot、datastore、schema、module-set、mount context、validator build の下で、実装が適用した規則に違反を見つけなかったということだ。別の環境へ移しても自動的に同じ結論になるわけではない。
失敗から分かるのも、型、範囲、must、when、要素数、未知ノード、文脈不一致などの限定された診断である。送信者の悪意は分からない。中継処理の書き換え、受信側の Library 選択、バリデータ差異も原因になり得る。失敗は隔離の根拠にはなっても、帰属の判決ではない。
草案は、負のインターフェース octet counter が YANG-Push で大量分析に入り、集計、請求、容量計画を誤らせる例を挙げる。完全検証はこの種の型・範囲違反を発見できる可能性がある。しかし値が非負であることは、最新性、欠落のなさ、送信元、対象インターフェースを保証しない。
再現できる検証票を設計する
検証票には payload hash、取得時刻、encoding、復号した node identity を置く。YANG Library の content-id と凍結 snapshot、datastore と schema、全 module-set、module/submodule revision、feature、deviation、mount path を結び、validator の名称、build、flags、選択モード、diagnostic、処置を残す。
これは監査向けの飾りではない。feature の変更でノードが消えることがある。deviation は制約を変える。mount point は同じ名前の探索文脈を変える。validator upgrade も parser behavior を動かす。同一 bytes の合否が反転したら、まず文脈差を調べられるようにするための運用データだ。
草案は non-conforming message の扱いを利用者に委ね、無視、記録、alert などを例示した。検証器の外に意思決定が残る点は重要である。どの失敗で自動処理を止め、どれを retry し、どれを人が確認するかは、結果の責任を持つ組織が決める。
文書はすでに失効している
Datatracker が示す最新 revision 日は 2025 年 12 月 2 日で、履歴には同日に WG revision 00 が公開された記録がある。本文の有効期限は 2026 年 6 月 3 日だった。現在の表示は Expired Internet-Draft、Expired & archived、Dead WG Document、IESG Expired で、構造化された Intended RFC status は None である。
原稿の masthead には Intended status: Standards Track とあるが、これは当時の原稿ラベルであり、IETF の承認ではない。セキュリティ分析は未完成で、IANA request はなく、Datatracker に shepherd もいない。
Implementation Status は libyang の anydata-candidate branch を挙げ、RFC 化の前に節を削除するよう求めていた。branch の存在は code path の試行を示せるが、merge、独立実装、相互運用、配備は証明しない。本稿はこの記述から運用実績を推定しない。
隣の証拠を代行させない
RFC 8342 は running、intended、operational を分ける。schema-valid な値でも device が適用した証明にはならない。RFC 8341 の access control は別の判断であり、構造適合は NACM authorization ではない。RFC 8639 と RFC 8641 が扱う subscription と delivery についても、valid subtree は event loss、replay、順序、上流改変を排除しない。
送信者 identity、transport integrity、custody はそれぞれの記録が要る。実機 counter、FIB、packet capture、遠隔観測、請求照合も別の層である。機械可読な合否だからといって、バリデータに全層の権限を集めてはいけない。
revision 00 が残した価値は、万能の valid badge ではない。opaque だった subtree を明示した文脈で試験し、強さの異なる二つの結論を区別する発想である。文脈と版を残せば障害範囲を狭められる。残さなければ、緑色は検証不能な約束になる。
出典
草案:revision 00、Datatracker の現状、履歴。
技術的境界:RFC 7950、RFC 8525、RFC 8342、RFC 8341、RFC 8528、RFC 8639、RFC 8641。
分析枠組み:Minimum Initial Specification、On Reality Layers、Running Code Primary。
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
