Yet Another Next Generation(YANG、/jæŋ/、"hang"と韻を踏む)[1] [2] [3]は、 NETCONF [4]やRESTCONF [ 5 ]などのネットワーク管理プロトコルを介して送信されるデータの定義のためのデータモデリング言語です。YANGデータモデリング言語は、インターネット技術タスクフォース(IETF)のNETMOD [6]ワーキンググループによって管理されており、最初は2010年10月にRFC 6020として公開され 、2016年8月に更新されました(RFC 7950)。 データモデリング言語は、ネットワーク要素 の構成データと状態データの両方をモデル化するために使用できます。 さらに、YANGを使用して、ネットワーク要素によって発行されるイベント通知の形式を定義でき、データモデラーはNETCONFプロトコルを介してネットワーク要素で呼び出すことができるリモートプロシージャコールの署名を定義できます。 言語はプロトコルに依存しないため、ネットワーク構成プロトコルがサポートする 任意のエンコード形式( XMLやJSONなど)に変換できます。
YANG は、データ構造をXMLツリー形式で表すモジュール言語です。データ モデリング言語には、多数の組み込みデータ型が付属しています。組み込みデータ型から、追加のアプリケーション固有のデータ型を派生できます。より複雑な再利用可能なデータ構造は、グループ化として表すことができます。YANG データ モデルでは、XPATH式を使用して、YANG データ モデルの要素に対する制約を定義できます。
歴史
多くのネットワーク管理プロトコルには、関連するデータ モデリング言語があります。ネットワーク管理用に最初に広く導入されたインターネット標準は、Simple Network Management Protocol (SNMP) でした。SNMP に関連するデータ モデリング言語は、Structure of Management Information (SMI) と呼ばれていました。SMI 言語自体は、1988 年版の抽象構文記法 1 (ASN.1)に基づいています。RFC 2578、2579 、および 2580で定義されている現在のバージョンの SMI 言語である SMIv2 は 、ASN.1 の拡張サブセットに発展しました。
1990 年代後半、SMIv2 の代替を作成するプロジェクトが開始され、SMIng と呼ばれました。その動機の 1 つは、SMIng を管理プロトコル SNMP から切り離し、コンピュータ プログラムが解析しやすく、C のような表記法を使用するプログラミング言語に慣れている人にとって習得しやすい構文構造を SMIng に与えることでした。SMIng プロジェクトは IETF では成功しませんでしたが、SMIng 仕様は 2004 年 5 月に実験文書として公開されました ( RFC 3780、3781)。
IETF でNETCONFプロトコルが開発されてから間もなく、NETCONF プロトコルによって操作されるデータ モデルを定義するためのデータ モデリング言語が必要であることが明らかになりました。設計チームが、YANG 言語の基礎となる提案を作成しました。 [7] 構文構造と基本型システムは、基本的に SMIng から借用されました。ただし、SMIng プロジェクトから学んだ教訓に基づいて、YANG プロトコルを中立にしようとする試みは行われませんでした。代わりに、YANG は、データ モデル インスタンスをXMLにシリアル化できるという前提など、NETCONF プロトコルの概念に結びついています。YANG の標準化は、2008 年 4 月に NETMOD ワーキング グループが結成されたことから始まりました。YANG 1.0 仕様は、 2010 年 10 月にRFC 6020 として公開されました。最近、NETMOD ワーキング グループは YANG 1.1 に取り組んでおり、2016 年 8 月にRFC 7950 として公開されました。 [2]
例
次の YANG モジュールは、example-sportsチーム スポーツのデータ モデルを示しています。モジュールは、名前空間とプレフィックスを宣言し、ietf-yang-types型を定義する前に型ライブラリ モジュールをインポートします。次に、 のリストと のリストを含むseasonコンテナーを定義します。チームには、型とその制限
を介して人物を参照するプレーヤーのリストがあります。sportspersonteamleafrefpath
モジュール例-スポーツ{
名前空間"http://example.com/example-sports" ;プレフィックスsports ;
import ietf-yang-types {接頭辞yang ; }
typedef season { type string ; description "スポーツシーズンの名前。タイプと年を含みます。例: 'チャンピオンズリーグ 2014/2015'。" ; }
コンテナスポーツ{ config true ;
リストperson {キー"name" ;リーフname {タイプstring ; }リーフbirthday {タイプyang :日時;必須true ; } }
チームのリスト{キー"name" ;リーフ名{タイプstring ; }プレーヤーのリスト{キー"name season" ;一意の番号;リーフ名{タイプleafref {パス"/sports/person/name" ; } }リーフシーズン{タイプseason ; }リーフ番号{タイプuint16 ;必須true ; }リーフスコア{タイプuint16 ;デフォルト0 ; } } } } }
JSON エンコーディング
以下のコード ブロックは、データ モデルのインスタンス化のJSONexample-sports表現を示しています。
{
"example-sports:sports" : { "person" : [ { "name" : "Lionel Andrés Messi" , "birthday" : "1987-06-24T00:00:00-00:00" }, { "name" : "Cristiano Ronaldo" , "birthday" : "1985-02-05T00:00:00-00:00" } ], "team" : [ { "name" : "FC Barcelona" , "player" : [ { "name" : "Lionel Andrés Messi" , "season" : "Champions League 2014/2015" , "number" : 10 , "scores" : 43 } ] }, { "name" : "Real Madrid" , "player" : [ { "name" : "クリスティアーノ・ロナウド" , "season" : "チャンピオンズリーグ 2014/2015" , "number" : 7 , "scores" : 48 } ] } ] } }
XMLエンコーディング
以下のコード ブロックは、データ モデルのインスタンス化のXMLexample-sports表現を示しています。
<データxmlns= "urn:ietf:params:xml:ns:netconf:base:1.0" >
<sports xmlns= "http://example.com/example-sports" > <person> <name>リオネル・アンドレス・メッシ</name> <birthday> 1987-06-24T00 : 00:00-00:00 </birthday> </person> <person> <name>クリスティアーノ・ロナウド</name> <birthday> 1985-02-05T00:00:00-00:00 </birthday> </person> <team> <name> FCバルセロナ</name> <player> <name>リオネル・アンドレス・メッシ</name> <season>チャンピオンズリーグ2014/2015 </season> <number> 10 </number> <scores> 43 </scores> </player> </team> <team> <name>レアル・マドリード</name> <player> <name>クリスティアーノ・ロナウド</name> <season>チャンピオンズリーグ2014/2015 </season> <number> 7 </number> <scores> 48 </scores> </player> </team> </sports>
</データ>
ドキュメント
言語仕様とアーキテクチャ文書
次のRequest for Comments (RFC) は、YANG 言語といくつかの基本的な拡張機能を定義します。
- RFC 6020: YANG - ネットワーク構成プロトコル (NETCONF) のデータ モデリング言語
- RFC 6110: YANG をドキュメント スキーマ定義言語にマッピングし、NETCONF コンテンツを検証する
- RFC 7950: YANG 1.1 データ モデリング言語 [ RFC 6020 に代わるものではありません]
- RFC 7951: YANG でモデル化されたデータの JSON エンコーディング
- RFC 7952: YANG でのメタデータの定義と使用
- RFC 8342: ネットワーク管理データストアアーキテクチャ (NMDA)
- RFC 8525: YANG ライブラリ [ RFC 7895 を廃止]
- RFC 8528: YANG スキーママウント
- RFC 8791: YANG データ構造拡張
- RFC 9254: YANG でモデル化されたデータの簡潔なバイナリ オブジェクト表現 (CBOR) でのエンコード
- RFC 9595: YANG スキーマ項目 iDentifier (YANG SID)
ガイドラインとサポート文書
以下のコメント要請ではガイドラインと裏付けとなる文書が提供されています。
- RFC 8407: YANG データ モデルを含むドキュメントの作成者とレビュー担当者向けのガイドライン [ RFC 6087 は廃止されました]
- RFC 8199: YANG モジュールの分類
- RFC 8340: YANG ツリー図
- RFC 8969: YANG を使用したサービスとネットワーク管理の自動化フレームワーク
- RFC 9195: YANG インスタンス データのファイル形式
IETFの使用
標準化過程のプロトコル仕様
以下のコメント要求は、YANG モジュールを使用して (部分的に) 定義されている標準化過程のプロトコルを定義します。
- RFC 6241: ネットワーク構成プロトコル (NETCONF)
- RFC 6243: NETCONF のデフォルト機能
- RFC 6470: ネットワーク構成プロトコル (NETCONF) 基本通知
- RFC 8040: RESTCONF プロトコル
- RFC 8071: NETCONF コールホームと RESTCONF コールホーム
- RFC 8072: YANG パッチ メディア タイプ
- RFC 8341: ネットワーク構成アクセス制御モデル [ RFC 6536 は廃止]
- RFC 8526: ネットワーク管理データストア アーキテクチャをサポートするための NETCONF 拡張
- RFC 8527: ネットワーク管理データストア アーキテクチャをサポートするための RESTCONF 拡張
- RFC 8572: セキュア ゼロ タッチ プロビジョニング (SZTP)
- RFC 8639: YANG 通知のサブスクリプション
- RFC 8640: NETCONF 経由の YANG イベントおよびデータストアへの動的サブスクリプション
- RFC 8641: データストア更新に関する YANG 通知のサブスクリプション
- RFC 8650: RESTCONF 経由の YANG イベントおよびデータストアへの動的サブスクリプション
標準トラックデータモデル
次の RFC は、標準化過程の YANG データ モデルを定義します。
- RFC 6022: NETCONF モニタリング用 YANG モジュール
- RFC 6991: 一般的な YANG データ型 [廃止されたRFC 6021]
- RFC 6643: 管理情報バージョン 2 (SMIv2) MIB モジュールの構造を YANG モジュールに変換する
- RFC 6728: IP フロー情報エクスポート (IPFIX) およびパケット サンプリング (PSAMP) プロトコルの構成データ モデル
- RFC 7224: IANA インターフェース タイプ YANG モジュール
- RFC 7317: システム管理のための YANG データ モデル
- RFC 7407: SNMP 構成のための YANG データ モデル
- RFC 8177: キーチェーンの YANG データ モデル
- RFC 8194: LMAP 測定エージェントの YANG データ モデル
- RFC 8294: ルーティングエリアの共通 YANG データ型
- RFC 8299: L3VPN サービス配信のための YANG データ モデル
- RFC 8343: インターフェース管理のための YANG データ モデル [ RFC 7223 を廃止]
- RFC 8344: IP 管理のための YANG データ モデル [ RFC 7277 を廃止]
- RFC 8345: ネットワーク トポロジ用の YANG データ モデル
- RFC 8346: レイヤ 3 トポロジの YANG データ モデル
- RFC 8347: 仮想ルータ冗長プロトコル (VRRP) の YANG データ モデル
- RFC 8348: ハードウェア管理のための YANG データ モデル
- RFC 8349: ルーティング管理のための YANG データ モデル (NMDA バージョン) [ RFC 8022 を廃止]
- RFC 8366: ブートストラッププロトコル用のバウチャーアーティファクト
- RFC 8431: ルーティング情報ベース (RIB) の YANG データ モデル
- RFC 8466: レイヤー 2 仮想プライベート ネットワーク (L2VPN) サービス配信のための YANG データ モデル
- RFC 8512: ネットワーク アドレス変換 (NAT) およびネットワーク プレフィックス変換 (NPT) 用の YANG モジュール
- RFC 8513: デュアルスタック ライト (DS-Lite) の YANG データ モデル
- RFC 8519: ネットワーク アクセス制御リスト (ACL) の YANG データ モデル
- RFC 8520: メーカーの使用法説明仕様
- RFC 8529: ネットワークインスタンスの YANG データモデル
- RFC 8530: 論理ネットワーク要素の YANG モデル
- RFC 8531: 接続指向の運用、管理、保守 (OAM) プロトコル用の汎用 YANG データ モデル
- RFC 8532: コネクションレス通信を使用する運用、管理、保守 (OAM) プロトコルの管理のための汎用 YANG データ モデル
- RFC 8533: コネクションレス通信を使用する運用、管理、保守 (OAM) プロトコルの管理のための取得方法の YANG データ モデル
- RFC 8542: データセンター ネットワークのファブリック トポロジの YANG データ モデル
- RFC 8561: マイクロ波無線リンクの YANG データ モデル
- RFC 8575: 高精度時間プロトコル (PTP) の YANG データ モデル
- RFC 8632: アラーム管理のための YANG データ モデル
- RFC 8652: インターネット グループ管理プロトコル (IGMP) およびマルチキャスト リスナー検出 (MLD) 用の YANG データ モデル
- RFC 8675: トンネル インターフェイス タイプの YANG データ モデル
- RFC 8676: IPv4-in-IPv6 アドレス プラス ポート (A+P) ソフトワイヤ用の YANG モジュール
- RFC 8695: ルーティング情報プロトコル (RIP) の YANG データ モデル
- RFC 8776: トラフィック エンジニアリング用の共通 YANG データ型
- RFC 8795: トラフィック エンジニアリング (TE) トポロジの YANG データ モデル
- RFC 8808: 工場出荷時のデフォルト設定のための YANG データ モデル
- RFC 8916: マルチキャスト ソース検出プロトコル (MSDP) の YANG データ モデル
- RFC 8944: レイヤー 2 ネットワーク トポロジの YANG データ モデル
- RFC 8960: MPLS ベースの YANG データ モデル
- RFC 8819: YANG モジュール タグ
- RFC 9020: セグメントルーティング用の YANG データモデル
- RFC 9061: ソフトウェア定義ネットワーク (SDN) に基づく IPsec フロー保護のための YANG データ モデル
- RFC 9067: ルーティングポリシーのための YANG データモデル
- RFC 9070: MPLS LDP の YANG データ モデル
- RFC 9093: レイヤー 0 タイプの YANG データ モデル
- RFC 9094: 波長スイッチ光ネットワーク (WSON) の YANG データ モデル
- RFC 9105: ターミナル アクセス コントローラ アクセス制御システム プラス (TACACS+) の YANG データ モデル
- RFC 9108: DNS クラスとリソース レコード タイプの YANG タイプ
- RFC 9166: インターネット グループ管理プロトコル (IGMP) およびマルチキャスト リスナー検出 (MLD) スヌーピング用の YANG データ モデル
- RFC 9179: 地理的位置の YANG グループ化
- RFC 9181: レイヤー 2 およびレイヤー 3 VPN の共通 YANG データ モデル
- RFC 9196: システムおよびデータストア更新通知の機能を記述する YANG モジュール
- RFC 9243: DHCPv6 構成のための YANG データ モデル
- RFC 9249: NTP 用の YANG データ モデル
- RFC 9291: レイヤー 2 VPN 向け YANG ネットワーク データ モデル
- RFC 9314: 双方向転送検出 (BFD) のための YANG データ モデル
- RFC 9128: プロトコル独立マルチキャスト (PIM) の YANG データ モデル
- RFC 9129: OSPF プロトコルの YANG データ モデル
- RFC 9130: IS-IS プロトコルの YANG データ モデル
- RFC 9194: IS-IS 逆メトリック用の YANG モジュール
- RFC 9348: IP トラフィック フロー セキュリティのための YANG データ モデル
- RFC 9363: 静的コンテキスト ヘッダー圧縮 (SCHC) 用の YANG データ モデル
- RFC 9375: ネットワークおよび VPN サービスのパフォーマンス監視のための YANG データ モデル
- RFC 9398: インターネット グループ管理プロトコル (IGMP) およびマルチキャスト リスナー検出 (MLD) プロキシ デバイス用の YANG データ モデル
- RFC 9403: RIB 拡張のための YANG データ モデル
- RFC 9408: サービス接続ポイント (SAP) の YANG ネットワーク データ モデル
- RFC 9418: サービス保証のための YANG データ モデル
- RFC 9472: ソフトウェア部品表 (SBOM) と脆弱性情報を報告するための YANG データ モデル
- RFC 9587: OSPFv3 拡張リンク状態広告 (LSA) の YANG データ モデル
- RFC 9617: 現場での運用、管理、保守のための YANG データ モデル
- RFC 9633: 決定論的ネットワーキング (DetNet) YANG データ モデル
- RFC 9640: 暗号化のための YANG データ型とグループ化
- RFC 9641: トラストストアの YANG データ モデル
- RFC 9642: キーストアの YANG データ モデル
- RFC 9643: TCP クライアントと TCP サーバーの YANG グループ化
- RFC 9644: SSH クライアントと SSH サーバーの YANG グループ化
- RFC 9645: TLS クライアントと TLS サーバーの YANG グループ化
- RFC 9646: セキュア ゼロタッチ プロビジョニング (SZTP) での証明書署名要求 (CSR) の伝達
- RFC 9647: Babel の YANG データ モデル
- RFC 9648: TCP の YANG データ モデル
- RFC 9656: マイクロ波トポロジーの YANG データ モデル
実験仕様
以下のコメント要求は、YANG を使用または拡張する実験的な仕様です。
参考文献
- ^ Björklund, Martin (2010). YANG - ネットワーク構成プロトコル (NETCONF) のデータモデリング言語 (技術レポート). IETF. doi : 10.17487/RFC6020 . RFC6020.
- ^ ab Björklund, Martin (2016). YANG 1.1 データモデリング言語 (技術レポート). IETF. doi : 10.17487/RFC7950 . RFC7950.
- ^ RFC 8328 : ポリシー抽象化の簡易使用のためのポリシーベース管理フレームワーク (SUPA)
- ^ ロブ、エンス;ビョークルンド、マーティン。シェーンヴェルダー、ユルゲン;アンディ・ビアマン (2011)。ネットワーク構成プロトコル (NETCONF) (技術レポート)。 IETF。土井: 10.17487/RFC6241。 RFC6241。
- ^ ビアマン、アンディ;ビョークルンド、マーティン。ケント州ワッセン (2017)。 RESTCONF プロトコル (技術レポート)。 IETF。土井:10.17487/RFC8040。 RFC8040。
- ^ 「ネットワークモデリングワーキンググループ」。IETF。
- ^ シェーンヴェルダー、ユルゲン;ビョークルンド、マーティン。フィル・シェーファー (2010)。 「NETCONF と YANG を使用したネットワーク構成管理」。IEEE コミュニケーション マガジン。48 (9): 166–173。土井:10.1109/MCOM.2010.5560601。S2CID 736431。
外部リンク
- Carl Moberg (2015-11-05). YANG by Example (YouTube). 横浜: IETF EDU チーム。2021-12-21 にオリジナルからアーカイブされました。
- Stefan Wallin (2014-10-18). YANG チュートリアル (YouTube). ストックホルム: tail-f. 2021-12-21 にオリジナルからアーカイブされました。
- YANG モデル カタログ - REST API を使用したオンライン カタログ
- YANG セントラル - YANG の情報とチュートリアル
- YANG ディスカッション フォーラム - YANG 関連の質問を議論するための ConfD ユーザー コミュニティ フォーラム。
- YANG ベースのクライアントとサーバーのリストについては、NETCONFページを参照してください。
- ISBN 978-0135180396 - 「YANG によるネットワーク プログラマビリティ: YANG、NETCONF、RESTCONF、gNMI によるネットワーク自動化の構造」
実装
オープンソース実装(名前順):
- clixon は、C で記述されたインタラクティブ CLI、NETCONF、RESTCONF インターフェースを含む YANG ベースのツールチェーンです。
- goyangはGo言語オブジェクトを生成するためにGoで書かれたYANGパーサーとコンパイラです。
- jncはpyangベースのYANGからJava APIへのコンパイラです。
- libyangはCで書かれたYANGパーサーとツールキットであり、CのAPIを提供します。
- pyangはPythonで書かれた拡張可能なYANGバリデーターおよびコンバーターです。
- pyangbindはpyangベースのPythonバインディングジェネレータです
- Sysrepo は、Unix/Linux アプリケーション用の YANG ベースの構成および運用データストアです。
- yangbuilder は、Apache Groovy で実装された YANG のビルダーです (Apache Groovy を使用して yang データ モデルを生成し、1 つのソース コード ベースで同様のモデルを維持します)
- yang-ide は、YANG モデルを編集および視覚化するための Eclipse プラグインです。
- yang-jsは、Node.jsとWebブラウザ用にCoffeeScript/JavaScriptで書かれたYANGパーサーおよび評価ツールです。
- yang-expressはyang-jsベースのExpress.jsウェブフレームワークジェネレータです。
- yang-swagger は、yang-js ベースの Swagger/OpenAPI 仕様ジェネレーターです。
- yangson は、YANG データ モデリング言語を使用してモデル化された JSON エンコードされた構成および状態データを操作するための Python 3 ライブラリです。
- YANGツールはJavaで書かれたOpenDaylightプロジェクトのツールセットです。
- Yang-Explorer - pyangベースのYangブラウザおよびRPCビルダーアプリケーションです
- ydk-gen は、複数の言語 (Python、C++ など) で API を生成する YANG から API へのコンパイラです。
- yuma123 は C で記述された netconf/YANG ツールチェーンで、次の機能を提供します: libyuma - YANG モジュールのランタイム コンパイルをサポートするアプリケーション開発用 API、netconfd - モジュラー サーバー、yangcli - 対話型コマンド ライン ツール
クローズドソース実装(名前順):
- confdはYANGコンパイラを含む商用管理エージェントツールキットです。
- MasterYANGは、Windows用のYANGモデルデザイナー、ビジュアライザー、エディターです。
- Visual YANG Designerは、Javaで実装されたYANG定義ファイルの作成者/編集者/モデラー/ビルダー/デザイナーおよびYANGコンパイラです。
- yumaproはYANGコンパイラを含む商用管理エージェントツールキットです。
