YANG(ヤン、: Yet Another Next Generation)は、データモデル言語の一種である。NETCONFRESTCONF などのネットワーク管理用プロトコルによりアクセスされるネットワーク機器の設定や状態、遠隔手続き呼出し (RPC)、通知をモデル化するために開発された。

YANG
拡張子.yang
MIMEタイプapplication/yang
種別Data interchange
国際標準RFC 6020 RFC 7950

特徴 編集

モジュール構造 編集

モジュールは 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の実行。

脚注 編集

公式サイト 編集

出典 編集

  1. ^ "File Layout". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 28. sec. 5.2. doi:10.17487/RFC6020. RFC 6020
  2. ^ "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
  3. ^ "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
  4. ^ "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
  5. ^ "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
  6. ^ "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
  7. ^ "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
  8. ^ "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
  9. ^ "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
  10. ^ "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
  11. ^ "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
  12. ^ "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
  13. ^ "YIN". YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF) (英語). pp. 137. sec. 11. doi:10.17487/RFC6020. RFC 6020

外部リンク 編集