NCS 5000 シリーズ ルータ向け Cisco IOS XR データ モデル コンフィギュレーション ガイド
データ モデル
データ モデル

データ モデル

データ モデルはネットワーク デバイス内の設定データと運用データをモデル化する標準ベースのアプローチです。データ モデルを使用すると、ネットワーク全体の可視化と設定を自動化および簡略化できます。

データ モデル:プログラムにる設定と各種の標準規格に準拠した設定

Cisco IOS XR ソフトウェアでは、データ モデルを使用してネットワーク上の複数のルータを自動的に設定できます。データ モデルを使用したルータ設定では、従来のルータの管理テクニックがもたらす欠点が解消されます。

CLI は、ルータの設定やルータの統計情報の取得に幅広く使用されています。スイッチオーバー、リロード、プロセスの再起動などのルータ上の他のアクションも CLI ベースです。頻繁に使用されている CLI ですが、これには数多くの制約事項があります。

お客様のニーズは、刻々と進化しています。通常、ネットワーク センターには、ネットワークの複数のレイヤに多種多様なデバイスが存在しています。一括設定や自動設定を実現する必要があります。CLI スクレイピングには柔軟性がなく、最適でもありません。わずかな設定変更の場合でも、スクリプトを何度も書き直すには手間がかかります。CLI を使用して設定を一括で変更するとエラーが発生しやすく、システムに関わる問題を引き起こす場合があります。これをデータ モデルで解決します。つまり、手作業で設定作業を行うのではなく、プログラムを使用したり、各種の標準規格に準拠してネットワークの設定を記述します。データ モデルは、業界で定義された標準的な言語で記述されます。CLI を使用した設定のほうが簡単ですが(人間にわかりやすい)、データ モデルを使用して設定を自動化すると拡張性が得られます。

Cisco IOS XR は YANG データ モデリング言語をサポートしています。YANG をネットワーク設定プロトコル(NETCONF)で使用すると、自動化されたプログラミング可能なネットワーク操作の望ましいソリューションが実現します。

YANG モデル

YANG はネットワーク デバイスのコンフィギュレーション データと運用データ、リモート プロシージャ コール、および通知を記述するために使用されるデータ モデリング言語です。次に、YANG の優れた機能を示します。

  • 人間が判読できる形式であるため、習得や表現が簡単

  • 動作の定義をサポート

  • 再利用可能なタイプおよびグループ

  • モジュールとサブモジュールによるデータのモジュール性

  • 動作の定義(RPC)をサポート

  • 十分に定義付けられたバージョン管理ルール

  • 拡大に伴う拡張性

YANG の詳細については、RFC 6020 および 6087を参照してください。

NETCONF は コンフィギュレーション データおよび運用データをクライアント アプリケーションとルータ間で交換するためのメカニズムをし、YANG モデルは交換されるデータに有効な構造を定義します。

プロトコル

トランスポート

符号化/復号化

NETCONF

SSH

XML

YANG モジュールのコンポーネント

モジュールでは、単一のデータ モデルを定義します。ただし、モジュールは import ステートメントを使用して外部モジュールをインポートするか、または include ステートメントを使用して 1 つ以上のサブモジュールを組み込むことで、他のモジュールおよびサブモジュールの定義を参照できます。モジュールは augment ステートメントを使用してデータ モデル階層内の新しいノードの配置を定義し、when ステートメントを使用して新しいノードが有効になる条件を定義することで、別のモジュールへの拡張を実現できます。インポートしたモジュール内の定義を参照する場合は Prefix を使用します。

YANG モデルを使用して、機能を設定したり、(show コマンドと同様の)動作状態を取得したりできます。

次に AAA のコンフィギュレーション YANG モデル(- cfg で表示)を示します。

(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 モデル(-oper で表示)を示します。

 (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 つのモジュールのみです。すべての標準モジュールおよびサブモジュールの名前は一意である必要があります。


YANG モデルの構造

YANG データ モデルはノードのある階層型のツリーベース構造で表現できるため、簡単に理解できます。YANG は 4 つのノード タイプを定義します。各ノードに名前があり、ノードではノード タイプに応じて値を定義するか、または一連の子ノードを含めることができます。次のノード タイプがあります(データ モデリングの場合)。

  • リーフ ノード:特定のタイプの単一の値が含まれています。

  • リスト ノード:一連のリスト エントリが含まれています。リスト エントリのそれぞれは 1 つ以上のキー リーフによって一意に識別されます。

  • リーフリスト ノード:一連のリーフ ノードが含まれています。

  • コンテナ ノード:4 つのタイプのいずれかの子ノードのみを含む関連ノードのグループが含まれています。

データ型

YANG はリーフ値のデータ型を定義します。これらのデータ型はユーザがリーフに関連する入力を理解するために役立ちます。

名前

説明

binary

バイナリ データ

bits

一連のビットまたはフラグ

boolean

「true」または「false」

decimal64

64 ビットの符号付き 10 進数

empty

値がないリーフ

enumeration

列挙文字列

identityref

抽象的なアイデンティティへの参照

instance-identifier

データ ツリー ノードの参照

int(整数定義値)

8 ビット、16 ビット、32 ビット、64 ビットの符号付き整数

leafref

リーフ インスタンスへの参照

uint

8 ビット、16 ビット、32 ビット、64 ビットの符号なし整数

string

人間が判読できる文字列

union

メンバ タイプの選択

データ モデルと CLI の比較

各機能には、スキーマから合成された定義済みの YANG モデルがあります。ツリー形式のモデルは次のとおりです。

  • トップ レベル ノードおよびサブツリー

  • 他の YANG モデル内でノードを拡張するサブツリー

  • カスタム RPC

表 1 CLI およびデータ モデル:CDP コンフィギュレーション YANG モデルの場合

CLI

データ モデル

router:ios(config)#cdp ?
advertise  Specify the version of CDP advertisements
holdtime   Specify the holdtime (in sec) to be sent in packets
log        Configure CDP to log Events
timer      Specify the rate at which CDP packets are sent (in sec)

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

CLI を使用して利用可能なオプションは、データ モデル内でリーフ ノードとして定義されます。各リーフ ノードに対応して表示される定義済みのデータ タイプは、ユーザが必須入力を理解するのに役立ちます。

CDP コンフィギュレーションには、継承した拡張モデル(インターフェイス コンフィギュレーション)があります。つまり、CDP はグローバル コンフィギュレーション レベルだけでなく、インターフェイス コンフィギュレーション レベルでも設定できることを意味します。ifmgr のデータ モデル(ツリー)は次のとおりです。
module: Cisco-IOS-XR-ifmgr-cfg
   +--rw global-interface-configuration
   |  +--rw link-status?   Link-status-enum
   +--rw interface-configurations
      +--rw interface-configuration* [active interface-name]
         +--rw dampening
         |  +--rw args?                 enumeration
         |  +--rw half-life?            uint32
         |  +--rw reuse-threshold?      uint32
         |  +--rw suppress-threshold?   uint32
         |  +--rw suppress-time?        uint32
         |  +--rw restart-penalty?      uint32
         +--rw mtus
         |  +--rw mtu* [owner]
         |     +--rw owner    xr:Cisco-ios-xr-string
         |     +--rw mtu      uint32
         +--rw encapsulation
         |  +--rw encapsulation?         string
         |  +--rw capsulation-options?   int32
         +--rw shutdown?                      empty
         +--rw interface-virtual?             empty
         +--rw secondary-admin-state?         Secondary-admin-state-enum
         +--rw interface-mode-non-physical?   Interface-mode-enum
         +--rw bandwidth?                     int32
         +--rw link-status?                   empty
         +--rw description?                   string
         +--rw active                         Interface-active
         +--rw interface-name                 xr:Interface-name
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

............................................... (truncated)

データ モデルの定義

各機能には定義された YANG モデルがあります。シスコ固有の YANG モデルは、合成モデルと呼ばれます。IETF、IEEE、Open Config などの一部の標準化団体は、共通モデルとして参照される業界全体の標準的な YANG モデルの提供に取り組んでいます。

シスコは現在、2 つの OC(オープン コンフィギュレーション)YANG モデルをサポートしています。これらは、共通データ モデルとも呼ばれています。

シスコがサポートする OC モデルは次のとおりです。
  • OC-BGP

  • OC ルート ポリシー

合成モデルの場合と同様に、BGP 共通モデルやルート ポリシー共通モデルにはコンフィギュレーション データと運用データに対して定義された個別の YANG モデルがあります。最新の OC-BGP モデルは次の GitHub のサイトで提供されています。
https://github.com/openconfig/public/tree/master/release/models/bgp

サポート対象の YANG モデル

次に、サポート対象のすべての IOSXR YANG モデルのリストを示します。
https://github.com/YangModels/yang/tree/master/vendor/cisco/xr

NETCONF の概要

NETCONF は、ネットワーク デバイスの設定をインストール、操作、削除するためのメカニズムです。コンフィギュレーション データとプロトコル メッセージに Extensible Markup Language(XML)ベースのデータ符号化を使用します。NETCONF は、シンプルな RPC(リモート プロシージャ コール)ベースのメカニズムを使用してクライアントとサーバ間の通信を促進します。通常、クライアントはネットワーク マネージャの一部として実行されているスクリプトやアプリケーションです。通常、サーバはネットワーク デバイス(ルータ)です。

NETCONF の詳細については、RFC 6241 を参照してください。

NETCONF セッション

NETCONF セッションは、ネットワーク管理者またはネットワーク コンフィギュレーション アプリケーションとネットワーク デバイスの間の論理接続です。グローバル コンフィギュレーションの属性は承認されたセッション時に変更でき、その影響はすべてのセッションに反映されます。NETCONF はコネクション型で、基盤となる転送に SSH を使用しています。NETCONF セッションは、機能が公開されている場合は hello メッセージで確立され、close メッセージまたは kill メッセージを使用して終了します。

NETCONF レイヤ

図 1. NETCONF レイヤ



NETCONF は 4 つのレイヤに分割できます。

  • コンテンツ レイヤ:設定および通知データが含まれます。

  • 動作レイヤ:XML で符号化されたパラメータによる RPC メソッドとして起動される一連の基本プロトコル動作を定義します。

  • メッセージ レイヤ:RPC と通知を符号化するためのシンプルな、トランスポート非依存のフレーミング メカニズムを提供します。

  • セキュア トランスポート レイヤ:クライアントとサーバ間の通信パスを提供します。

NETCONF の操作

NETCONF は 1 つ以上のコンフィギュレーション データストアの存在を定義し、それらでの設定操作を可能にします。コンフィギュレーション データストアは、初期のデフォルト状態から必要な動作状態にデバイスを移行するために必要な一連の完全なコンフィギュレーション データとして定義されます。コンフィギュレーション データストアには状態データやエグゼクティブ コマンドは含まれません。

IOS XR NETCONF は次の操作をサポートします。

  • <get-config>:指定した設定の全部または一部を名前付きのデータストアから取得します。

  • <get>:実行コンフィギュレーションとデータ状態情報を取得します。

  • <edit-config>:指定したコンフィギュレーションの全部または一部を指定したターゲット設定にロードします。

  • <get-schema>:必要なスキーマをルータから取得します。

NETCONF の操作:例

次に、NETCONF <get-config> 要求の操作の例を示します。

図 2. <get-config> 要求



送信要求メッセージでルータ上で実行している CDP の現在の設定を取得します。リターン メッセージには現在の CDP の設定が含まれています。

NETCONF 要求(クライアントからサーバへ)

NETCONF 応答(サーバからサクライアントへ)

<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:NETCONF:base:1.0"> 
<get-config>
<source><running/></source>
<filter>
<cdp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-cdp-cfg"/>
</filter>
</get-config>
</rpc>
<?xml version="1.0"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:NETCONF:base:1.0">
 <data>
  <cdp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-cdp-cfg">
   <timer>10</timer>
   <enable>true</enable>
   <log-adjacency></log-adjacency>
   <hold-time>200</hold-time>
   <advertise-v1-only></advertise-v1-only>
  </cdp>
 </data>
</rpc-reply>

RPC 要素を使用して、クライアントからサーバに送信される NETCONF 要求を囲みます。<rpc> 要素の必須属性として message-id があります。これは、RPC の送信者によって選択された文字列で、通常、単調に増加する整数を符号化します。RPC の受信者はこの文字列を復号化したり解釈したりしせず、結果の <rpc-reply> メッセージに message-id 属性として使用するために保存のみを行います。送信者は message-id 値が正規化されていることを確認する必要があります。RPC 応答メッセージには、クライアントがサーバから情報を受信したときと同じメッセージ ID が含まれています。

サブツリー フィルタリング

XML サブツリー フィルタリングは、<get> 操作または <get-config> 操作の <rpc-reply> に含める特定の XML サブツリーをアプリケーションが選択できるようにするメカニズムです。

サブツリー フィルタのコンポーネント

サブツリー フィルタは XML 要素と XML 属性で構成されます。サブツリー フィルタに存在できる要素は次のとおりです。

  • 名前空間の選択:フィルタ要素内の特定のノードと関連付けられた XML 名前空間が基盤となっているデータ モデルと同じである場合、その名前空間は(フィルタリングを目的として)一致すると見なされます。名前空間の選択はそれ自体では使用できず、フィルタ出力内に要素を含める場合は、1 つ以上の要素をフィルタ内に指定する必要があります。
    Example:
    
    <filter type="subtree">
       <top xmlns="http://example.com/schema/1.2/config"/>
    </filter>
  • 属性照合式:指定した属性値と照合することによってフィルタリングが実行されます。テーブル クラスのみが expressions 属性を使用したこのフィルタリングを指定できます。

     Example: 
    ifName is the attribute match expression
    <filter type="subtree">
           <t:top xmlns:t="http://example.com/schema/1.2/config">
             <t:interfaces>
               <t:interface t:ifName="eth0"/>
             </t:interfaces>
           </t:top>
         </filter>
  • 抑制ノード:子ノード(クラス)があるノード(クラス)を指定することによってフィルタリングが実行されます。このフィルタリングでは、コンテナ クラスを指定します。

     Example: top is a containment node
    <filter type="subtree">
           <top xmlns="http://example.com/schema/1.2/config">
             <users/>
           </top>
         </filter>
  • ノード選択:フィルタリングはリーフ ノードを指定することによって実行されます。このフィルタリングではリーフ クラスを指定します。

     Example: users is a selection node (in the containment node - top)
    <filter type="subtree">
           <top xmlns="http://example.com/schema/1.2/config">
             <users/>
           </top>
         </filter>
  • コンテンツ照合ノード:リーフ ノードの内容を正確に照合することによってフィルタリングが実行されます。このフィルタリングは、テーブル クラスのクラス値の命名を指定して実行されます。

    Example: name is the content match node (in the containment node - top and the selection node - user)
    <filter type="subtree">
           <top xmlns="http://example.com/schema/1.2/config">
             <users>
               <user>
                 <name>fred</name>
               </user>
             </users>
           </top>
         </filter>