YANG

YANG（ヤン、英: Yet Another Next Generation）は、データモデル言語の一種である。NETCONF や RESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。 モジュールは YANGモデルの単位である。 YANGでは、ネットワーク機器などのモデル化対象の一つを単一のモジュールでモデル化することもできるし、機能ごとに別々のモジュールでモデル化し、それを一つの親モジュールに含めてまとめあげることでモデル化することも可能である。複数のモジュールを包含関係で結びつける場合、他のモデルに含められるほうをサブモジュールという。サブモジュールはまたさらにそのサブモジュールを含むことができる。 通常は、モジュールまたはサブモジュール単位で個別のファイルに記述することとされている。親モジュールがサブモジュールを含むときは、includeステートメントを用いる。 YANGには、データ構造をモデルするために四種類のステートメントを定義している。これらを組み合わせることで、木構造を持つデータ構造を定義できる。 leaf ある型を持つ単一のスカラー値ノードを定義するためのステートメントである。leafで定義されたデータノードは下位構造を持つことができない。 leaf-list 同じ型を持つ値の配列ノードを定義するためのステートメントである。leaf-listに格納されるノード値は、一意でなくてはならない。 container 下位のノードをまとめるためのステートメントである。木構造における枝の役割を果たす。containerノード自身は値を持たない。 list 同種の下位構造を複数個保持するためのステートメントである。listにはその直下に keyステートメントを持ち、これによりそのリストにおける主キーを格納するためのノードを定義する。この主キーに格納されるノード値は、そのlist内で一意でなくてはならない。 YANGモデルでは、機器の設定を保持するノードの他に、機器の状態値を保持するノードを定義することができる。これはNETCONFのget操作で機器から取得した状態値を格納する、といった使われ方を想定している。状態ノードはconfigステートメントをfalseとしてモデル化する。 いくつかのデータ型があらかじめ定義されている。 組み込まれたデータ型や他の導出されたデータ型を組み合わせたり、数値の範囲などを制限することにより、YANGモデル内で新たな型を定義し、ノード値の型として用いることができる。この型の定義にはtypedefステートメントを用いる。 groupingステートメントを用いてノードのまとまりをグループ化することで、モデル内で再利用することができる。これにより、モデルのいくつかの部分が共通するデータ構造を持つ場合に、定義を共有できる。 あるモデルを拡張するため、augmentステートメントを使って別のモジュールを追加することができる。ある機器の設定が、全体的にはある標準規格に従っているが、一部にそのベンダー固有の設定が追加されているような場合をモデル化するときに用いることができる。 rpcステートメントを用いることで、NETCONFなどRPCに対するインターフェイスをモデル化できる。入力パラメタと出力情報の型をそれぞれinputステートメントとoutputステートメントで定義する。 機器から何らかの通知が行われる場合に、その通知情報の型を定義することができる。 XMLの解析ができるアプリケーションやネットワーク機器での利用を想定し、YANGモデルはそれと等価な内容をXML形式で表現できる。この形式は YIN（YANG Independent Notation）と呼ばれる。 NETCONFはネットワーク設定の管理をXMLメッセージで行うものであるため、その内容を規定するYANGモデルをDSDLで表現することを考えるのは自然なことである。そのYANGモデルからDSDLへのマッピングについては、 RFC 6110 で規定されている。 JSON形式への変換方法が RFC 7951 で規定されている。 YANGは、以下のRFCで仕様が規定されている。 RFC 6020 ：YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) RFC 7950 ：The YANG 1.1 Data Modeling Language pyang：Pythonで書かれたYANGツール。モデルの検証、他形式への変換。 YangExplorerFlashで書かれたモデルビューア。モデルの木構造表示やRPCの実行。 [脚注の使い方] ^ pyang ^ YangExplorer ^ "File Layout". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 28. sec. 5.2. doi:10.17487/RFC6020. RFC 6020。 ^ "The leaf Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 58. sec. 7.6. doi:10.17487/RFC6020. RFC 6020。 ^ "The leaf-list Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 62. sec. 7.7. doi:10.17487/RFC6020. RFC 6020。 ^ "The container Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 51. sec. 7.5. doi:10.17487/RFC6020. RFC 6020。 ^ "The list's key Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 68. sec. 7.8.2. doi:10.17487/RFC6020. RFC 6020。 ^ "State Data". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 19. sec. 4.2.3. doi:10.17487/RFC6020. RFC 6020。 ^ "The config Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 105. sec. 7.19.1. doi:10.17487/RFC6020. RFC 6020。 ^ "The typedef Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 49. sec. 7.3. doi:10.17487/RFC6020. RFC 6020。 ^ "The grouping Statemen". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 82. sec. 7.11. doi:10.17487/RFC6020. RFC 6020。 ^ "The augment Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 93. sec. 7.15. doi:10.17487/RFC6020. RFC 6020。 ^ "The rpc Statement". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 87. sec. 7.13. doi:10.17487/RFC6020. RFC 6020。 ^ "Notification Definitions". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 24. sec. 4.2.10. doi:10.17487/RFC6020. RFC 6020。 ^ "YIN". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 137. sec. 11. doi:10.17487/RFC6020. RFC 6020。 YANG central - ツールやチュートリアルなど