YANG
From Wikipedia, the free encyclopedia
特徴
モジュール構造
モジュールは 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]。