YANG モジュール
YANG モジュールは、ルータのデータを介してデータ モデルを定義し、そのデータに対する階層的な組織と制約を定義します。各モジュールは、名前空間 URL によって一意に識別されます。YANG モデルはネットワーク デバイスの設定データと運用データ、実行アクション、リモート プロシージャ コール、および通知を記述します。
YANG モデルはルータから取得する必要があります。モデルは、ルータとクライアントの間で交換されるデータの有効な構造を定義します。モデルは NETCONF および gRPC 対応アプリケーションで使用されます。
-
シスコ固有のモデル:サポート対象モデルおよびその表記のリストについては、https://github.com/YangModels/yang/tree/master/vendor/cisco/xr/を参照してください。
-
共通モデル:これらのモデルは、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 モジュール名に基づいています。 |
例:AAA の設定 YANG モデル
(snippet)
module Cisco-IOS-XR-aaa-locald-cfg {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-locald-cfg";
prefix "aaa-locald-cfg";
/*** LINKAGE (IMPORTS / INCLUDES) ***/
import Cisco-IOS-XR-types { prefix "xr"; }
import Cisco-IOS-XR-aaa-lib-cfg { prefix "a1"; }
/*** META INFORMATION ***/
organization "Cisco Systems, Inc.";
.........................
......................... (truncated)
例:AAA の運用 YANG モデル
(snippet)
module Cisco-IOS-XR-aaa-locald-oper {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-locald-oper";
prefix "aaa-locald-oper";
/*** LINKAGE (IMPORTS / INCLUDES) ***/
import Cisco-IOS-XR-types { prefix "xr"; }
include Cisco-IOS-XR-aaa-locald-oper-sub1 {
revision-date 2015-01-07;
}
/*** META INFORMATION ***/
organization "Cisco Systems, Inc.";
........................
........................ (truncated)
(注) |
1 つのモジュールにサブモジュールをいくつでも組み込むことができますが、各サブモジュールが属すことができるのは 1 つのモジュールのみです。すべての標準モジュールおよびサブモジュールの名前は一意である必要があります。 |
例:OSPFv3 の NETCONF アクション
(snippet)
clear ospfv3 1 vrf vrf1 statistics neighbor 2.2.2.2
RPC message based on the new ospfv3 yang model-
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<act-ospfv3-instance-vrf xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ipv6-ospfv3-act">
<instance>
<instance-identifier>1</instance-identifier>
<vrf>
<vrf-name>vrf1</vrf-name>
<stats>
<neighbor>
<neighbor-id>2.2.2.2</neighbor-id>
</neighbor>
</stats>
</vrf>
</instance>
</act-ospfv3-instance-vrf>
</rpc>
YANG モデルの構造
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'";
}
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
............................................... (truncated)
ACL YANG モデルの使いやすさの向上
この機能は、YANG モデルのユーザビリティに影響を与えるネイティブ ACL YANG モデルで特定されたいくつかの問題に対応します。次のネイティブ ACL YANG モデルでは、利便性と標準規格への準拠が改善されています。
-
Cisco-IOS-XR-es-acl-cfg
-
Cisco-IOS-XR-ipv4-acl-cfg
-
Cisco-IOS-XR-ipv6-acl-cfg
この機能拡張の一部として、次の問題が解決されます。
-
改訂の日付と説明の不足
問題:改訂が ACL モデルの YANG ファイルで変更されると、新しい改訂に関連する変更が正しく記述されない。
解決策:以前のバージョンの情報を削除しなくても、以降の各バージョンで行った変更の説明が含まれるようになりました。
Cisco-IOS-XR-ipv4-acl-cfg.yang の例:
revision "2018-04-03" { description "6.5.1 revision. Correct enum value for Next-hop-type."; } revision "2018-03-23" { description "6.5.1 revision. Removing none-next-type."; }
-
文字列の無制限の使用
問題:ACL ネイティブ モデルは string 型として定義されているリーフを使用するけれども、文字列の長さが定義されていないか、正しくない。
解決策:パターンと長さのチェックが string 型を使用するリーフに追加されました。これにより、NETCONF は、コミット時に ACL の検証に依存するのではなく、これらのチェックを制御できます。
次の例では、文字列の長さは 255 文字に制限され、英数字のみが許可されています。
typedef my-base-str-type { type string { length "1..255"; pattern "[0-9a-fA-F]*"; } }
-
適切な説明文の不足
問題:ネイティブ ACL モデルのほとんどのリーフには、適切な説明が入力されていない説明フィールドがあるため、YANG モデルの使いやすさと理解に影響している。
解決策:リーフの説明フィールドが更新され、有用な情報を提供するようになりました。
-
ACL 範囲リーフ間での検証の不足と一貫性のない動作
問題:YANG モデルでは、上限値、下限値、および演算子リーフが指定されたコンテナでさまざまなリーフの組み合わせをサポートしている。その結果、CLI の観点から一部の設定が無効になる場合がある。
解決策:ネイティブ ACL モデルは、YANG モデルでサポートされているさまざまなリーフの組み合わせを含めるように改善されました。また、すべての ACL 範囲のリーフ間の解析動作が一貫性を維持できるように配置されています。
-
プロトコル演算子の入力と出力間の不整合
問題:NETCONF 出力がユーザ入力と一致する必要がある。
解決策:プロトコル演算子リーフを任意のものとするように変更し、equal に設定する必要はなくなりました。