YANG
拡張子 | .yang |
---|---|
MIMEタイプ | application/yang |
種別 | Data interchange |
国際標準 | RFC 6020 RFC 7950 |
YANG(ヤン、英: Yet Another Next Generation)は、データモデル言語の一種である。NETCONF や RESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。
特徴
[編集]モジュール構造
[編集]モジュールは YANGモデルの単位である。
YANGでは、ネットワーク機器などのモデル化対象の一つを単一のモジュールでモデル化することもできるし、機能ごとに別々のモジュールでモデル化し、それを一つの親モジュールに含めてまとめあげることでモデル化することも可能である。複数のモジュールを包含関係で結びつける場合、他のモデルに含められるほうをサブモジュールという。サブモジュールはまたさらにそのサブモジュールを含むことができる。
通常は、モジュールまたはサブモジュール単位で個別のファイルに記述することとされている[1]。親モジュールがサブモジュールを含むときは、includeステートメントを用いる。
データを木構造として定義
[編集]YANGには、データ構造をモデルするために四種類のステートメントを定義している。これらを組み合わせることで、木構造を持つデータ構造を定義できる。
- leaf
- ある型を持つ単一のスカラー値ノードを定義するためのステートメントである。leafで定義されたデータノードは下位構造を持つことができない[2]。
- leaf-list
- 同じ型を持つ値の配列ノードを定義するためのステートメントである。leaf-listに格納されるノード値は、一意でなくてはならない[3]。
- container
- 下位のノードをまとめるためのステートメントである。木構造における枝の役割を果たす。containerノード自身は値を持たない[4]。
- list
- 同種の下位構造を複数個保持するためのステートメントである。listにはその直下に keyステートメントを持ち、これによりそのリストにおける主キーを格納するためのノードを定義する。この主キーに格納されるノード値は、そのlist内で一意でなくてはならない[5]。
状態のモデル化
[編集]YANGモデルでは、機器の設定を保持するノードの他に、機器の状態値を保持するノードを定義することができる[6]。これはNETCONFのget操作で機器から取得した状態値を格納する、といった使われ方を想定している。状態ノードはconfigステートメント[7]をfalseとしてモデル化する。
組み込まれたデータ型
[編集]いくつかのデータ型があらかじめ定義されている。
型名 | 意味 |
---|---|
int8 | -128から127までの整数値を表す型 |
int16 | -2147483648から2147483647までの整数値を表す型 |
int32 | -9223372036854775808から9223372036854775807までの整数値を表す型 |
int64 | -128から127までの整数値を表す型 |
uint8 | 0から255までの整数値を表す型 |
uint16 | 0から65535までの整数値を表す型 |
uint32 | 0から4294967295までの整数値を表す型 |
uint64 | 0から18446744073709551615 までの整数値を表す型 |
decimal64 | 小数値型 |
string | 文字列型 |
boolean | 真偽値型 |
enumeration | 列挙型 |
bits | ビット値(0 or 1)を並べた値を表す型 |
leafref | 他のleaf値を参照するための型 |
identityref | 他のidentity値を参照するための型 |
empty | 値ではなく、ノードの有無を表現するための型 |
union | その下位で定義された型のいずれかを持つ型 |
データ型の導出されたデータ型
[編集]組み込まれたデータ型や他の導出されたデータ型を組み合わせたり、数値の範囲などを制限することにより、YANGモデル内で新たな型を定義し、ノード値の型として用いることができる。この型の定義にはtypedefステートメント[8]を用いる。
グループ化されたノードの再利用
[編集]groupingステートメントを用いてノードのまとまりをグループ化することで、モデル内で再利用することができる[9]。これにより、モデルのいくつかの部分が共通するデータ構造を持つ場合に、定義を共有できる。
モデルの拡張
[編集]あるモデルを拡張するため、augmentステートメント[10]を使って別のモジュールを追加することができる。ある機器の設定が、全体的にはある標準規格に従っているが、一部にそのベンダー固有の設定が追加されているような場合をモデル化するときに用いることができる。
RPCのモデル化
[編集]rpcステートメントを用いることで、NETCONFなどRPCに対するインターフェイスをモデル化できる[11]。入力パラメタと出力情報の型をそれぞれinputステートメントとoutputステートメントで定義する。
通知のモデル化
[編集]機器から何らかの通知が行われる場合に、その通知情報の型を定義することができる[12]。
他のデータ形式への変換
[編集]XMLまたはYIN
[編集]XMLの解析ができるアプリケーションやネットワーク機器での利用を想定し、YANGモデルはそれと等価な内容をXML形式で表現できる[13]。この形式は YIN(YANG Independent Notation)と呼ばれる。
DSDL
[編集]NETCONFはネットワーク設定の管理をXMLメッセージで行うものであるため、その内容を規定するYANGモデルをDSDLで表現することを考えるのは自然なことである。そのYANGモデルからDSDLへのマッピングについては、 RFC 6110 で規定されている。
JSON
[編集]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[サイト 1]:Pythonで書かれたYANGツール。モデルの検証、他形式への変換。
- YangExplorer[サイト 2]Flashで書かれたモデルビューア。モデルの木構造表示やRPCの実行。
脚注
[編集]公式サイト
[編集]出典
[編集]- ^ "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 - ツールやチュートリアルなど