YANG データ モデル
YANG モジュールは、ルータのデータを介してデータ モデルを定義し、そのデータに対する階層的な組織と制約を定義します。各モジュールは、名前空間 URL によって一意に識別されます。YANG モデルはネットワーク デバイスの設定データと運用データ、実行アクション、リモート プロシージャ コール、および通知を記述します。
YANG モデルはルータから取得する必要があります。モデルは、ルータとクライアントの間で交換されるデータの有効な構造を定義します。モデルは NETCONF および gRPC 対応アプリケーションで使用されます。
-
シスコ固有のモデル:サポート対象モデルおよびその表記のリストについては、「ネイティブ モデル」を参照してください。
-
共通モデル:これらのモデルは、IETF や IEEE などの標準化機関の業界全体の標準 YANG モデルです。また、これらのモデルは Open Config(OC)モデルとも呼ばれます。合成モデルの場合と同様に、OC モデルには、設定データ、運用データ、アクションに対して定義された個別の YANG モデルがあります。
YANG の詳細については、RFC 6020 および 6087 を参照してください。
YANG モジュールのコンポーネント
-
import は外部モジュールをインポートします
-
include には 1 つ以上のサブモジュールが含まれます
-
augment は別のモジュールを拡張し、データ モデル階層で新しいノードの配置を定義します
-
when は新しいノードが有効な条件を定義します
-
prefix はインポートされたモジュールの定義を参照します
YANG モデルでは、機能の設定、ルータの運用状態の取得、およびアクションの実行が行われます。
(注) |
gRPC YANG パスまたは JSON データは、YANG 名前空間ではなく、YANG モジュール名に基づいています。 |
YANG データ モデルの構造
-
設定データ:システムを初期のデフォルト状態から現在の状態に変えるために必要とされる、書き込み可能データのセットです。たとえば、IP ルーティング テーブルのエントリを設定したり、特定の値を使用するようにインターフェイス MTU を設定したり、イーサネット インターフェイスを特定の速度で実行するように設定したりできます。
-
運用状態データ:実行時にシステムによって取得され、設定データと同様の方法でシステムの動作に影響を与えるデータのセットです。ただし、設定データとは対照的に、運用状態データは一時的なものです。データは、内部コンポーネントまたは特殊なプロトコルを使用する他のシステムとの相互作用によって変更されます。たとえば、OSPF のようなルーティング プロトコル、およびネットワーク インターフェイスの属性などから取得したエントリです。
-
アクション:堅牢なネットワーク全体の設定トランザクションをサポートする NETCONF アクションのセットです。複数のデバイスに影響を与える変更が試行されると、NETCONF アクションによって障害シナリオの管理が簡略化されます。その結果、確実に成功するか、完全に失敗するトランザクションを利用できるようになります。
データ モデルの詳細については、RFC 6244 を参照してください。
YANG データ モデルはノードのある階層型のツリーベース構造で表現できます。この表現により、モデルを簡単に理解できるようになります。
各機能には、スキーマから合成された定義済みの YANG モデルがあります。ツリー形式のモデルは次のとおりです。
-
トップ レベル ノードおよびサブツリー
-
他の YANG モデル内でノードを拡張するサブツリー
-
カスタム RPC
-
リーフ ノード:特定のタイプの単一の値が含まれています。
-
リーフリスト ノード:一連のリーフ ノードが含まれています。
-
リスト ノード:一連のリーフリスト エントリが含まれています。リーフリスト エントリのそれぞれは 1 つ以上のキー リーフによって一意に識別されます。
-
コンテナ ノード:子ノードのみを含む関連ノードのグループが含まれます。子ノードは 4 つのノード タイプのいずれかです。
CDP データ モデルの構造
Cisco Discovery Protocol(CDP)の設定には、固有の拡張モデル(インターフェイス設定)があります。この拡張は、グローバル設定レベルとインターフェイス設定レベルの両方で CDP を設定できることを示しています。ツリー構造の CDP インターフェイス マネージャのデータ モデルは次のとおりです。
module: Cisco-IOS-XR-cdp-cfg
+--rw cdp
+--rw timer? uint32
+--rw advertise-v1-only? empty
+--rw enable? boolean
+--rw hold-time? uint32
+--rw log-adjacency? empty
augment /a1:interface-configurations/a1:interface-configuration:
+--rw cdp
+--rw enable? empty
augment "/a1:interface-configurations/a1:interface-configuration" {
container cdp {
description "Interface specific CDP configuration";
leaf enable {
type empty;
description "Enable or disable CDP on an interface";
}
}
description
"This augment extends the configuration data of
'Cisco-IOS-XR-ifmgr-cfg'";
}
CDP の運用上の YANG:
module: Cisco-IOS-XR-cdp-oper
+--ro cdp
+--ro nodes
+--ro node* [node-name]
+--ro neighbors
| +--ro details
| | +--ro detail*
| | +--ro interface-name? xr:Interface-name
| | +--ro device-id? string
| | +--ro cdp-neighbor*
| | +--ro detail
| | | +--ro network-addresses
| | | | +--ro cdp-addr-entry*
| | | | +--ro address
| | | | +--ro address-type? Cdp-l3-addr-protocol
| | | | +--ro ipv4-address? inet:ipv4-address
| | | | +--ro ipv6-address? In6-addr
| | | +--ro protocol-hello-list
| | | | +--ro cdp-prot-hello-entry*
| | | | +--ro hello-message? yang:hex-string
| | | +--ro version? string
| | | +--ro vtp-domain? string
| | | +--ro native-vlan? uint32
| | | +--ro duplex? Cdp-duplex
| | | +--ro system-name? string
| | +--ro receiving-interface-name? xr:Interface-name
| | +--ro device-id? string
| | +--ro port-id? string
| | +--ro header-version? uint8
| | +--ro hold-time? uint16
| | +--ro capabilities? string
| | +--ro platform? string
.......................... (snipped) ...........................