YANG

Yet Another Next GenerationYANG、/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モデルはプロトコルに依存しないため、ネットワーク設定プロトコルのサポート状況に応じて、 XMLJSONCBORなど、さまざまなエンコード形式に変換できます。

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)

ガイドラインと補足資料

以下のコメント要請ではガイドラインと裏付けとなる文書が提供されています。

  • RFC  8407 : YANGデータモデルを含む文書の作成者と査読者のためのガイドライン [ RFC 6087は廃止] 
  • RFC  8199 : YANGモジュール分類
  • RFC  8340 : YANG ツリー図
  • RFC  8969 : YANG によるサービスおよびネットワーク管理の自動化フレームワーク
  • RFC  9195 : YANGインスタンスデータのファイル形式
  • RFC  9890 : 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  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を使用または拡張する実験的仕様です

  • RFC  6095 : 言語抽象化による YANG の拡張
  • RFC  7758 : NETCONFにおける時間機能

参考文献

  1. ^ Björklund, Martin (2010). YANG - ネットワーク構成プロトコル(NETCONF)のためのデータモデリング言語(技術レポート). IETF. doi : 10.17487/RFC6020 . RFC6020
  2. ^ Björklund, Martin (2016). YANG 1.1 データモデリング言語(技術レポート). IETF. doi : 10.17487/RFC7950 . RFC7950.
  3. ^ RFC 8328  : ポリシー抽象化の簡素化された使用のためのポリシーベース管理フレームワーク (SUPA) 
  4. ^ロブ、エンス;ビョークルンド、マーティン。シェーンヴェルダー、ユルゲン;アンディ、ビアマン (2011)。ネットワーク構成プロトコル (NETCONF) (技術レポート)。 IETF。土井: 10.17487/RFC6241。 RFC6241。
  5. ^ビアマン、アンディ;ビョークルンド、マーティン。ケント州ワッセン (2017)。RESTCONF プロトコル(技術レポート)。 IETF。土井: 10.17487/RFC8040。 RFC8040。
  6. ^ 「ネットワークモデリングワーキンググループ」 IETF。
  7. ^シェーンヴェルダー、ユルゲン;ビョークルンド、マーティン。フィル・シェーファー (2010)。 「NETCONF と YANG を使用したネットワーク構成管理」。IEEE コミュニケーション マガジン48 (9): 166–173書誌コード: 2010IComM..48i.166S土井: 10.1109/MCOM.2010.5560601S2CID 736431 
  8. ^ Björklund, Martin (2016). YANG 1.1 データモデリング言語(技術レポート). IETF. doi : 10.17487/RFC7950 . RFC7950.

実装

オープンソース実装(名前順)

  • 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コンパイラを含む商用管理エージェントツールキットです。