ヤン


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 クリスティアーノロナウド
1985-02-05T00:00:00-00:00
FCバルセロナ< / name>
<プレーヤー>
<名前>リオネルメッシ
<シーズン>チャンピオンズリーグ2014/2015
<番号> 10
<スコア> 43
<チーム>
<名前>レアルマドリード
<プレーヤー>
<名前>クリスティアーノロナウド
<シーズン>チャンピオンズリーグ2014/2015
<番号> 7
<スコア> 48

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とのネットワーク・オートメーションの構造」