拡張子 | .yang |
---|---|
MIMEタイプ | application/yang |
種別 | Data interchange |
国際標準 | RFC 6020 RFC 7950 |
YANG(ヤン、英: Yet Another Next Generation)は、データモデル言語の一種である。NETCONF や RESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。
モジュールは YANGモデルの単位である。
YANGでは、ネットワーク機器などのモデル化対象の一つを単一のモジュールでモデル化することもできるし、機能ごとに別々のモジュールでモデル化し、それを一つの親モジュールに含めてまとめあげることでモデル化することも可能である。複数のモジュールを包含関係で結びつける場合、他のモデルに含められるほうをサブモジュールという。サブモジュールはまたさらにそのサブモジュールを含むことができる。
通常は、モジュールまたはサブモジュール単位で個別のファイルに記述することとされている[1]。親モジュールがサブモジュールを含むときは、includeステートメントを用いる。
YANGには、データ構造をモデルするために四種類のステートメントを定義している。これらを組み合わせることで、木構造を持つデータ構造を定義できる。
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ステートメントを用いることで、NETCONFなどRPCに対するインターフェイスをモデル化できる[11]。入力パラメタと出力情報の型をそれぞれinputステートメントとoutputステートメントで定義する。
機器から何らかの通知が行われる場合に、その通知情報の型を定義することができる[12]。
XMLの解析ができるアプリケーションやネットワーク機器での利用を想定し、YANGモデルはそれと等価な内容をXML形式で表現できる[13]。この形式は YIN(YANG Independent Notation)と呼ばれる。
NETCONFはネットワーク設定の管理をXMLメッセージで行うものであるため、その内容を規定するYANGモデルをDSDLで表現することを考えるのは自然なことである。そのYANGモデルからDSDLへのマッピングについては、 RFC 6110 で規定されている。
JSON形式への変換方法が RFC 7951 で規定されている。
YANGは、以下のRFCで仕様が規定されている。