Yet Another Next Generation(YANG、/jæŋ/)[ 1 ] [ 2 ] [ 3 ]は、NETCONF [ 4 ]やRESTCONF [ 5 ]などのネットワーク管理プロトコルを介して送信されるデータの定義のためのデータモデリング言語です。インターネット技術タスクフォース(IETF)のNETMOD [ 6 ]ワーキンググループによって開発および保守されているYANGは、2010年10月にRFC 6020として最初に公開され、2016年8月にバージョン1.1( RFC 7950) への大幅な更新が行われました
YANGは、ネットワーク要素の設定と状態データをモデル化する標準化された方法を提供することで、包括的なネットワーク自動化を実現します。この言語は、ネットワークデバイスから送信されるイベント通知のフォーマットを定義するために使用でき、データモデラーはNETCONFプロトコルを介してネットワーク要素で呼び出すことができるRPCのシグネチャを定義できます。YANGモデルはプロトコルに依存しないため、ネットワーク設定プロトコルのサポート状況に応じて、 XML、JSON、CBORなど、さまざまなエンコード形式に変換できます。
YANGはモジュール型言語であり、データ構造を階層ツリー形式で表現します。多数の組み込みデータ型を備えており、ユーザーはアプリケーション固有の型を追加で作成できます。より複雑で再利用可能なデータ構造は「グループ化」として表現でき、モデルの再利用性と一貫性が向上します。YANGデータモデルでは、XPath式を使用してYANGデータモデルの要素に制約を定義できるため、デバイスにコミットする前に構成データを検証できます。
YANGは、通信業界全体においてネットワークデバイス構成のモデリングにおける事実上の標準となり、主要なネットワーク機器メーカーに広くサポートされています。プログラムによるネットワーク管理のための一貫したインターフェースを提供することで、ソフトウェア定義ネットワーク(SDN)およびネットワーク機能仮想化(NFV)環境 において重要な役割を果たしています。
歴史
多くのネットワーク管理プロトコルには、関連するデータモデリング言語があります。ネットワーク管理のための最初の広く普及したインターネット標準は、簡易ネットワーク管理プロトコル(SNMP)でした。SNMPに関連するデータモデリング言語は、管理情報構造(SMI)と呼ばれていました。SMI言語自体は、1988年版の抽象構文記法1 (ASN.1)に基づいています。RFC 2578、2579、および2580で定義されている現在のバージョンのSMI言語であるSMIv2は、ASN.1の拡張サブセットに発展しました
1990年代後半、SMIv2の代替となるSMIngと呼ばれるプロジェクトが開始されました。その目的の一つは、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ワーキンググループは、2016年8月にRFC 7950で公開されたYANG 1.1に取り組んでいます。[ 8 ]
例
以下の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" ;リーフ名{タイプ文字列; }リストプレーヤー{キー"name season" ;一意の番号;リーフ名{タイプleafref {パス"/sports/person/name" ; } }リーフシーズン{タイプseason ; }リーフ番号{タイプuint16 ;必須true ; }リーフスコア{タイプuint16 ;デフォルト0 ; } } } } }JSONエンコーディング
以下のコードブロックは、データモデル のインスタンス化のJSON表現を示していますexample-sports
{ "example-sports:sports" : { "person" : [ { "name" : "リオネル・アンドレス・メッシ" , "birthday" : "1987-06-24T00:00:00-00:00" }, { "name" : "クリスティアーノ・ロナウド" , "birthday" : "1985-02-05T00:00:00-00:00" } ], "team" : [ { "name" : "FCバルセロナ" , "player" : [ { "name" : "リオネル・アンドレス・メッシ" , "season" : "Champions League 2014/2015" , "number" : 10 , "scores" : 43 } ] }, { "name" : "レアル・マドリード" , "player" : [ { "name" : "クリスティアーノ・ロナウド" , "season" : "チャンピオンズリーグ 2014/2015" , "number" : 7 , "scores" : 48 } ] } ] } }XMLエンコーディング
以下のコードブロックは、データモデル のインスタンス化のXML表現を示していますexample-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></data>ドキュメント
言語仕様とアーキテクチャドキュメント
次の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)
ガイドラインと補足資料
以下のコメント要請ではガイドラインと裏付けとなる文書が提供されています。
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 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 : デュアルスタック Lite (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データモデル
- RFC 9684 : トラステッドプラットフォームモジュール (TPM) を使用したチャレンジレスポンスベースのリモート認証 (CHARRA) 手順のための YANG データモデル
- RFC 9702 : 最大セグメント識別子 (SID) 深度 (MSD) タイプおよび MPLS MSD の YANG データ モデル
- RFC 9719 : ファットツリーにおけるルーティングのための YANG データモデル (RIFT)
- RFC 9731 : 仮想ネットワーク (VN) 操作のための YANG データ モデル
- RFC 9742 : Syslog管理のためのYANGデータモデル
- RFC 9826 : パス計算要素通信プロトコル (PCEP) の YANG データ モデル
- RFC 9833 : アタッチメント回路のための共通YANGデータモデル
- RFC 9834 : ベアラおよびアタッチメント回線サービス (ACaaS) の YANG データ モデル
- RFC 9835 : アタッチメント回線用ネットワーク YANG データモデル
- RFC 9836 : VPN サービスとネットワークモデルを接続回線で拡張するための YANG データモデル
- RFC 9902 : MPLSデータプレーンを介したIS-ISセグメントルーティングのためのYANGデータモデル
- RFC 9903 : MPLSデータプレーンを介したOSPFセグメントルーティングのためのYANGデータモデル
- RFC 9899 : アクセス制御リスト (ACL) の YANG データ モデルの拡張
- RFC 9911 : 一般的な YANG データ型 [廃止されたRFC 6991 ]
実験的仕様
以下のコメント要請は、YANGを使用または拡張する実験的仕様です
参考文献
- ^ Björklund, Martin (2010). YANG - ネットワーク構成プロトコル(NETCONF)のためのデータモデリング言語(技術レポート). IETF. doi : 10.17487/RFC6020 . RFC6020
- ^ 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。書誌コード: 2010IComM..48i.166S。土井: 10.1109/MCOM.2010.5560601。S2CID 736431。
- ^ Björklund, Martin (2016). YANG 1.1 データモデリング言語(技術レポート). IETF. doi : 10.17487/RFC7950 . RFC7950.
外部リンク
- Carl Moberg (2015年11月5日). 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 central 2008-08-28 にWayback Machineでアーカイブ- 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ツールは、 2016年8月15日にWayback Machineにアーカイブされており、Javaで書かれたOpenDaylightプロジェクトのツールセットです。
- Yang-Explorer - pyangベースのYangブラウザおよびRPCビルダーアプリケーションです
- ydk-genは、複数の言語 (Python、C++ など) で API を生成する YANG から API へのコンパイラです。
- yuma123は C で書かれた netconf/YANG ツールチェーンで、次の機能を提供します: libyuma - YANG モジュールのランタイムコンパイルをサポートするアプリケーション開発用 API、netconfd - モジュラーサーバー、yangcli - 対話型コマンドラインツール
クローズドソース実装(名前順):
- confd Archived 2016-03-24 at the Wayback Machineは、YANGコンパイラを含む商用管理エージェントツールキットです。
- MasterYANG Archived 2018-10-17 at the Wayback Machineは、Windows 用の YANG モデル デザイナー、ビジュアライザー、エディターです。
- Visual YANG Designer は、Java で実装された YANG 定義ファイルの作成者/エディター/モデラー/ビルダー/デザイナーおよび YANG コンパイラです。
- yumaproはYANGコンパイラを含む商用管理エージェントツールキットです。