YANG
参照:
ヤン
さらに別の次世代 (YANG、/jæŋ/、「ハング」と韻を踏む)は、NETCONF やなどのネットワーク管理プロトコルを介して送信されるデータを定義するためのデータモデリング言語です。RESTCONF。 YANGデータモデリング言語は、インターネット技術特別調査委員会(IETF)のNETMOD ワーキンググループによって維持されており、最初は2010年10月にRFC 6020として公開され、2016年8月に更新されました( RFC 7950 )。データモデリング言語を使用して、ネットワーク要素の構成データと状態データの両方をモデル化できます。さらに、YANGを使用して、ネットワーク要素によって発行されるイベント通知の形式を定義できます。これにより、データモデラーは、NETCONFプロトコルを介してネットワーク要素で呼び出すことができるリモートプロシージャコールの署名を定義できます。プロトコルに依存しない言語は、ネットワーク構成プロトコルがサポートするXMLやJSONなどの任意のエンコード形式に変換できます。
YANGは、XMLツリー形式でデータ構造を表すモジュラー言語です。データモデリング言語には、いくつかの組み込みデータ型が付属しています。追加のアプリケーション固有のデータ型は、組み込みのデータ型から派生させることができます。より複雑な再利用可能なデータ構造は、グループ化として表すことができます。YANGデータモデルは、XPATH式を使用して、YANGデータモデルの要素に対する制約を定義できます。
コンテンツ
1 歴史
2 例
2.1 XMLエンコーディング 2.2 JSONエンコーディング
3 ドキュメンテーション
3.1 言語仕様とアーキテクチャドキュメント 3.2 ガイドラインとサポートドキュメント
4 IETFの使用法
4.1 標準-プロトコル仕様を追跡する 4.2 標準-追跡データモデル 4.3 実験仕様
5 実装
6 参考文献
7 外部リンク
歴史
多くのネットワーク管理プロトコルには、データモデリング言語が関連付けられています。ネットワーク管理のために最初に広く展開されたインターネット標準は、SNMP(Simple Network Management Protocol)でした。SNMPに関連するデータモデリング言語は、Structure of Management Information(SMI)と呼ばれていました。SMI言語自体は、1988年版のAbstract Syntax Notation One(ASN.1)に基づいていました。SMI言語の現在のバージョンは、SMIv2のは、で定義された
RFC 2578、2579及び2580、ASN.1の拡張部分集合へと発展しています。
1990年代後半に、SMIngと呼ばれるSMIv2の代替品を作成するプロジェクトが開始されました。1つの動機は、SMIngを管理プロトコルSNMPから切り離し、コンピュータープログラムで解析しやすく、Cのような表記法を使用するプログラミング言語に精通している人々にとって習得しやすい構文構造をSMIngに与えることでした。SMIngプロジェクトはIETFで成功しなかったが、SMIng仕様は(2004年5月に実験的な文書として公開された
RFC 3780、3781)。
IETFでのNETCONFプロトコルの開発後すぐに、NETCONFプロトコルによって操作されるデータモデルを定義するためにデータモデリング言語が必要であることが明らかになりました。設計チームは、YANG言語の基礎となる提案を作成しました。構文構造と基本型システムは、基本的にSMIngから借用されました。ただし、SMIngプロジェクトから学んだ教訓に基づいて、YANGプロトコルを中立にする試みは行われませんでした。代わりに、YANGは、データモデルインスタンスをXMLにシリアル化できるという仮定など、NETCONFプロトコルの概念に関連付けられています。YANGの標準化は、2008年4月のNETMODワーキンググループの結成から始まりました。YANG1.0仕様は2010年10月にRFC 6020として公開され
ました。最近、NETMODワーキンググループは2016年8月に公開されたYANG1.1に取り組んでいます。
RFC 7950。
例
次のYANGモジュールexample-sportsは、チームスポーツのデータモデルを示しています。モジュールは名前空間とプレフィックスを宣言しietf-yang-types、タイプを定義する前にタイプライブラリモジュールをインポートしますseason。次にsports、personsのリストとsのリストを含むコンテナーを定義しteamます。チームには、leafrefタイプとそのpath制限を介して人を参照するプレーヤーのリストが
モジュールの例-スポーツ{ 名前空間”http://example.com/example-sports” ; プレフィックススポーツ; インポートietf-yang-types {プレフィックスヤン; }
typedefシーズン{
タイプ文字列; 説明
「タイプと年を含むスポーツシーズンの名前
。例:「チャンピオンズリーグ2014/2015」。」; } コンテナスポーツ{
config true ; リストの人{
キー名;
リーフ名{タイプ文字列; }
葉の誕生日{タイプヤン:日付と時刻; 必須true ; }
} リストチーム{
キー名;
リーフ名{タイプ文字列; }
リストプレーヤー{
キー「名前の季節」;
一意の番号;
リーフ名{タイプleafref {パス”/ sports / person / name” ; } }
葉の季節{タイプの季節; }
リーフ番号{タイプuint16 ; 必須true ; }
リーフスコア{タイプuint16 ; デフォルト0 ; }
} } }}
XMLエンコーディング
以下のコードブロックは、データモデルのインスタンス化のXML表現を示していますexample-sports。
<スポーツ の > <人>
<名前>リオネル・アンドレス・メッシ名前>
<誕生日> 1987-06-24T00:00:00-00:00 誕生日> person>
<プレーヤー>
<名前>リオネルメッシ name>
<シーズン>チャンピオンズリーグ2014/2015 シーズン>
<番号> 10 番号>
<スコア> 43 スコア>
プレーヤー> チーム> <チーム>
<名前>レアルマドリード名前>
<プレーヤー>
<名前>クリスティアーノロナウド名前>
<シーズン>チャンピオンズリーグ2014/2015 シーズン>
<番号> 7 番号>
<スコア> 48 スコア>
プレーヤー> チーム> スポーツ> data>
JSONエンコーディング
以下のコードブロックは、データモデルのインスタンス化のJSON表現を示していますexample-sports。
{ “例スポーツ:スポーツ” : { “人” : [ {
“名前” : “リオネル・アンドレス・メッシ” 、
“誕生日” : “1987-06-24T00:00:00-00:00”
}、 { 「名前” : “クリスティアーノロナウド ” 、
“誕生日 ” : ” 1985-02-05T00:00:00-00:00 “
} ]、 “チーム ” : [ {
“名前 ” : ” FCバルセロナ ” 、
“プレーヤー ” : [ {
“name” : “LionelAndrésMessi” 、
“season” : “Champions League 2014/2015” 、
“number” : 10 、
“scores” : 43} ]
}、 { “name” : “Real Madrid” 、
“player” : [ {
“名前” : “クリスティアーノロナウド” 、
“シーズン” : “チャンピオンズリーグ2014/2015” 、
“番号” : 7 、
“スコア” : 48} ]
} ] } }
ドキュメンテーション
言語仕様とアーキテクチャドキュメント
次のコメント要求(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 8407:YANGデータモデルを含む文書の作成者や査読のためのガイドライン[廃止
RFC 6087 ]
RFC 8199:YANGモジュールの分類
RFC 8340:YANGツリー図
RFC 8969:YANGを使用してサービスとネットワーク管理を自動化するためのフレームワーク
IETFの使用法
標準-プロトコル仕様を追跡する
以下のコメント要求は、YANGモジュールを使用して(部分的に)定義されている標準トラックプロトコルを定義します。
RFC 6241:ネットワーク構成プロトコル(NETCONF)
RFC 6243:With-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イベントおよびデータストアへの動的サブスクリプション
標準-追跡データモデル
次のコメント要求は、標準を定義します-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:インタフェースの管理のためのA YANGデータモデルは、[廃止
RFC 7223 ]
RFC 8344:IP管理のためのA YANGデータモデルは、[廃止
RFC 7277 ]
RFC 8345:ネットワークトポロジのYANGデータモデル
RFC 8346:レイヤ3トポロジのYANGデータモデル
RFC 8347:仮想ルーター冗長プロトコル(VRRP)のYANGデータモデル
RFC 8348:ハードウェア管理のためのYANGデータモデル
RFC 8349:ルーティング管理のためのA 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:Precision Time Protocol(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 9093:レイヤー0タイプのYANGデータモデル
RFC 9094:波長スイッチドオプティカルネットワーク(WSON)のYANGデータモデル
RFC 9105:ターミナルアクセスコントローラアクセス制御システムプラス(TACACS +)のYANGデータモデル
実験仕様
以下のコメントの要求は、YANGを使用または拡張する実験的な仕様です。
RFC 6095:言語抽象化によるYANGの拡張
RFC 7758:NETCONFの時間機能
実装
オープンソースの実装(名前でソート):
clixonは、Cで記述されたインタラクティブなCLI、NETCONF、RESTCONFインターフェイスを含むYANGベースのツールチェーンです。
goyangは、Go言語オブジェクトを生成するためにGoで記述されたYANGパーサーおよびコンパイラーです。
jncは、pyangベースのYANG-to-Java-APIコンパイラです。
libyangは、Cで記述され、CでAPIを提供するYANGパーサーおよびツールキットです。
pyangは、Pythonで記述された拡張可能なYANGバリデーターおよびコンバーターです。
pyangbindはpyangベースのPythonバインディングジェネレーターです
Sysrepoは、Unix / Linuxアプリケーション用のYANGベースの構成および運用データストアです。
yangbuilderはで実装YANG用ビルダー、あるアパッチグルービー(とヤン・データ・モデルを生成するApacheのグルービーを一つのソースコードベースと同様のモデルを維持します)
yang-ideは、YANGモデルを編集および視覚化するためのEclipseプラグインです。
yang-jsは、Node.jsおよびWebブラウザー用のCoffeeScript / JavaScriptで記述されたYANGパーサーおよびエバリュエーターです。
yang-expressは、yang-jsベースのExpress.jsWebフレームワークジェネレーターです。
yang-swaggerは、yang-jsベースのSwagger / OpenAPI仕様ジェネレーターです。
yangsonは、YANGデータモデリング言語を使用してモデル化されたJSONエンコードされた構成と状態データを操作するためのPython3ライブラリです。
YANG Toolsは、Javaで記述されたOpenDaylightツールセットです。
Yang-Explorer -pyangベースのYangブラウザおよびRPCビルダーアプリケーションです
ydk-genは、複数の言語(Python、C ++など)でAPIを生成するYANG-to-APIコンパイラです。
yuma123は、Cで記述されたnetconf / YANGツールチェーンです。libyuma-YANGモジュールのランタイムコンパイルをサポートするアプリケーションを開発するためのAPI、netconfd-モジュラーサーバー、yangcli-インタラクティブなコマンドラインツール
クローズドソースの実装(名前でソート):
confdは、YANGコンパイラを含む商用管理エージェントツールキットです。
MasterYANGは、Windows用のYANGモデルデザイナー、ビジュアライザー、およびエディターです。
Visual YANG Designerは、Javaで実装されたYANG定義ファイルの作成者/編集者/モデラー/ビルダー/デザイナーおよびYANGコンパイラーです。
yumaproは、YANGコンパイラを含む商用管理エージェントツールキットです。
参考文献
^ Björklund、Martin(2010)。YANG-ネットワーク構成プロトコル(NETCONF)のデータモデリング言語(テクニカルレポート)。IETF。土井:10.17487 / RFC6020。RFC6020。
^ Björklund、マーティン(2016)。YANG 1.1データモデリング言語(テクニカルレポート)。IETF。土井:10.17487 / RFC7950。RFC7950。
^ RFC 8328 :ポリシー抽象化の簡略化された使用のためのポリシーベースの管理フレームワーク(SUPA) ^ エンス、ロブ; ビョルクルンド、マーティン; Schönwälder、Jürgen; Bierman、Andy(2011)。ネットワーク構成プロトコル(NETCONF)(テクニカルレポート)。IETF。土井:10.17487 / RFC6241。RFC6241。
^ Bierman、Andy; ビョルクルンド、マーティン; ワトセン、ケント(2017)。RESTCONFプロトコル(テクニカルレポート)。IETF。土井:10.17487 / RFC8040。RFC8040。
^ 「ネットワークモデリングワーキンググループ」。IETF。
^ Schönwälder、Jürgen; ビョルクルンド、マーティン; シェーファー、フィル(2010)。「NETCONFとYANGを使用したネットワーク構成管理」。土井:10.1109 /MCOM.2010.5560601。
引用雑誌には|magazine=(ヘルプ)が必要です
外部リンク
カール・モーバーグ(2015-11-05)。YANG by Example(YouTube)。横浜:IETFEDUチーム。
ステファン・ヴァリン(2014-10-18)。YANGチュートリアル(YouTube)。ストックホルム:tail-f。
YANGモデルカタログ-RESTAPIを使用したオンラインカタログ
YANGセントラル-YANG情報とチュートリアル
YANGディスカッションフォーラム-YANG関連の質問を議論するためのConfDユーザーコミュニティフォーラム。
YANGベースのクライアントとサーバーのリストについては、NETCONFページを参照して
ISBN 978から0135180396 – 「YANGしたネットワークプログラマビリティ:YANG、NETCONF、RESTCONF、およびGNMIとのネットワーク・オートメーションの構造」